--- np2/bios/bios18.c 2003/11/15 07:10:02 1.4 +++ np2/bios/bios18.c 2003/12/01 17:13:36 1.6 @@ -209,11 +209,13 @@ void bios0x18(void) { // TRACE_("int18", I286_AH); sti_waiting ^= 1; - if (!sti_waiting) { // 割込み許可の遊び - I286_IP--; + if (sti_waiting) { // 割込み許可の遊び I286_STI; - nevent_forceexit(); - return; + if (PICEXISTINTR) { + I286_IP--; + nevent_forceexit(); + return; + } } switch(I286_AH) { @@ -357,20 +359,21 @@ void bios0x18(void) { pos = I286_CX; p = gdc.m.para + GDC_SCROLL + (I286_DH << 2); while((i--) && (p < (gdc.m.para + GDC_SCROLL + 0x10))) { - tmp = i286_memword_read(I286_BX, pos); - tmp >>= 1; - STOREINTELWORD(p, tmp); - tmp = i286_memword_read(I286_BX, pos + 2); + REG16 t; + t = i286_memword_read(I286_BX, pos); + t >>= 1; + STOREINTELWORD(p, t); + t = i286_memword_read(I286_BX, pos + 2); if (!(mem[MEMB_CRT_STS_FLAG] & 1)) { // 25 - tmp *= (16 * 16); + t *= (16 * 16); } else { // 20 - tmp *= (20 * 16); + t *= (20 * 16); } if (!(mem[MEMB_CRT_STS_FLAG] & 0x80)) { // ver0.29 - tmp >>= 1; + t >>= 1; } - STOREINTELWORD(p + 2, tmp); + STOREINTELWORD(p + 2, t); pos += 4; p += 4; }