Diff for /np2/i286c/i286c_mn.c between versions 1.5 and 1.11

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

Removed from v.1.5  
changed lines
  Added in v.1.11


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