Diff for /np2/bios/bios18.c between versions 1.2 and 1.6

version 1.2, 2003/10/19 14:56:15 version 1.6, 2003/12/01 17:13:36
Line 3 Line 3
 #include        "memory.h"  #include        "memory.h"
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "font.h"  
 #include        "bios.h"  #include        "bios.h"
 #include        "biosmem.h"  #include        "biosmem.h"
   #include        "font.h"
   
   
 static  int             sti_waiting = 0;  static  int             sti_waiting = 0;
Line 209  void bios0x18(void) { Line 209  void bios0x18(void) {
 //      TRACE_("int18", I286_AH);  //      TRACE_("int18", I286_AH);
   
         sti_waiting ^= 1;          sti_waiting ^= 1;
         if (!sti_waiting) {                                     // 割込み許可の遊び          if (sti_waiting) {                                      // 割込み許可の遊び
                 I286_IP--;  
                 I286_STI;                  I286_STI;
                 nevent_forceexit();                  if (PICEXISTINTR) {
                 return;                          I286_IP--;
                           nevent_forceexit();
                           return;
                   }
         }          }
   
         switch(I286_AH) {          switch(I286_AH) {
Line 357  void bios0x18(void) { Line 359  void bios0x18(void) {
                                 pos = I286_CX;                                  pos = I286_CX;
                                 p = gdc.m.para + GDC_SCROLL + (I286_DH << 2);                                  p = gdc.m.para + GDC_SCROLL + (I286_DH << 2);
                                 while((i--) && (p < (gdc.m.para + GDC_SCROLL + 0x10))) {                                  while((i--) && (p < (gdc.m.para + GDC_SCROLL + 0x10))) {
                                         tmp = i286_memword_read(I286_BX, pos);                                          REG16 t;
                                         tmp >>= 1;                                          t = i286_memword_read(I286_BX, pos);
                                         STOREINTELWORD(p, tmp);                                          t >>= 1;
                                         tmp = i286_memword_read(I286_BX, pos + 2);                                          STOREINTELWORD(p, t);
                                           t = i286_memword_read(I286_BX, pos + 2);
                                         if (!(mem[MEMB_CRT_STS_FLAG] & 1)) {    // 25                                          if (!(mem[MEMB_CRT_STS_FLAG] & 1)) {    // 25
                                                 tmp *= (16 * 16);                                                  t *= (16 * 16);
                                         }                                          }
                                         else {                                                                  // 20                                          else {                                                                  // 20
                                                 tmp *= (20 * 16);                                                  t *= (20 * 16);
                                         }                                          }
                                         if (!(mem[MEMB_CRT_STS_FLAG] & 0x80)) {                 // ver0.29                                          if (!(mem[MEMB_CRT_STS_FLAG] & 0x80)) {                 // ver0.29
                                                 tmp >>= 1;                                                  t >>= 1;
                                         }                                          }
                                         STOREINTELWORD(p + 2, tmp);                                          STOREINTELWORD(p + 2, t);
                                         pos += 4;                                          pos += 4;
                                         p += 4;                                          p += 4;
                                 }                                  }
Line 437  void bios0x18(void) { Line 440  void bios0x18(void) {
                                 case 0x00:                      // 8x8                                  case 0x00:                      // 8x8
                                         i286_memword_write(I286_BX, I286_CX, 0x0101);                                          i286_memword_write(I286_BX, I286_CX, 0x0101);
                                         i286_memstr_write(I286_BX, I286_CX+2,                                          i286_memstr_write(I286_BX, I286_CX+2,
                                                                                 &font[0x82000 + (I286_DL << 3)], 8);                                                                  fontrom + 0x82000 + (I286_DL << 3), 8);
                                         break;                                          break;
   
                                 case 0x28:                      // 8x16 KANJI                                  case 0x28:                      // 8x16 KANJI
Line 446  void bios0x18(void) { Line 449  void bios0x18(void) {
                                 case 0x2b:                                  case 0x2b:
                                         i286_memword_write(I286_BX, I286_CX, 0x0102);                                          i286_memword_write(I286_BX, I286_CX, 0x0102);
                                         i286_memstr_write(I286_BX, I286_CX+2,                                          i286_memstr_write(I286_BX, I286_CX+2,
                                                 &font[((I286_DL & 0x7f) << 12)                                                                  fontrom + ((I286_DL & 0x7f) << 12)
                                                                 + ((I286_DH - 0x20) << 4)], 16);                                                                                  + ((I286_DH - 0x20) << 4), 16);
                                         break;                                          break;
   
                                 case 0x80:                      // 8x16 ANK                                  case 0x80:                      // 8x16 ANK
                                         i286_memword_write(I286_BX, I286_CX, 0x0102);                                          i286_memword_write(I286_BX, I286_CX, 0x0102);
                                         i286_memstr_write(I286_BX, I286_CX+2,                                          i286_memstr_write(I286_BX, I286_CX+2,
                                                                         &font[0x80000 + (I286_DL << 4)], 16);                                                                  fontrom + 0x80000 + (I286_DL << 4), 16);
                                         break;                                          break;
   
                                 default:                                  default:
                                         buf[0] = 0x02;                                          buf[0] = 0x02;
                                         buf[1] = 0x02;                                          buf[1] = 0x02;
                                         p = &font[((I286_DL & 0x7f) << 12)                                          p = fontrom + ((I286_DL & 0x7f) << 12)
                                                                 + (((I286_DH - 0x20) & 0x7f) << 4)];                                                                  + (((I286_DH - 0x20) & 0x7f) << 4);
                                         for (i=1; i<17; i++, p++) {                                          for (i=1; i<17; i++, p++) {
                                                 buf[i*2+0] = *p;                                                  buf[i*2+0] = *p;
                                                 buf[i*2+1] = *(p+0x800);                                                  buf[i*2+1] = *(p+0x800);
Line 491  void bios0x18(void) { Line 494  void bios0x18(void) {
                 case 0x1a:                                              // ユーザー文字の定義                  case 0x1a:                                              // ユーザー文字の定義
                         if ((I286_DH & 0x7e) == 0x76) {                          if ((I286_DH & 0x7e) == 0x76) {
                                 i286_memstr_read(I286_BX, I286_CX+2, buf, 32);                                  i286_memstr_read(I286_BX, I286_CX+2, buf, 32);
                                 p = &font[((I286_DL & 0x7f) << 12)                                  p = fontrom + ((I286_DL & 0x7f) << 12)
                                                                 + (((I286_DH - 0x20) & 0x7f) << 4)];                                                          + (((I286_DH - 0x20) & 0x7f) << 4);
                                 for (i=0; i<16; i++, p++) {                                  for (i=0; i<16; i++, p++) {
                                         *p = buf[i*2+0];                                          *p = buf[i*2+0];
                                         *(p+0x800) = buf[i*2+1];                                          *(p+0x800) = buf[i*2+1];

Removed from v.1.2  
changed lines
  Added in v.1.6


RetroPC.NET-CVS <cvs@retropc.net>