--- np2/i286c/i286c_mn.c 2003/10/17 22:50:02 1.5 +++ np2/i286c/i286c_mn.c 2003/11/24 09:14:01 1.12 @@ -10,16 +10,16 @@ #define MAX_PREFIX 8 -#define NEXT_OPCODE \ - if (nevent.remainclock < 1) { \ - nevent.baseclock += (1 - nevent.remainclock); \ - nevent.remainclock = 1; \ +#define NEXT_OPCODE \ + if (I286_REMCLOCK < 1) { \ + I286_BASECLOCK += (1 - I286_REMCLOCK); \ + I286_REMCLOCK = 1; \ } -#define REMAIN_ADJUST(c) \ - if (nevent.remainclock != (c)) { \ - nevent.baseclock += ((c) - nevent.remainclock); \ - nevent.remainclock = (c); \ +#define REMAIN_ADJUST(c) \ + if (I286_REMCLOCK != (c)) { \ + I286_BASECLOCK += ((c) - I286_REMCLOCK); \ + I286_REMCLOCK = (c); \ } @@ -27,7 +27,7 @@ I286FN _reserved(void) { - I286_CLOCK(23); // ToDo + I286_WORKCLOCK(23); // ToDo INT_NUM(6, I286_IP - 1); } @@ -42,12 +42,12 @@ I286FN _add_ea_r8(void) { // 00: ad PREPART_EA_REG8(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg8_b20[op]; + I286_WORKCLOCK(2); + out = REG8_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { dst = i286_memoryread(madr); ADDBYTE(res, dst, src); @@ -72,12 +72,12 @@ I286FN _add_ea_r16(void) { // 01: a PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg16_b20[op]; + I286_WORKCLOCK(2); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { dst = i286_memoryread_w(madr); ADDWORD(res, dst, src); @@ -124,7 +124,7 @@ I286FN _add_al_data8(void) { // 04: UINT src; UINT res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(src); ADDBYTE(res, I286_AL, src); I286_AL = (BYTE)res; @@ -135,7 +135,7 @@ I286FN _add_ax_data16(void) { // 05: UINT src; UINT res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(src); ADDWORD(res, I286_AX, src); I286_AX = (UINT16)res; @@ -162,12 +162,12 @@ I286FN _or_ea_r8(void) { // 08: or PREPART_EA_REG8(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg8_b20[op]; + I286_WORKCLOCK(2); + out = REG8_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { dst = i286_memoryread(madr); ORBYTE(dst, src); @@ -189,12 +189,12 @@ I286FN _or_ea_r16(void) { // 09: o PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg16_b20[op]; + I286_WORKCLOCK(2); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { dst = i286_memoryread_w(madr); ORWORD(dst, src); @@ -230,7 +230,7 @@ I286FN _or_al_data8(void) { // 0c: UINT src; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(src); ORBYTE(I286_AL, src); } @@ -239,7 +239,7 @@ I286FN _or_ax_data16(void) { // 0d: UINT32 src; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(src); ORWORD(I286_AX, src); } @@ -260,12 +260,12 @@ I286FN _adc_ea_r8(void) { // 10: ad PREPART_EA_REG8(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg8_b20[op]; + I286_WORKCLOCK(2); + out = REG8_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { dst = i286_memoryread(madr); ADCBYTE(res, dst, src); @@ -290,12 +290,12 @@ I286FN _adc_ea_r16(void) { // 11: a PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg16_b20[op]; + I286_WORKCLOCK(2); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { dst = i286_memoryread_w(madr); ADCWORD(res, dst, src); @@ -342,7 +342,7 @@ I286FN _adc_al_data8(void) { // 14: UINT src; UINT res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(src); ADCBYTE(res, I286_AL, src); I286_AL = (BYTE)res; @@ -353,7 +353,7 @@ I286FN _adc_ax_data16(void) { // 15: UINT32 src; UINT32 res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(src); ADCWORD(res, I286_AX, src); I286_AX = (UINT16)res; @@ -383,12 +383,12 @@ I286FN _sbb_ea_r8(void) { // 18: sb PREPART_EA_REG8(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg8_b20[op]; + I286_WORKCLOCK(2); + out = REG8_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { dst = i286_memoryread(madr); SBBBYTE(res, dst, src); @@ -413,12 +413,12 @@ I286FN _sbb_ea_r16(void) { // 19: s PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg16_b20[op]; + I286_WORKCLOCK(2); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { dst = i286_memoryread_w(madr); SBBWORD(res, dst, src); @@ -465,7 +465,7 @@ I286FN _sbb_al_data8(void) { // 1c: UINT src; UINT res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(src); SBBBYTE(res, I286_AL, src); I286_AL = (BYTE)res; @@ -476,7 +476,7 @@ I286FN _sbb_ax_data16(void) { // 1d: UINT32 src; UINT32 res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(src); SBBWORD(res, I286_AX, src); I286_AX = (UINT16)res; @@ -504,12 +504,12 @@ I286FN _and_ea_r8(void) { // 20: an PREPART_EA_REG8(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg8_b20[op]; + I286_WORKCLOCK(2); + out = REG8_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { dst = i286_memoryread(madr); ANDBYTE(dst, src); @@ -531,12 +531,12 @@ I286FN _and_ea_r16(void) { // 21: a PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg16_b20[op]; + I286_WORKCLOCK(2); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { dst = i286_memoryread_w(madr); ANDWORD(dst, src); @@ -572,7 +572,7 @@ I286FN _and_al_data8(void) { // 24: UINT src; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(src); ANDBYTE(I286_AL, src); } @@ -581,7 +581,7 @@ I286FN _and_ax_data16(void) { // 25: UINT32 src; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(src); ANDWORD(I286_AX, src); } @@ -605,7 +605,7 @@ I286FN _segprefix_es(void) { // 26: I286FN _daa(void) { // 27: daa - I286_CLOCK(3); + I286_WORKCLOCK(3); I286_OV = ((I286_AL < 0x80) && ((I286_AL >= 0x7a) || ((I286_AL >= 0x1a) && (I286_FLAGL & C_FLAG)))); @@ -633,12 +633,12 @@ I286FN _sub_ea_r8(void) { // 28: su PREPART_EA_REG8(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg8_b20[op]; + I286_WORKCLOCK(2); + out = REG8_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { dst = i286_memoryread(madr); BYTE_SUB(res, dst, src); @@ -663,12 +663,12 @@ I286FN _sub_ea_r16(void) { // 29: s PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg16_b20[op]; + I286_WORKCLOCK(2); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { dst = i286_memoryread_w(madr); WORD_SUB(res, dst, src); @@ -715,7 +715,7 @@ I286FN _sub_al_data8(void) { // 2c: UINT src; UINT res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(src); BYTE_SUB(res, I286_AL, src); I286_AL = (BYTE)res; @@ -726,7 +726,7 @@ I286FN _sub_ax_data16(void) { // 2d: UINT32 src; UINT32 res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(src); WORD_SUB(res, I286_AX, src); I286_AX = (UINT16)res; @@ -751,7 +751,7 @@ I286FN _segprefix_cs(void) { // 2e: I286FN _das(void) { // 2f: das - I286_CLOCK(3) + I286_WORKCLOCK(3); if ((I286_FLAGL & C_FLAG) || (I286_AL > 0x99)) { I286_FLAGL |= C_FLAG; I286_AL -= 0x60; @@ -775,12 +775,12 @@ I286FN _xor_ea_r8(void) { // 30: xo PREPART_EA_REG8(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg8_b20[op]; + I286_WORKCLOCK(2); + out = REG8_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { dst = i286_memoryread(madr); BYTE_XOR(dst, src); @@ -802,12 +802,12 @@ I286FN _xor_ea_r16(void) { // 31: x PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg16_b20[op]; + I286_WORKCLOCK(2); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { dst = i286_memoryread_w(madr); WORD_XOR(dst, src); @@ -843,7 +843,7 @@ I286FN _xor_al_data8(void) { // 34: UINT src; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(src); BYTE_XOR(I286_AL, src); } @@ -852,12 +852,12 @@ I286FN _xor_ax_data16(void) { // 35: UINT32 src; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(src); WORD_XOR(I286_AX, src); } -I286FN _segprefix_ss(void) { // 36: cs: +I286FN _segprefix_ss(void) { // 36: ss: SS_FIX = SS_BASE; DS_FIX = SS_BASE; @@ -876,7 +876,7 @@ I286FN _segprefix_ss(void) { // 36: I286FN _aaa(void) { // 37: aaa - I286_CLOCK(3) + I286_WORKCLOCK(3); if ((I286_FLAGL & A_FLAG) || ((I286_AL & 0xf) > 9)) { I286_FLAGL |= A_FLAG | C_FLAG; I286_AX += 6; @@ -896,13 +896,13 @@ I286FN _cmp_ea_r8(void) { // 38: cm PREPART_EA_REG8(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - dst = *(reg8_b20[op]); + I286_WORKCLOCK(2); + dst = *(REG8_B20(op)); BYTE_SUB(res, dst, src); } else { - I286_CLOCK(7); - dst = i286_memoryread(c_calc_ea_dst[op]()); + I286_WORKCLOCK(7); + dst = i286_memoryread(CALC_EA(op)); BYTE_SUB(res, dst, src); } } @@ -916,13 +916,13 @@ I286FN _cmp_ea_r16(void) { // 39: c PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - dst = *(reg16_b20[op]); + I286_WORKCLOCK(2); + dst = *(REG16_B20(op)); WORD_SUB(res, dst, src); } else { - I286_CLOCK(7); - dst = i286_memoryread_w(c_calc_ea_dst[op]()); + I286_WORKCLOCK(7); + dst = i286_memoryread_w(CALC_EA(op)); WORD_SUB(res, dst, src); } } @@ -958,7 +958,7 @@ I286FN _cmp_al_data8(void) { // 3c: UINT src; UINT res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(src); BYTE_SUB(res, I286_AL, src); } @@ -968,7 +968,7 @@ I286FN _cmp_ax_data16(void) { // 3d: UINT32 src; UINT32 res; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(src); WORD_SUB(res, I286_AX, src); } @@ -992,7 +992,7 @@ I286FN _segprefix_ds(void) { // 3e: I286FN _aas(void) { // 3f: aas - I286_CLOCK(3) + I286_WORKCLOCK(3); if ((I286_FLAGL & A_FLAG) || ((I286_AL & 0xf) > 9)) { I286_FLAGL |= A_FLAG | C_FLAG; I286_AX -= 6; @@ -1032,7 +1032,7 @@ I286FN _pop_ax(void) REGPOP(I286_AX, 5) I286FN _pop_cx(void) REGPOP(I286_CX, 5) // 59: pop cx I286FN _pop_dx(void) REGPOP(I286_DX, 5) // 5A: pop dx I286FN _pop_bx(void) REGPOP(I286_BX, 5) // 5B: pop bx -I286FN _pop_sp(void) REGPOP(I286_SP, 5) // 5C: pop sp +I286FN _pop_sp(void) SP_POP(I286_SP, 5) // 5C: pop sp I286FN _pop_bp(void) REGPOP(I286_BP, 5) // 5D: pop bp I286FN _pop_si(void) REGPOP(I286_SI, 5) // 5E: pop si I286FN _pop_di(void) REGPOP(I286_DI, 5) // 5F: pop di @@ -1050,7 +1050,7 @@ I286FN _pusha(void) { // 60: pusha REGPUSH0(I286_BP) REGPUSH0(I286_SI) REGPUSH0(I286_DI) - I286_CLOCK(17) + I286_WORKCLOCK(17); } I286FN _popa(void) { // 61: popa @@ -1063,7 +1063,7 @@ I286FN _popa(void) { // 61: popa REGPOP0(I286_DX); REGPOP0(I286_CX); REGPOP0(I286_AX); - I286_CLOCK(19) + I286_WORKCLOCK(19); } I286FN _bound(void) { // 62: bound @@ -1073,11 +1073,11 @@ I286FN _bound(void) { // 62: bound UINT32 madr; UINT16 reg; - I286_CLOCK(13); // ToDo + I286_WORKCLOCK(13); // ToDo GET_PCBYTE(op); if (op < 0xc0) { - reg = *(reg16_b53[op]); - madr = c_calc_ea_dst[op](); + reg = *(REG16_B53(op)); + madr = CALC_EA(op); if (reg >= i286_memoryread_w(madr)) { madr += 2; // ToDo if (reg <= i286_memoryread_w(madr)) { @@ -1100,7 +1100,7 @@ I286FN _arpl(void) { // 63: arpl GET_PCBYTE(op) tmp = ((op < 0xc0)?1:0); I286_IP += (BYTE)tmp; - I286_CLOCK(tmp + 10); + I286_WORKCLOCK(tmp + 10); INT_NUM(6, I286_IP); } @@ -1152,7 +1152,7 @@ I286FN _insb(void) { // 6C: insb BYTE dat; - I286_CLOCK(5) + I286_WORKCLOCK(5); dat = iocore_inp8(I286_DX); i286_memorywrite(I286_DI + ES_BASE, dat); I286_DI += STRING_DIR; @@ -1162,7 +1162,7 @@ I286FN _insw(void) { // 6D: insw UINT16 dat; - I286_CLOCK(5) + I286_WORKCLOCK(5); dat = iocore_inp16(I286_DX); i286_memorywrite_w(I286_DI + ES_BASE, dat); I286_DI += STRING_DIRx2; @@ -1172,7 +1172,7 @@ I286FN _outsb(void) { // 6E: outsb BYTE dat; - I286_CLOCK(3) + I286_WORKCLOCK(3); dat = i286_memoryread(I286_SI + DS_FIX); I286_SI += STRING_DIR; iocore_out8(I286_DX, dat); @@ -1182,7 +1182,7 @@ I286FN _outsw(void) { // 6F: outsw UINT16 dat; - I286_CLOCK(3) + I286_WORKCLOCK(3); dat = i286_memoryread_w(I286_SI + DS_FIX); I286_SI += STRING_DIRx2; iocore_out16(I286_DX, dat); @@ -1281,12 +1281,12 @@ I286FN _calc_ea8_i8(void) { // 80: o GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(3) - out = reg8_b20[op]; + I286_WORKCLOCK(3); + out = REG8_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { c_op8xext8_table[(op >> 3) & 7](madr); return; @@ -1305,12 +1305,12 @@ I286FN _calc_ea16_i16(void) { // 81: GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(3) - out = reg16_b20[op]; + I286_WORKCLOCK(3); + out = REG16_B20(op); } else { - I286_CLOCK(7) - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { GET_PCWORD(src); c_op8xext16_table[(op >> 3) & 7](madr, src); @@ -1331,12 +1331,12 @@ I286FN _calc_ea16_i8(void) { // 83: o GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(3) - out = reg16_b20[op]; + I286_WORKCLOCK(3); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { GET_PCBYTES(src); c_op8xext16_table[(op >> 3) & 7](madr, src); @@ -1358,12 +1358,12 @@ I286FN _test_ea_r8(void) { // 84: te PREPART_EA_REG8(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg8_b20[op]; + I286_WORKCLOCK(2); + out = REG8_B20(op); } else { - I286_CLOCK(6); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(6); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { tmp = i286_memoryread(madr); ANDBYTE(tmp, src); @@ -1385,12 +1385,12 @@ I286FN _test_ea_r16(void) { // 85: t PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - out = reg16_b20[op]; + I286_WORKCLOCK(2); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { tmp = i286_memoryread_w(madr); ANDWORD(tmp, src); @@ -1411,12 +1411,12 @@ I286FN _xchg_ea_r8(void) { // 86: xc PREPART_EA_REG8P(op, src); if (op >= 0xc0) { - I286_CLOCK(3); - out = reg8_b20[op]; + I286_WORKCLOCK(3); + out = REG8_B20(op); } else { - I286_CLOCK(5); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(5); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { BYTE tmp = i286_memoryread(madr); i286_memorywrite(madr, *src); @@ -1437,12 +1437,12 @@ I286FN _xchg_ea_r16(void) { // 87: x PREPART_EA_REG16P(op, src); if (op >= 0xc0) { - I286_CLOCK(3); - out = reg16_b20[op]; + I286_WORKCLOCK(3); + out = REG16_B20(op); } else { - I286_CLOCK(5); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(5); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { UINT16 tmp = i286_memoryread_w(madr); i286_memorywrite_w(madr, *src); @@ -1462,12 +1462,12 @@ I286FN _mov_ea_r8(void) { // 88: mov PREPART_EA_REG8(op, src) if (op >= 0xc0) { - I286_CLOCK(2); - *(reg8_b20[op]) = src; + I286_WORKCLOCK(2); + *(REG8_B20(op)) = src; } else { - I286_CLOCK(3); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(3); + madr = CALC_EA(op); i286_memorywrite(madr, src); } } @@ -1479,12 +1479,12 @@ I286FN _mov_ea_r16(void) { // 89: mo PREPART_EA_REG16(op, src); if (op >= 0xc0) { - I286_CLOCK(2); - *(reg16_b20[op]) = src; + I286_WORKCLOCK(2); + *(REG16_B20(op)) = src; } else { - I286_CLOCK(3); - i286_memorywrite_w(c_calc_ea_dst[op](), src); + I286_WORKCLOCK(3); + i286_memorywrite_w(CALC_EA(op), src); } } @@ -1516,12 +1516,12 @@ I286FN _mov_ea_seg(void) { // 8C: mo GET_PCBYTE(op); tmp = *SEGMENTPTR((op >> 3) & 3); if (op >= 0xc0) { - I286_CLOCK(2) - *(reg16_b20[op]) = tmp; + I286_WORKCLOCK(2); + *(REG16_B20(op)) = tmp; } else { - I286_CLOCK(3) - i286_memorywrite_w(c_calc_ea_dst[op](), tmp); + I286_WORKCLOCK(3); + i286_memorywrite_w(CALC_EA(op), tmp); } } @@ -1529,10 +1529,10 @@ I286FN _lea_r16_ea(void) { // 8D: le UINT op; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(op) if (op < 0xc0) { - *(reg16_b53[op]) = c_calc_lea[op](); + *(REG16_B53(op)) = CALC_LEA(op); } else { INT_NUM(6, I286_SP - 2); @@ -1548,12 +1548,12 @@ I286FN _mov_seg_ea(void) { // 8E: mo ipbak = I286_IP; GET_PCBYTE(op); if (op >= 0xc0) { - I286_CLOCK(2) - tmp = *(reg16_b20[op]); + I286_WORKCLOCK(2); + tmp = *(REG16_B20(op)); } else { - I286_CLOCK(5) - tmp = i286_memoryread_w(c_calc_ea_dst[op]()); + I286_WORKCLOCK(5); + tmp = i286_memoryread_w(CALC_EA(op)); } switch(op & 0x18) { case 0x00: // es @@ -1585,15 +1585,15 @@ I286FN _pop_ea(void) { // 8F: pop UINT op; UINT16 tmp; - I286_CLOCK(5) + I286_WORKCLOCK(5); REGPOP0(tmp) GET_PCBYTE(op) if (op < 0xc0) { - i286_memorywrite_w(c_calc_ea_dst[op](), tmp); + i286_memorywrite_w(CALC_EA(op), tmp); } else { - *(reg16_b20[op]) = tmp; + *(REG16_B20(op)) = tmp; } } @@ -1613,60 +1613,60 @@ I286FN _nop(void) { // 90: nop / b DS_FIX = DS_BASE; } #endif - I286_CLOCK(3) + I286_WORKCLOCK(3); } I286FN _xchg_ax_cx(void) { // 91: xchg ax, cx - I286_CLOCK(3); + I286_WORKCLOCK(3); SWAPWORD(I286_AX, I286_CX); } I286FN _xchg_ax_dx(void) { // 92: xchg ax, dx - I286_CLOCK(3); + I286_WORKCLOCK(3); SWAPWORD(I286_AX, I286_DX); } I286FN _xchg_ax_bx(void) { // 93: xchg ax, bx - I286_CLOCK(3); + I286_WORKCLOCK(3); SWAPWORD(I286_AX, I286_BX); } I286FN _xchg_ax_sp(void) { // 94: xchg ax, sp - I286_CLOCK(3); + I286_WORKCLOCK(3); SWAPWORD(I286_AX, I286_SP); } I286FN _xchg_ax_bp(void) { // 95: xchg ax, bp - I286_CLOCK(3); + I286_WORKCLOCK(3); SWAPWORD(I286_AX, I286_BP); } I286FN _xchg_ax_si(void) { // 96: xchg ax, si - I286_CLOCK(3); + I286_WORKCLOCK(3); SWAPWORD(I286_AX, I286_SI); } I286FN _xchg_ax_di(void) { // 97: xchg ax, di - I286_CLOCK(3); + I286_WORKCLOCK(3); SWAPWORD(I286_AX, I286_DI); } I286FN _cbw(void) { // 98: cbw - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_AX = __CBW(I286_AL); } I286FN _cwd(void) { // 99: cwd - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_DX = ((I286_AH & 0x80)?0xffff:0x0000); } @@ -1674,7 +1674,7 @@ I286FN _call_far(void) { // 9A: call UINT16 newip; - I286_CLOCK(13) + I286_WORKCLOCK(13); REGPUSH0(I286_CS) GET_PCWORD(newip) GET_PCWORD(I286_CS) @@ -1685,7 +1685,7 @@ I286FN _call_far(void) { // 9A: call I286FN _wait(void) { // 9B: wait - I286_CLOCK(2) + I286_WORKCLOCK(2); } I286FN _pushf(void) { // 9C: pushf @@ -1695,7 +1695,7 @@ I286FN _pushf(void) { // 9C: pushf I286FN _popf(void) { // 9D: popf - I286_CLOCK(5) + I286_WORKCLOCK(5); REGPOP0(I286_FLAG) I286_OV = I286_FLAG & O_FLAG; I286_FLAG &= (0xfff ^ O_FLAG); @@ -1705,13 +1705,13 @@ I286FN _popf(void) { // 9D: popf I286FN _sahf(void) { // 9E: sahf - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_FLAGL = I286_AH; } I286FN _lahf(void) { // 9F: lahf - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_AH = I286_FLAGL; } @@ -1719,7 +1719,7 @@ I286FN _mov_al_m8(void) { // A0: mov UINT op; - I286_CLOCK(5) + I286_WORKCLOCK(5); GET_PCWORD(op) I286_AL = i286_memoryread(DS_FIX + op); } @@ -1728,7 +1728,7 @@ I286FN _mov_ax_m16(void) { // A1: mo UINT op; - I286_CLOCK(5) + I286_WORKCLOCK(5); GET_PCWORD(op) I286_AX = i286_memoryread_w(DS_FIX + op); } @@ -1737,7 +1737,7 @@ I286FN _mov_m8_al(void) { // A2: mov UINT op; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(op) i286_memorywrite(DS_FIX + op, I286_AL); } @@ -1746,7 +1746,7 @@ I286FN _mov_m16_ax(void) { // A3: mo UINT op; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(op); i286_memorywrite_w(DS_FIX + op, I286_AX); } @@ -1755,7 +1755,7 @@ I286FN _movsb(void) { // A4: movsb BYTE tmp; - I286_CLOCK(5) + I286_WORKCLOCK(5); tmp = i286_memoryread(I286_SI + DS_FIX); i286_memorywrite(I286_DI + ES_BASE, tmp); I286_SI += STRING_DIR; @@ -1766,7 +1766,7 @@ I286FN _movsw(void) { // A5: movsw UINT16 tmp; - I286_CLOCK(5) + I286_WORKCLOCK(5); tmp = i286_memoryread_w(I286_SI + DS_FIX); i286_memorywrite_w(I286_DI + ES_BASE, tmp); I286_SI += STRING_DIRx2; @@ -1779,7 +1779,7 @@ I286FN _cmpsb(void) { // A6: cmpsb UINT dst; UINT res; - I286_CLOCK(8) + I286_WORKCLOCK(8); dst = i286_memoryread(I286_SI + DS_FIX); src = i286_memoryread(I286_DI + ES_BASE); BYTE_SUB(res, dst, src) @@ -1793,7 +1793,7 @@ I286FN _cmpsw(void) { // A7: cmpsw UINT32 dst; UINT32 res; - I286_CLOCK(8) + I286_WORKCLOCK(8); dst = i286_memoryread_w(I286_SI + DS_FIX); src = i286_memoryread_w(I286_DI + ES_BASE); WORD_SUB(res, dst, src) @@ -1806,7 +1806,7 @@ I286FN _test_al_data8(void) { // A8: UINT src; UINT dst; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(src) dst = I286_AL; ANDBYTE(dst, src) @@ -1817,7 +1817,7 @@ I286FN _test_ax_data16(void) { // A9: UINT32 src; UINT32 dst; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCWORD(src) dst = I286_AX; ANDWORD(dst, src) @@ -1825,28 +1825,28 @@ I286FN _test_ax_data16(void) { // A9: I286FN _stosb(void) { // AA: stosw - I286_CLOCK(3) + I286_WORKCLOCK(3); i286_memorywrite(I286_DI + ES_BASE, I286_AL); I286_DI += STRING_DIR; } I286FN _stosw(void) { // AB: stosw - I286_CLOCK(3) + I286_WORKCLOCK(3); i286_memorywrite_w(I286_DI + ES_BASE, I286_AX); I286_DI += STRING_DIRx2; } I286FN _lodsb(void) { // AC: lodsb - I286_CLOCK(5) + I286_WORKCLOCK(5); I286_AL = i286_memoryread(I286_SI + DS_FIX); I286_SI += STRING_DIR; } I286FN _lodsw(void) { // AD: lodsw - I286_CLOCK(5) + I286_WORKCLOCK(5); I286_AX = i286_memoryread_w(I286_SI + DS_FIX); I286_SI += STRING_DIRx2; } @@ -1857,7 +1857,7 @@ I286FN _scasb(void) { // AE: scasb UINT dst; UINT res; - I286_CLOCK(7) + I286_WORKCLOCK(7); src = i286_memoryread(I286_DI + ES_BASE); dst = I286_AL; BYTE_SUB(res, dst, src) @@ -1870,7 +1870,7 @@ I286FN _scasw(void) { // AF: scasw UINT32 dst; UINT32 res; - I286_CLOCK(7) + I286_WORKCLOCK(7); src = i286_memoryread_w(I286_DI + ES_BASE); dst = I286_AX; WORD_SUB(res, dst, src) @@ -1903,22 +1903,22 @@ I286FN _shift_ea8_data8(void) { // C0 GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(5) - out = reg8_b20[op]; + I286_WORKCLOCK(5); + out = REG8_B20(op); } else { - I286_CLOCK(8); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(8); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { GET_PCBYTE(cl) - I286_CLOCK(cl); + I286_WORKCLOCK(cl); sft_e8cl_table[(op >> 3) & 7](madr, cl); return; } out = mem + madr; } GET_PCBYTE(cl) - I286_CLOCK(cl); + I286_WORKCLOCK(cl); sft_r8cl_table[(op >> 3) & 7](out, cl); } @@ -1931,22 +1931,22 @@ I286FN _shift_ea16_data8(void) { // C1 GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(5) - out = reg16_b20[op]; + I286_WORKCLOCK(5); + out = REG16_B20(op); } else { - I286_CLOCK(8); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(8); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { GET_PCBYTE(cl); - I286_CLOCK(cl); + I286_WORKCLOCK(cl); sft_e16cl_table[(op >> 3) & 7](madr, cl); return; } out = (UINT16 *)(mem + madr); } GET_PCBYTE(cl); - I286_CLOCK(cl); + I286_WORKCLOCK(cl); sft_r16cl_table[(op >> 3) & 7](out, cl); } @@ -1954,7 +1954,7 @@ I286FN _ret_near_data16(void) { // C2 UINT16 ad; - I286_CLOCK(11) + I286_WORKCLOCK(11); GET_PCWORD(ad) REGPOP0(I286_IP) I286_SP += ad; @@ -1962,22 +1962,23 @@ I286FN _ret_near_data16(void) { // C2 I286FN _ret_near(void) { // C3: ret near - I286_CLOCK(11) + I286_WORKCLOCK(11); REGPOP0(I286_IP) } I286FN _les_r16_ea(void) { // C4: les REG16, EA UINT op; + UINT32 seg; UINT16 ad; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(op) if (op < 0xc0) { - ad = c_get_ea[op](); - *(reg16_b53[op]) = i286_memoryread_w(ad + EA_FIX); + ad = GET_EA(op, &seg); + *(REG16_B53(op)) = i286_memoryread_w(seg + ad); ad += 2; - I286_ES = i286_memoryread_w(ad + EA_FIX); + I286_ES = i286_memoryread_w(seg + ad); ES_BASE = I286_ES << 4; } else { @@ -1988,15 +1989,16 @@ I286FN _les_r16_ea(void) { // C4: le I286FN _lds_r16_ea(void) { // C5: lds REG16, EA UINT op; + UINT32 seg; UINT16 ad; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(op) if (op < 0xc0) { - ad = c_get_ea[op](); - *(reg16_b53[op]) = i286_memoryread_w(ad + EA_FIX); + ad = GET_EA(op, &seg); + *(REG16_B53(op)) = i286_memoryread_w(seg + ad); ad += 2; - I286_DS = i286_memoryread_w(ad + EA_FIX); + I286_DS = i286_memoryread_w(seg + ad); DS_BASE = I286_DS << 4; DS_FIX = DS_BASE; } @@ -2011,16 +2013,25 @@ I286FN _mov_ea8_data8(void) { // C6: GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(2) - GET_PCBYTE(*(reg8_b53[op])) + I286_WORKCLOCK(2); + GET_PCBYTE(*(REG8_B53(op))) } else { +#if 1 // 03/11/23 + UINT32 ad; + BYTE val; + I286_WORKCLOCK(3); + ad = CALC_EA(op); + GET_PCBYTE(val) + i286_memorywrite(ad, val); +#else UINT ad; BYTE val; - I286_CLOCK(3) + I286_WORKCLOCK(3); ad = c_get_ea[op](); GET_PCBYTE(val) i286_memorywrite(ad + EA_FIX, val); +#endif } } @@ -2030,16 +2041,25 @@ I286FN _mov_ea16_data16(void) { // C7 GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(2) - GET_PCWORD(*(reg16_b53[op])) + I286_WORKCLOCK(2); + GET_PCWORD(*(REG16_B53(op))) } else { +#if 1 // 03/11/23 + UINT32 ad; + UINT16 val; + I286_WORKCLOCK(3); + ad = CALC_EA(op); + GET_PCWORD(val) + i286_memorywrite_w(ad, val); +#else UINT ad; UINT16 val; - I286_CLOCK(3) + I286_WORKCLOCK(3); ad = c_get_ea[op](); GET_PCWORD(val) i286_memorywrite_w(ad + EA_FIX, val); +#endif } } @@ -2053,7 +2073,7 @@ I286FN _enter(void) { // C8: enter REGPUSH0(I286_BP) level &= 0x1f; if (!level) { // enter level=0 - I286_CLOCK(11) + I286_WORKCLOCK(11); I286_BP = I286_SP; I286_SP -= dimsize; } @@ -2061,7 +2081,7 @@ I286FN _enter(void) { // C8: enter level--; if (!level) { // enter level=1 UINT16 tmp; - I286_CLOCK(15) + I286_WORKCLOCK(15); tmp = I286_SP; REGPUSH0(tmp) I286_BP = tmp; @@ -2069,14 +2089,22 @@ I286FN _enter(void) { // C8: enter } else { // enter level=2-31 UINT16 bp; - I286_CLOCK(12 + level*4) + I286_WORKCLOCK(12 + level*4); bp = I286_BP; I286_BP = I286_SP; while(level--) { +#if 1 // なにやってんだヲレ + UINT16 val; + bp -= 2; + I286_SP -= 2; + val = i286_memoryread_w(bp + SS_BASE); + i286_memorywrite_w(I286_SP + SS_BASE, val); +#else UINT16 val = i286_memoryread_w(bp + SS_BASE); i286_memorywrite_w(I286_SP + SS_BASE, val); bp -= 2; I286_SP -= 2; +#endif } REGPUSH0(I286_BP) I286_SP -= dimsize; @@ -2084,9 +2112,9 @@ I286FN _enter(void) { // C8: enter } } -I286FN leave(void) { // C9: leave +I286FN fleave(void) { // C9: leave - I286_CLOCK(5) + I286_WORKCLOCK(5); I286_SP = I286_BP; REGPOP0(I286_BP) } @@ -2095,7 +2123,7 @@ I286FN _ret_far_data16(void) { // CA: UINT16 ad; - I286_CLOCK(15) + I286_WORKCLOCK(15); GET_PCWORD(ad) REGPOP0(I286_IP) REGPOP0(I286_CS) @@ -2105,7 +2133,7 @@ I286FN _ret_far_data16(void) { // CA: I286FN _ret_far(void) { // CB: ret far - I286_CLOCK(15) + I286_WORKCLOCK(15); REGPOP0(I286_IP) REGPOP0(I286_CS) CS_BASE = I286_CS << 4; @@ -2113,7 +2141,7 @@ I286FN _ret_far(void) { // CB: ret I286FN _int_03(void) { // CC: int 3 - I286_CLOCK(23) + I286_WORKCLOCK(23); INT_NUM(3, I286_IP); } @@ -2121,16 +2149,16 @@ I286FN _int_data8(void) { // CD: int UINT vect; - I286_CLOCK(23) + I286_WORKCLOCK(23); GET_PCBYTE(vect) INT_NUM(vect, I286_IP); } I286FN _into(void) { // CE: into - I286_CLOCK(4) + I286_WORKCLOCK(4); if (I286_OV) { - I286_CLOCK(24 - 4) + I286_WORKCLOCK(24 - 4); INT_NUM(4, I286_IP); } } @@ -2138,7 +2166,7 @@ I286FN _into(void) { // CE: into I286FN _iret(void) { // CF: iret extirq_pop(); - I286_CLOCK(31) + I286_WORKCLOCK(31); REGPOP0(I286_IP) REGPOP0(I286_CS) REGPOP0(I286_FLAG) @@ -2157,12 +2185,12 @@ I286FN _shift_ea8_1(void) { // D0: sh GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(2) - out = reg8_b20[op]; + I286_WORKCLOCK(2); + out = REG8_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { sft_e8_table[(op >> 3) & 7](madr); return; @@ -2180,12 +2208,12 @@ I286FN _shift_ea16_1(void) { // D1: sh GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(2) - out = reg16_b20[op]; + I286_WORKCLOCK(2); + out = REG16_B20(op); } else { - I286_CLOCK(7); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(7); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { sft_e16_table[(op >> 3) & 7](madr); return; @@ -2204,22 +2232,22 @@ I286FN _shift_ea8_cl(void) { // D2: sh GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(5) - out = reg8_b20[op]; + I286_WORKCLOCK(5); + out = REG8_B20(op); } else { - I286_CLOCK(8); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(8); + madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { cl = I286_CL; - I286_CLOCK(cl); + I286_WORKCLOCK(cl); sft_e8cl_table[(op >> 3) & 7](madr, cl); return; } out = mem + madr; } cl = I286_CL; - I286_CLOCK(cl); + I286_WORKCLOCK(cl); sft_r8cl_table[(op >> 3) & 7](out, cl); } @@ -2232,22 +2260,22 @@ I286FN _shift_ea16_cl(void) { // D3: s GET_PCBYTE(op) if (op >= 0xc0) { - I286_CLOCK(5) - out = reg16_b20[op]; + I286_WORKCLOCK(5); + out = REG16_B20(op); } else { - I286_CLOCK(8); - madr = c_calc_ea_dst[op](); + I286_WORKCLOCK(8); + madr = CALC_EA(op); if (INHIBIT_WORDP(madr)) { cl = I286_CL; - I286_CLOCK(cl); + I286_WORKCLOCK(cl); sft_e16cl_table[(op >> 3) & 7](madr, cl); return; } out = (UINT16 *)(mem + madr); } cl = I286_CL; - I286_CLOCK(cl); + I286_WORKCLOCK(cl); sft_r16cl_table[(op >> 3) & 7](out, cl); } @@ -2256,7 +2284,7 @@ I286FN _aam(void) { // D4: AAM BYTE al; BYTE div; - I286_CLOCK(16) + I286_WORKCLOCK(16); GET_PCBYTE(div); if (div) { al = I286_AL; @@ -2275,7 +2303,7 @@ I286FN _aad(void) { // D5: AAD BYTE mul; - I286_CLOCK(14) + I286_WORKCLOCK(14); GET_PCBYTE(mul); I286_AL += (BYTE)(I286_AH * mul); I286_AH = 0; @@ -2290,7 +2318,7 @@ I286FN _setalc(void) { // D6: setal I286FN _xlat(void) { // D7: xlat - I286_CLOCK(5) + I286_WORKCLOCK(5); I286_AL = i286_memoryread(((I286_AL + I286_BX) & 0xffff) + DS_FIX); } @@ -2298,10 +2326,10 @@ I286FN _esc(void) { // D8: esc UINT op; - I286_CLOCK(2) + I286_WORKCLOCK(2); GET_PCBYTE(op) if (op < 0xc0) { - c_calc_lea[op](); + CALC_LEA(op); } } @@ -2332,7 +2360,7 @@ I286FN _in_al_data8(void) { // E4: i UINT port; - I286_CLOCK(5) + I286_WORKCLOCK(5); GET_PCBYTE(port) i286reg.inport = CS_BASE + I286_IP; I286_AL = iocore_inp8(port); @@ -2343,7 +2371,7 @@ I286FN _in_ax_data8(void) { // E5: i UINT port; - I286_CLOCK(5) + I286_WORKCLOCK(5); GET_PCBYTE(port) I286_AX = iocore_inp16(port); } @@ -2352,7 +2380,7 @@ I286FN _out_data8_al(void) { // E6: o UINT port; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(port); iocore_out8(port, I286_AL); } @@ -2361,7 +2389,7 @@ I286FN _out_data8_ax(void) { // E7: o UINT port; - I286_CLOCK(3) + I286_WORKCLOCK(3); GET_PCBYTE(port); iocore_out16(port, I286_AX); } @@ -2370,7 +2398,7 @@ I286FN _call_near(void) { // E8: cal UINT16 ad; - I286_CLOCK(7) + I286_WORKCLOCK(7); GET_PCWORD(ad) REGPUSH0(I286_IP) I286_IP += ad; @@ -2380,7 +2408,7 @@ I286FN _jmp_near(void) { // E9: jmp UINT16 ad; - I286_CLOCK(7) + I286_WORKCLOCK(7); GET_PCWORD(ad) I286_IP += ad; } @@ -2389,7 +2417,7 @@ I286FN _jmp_far(void) { // EA: jmp UINT16 ad; - I286_CLOCK(11) + I286_WORKCLOCK(11); GET_PCWORD(ad); GET_PCWORD(I286_CS); CS_BASE = I286_CS << 4; @@ -2400,38 +2428,38 @@ I286FN _jmp_short(void) { // EB: jmp UINT16 ad; - I286_CLOCK(7) + I286_WORKCLOCK(7); GET_PCBYTES(ad) I286_IP += ad; } I286FN _in_al_dx(void) { // EC: in al, dx - I286_CLOCK(5) + I286_WORKCLOCK(5); I286_AL = iocore_inp8(I286_DX); } I286FN _in_ax_dx(void) { // ED: in ax, dx - I286_CLOCK(5) + I286_WORKCLOCK(5); I286_AX = iocore_inp16(I286_DX); } I286FN _out_dx_al(void) { // EE: out dx, al - I286_CLOCK(3) + I286_WORKCLOCK(3); iocore_out8(I286_DX, I286_AL); } I286FN _out_dx_ax(void) { // EF: out dx, ax - I286_CLOCK(3) + I286_WORKCLOCK(3); iocore_out16(I286_DX, I286_AX); } I286FN _lock(void) { // F0: lock // F1: lock - I286_CLOCK(2) + I286_WORKCLOCK(2); } I286FN _repne(void) { // F2: repne @@ -2464,13 +2492,13 @@ I286FN _repe(void) { // F3: repe I286FN _hlt(void) { // F4: hlt - nevent.remainclock = -1; + I286_REMCLOCK = -1; I286_IP--; } I286FN _cmc(void) { // F5: cmc - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_FLAGL ^= C_FLAG; } @@ -2492,26 +2520,26 @@ I286FN _ope0xf7(void) { // F7: I286FN _clc(void) { // F8: clc - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_FLAGL &= ~C_FLAG; } I286FN _stc(void) { // F9: stc - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_FLAGL |= C_FLAG; } I286FN _cli(void) { // FA: cli - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_FLAG &= ~I_FLAG; I286_TRAP = 0; } I286FN _sti(void) { // FB: sti - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_FLAG |= I_FLAG; I286_TRAP = (I286_FLAG & T_FLAG) >> 8; // ToDo @@ -2520,13 +2548,13 @@ I286FN _sti(void) { // FB: sti I286FN _cld(void) { // FC: cld - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_FLAG &= ~D_FLAG; } I286FN _std(void) { // FD: std - I286_CLOCK(2) + I286_WORKCLOCK(2); I286_FLAG |= D_FLAG; } @@ -2762,7 +2790,7 @@ const I286OP i286op[] = { _mov_ea8_data8, // C6: mov EA8, DATA8 _mov_ea16_data16, // C7: mov EA16, DATA16 _enter, // C8: enter DATA16, DATA8 - leave, // C9: leave + fleave, // C9: leave _ret_far_data16, // CA: ret far DATA16 _ret_far, // CB: ret far _int_03, // CC: int 3 @@ -3075,7 +3103,7 @@ const I286OP i286op_repe[] = { i286c_repe_cmpsw, // A7: repe cmpsw _test_al_data8, // A8: test al, DATA8 _test_ax_data16, // A9: test ax, DATA16 - i286c_rep_stosb, // AA: rep stosw + i286c_rep_stosb, // AA: rep stosb i286c_rep_stosw, // AB: rep stosw i286c_rep_lodsb, // AC: rep lodsb i286c_rep_lodsw, // AD: rep lodsw @@ -3108,7 +3136,7 @@ const I286OP i286op_repe[] = { _mov_ea8_data8, // C6: mov EA8, DATA8 _mov_ea16_data16, // C7: mov EA16, DATA16 _enter, // C8: enter DATA16, DATA8 - leave, // C9: leave + fleave, // C9: leave _ret_far_data16, // CA: ret far DATA16 _ret_far, // CB: ret far _int_03, // CC: int 3 @@ -3420,7 +3448,7 @@ const I286OP i286op_repne[] = { i286c_repne_cmpsw, // A7: repne cmpsw _test_al_data8, // A8: test al, DATA8 _test_ax_data16, // A9: test ax, DATA16 - i286c_rep_stosb, // AA: rep stosw + i286c_rep_stosb, // AA: rep stosb i286c_rep_stosw, // AB: rep stosw i286c_rep_lodsb, // AC: rep lodsb i286c_rep_lodsw, // AD: rep lodsw @@ -3453,7 +3481,7 @@ const I286OP i286op_repne[] = { _mov_ea8_data8, // C6: mov EA8, DATA8 _mov_ea16_data16, // C7: mov EA16, DATA16 _enter, // C8: enter DATA16, DATA8 - leave, // C9: leave + fleave, // C9: leave _ret_far_data16, // CA: ret far DATA16 _ret_far, // CB: ret far _int_03, // CC: int 3