--- np2/bios/bios18.c 2004/03/14 23:45:43 1.33 +++ np2/bios/bios18.c 2004/07/22 11:31:32 1.39 @@ -8,8 +8,6 @@ #include "font.h" -static int sti_waiting = 0; - typedef struct { BYTE GBON_PTN; BYTE GBBCC; @@ -221,8 +219,8 @@ const BYTE *p; MEML_WRITESTR(seg, off + 2, p, 8); break; - case 0x28: // 8x16 KANJI - case 0x29: +// case 0x28: + case 0x29: // 8x16 KANJI case 0x2a: case 0x2b: size = 0x0102; @@ -356,7 +354,7 @@ const CRTDATA *p; } CopyMemory(gdc.m.para + GDC_SYNC, gdcmastersync[master], 8); - ZeroMemory(gdc.m.para + GDC_SCROLL, 8); + ZeroMemory(gdc.m.para + GDC_SCROLL, 4); gdc.m.para[GDC_PITCH] = 80; p = crtdata + crt; @@ -371,11 +369,12 @@ const CRTDATA *p; crtc.reg.sdr = 0; CopyMemory(gdc.s.para + GDC_SYNC, gdcslavesync[slave], 8); - ZeroMemory(gdc.s.para + GDC_SCROLL, 8); + ZeroMemory(gdc.s.para + GDC_SCROLL, 4); if (slave & 1) { gdc.s.para[GDC_PITCH] = 80; gdc.clock |= 3; mem[MEMB_PRXDUPD] |= 0x04; + gdc.s.para[GDC_SCROLL+3] = 0x40; } else { gdc.s.para[GDC_PITCH] = 40; @@ -476,11 +475,11 @@ void bios0x18_42(REG8 mode) { scrn = bios0x18_31bh(); if ((mem[MEMB_CRT_BIOS] & 0x80) && (((scrn & 0x30) == 0x30) || (crtmode == 3))) { - bios0x18_30(rate, (crtmode << 4) + 1); + bios0x18_30(rate, (REG8)((crtmode << 4) + 1)); } else { #endif - ZeroMemory(gdc.s.para + GDC_SCROLL, 8); + ZeroMemory(gdc.s.para + GDC_SCROLL, 4); if (crtmode == 2) { // ALL crtmode = 2; if ((mem[MEMB_PRXDUPD] & 0x24) == 0x20) { @@ -511,6 +510,9 @@ void bios0x18_42(REG8 mode) { gdc.s.para[GDC_SCROLL+1] = (200*40) >> 8; } } + if (mem[MEMB_PRXDUPD] & 4) { + gdc.s.para[GDC_SCROLL+3] = 0x40; + } if ((crtmode == 2) || (!(mem[MEMB_PRXCRT] & 0x40))) { gdc.mode1 &= ~(0x10); gdc.s.para[GDC_CSRFORM] = 0; @@ -628,7 +630,8 @@ static void bios0x18_47(void) { vect.ope = 0x20 + (ucw.GBDSP & 7); vect.DC[0] = ucw.GBLNG1[0]; vect.DC[1] = ucw.GBLNG1[1]; - data = LOADINTELWORD(ucw.GBLNG2) - 1; +// data = LOADINTELWORD(ucw.GBLNG2) - 1; + data = LOADINTELWORD(ucw.GBCIR) - 1; STOREINTELWORD(vect.D, data); data >>= 1; STOREINTELWORD(vect.D2, data); @@ -768,17 +771,6 @@ void bios0x18(void) { MEML_READ16(CPU_SS, CPU_SP))); #endif - sti_waiting ^= 1; - if (sti_waiting) { // 割込み許可の遊び - CPU_STI; - if (PICEXISTINTR) { - CPU_IP--; - nevent_forceexit(); - return; - } - } - sti_waiting = 0; - switch(CPU_AH) { case 0x00: // キー・データの読みだし if (mem[MEMB_KB_COUNT]) { @@ -811,7 +803,7 @@ void bios0x18(void) { break; case 0x04: // キー入力状態のセンス - CPU_AH = mem[0x00052a + (CPU_AL & 0x0f)]; + CPU_AH = mem[MEMX_KB_KY_STS + (CPU_AL & 0x0f)]; break; case 0x05: // キー入力センス @@ -945,12 +937,10 @@ void bios0x18(void) { if (tmp.r8 == 0x05) { CPU_AL = 0; CPU_BH = 0; - TRACEOUT(("success")); } else { CPU_AL = 1; CPU_BH = 1; - TRACEOUT(("failure")); } } break;