Diff for /np2/i286c/i286c_mn.c between versions 1.1 and 1.2

version 1.1, 2003/10/16 17:57:42 version 1.2, 2003/10/17 07:17:20
Line 138  I286FN _add_ax_data16(void) {     // 05: Line 138  I286FN _add_ax_data16(void) {     // 05:
         I286_CLOCK(3)          I286_CLOCK(3)
         GET_PCWORD(src);          GET_PCWORD(src);
         ADDWORD(res, I286_AX, src);          ADDWORD(res, I286_AX, src);
         I286_AX = (WORD)res;          I286_AX = (UINT16)res;
 }  }
   
 I286FN _push_es(void) {                                                 // 06: push es  I286FN _push_es(void) {                                                 // 06: push es
Line 178  I286FN _or_ea_r8(void) {      // 08: or  Line 178  I286FN _or_ea_r8(void) {      // 08: or 
   
 I286FN _or_ea_r16(void) {                                                       // 09: or EA, REG16  I286FN _or_ea_r16(void) {                                                       // 09: or EA, REG16
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, madr;          DWORD   op, src, dst, madr;
   
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
Line 192  I286FN _or_ea_r16(void) {       // 09: o Line 192  I286FN _or_ea_r16(void) {       // 09: o
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         dst = i286_memoryread_w(madr);                          dst = i286_memoryread_w(madr);
                         ORWORD(dst, src);                          ORWORD(dst, src);
                         i286_memorywrite_w(madr, (WORD)dst);                          i286_memorywrite_w(madr, (UINT16)dst);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         ORWORD(*out, src);          ORWORD(*out, src);
 }  }
Line 211  I286FN _or_r8_ea(void) {      // 0a: or  Line 211  I286FN _or_r8_ea(void) {      // 0a: or 
   
 I286FN _or_r16_ea(void) {                                               // 0b: or REG16, EA  I286FN _or_r16_ea(void) {                                               // 0b: or REG16, EA
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src;          DWORD   op, src;
   
         PREPART_REG16_EA(op, src, out, 2, 7);          PREPART_REG16_EA(op, src, out, 2, 7);
Line 269  I286FN _adc_ea_r8(void) {      // 10: ad Line 269  I286FN _adc_ea_r8(void) {      // 10: ad
   
 I286FN _adc_ea_r16(void) {                                              // 11: adc EA, REG16  I286FN _adc_ea_r16(void) {                                              // 11: adc EA, REG16
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, res, madr;          DWORD   op, src, dst, res, madr;
   
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
Line 283  I286FN _adc_ea_r16(void) {      // 11: a Line 283  I286FN _adc_ea_r16(void) {      // 11: a
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         dst = i286_memoryread_w(madr);                          dst = i286_memoryread_w(madr);
                         ADCWORD(res, dst, src);                          ADCWORD(res, dst, src);
                         i286_memorywrite_w(madr, (WORD)res);                          i286_memorywrite_w(madr, (UINT16)res);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         dst = *out;          dst = *out;
         ADCWORD(res, dst, src);          ADCWORD(res, dst, src);
         *out = (WORD)res;          *out = (UINT16)res;
 }  }
   
 I286FN _adc_r8_ea(void) {                                               // 12: adc REG8, EA  I286FN _adc_r8_ea(void) {                                               // 12: adc REG8, EA
Line 306  I286FN _adc_r8_ea(void) {      // 12: ad Line 306  I286FN _adc_r8_ea(void) {      // 12: ad
   
 I286FN _adc_r16_ea(void) {                                              // 13: adc REG16, EA  I286FN _adc_r16_ea(void) {                                              // 13: adc REG16, EA
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, res;          DWORD   op, src, dst, res;
   
         PREPART_REG16_EA(op, src, out, 2, 7);          PREPART_REG16_EA(op, src, out, 2, 7);
         dst = *out;          dst = *out;
         ADCWORD(res, dst, src);          ADCWORD(res, dst, src);
         *out = (WORD)res;          *out = (UINT16)res;
 }  }
   
 I286FN _adc_al_data8(void) {                                    // 14: adc al, DATA8  I286FN _adc_al_data8(void) {                                    // 14: adc al, DATA8
Line 332  I286FN _adc_ax_data16(void) {     // 15: Line 332  I286FN _adc_ax_data16(void) {     // 15:
         I286_CLOCK(3)          I286_CLOCK(3)
         GET_PCWORD(src);          GET_PCWORD(src);
         ADCWORD(res, I286_AX, src);          ADCWORD(res, I286_AX, src);
         I286_AX = (WORD)res;          I286_AX = (UINT16)res;
 }  }
   
 I286FN _push_ss(void) {                                                 // 16: push ss  I286FN _push_ss(void) {                                                 // 16: push ss
Line 343  I286FN _push_ss(void) {       // 16: pus Line 343  I286FN _push_ss(void) {       // 16: pus
 I286FN _pop_ss(void) {                                                  // 17: pop ss  I286FN _pop_ss(void) {                                                  // 17: pop ss
   
         REGPOP(I286_SS, 5)          REGPOP(I286_SS, 5)
         SS_BASE = (DWORD)I286_SS << 4;          SS_BASE = I286_SS << 4;
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         NEXT_OPCODE          NEXT_OPCODE
 }  }
Line 376  I286FN _sbb_ea_r8(void) {      // 18: sb Line 376  I286FN _sbb_ea_r8(void) {      // 18: sb
   
 I286FN _sbb_ea_r16(void) {                                              // 19: sbb EA, REG16  I286FN _sbb_ea_r16(void) {                                              // 19: sbb EA, REG16
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, res, madr;          DWORD   op, src, dst, res, madr;
   
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
Line 390  I286FN _sbb_ea_r16(void) {      // 19: s Line 390  I286FN _sbb_ea_r16(void) {      // 19: s
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         dst = i286_memoryread_w(madr);                          dst = i286_memoryread_w(madr);
                         SBBWORD(res, dst, src);                          SBBWORD(res, dst, src);
                         i286_memorywrite_w(madr, (WORD)res);                          i286_memorywrite_w(madr, (UINT16)res);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         dst = *out;          dst = *out;
         SBBWORD(res, dst, src);          SBBWORD(res, dst, src);
         *out = (WORD)res;          *out = (UINT16)res;
 }  }
   
 I286FN _sbb_r8_ea(void) {                                               // 1a: sbb REG8, EA  I286FN _sbb_r8_ea(void) {                                               // 1a: sbb REG8, EA
Line 413  I286FN _sbb_r8_ea(void) {      // 1a: sb Line 413  I286FN _sbb_r8_ea(void) {      // 1a: sb
   
 I286FN _sbb_r16_ea(void) {                                              // 1b: sbb REG16, EA  I286FN _sbb_r16_ea(void) {                                              // 1b: sbb REG16, EA
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, res;          DWORD   op, src, dst, res;
   
         PREPART_REG16_EA(op, src, out, 2, 7);          PREPART_REG16_EA(op, src, out, 2, 7);
         dst = *out;          dst = *out;
         SBBWORD(res, dst, src);          SBBWORD(res, dst, src);
         *out = (WORD)res;          *out = (UINT16)res;
 }  }
   
 I286FN _sbb_al_data8(void) {                                    // 1c: adc al, DATA8  I286FN _sbb_al_data8(void) {                                    // 1c: adc al, DATA8
Line 439  I286FN _sbb_ax_data16(void) {     // 1d: Line 439  I286FN _sbb_ax_data16(void) {     // 1d:
         I286_CLOCK(3)          I286_CLOCK(3)
         GET_PCWORD(src);          GET_PCWORD(src);
         SBBWORD(res, I286_AX, src);          SBBWORD(res, I286_AX, src);
         I286_AX = (WORD)res;          I286_AX = (UINT16)res;
 }  }
   
 I286FN _push_ds(void) {                                                 // 1e: push ds  I286FN _push_ds(void) {                                                 // 1e: push ds
Line 450  I286FN _push_ds(void) {       // 1e: pus Line 450  I286FN _push_ds(void) {       // 1e: pus
 I286FN _pop_ds(void) {                                                  // 1f: pop ds  I286FN _pop_ds(void) {                                                  // 1f: pop ds
   
         REGPOP(I286_DS, 5)          REGPOP(I286_DS, 5)
         DS_BASE = (DWORD)I286_DS << 4;          DS_BASE = I286_DS << 4;
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
 }  }
   
Line 480  I286FN _and_ea_r8(void) {      // 20: an Line 480  I286FN _and_ea_r8(void) {      // 20: an
   
 I286FN _and_ea_r16(void) {                                              // 21: and EA, REG16  I286FN _and_ea_r16(void) {                                              // 21: and EA, REG16
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, madr;          DWORD   op, src, dst, madr;
   
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
Line 494  I286FN _and_ea_r16(void) {      // 21: a Line 494  I286FN _and_ea_r16(void) {      // 21: a
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         dst = i286_memoryread_w(madr);                          dst = i286_memoryread_w(madr);
                         ANDWORD(dst, src);                          ANDWORD(dst, src);
                         i286_memorywrite_w(madr, (WORD)dst);                          i286_memorywrite_w(madr, (UINT16)dst);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         ANDWORD(*out, src);          ANDWORD(*out, src);
 }  }
Line 513  I286FN _and_r8_ea(void) {      // 22: an Line 513  I286FN _and_r8_ea(void) {      // 22: an
   
 I286FN _and_r16_ea(void) {                                              // 23: and REG16, EA  I286FN _and_r16_ea(void) {                                              // 23: and REG16, EA
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src;          DWORD   op, src;
   
         PREPART_REG16_EA(op, src, out, 2, 7);          PREPART_REG16_EA(op, src, out, 2, 7);
Line 542  I286FN _segprefix_es(void) {     // 26:  Line 542  I286FN _segprefix_es(void) {     // 26: 
   
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 602  I286FN _sub_ea_r8(void) {      // 28: su Line 602  I286FN _sub_ea_r8(void) {      // 28: su
   
 I286FN _sub_ea_r16(void) {                                              // 29: sub EA, REG16  I286FN _sub_ea_r16(void) {                                              // 29: sub EA, REG16
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, res, madr;          DWORD   op, src, dst, res, madr;
   
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
Line 616  I286FN _sub_ea_r16(void) {      // 29: s Line 616  I286FN _sub_ea_r16(void) {      // 29: s
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         dst = i286_memoryread_w(madr);                          dst = i286_memoryread_w(madr);
                         WORD_SUB(res, dst, src);                          WORD_SUB(res, dst, src);
                         i286_memorywrite_w(madr, (WORD)res);                          i286_memorywrite_w(madr, (UINT16)res);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         dst = *out;          dst = *out;
         WORD_SUB(res, dst, src);          WORD_SUB(res, dst, src);
         *out = (WORD)res;          *out = (UINT16)res;
 }  }
   
 I286FN _sub_r8_ea(void) {                                               // 2a: sub REG8, EA  I286FN _sub_r8_ea(void) {                                               // 2a: sub REG8, EA
Line 639  I286FN _sub_r8_ea(void) {      // 2a: su Line 639  I286FN _sub_r8_ea(void) {      // 2a: su
   
 I286FN _sub_r16_ea(void) {                                              // 2b: sub REG16, EA  I286FN _sub_r16_ea(void) {                                              // 2b: sub REG16, EA
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, res;          DWORD   op, src, dst, res;
   
         PREPART_REG16_EA(op, src, out, 2, 7);          PREPART_REG16_EA(op, src, out, 2, 7);
         dst = *out;          dst = *out;
         WORD_SUB(res, dst, src);          WORD_SUB(res, dst, src);
         *out = (WORD)res;          *out = (UINT16)res;
 }  }
   
 I286FN _sub_al_data8(void) {                                    // 2c: sub al, DATA8  I286FN _sub_al_data8(void) {                                    // 2c: sub al, DATA8
Line 665  I286FN _sub_ax_data16(void) {     // 2d: Line 665  I286FN _sub_ax_data16(void) {     // 2d:
         I286_CLOCK(3)          I286_CLOCK(3)
         GET_PCWORD(src);          GET_PCWORD(src);
         WORD_SUB(res, I286_AX, src);          WORD_SUB(res, I286_AX, src);
         I286_AX = (WORD)res;          I286_AX = (UINT16)res;
 }  }
   
 I286FN _segprefix_cs(void) {                                    // 2e: cs:  I286FN _segprefix_cs(void) {                                    // 2e: cs:
   
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 727  I286FN _xor_ea_r8(void) {      // 30: xo Line 727  I286FN _xor_ea_r8(void) {      // 30: xo
   
 I286FN _xor_ea_r16(void) {                                              // 31: xor EA, REG16  I286FN _xor_ea_r16(void) {                                              // 31: xor EA, REG16
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, madr;          DWORD   op, src, dst, madr;
   
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
Line 741  I286FN _xor_ea_r16(void) {      // 31: x Line 741  I286FN _xor_ea_r16(void) {      // 31: x
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         dst = i286_memoryread_w(madr);                          dst = i286_memoryread_w(madr);
                         WORD_XOR(dst, src);                          WORD_XOR(dst, src);
                         i286_memorywrite_w(madr, (WORD)dst);                          i286_memorywrite_w(madr, (UINT16)dst);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         WORD_XOR(*out, src);          WORD_XOR(*out, src);
 }  }
Line 760  I286FN _xor_r8_ea(void) {      // 32: xo Line 760  I286FN _xor_r8_ea(void) {      // 32: xo
   
 I286FN _xor_r16_ea(void) {                                              // 33: or REG16, EA  I286FN _xor_r16_ea(void) {                                              // 33: or REG16, EA
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src;          DWORD   op, src;
   
         PREPART_REG16_EA(op, src, out, 2, 7);          PREPART_REG16_EA(op, src, out, 2, 7);
Line 789  I286FN _segprefix_ss(void) {     // 36:  Line 789  I286FN _segprefix_ss(void) {     // 36: 
   
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 861  I286FN _cmp_r8_ea(void) {      // 3a: cm Line 861  I286FN _cmp_r8_ea(void) {      // 3a: cm
   
 I286FN _cmp_r16_ea(void) {                                              // 3b: cmp REG16, EA  I286FN _cmp_r16_ea(void) {                                              // 3b: cmp REG16, EA
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, dst, res;          DWORD   op, src, dst, res;
   
         PREPART_REG16_EA(op, src, out, 2, 6);          PREPART_REG16_EA(op, src, out, 2, 6);
Line 891  I286FN _segprefix_ds(void) {     // 3e:  Line 891  I286FN _segprefix_ds(void) {     // 3e: 
   
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 953  I286_P _pop_di(void) REGPOP(I286_DI, 5)  Line 953  I286_P _pop_di(void) REGPOP(I286_DI, 5) 
   
 I286_P _pusha(void) {                                           // 60:  pusha  I286_P _pusha(void) {                                           // 60:  pusha
   
         WORD    tmp = I286_SP;          UINT16  tmp;
   
           tmp = I286_SP;
         REGPUSH0(I286_AX)          REGPUSH0(I286_AX)
         REGPUSH0(I286_CX)          REGPUSH0(I286_CX)
         REGPUSH0(I286_DX)          REGPUSH0(I286_DX)
Line 984  I286_P _bound(void) {      // 62: bound Line 985  I286_P _bound(void) {      // 62: bound
         DWORD   vect = 0;          DWORD   vect = 0;
         DWORD   op;          DWORD   op;
         DWORD   madr;          DWORD   madr;
         WORD    reg;          UINT16  reg;
   
         I286_CLOCK(13);                                                                         // ToDo          I286_CLOCK(13);                                                                         // ToDo
         GET_PCBYTE(op);          GET_PCBYTE(op);
Line 1019  I286_P _arpl(void) {      // 63: arpl Line 1020  I286_P _arpl(void) {      // 63: arpl
   
 I286_P _push_data16(void) {                             // 68:  push    DATA16  I286_P _push_data16(void) {                             // 68:  push    DATA16
   
         WORD    tmp;          UINT16  tmp;
   
         GET_PCWORD(tmp)          GET_PCWORD(tmp)
         REGPUSH(tmp, 3)          REGPUSH(tmp, 3)
Line 1027  I286_P _push_data16(void) {    // 68: pu Line 1028  I286_P _push_data16(void) {    // 68: pu
   
 I286_P _imul_reg_ea_data16(void) {              // 69:  imul    REG, EA, DATA16  I286_P _imul_reg_ea_data16(void) {              // 69:  imul    REG, EA, DATA16
   
         WORD    *out;          UINT16  *out;
         DWORD   op;          DWORD   op;
         short   src, dst;          short   src, dst;
         long    res;          long    res;
Line 1035  I286_P _imul_reg_ea_data16(void) {  // 6 Line 1036  I286_P _imul_reg_ea_data16(void) {  // 6
         PREPART_REG16_EA(op, src, out, 21, 24)          PREPART_REG16_EA(op, src, out, 21, 24)
         GET_PCWORD(dst)          GET_PCWORD(dst)
         WORD_IMUL(res, dst, src)          WORD_IMUL(res, dst, src)
         *out = (WORD)res;          *out = (UINT16)res;
 }  }
   
 I286_P _push_data8(void) {                              // 6A:  push    DATA8  I286_P _push_data8(void) {                              // 6A:  push    DATA8
   
         WORD    tmp;          UINT16  tmp;
   
         GET_PCBYTES(tmp)          GET_PCBYTES(tmp)
         REGPUSH(tmp, 3)          REGPUSH(tmp, 3)
Line 1048  I286_P _push_data8(void) {    // 6A: pus Line 1049  I286_P _push_data8(void) {    // 6A: pus
   
 I286_P _imul_reg_ea_data8(void) {               // 6B:  imul    REG, EA, DATA8  I286_P _imul_reg_ea_data8(void) {               // 6B:  imul    REG, EA, DATA8
   
         WORD    *out;          UINT16  *out;
         DWORD   op;          DWORD   op;
         short   src, dst;          short   src, dst;
         long    res;          long    res;
Line 1056  I286_P _imul_reg_ea_data8(void) {  // 6B Line 1057  I286_P _imul_reg_ea_data8(void) {  // 6B
         PREPART_REG16_EA(op, src, out, 21, 24)          PREPART_REG16_EA(op, src, out, 21, 24)
         GET_PCBYTES(dst)          GET_PCBYTES(dst)
         WORD_IMUL(res, dst, src)          WORD_IMUL(res, dst, src)
         *out = (WORD)res;          *out = (UINT16)res;
 }  }
   
 I286_P _insb(void) {                                            // 6C:  insb  I286_P _insb(void) {                                            // 6C:  insb
Line 1071  I286_P _insb(void) {      // 6C: insb Line 1072  I286_P _insb(void) {      // 6C: insb
   
 I286_P _insw(void) {                                            // 6D:  insw  I286_P _insw(void) {                                            // 6D:  insw
   
         WORD    dat;          UINT16  dat;
   
         I286_CLOCK(5)          I286_CLOCK(5)
         dat = iocore_inp16(I286_DX);          dat = iocore_inp16(I286_DX);
Line 1091  I286_P _outsb(void) {      // 6E: outsb Line 1092  I286_P _outsb(void) {      // 6E: outsb
   
 I286_P _outsw(void) {                                           // 6F:  outsw  I286_P _outsw(void) {                                           // 6F:  outsw
   
         WORD    dat;          UINT16  dat;
   
         I286_CLOCK(3)          I286_CLOCK(3)
         dat = i286_memoryread_w(I286_SI + DS_FIX);          dat = i286_memoryread_w(I286_SI + DS_FIX);
Line 1208  I286_P _calc_ea8_i8(void) {     // 80: o Line 1209  I286_P _calc_ea8_i8(void) {     // 80: o
   
 I286_P _calc_ea16_i16(void) {                           // 81:  op              EA16, DATA16  I286_P _calc_ea16_i16(void) {                           // 81:  op              EA16, DATA16
   
         WORD    *out;          UINT16  *out;
         DWORD   op, madr, src;          DWORD   op, madr, src;
   
         GET_PCBYTE(op)          GET_PCBYTE(op)
Line 1224  I286_P _calc_ea16_i16(void) {    // 81:  Line 1225  I286_P _calc_ea16_i16(void) {    // 81: 
                         c_op8xext16_table[(op >> 3) & 7](madr, src);                          c_op8xext16_table[(op >> 3) & 7](madr, src);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         GET_PCWORD(src);          GET_PCWORD(src);
         c_op8xreg16_table[(op >> 3) & 7](out, src);          c_op8xreg16_table[(op >> 3) & 7](out, src);
Line 1232  I286_P _calc_ea16_i16(void) {    // 81:  Line 1233  I286_P _calc_ea16_i16(void) {    // 81: 
   
 I286_P _calc_ea16_i8(void) {                            // 83:  op              EA16, DATA8  I286_P _calc_ea16_i8(void) {                            // 83:  op              EA16, DATA8
   
         WORD    *out;          UINT16  *out;
         DWORD   op, madr, src;          DWORD   op, madr, src;
   
         GET_PCBYTE(op)          GET_PCBYTE(op)
Line 1248  I286_P _calc_ea16_i8(void) {    // 83: o Line 1249  I286_P _calc_ea16_i8(void) {    // 83: o
                         c_op8xext16_table[(op >> 3) & 7](madr, src);                          c_op8xext16_table[(op >> 3) & 7](madr, src);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         GET_PCBYTES(src);          GET_PCBYTES(src);
         c_op8xreg16_table[(op >> 3) & 7](out, src);          c_op8xreg16_table[(op >> 3) & 7](out, src);
Line 1280  I286_P _test_ea_r8(void) {     // 84: te Line 1281  I286_P _test_ea_r8(void) {     // 84: te
   
 I286_P _test_ea_r16(void) {                                     // 85:  test    EA, REG16  I286_P _test_ea_r16(void) {                                     // 85:  test    EA, REG16
   
         WORD    *out;          UINT16  *out;
         DWORD   op, src, tmp, madr;          DWORD   op, src, tmp, madr;
   
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
Line 1296  I286_P _test_ea_r16(void) {     // 85: t Line 1297  I286_P _test_ea_r16(void) {     // 85: t
                         ANDWORD(tmp, src);                          ANDWORD(tmp, src);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         tmp = *out;          tmp = *out;
         ANDWORD(tmp, src);          ANDWORD(tmp, src);
Line 1328  I286_P _xchg_ea_r8(void) {     // 86: xc Line 1329  I286_P _xchg_ea_r8(void) {     // 86: xc
   
 I286_P _xchg_ea_r16(void) {                                     // 87:  xchg    EA, REG16  I286_P _xchg_ea_r16(void) {                                     // 87:  xchg    EA, REG16
   
         WORD    *out, *src;          UINT16  *out, *src;
         DWORD   op, madr;          DWORD   op, madr;
   
         PREPART_EA_REG16P(op, src);          PREPART_EA_REG16P(op, src);
Line 1345  I286_P _xchg_ea_r16(void) {     // 87: x Line 1346  I286_P _xchg_ea_r16(void) {     // 87: x
                         *src = tmp;                          *src = tmp;
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         SWAPWORD(*out, *src);          SWAPWORD(*out, *src);
 }  }
Line 1369  I286_P _mov_ea_r8(void) {     // 88: mov Line 1370  I286_P _mov_ea_r8(void) {     // 88: mov
   
 I286_P _mov_ea_r16(void) {                                      // 89:  mov             EA, REG16  I286_P _mov_ea_r16(void) {                                      // 89:  mov             EA, REG16
   
         WORD    src;          UINT16  src;
         DWORD   op;          DWORD   op;
   
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
Line 1395  I286_P _mov_r8_ea(void) {     // 8A: mov Line 1396  I286_P _mov_r8_ea(void) {     // 8A: mov
   
 I286_P _mov_r16_ea(void) {                                      // 8B:  mov             REG16, EA  I286_P _mov_r16_ea(void) {                                      // 8B:  mov             REG16, EA
   
         WORD    *out;          UINT16  *out;
         WORD    src;          UINT16  src;
         DWORD   op;          DWORD   op;
   
         PREPART_REG16_EA(op, src, out, 2, 5);          PREPART_REG16_EA(op, src, out, 2, 5);
Line 1406  I286_P _mov_r16_ea(void) {     // 8B: mo Line 1407  I286_P _mov_r16_ea(void) {     // 8B: mo
 I286_P _mov_ea_seg(void) {                                      // 8C:  mov             EA, segreg  I286_P _mov_ea_seg(void) {                                      // 8C:  mov             EA, segreg
   
         DWORD   op;          DWORD   op;
         WORD    tmp;          UINT16  tmp;
   
         GET_PCBYTE(op);          GET_PCBYTE(op);
         tmp = *SEGMENTPTR((op >> 3) & 3);          tmp = *SEGMENTPTR((op >> 3) & 3);
Line 1437  I286_P _lea_r16_ea(void) {     // 8D: le Line 1438  I286_P _lea_r16_ea(void) {     // 8D: le
 I286_P _mov_seg_ea(void) {                                      // 8E:  mov             segrem, EA  I286_P _mov_seg_ea(void) {                                      // 8E:  mov             segrem, EA
   
         DWORD   op;          DWORD   op;
         WORD    tmp;          UINT    tmp;
         WORD    ipbak;          UINT16  ipbak;
   
         ipbak = I286_IP;          ipbak = I286_IP;
         GET_PCBYTE(op);          GET_PCBYTE(op);
Line 1452  I286_P _mov_seg_ea(void) {     // 8E: mo Line 1453  I286_P _mov_seg_ea(void) {     // 8E: mo
         }          }
         switch(op & 0x18) {          switch(op & 0x18) {
                 case 0x00:                      // es                  case 0x00:                      // es
                         I286_ES = tmp;                          I286_ES = (UINT16)tmp;
                         ES_BASE = (DWORD)tmp << 4;                          ES_BASE = tmp << 4;
                         break;                          break;
   
                 case 0x10:                      // ss                  case 0x10:                      // ss
                         I286_SS = tmp;                          I286_SS = (UINT16)tmp;
                         SS_BASE = (DWORD)tmp << 4;                          SS_BASE = tmp << 4;
                         SS_FIX = SS_BASE;                          SS_FIX = SS_BASE;
                         NEXT_OPCODE                          NEXT_OPCODE
                         break;                          break;
   
                 case 0x18:                      // ds                  case 0x18:                      // ds
                         I286_DS = tmp;                          I286_DS = (UINT16)tmp;
                         DS_BASE = (DWORD)tmp << 4;                          DS_BASE = tmp << 4;
                         DS_FIX = DS_BASE;                          DS_FIX = DS_BASE;
                         break;                          break;
   
Line 1478  I286_P _mov_seg_ea(void) {     // 8E: mo Line 1479  I286_P _mov_seg_ea(void) {     // 8E: mo
 I286_P _pop_ea(void) {                                          // 8F:  pop             EA  I286_P _pop_ea(void) {                                          // 8F:  pop             EA
   
         DWORD   op;          DWORD   op;
         WORD    tmp;          UINT16  tmp;
   
         I286_CLOCK(5)          I286_CLOCK(5)
         REGPOP0(tmp)          REGPOP0(tmp)
Line 1495  I286_P _pop_ea(void) {      // 8F: pop   Line 1496  I286_P _pop_ea(void) {      // 8F: pop  
 I286_P _nop(void) {                                                     // 90: nop / bios func  I286_P _nop(void) {                                                     // 90: nop / bios func
   
 #if 1                                                                           // call BIOS  #if 1                                                                           // call BIOS
         DWORD   adrs;          UINT32  adrs;
   
         adrs = ((I286_IP - 1) & 0xffff) + CS_BASE;          adrs = ((I286_IP - 1) & 0xffff) + CS_BASE;
         if ((adrs >= 0xf8000) && (adrs < 0x100000)) {          if ((adrs >= 0xf8000) && (adrs < 0x100000)) {
                 biosfunc(adrs);                  biosfunc(adrs);
                 ES_BASE = (DWORD)I286_ES << 4;                  ES_BASE = I286_ES << 4;
                 CS_BASE = (DWORD)I286_CS << 4;                  CS_BASE = I286_CS << 4;
                 SS_BASE = (DWORD)I286_SS << 4;                  SS_BASE = I286_SS << 4;
                 SS_FIX = SS_BASE;                  SS_FIX = SS_BASE;
                 DS_BASE = (DWORD)I286_DS << 4;                  DS_BASE = I286_DS << 4;
                 DS_FIX = DS_BASE;                  DS_FIX = DS_BASE;
         }          }
 #endif  #endif
Line 1567  I286_P _cwd(void) {       // 99: cwd Line 1568  I286_P _cwd(void) {       // 99: cwd
   
 I286_P _call_far(void) {                                        // 9A:  call far  I286_P _call_far(void) {                                        // 9A:  call far
   
         WORD    newip;          UINT16  newip;
   
         I286_CLOCK(13)          I286_CLOCK(13)
         REGPUSH0(I286_CS)          REGPUSH0(I286_CS)
         GET_PCWORD(newip)          GET_PCWORD(newip)
         GET_PCWORD(I286_CS)          GET_PCWORD(I286_CS)
         CS_BASE = (DWORD)I286_CS << 4;          CS_BASE = I286_CS << 4;
         REGPUSH0(I286_IP)          REGPUSH0(I286_IP)
         I286_IP = newip;          I286_IP = newip;
 }  }
Line 1659  I286_P _movsb(void) {      // A4: movsb Line 1660  I286_P _movsb(void) {      // A4: movsb
   
 I286_P _movsw(void) {                                           // A5:  movsw  I286_P _movsw(void) {                                           // A5:  movsw
   
         WORD    tmp;          UINT16  tmp;
   
         I286_CLOCK(5)          I286_CLOCK(5)
         tmp = i286_memoryread_w(I286_SI + DS_FIX);          tmp = i286_memoryread_w(I286_SI + DS_FIX);
Line 1808  I286_P _shift_ea8_data8(void) {    // C0 Line 1809  I286_P _shift_ea8_data8(void) {    // C0
   
 I286_P _shift_ea16_data8(void) {                        // C1:  shift   EA16, DATA8  I286_P _shift_ea16_data8(void) {                        // C1:  shift   EA16, DATA8
   
         WORD    *out;          UINT16  *out;
         DWORD   op, madr;          DWORD   op, madr;
         BYTE    cl;          BYTE    cl;
   
Line 1826  I286_P _shift_ea16_data8(void) {   // C1 Line 1827  I286_P _shift_ea16_data8(void) {   // C1
                         sft_e16cl_table[(op >> 3) & 7](madr, cl);                          sft_e16cl_table[(op >> 3) & 7](madr, cl);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         GET_PCBYTE(cl);          GET_PCBYTE(cl);
         I286_CLOCK(cl);          I286_CLOCK(cl);
Line 1835  I286_P _shift_ea16_data8(void) {   // C1 Line 1836  I286_P _shift_ea16_data8(void) {   // C1
   
 I286_P _ret_near_data16(void) {                         // C2:  ret near DATA16  I286_P _ret_near_data16(void) {                         // C2:  ret near DATA16
   
         WORD    ad;          UINT16  ad;
   
         I286_CLOCK(11)          I286_CLOCK(11)
         GET_PCWORD(ad)          GET_PCWORD(ad)
Line 1852  I286_P _ret_near(void) {     // C3: ret  Line 1853  I286_P _ret_near(void) {     // C3: ret 
 I286_P _les_r16_ea(void) {                                      // C4:  les             REG16, EA  I286_P _les_r16_ea(void) {                                      // C4:  les             REG16, EA
   
         DWORD   op;          DWORD   op;
         WORD    ad;          UINT16  ad;
   
         I286_CLOCK(3)          I286_CLOCK(3)
         GET_PCBYTE(op)          GET_PCBYTE(op)
Line 1861  I286_P _les_r16_ea(void) {     // C4: le Line 1862  I286_P _les_r16_ea(void) {     // C4: le
                 *(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 = (DWORD)I286_ES << 4;                  ES_BASE = I286_ES << 4;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP - 2);                  INT_NUM(6, I286_IP - 2);
Line 1871  I286_P _les_r16_ea(void) {     // C4: le Line 1872  I286_P _les_r16_ea(void) {     // C4: le
 I286_P _lds_r16_ea(void) {                                      // C5:  lds             REG16, EA  I286_P _lds_r16_ea(void) {                                      // C5:  lds             REG16, EA
   
         DWORD   op;          DWORD   op;
         WORD    ad;          UINT16  ad;
   
         I286_CLOCK(3)          I286_CLOCK(3)
         GET_PCBYTE(op)          GET_PCBYTE(op)
Line 1917  I286_P _mov_ea16_data16(void) {    // C7 Line 1918  I286_P _mov_ea16_data16(void) {    // C7
                 GET_PCWORD(*(reg16_b53[op]))                  GET_PCWORD(*(reg16_b53[op]))
         }          }
         else {          else {
                 WORD    ad;                  UINT    ad;
                 WORD    val;                  UINT16  val;
                 I286_CLOCK(3)                  I286_CLOCK(3)
                 ad = c_get_ea[op]();                  ad = c_get_ea[op]();
                 GET_PCWORD(val)                  GET_PCWORD(val)
Line 1928  I286_P _mov_ea16_data16(void) {    // C7 Line 1929  I286_P _mov_ea16_data16(void) {    // C7
   
 I286_P _enter(void) {                                           // C8:  enter   DATA16, DATA8  I286_P _enter(void) {                                           // C8:  enter   DATA16, DATA8
   
         WORD    dimsize;          UINT16  dimsize;
         BYTE    level;          BYTE    level;
   
         GET_PCWORD(dimsize)          GET_PCWORD(dimsize)
Line 1943  I286_P _enter(void) {      // C8: enter  Line 1944  I286_P _enter(void) {      // C8: enter 
         else {          else {
                 level--;                  level--;
                 if (!level) {                                                   // enter level=1                  if (!level) {                                                   // enter level=1
                         WORD tmp;                          UINT16 tmp;
                         I286_CLOCK(15)                          I286_CLOCK(15)
                         tmp = I286_SP;                          tmp = I286_SP;
                         REGPUSH0(tmp)                          REGPUSH0(tmp)
Line 1951  I286_P _enter(void) {      // C8: enter  Line 1952  I286_P _enter(void) {      // C8: enter 
                         I286_SP -= dimsize;                          I286_SP -= dimsize;
                 }                  }
                 else {                                                                  // enter level=2-31                  else {                                                                  // enter level=2-31
                         WORD    bp;                          UINT16 bp;
                         I286_CLOCK(12 + level*4)                          I286_CLOCK(12 + level*4)
                         bp = I286_BP;                          bp = I286_BP;
                         I286_BP = I286_SP;                          I286_BP = I286_SP;
                         while(level--) {                          while(level--) {
                                 WORD 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;
Line 1976  I286_P leave(void) {      // C9: leave Line 1977  I286_P leave(void) {      // C9: leave
   
 I286_P _ret_far_data16(void) {                          // CA:  ret far DATA16  I286_P _ret_far_data16(void) {                          // CA:  ret far DATA16
   
         WORD    ad;          UINT16  ad;
   
         I286_CLOCK(15)          I286_CLOCK(15)
         GET_PCWORD(ad)          GET_PCWORD(ad)
         REGPOP0(I286_IP)          REGPOP0(I286_IP)
         REGPOP0(I286_CS)          REGPOP0(I286_CS)
         I286_SP += ad;          I286_SP += ad;
         CS_BASE = (DWORD)I286_CS << 4;          CS_BASE = I286_CS << 4;
 }  }
   
 I286_P _ret_far(void) {                                         // CB:  ret far  I286_P _ret_far(void) {                                         // CB:  ret far
Line 1991  I286_P _ret_far(void) {      // CB: ret  Line 1992  I286_P _ret_far(void) {      // CB: ret 
         I286_CLOCK(15)          I286_CLOCK(15)
         REGPOP0(I286_IP)          REGPOP0(I286_IP)
         REGPOP0(I286_CS)          REGPOP0(I286_CS)
         CS_BASE = (DWORD)I286_CS << 4;          CS_BASE = I286_CS << 4;
 }  }
   
 I286_P _int_03(void) {                                          // CC:  int             3  I286_P _int_03(void) {                                          // CC:  int             3
Line 2028  I286_P _iret(void) {      // CF: iret Line 2029  I286_P _iret(void) {      // CF: iret
         I286_OV = I286_FLAG & O_FLAG;          I286_OV = I286_FLAG & O_FLAG;
         I286_FLAG &= 0x7ff;          I286_FLAG &= 0x7ff;
         I286_TRAP = ((I286_FLAG & 0x300) == 0x300);          I286_TRAP = ((I286_FLAG & 0x300) == 0x300);
         CS_BASE = (DWORD)I286_CS << 4;          CS_BASE = I286_CS << 4;
         I286IRQCHECKTERM          I286IRQCHECKTERM
 }  }
   
Line 2056  I286_P _shift_ea8_1(void) {    // D0: sh Line 2057  I286_P _shift_ea8_1(void) {    // D0: sh
   
 I286_P _shift_ea16_1(void) {                    // D1:  shift EA16, 1  I286_P _shift_ea16_1(void) {                    // D1:  shift EA16, 1
   
         WORD    *out;          UINT16  *out;
         DWORD   op, madr;          DWORD   op, madr;
   
         GET_PCBYTE(op)          GET_PCBYTE(op)
Line 2071  I286_P _shift_ea16_1(void) {   // D1: sh Line 2072  I286_P _shift_ea16_1(void) {   // D1: sh
                         sft_e16_table[(op >> 3) & 7](madr);                          sft_e16_table[(op >> 3) & 7](madr);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         sft_r16_table[(op >> 3) & 7](out);          sft_r16_table[(op >> 3) & 7](out);
 }  }
Line 2105  I286_P _shift_ea8_cl(void) {   // D2: sh Line 2106  I286_P _shift_ea8_cl(void) {   // D2: sh
   
 I286_P _shift_ea16_cl(void) {                   // D3:  shift EA16, cl  I286_P _shift_ea16_cl(void) {                   // D3:  shift EA16, cl
   
         WORD    *out;          UINT16  *out;
         DWORD   op, madr;          DWORD   op, madr;
         BYTE    cl;          BYTE    cl;
   
Line 2123  I286_P _shift_ea16_cl(void) {   // D3: s Line 2124  I286_P _shift_ea16_cl(void) {   // D3: s
                         sft_e16cl_table[(op >> 3) & 7](madr, cl);                          sft_e16cl_table[(op >> 3) & 7](madr, cl);
                         return;                          return;
                 }                  }
                 out = (WORD *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         cl = I286_CL;          cl = I286_CL;
         I286_CLOCK(cl);          I286_CLOCK(cl);
Line 2209  I286_P _jcxz(void) {      // E3: jcxz Line 2210  I286_P _jcxz(void) {      // E3: jcxz
   
 I286_P _in_al_data8(void) {                                     // E4:  in              al, DATA8  I286_P _in_al_data8(void) {                                     // E4:  in              al, DATA8
   
         WORD    port;          UINT    port;
   
         I286_CLOCK(5)          I286_CLOCK(5)
         GET_PCBYTE(port)          GET_PCBYTE(port)
           i286reg.inport = CS_BASE + I286_IP;
         I286_AL = iocore_inp8(port);          I286_AL = iocore_inp8(port);
           i286reg.inport = 0;
 }  }
   
 I286_P _in_ax_data8(void) {                                     // E5:  in              ax, DATA8  I286_P _in_ax_data8(void) {                                     // E5:  in              ax, DATA8
   
         WORD    port;          UINT    port;
   
         I286_CLOCK(5)          I286_CLOCK(5)
         GET_PCBYTE(port)          GET_PCBYTE(port)
Line 2227  I286_P _in_ax_data8(void) {     // E5: i Line 2230  I286_P _in_ax_data8(void) {     // E5: i
   
 I286_P _out_data8_al(void) {                            // E6:  out             DATA8, al  I286_P _out_data8_al(void) {                            // E6:  out             DATA8, al
   
         WORD    port;          UINT    port;
   
         I286_CLOCK(3)          I286_CLOCK(3)
         GET_PCBYTE(port);          GET_PCBYTE(port);
Line 2236  I286_P _out_data8_al(void) {    // E6: o Line 2239  I286_P _out_data8_al(void) {    // E6: o
   
 I286_P _out_data8_ax(void) {                            // E7:  out             DATA8, ax  I286_P _out_data8_ax(void) {                            // E7:  out             DATA8, ax
   
         WORD    port;          UINT    port;
   
         I286_CLOCK(3)          I286_CLOCK(3)
         GET_PCBYTE(port);          GET_PCBYTE(port);
Line 2245  I286_P _out_data8_ax(void) {    // E7: o Line 2248  I286_P _out_data8_ax(void) {    // E7: o
   
 I286_P _call_near(void) {                                       // E8:  call near  I286_P _call_near(void) {                                       // E8:  call near
   
         WORD    ad;          UINT16  ad;
   
         I286_CLOCK(7)          I286_CLOCK(7)
         GET_PCWORD(ad)          GET_PCWORD(ad)
Line 2255  I286_P _call_near(void) {     // E8: cal Line 2258  I286_P _call_near(void) {     // E8: cal
   
 I286_P _jmp_near(void) {                                        // E9:  jmp near  I286_P _jmp_near(void) {                                        // E9:  jmp near
   
         WORD    ad;          UINT16  ad;
   
         I286_CLOCK(7)          I286_CLOCK(7)
         GET_PCWORD(ad)          GET_PCWORD(ad)
Line 2264  I286_P _jmp_near(void) {     // E9: jmp  Line 2267  I286_P _jmp_near(void) {     // E9: jmp 
   
 I286_P _jmp_far(void) {                                         // EA:  jmp far  I286_P _jmp_far(void) {                                         // EA:  jmp far
   
         WORD    ad;          UINT16  ad;
   
         I286_CLOCK(11)          I286_CLOCK(11)
         GET_PCWORD(ad);          GET_PCWORD(ad);
         GET_PCWORD(I286_CS);          GET_PCWORD(I286_CS);
         CS_BASE = (DWORD)I286_CS << 4;          CS_BASE = I286_CS << 4;
         I286_IP = ad;          I286_IP = ad;
 }  }
   
 I286_P _jmp_short(void) {                                       // EB:  jmp short  I286_P _jmp_short(void) {                                       // EB:  jmp short
   
         WORD    ad;          UINT16  ad;
   
         I286_CLOCK(7)          I286_CLOCK(7)
         GET_PCBYTES(ad)          GET_PCBYTES(ad)
Line 2313  I286_P _lock(void) {      // F0: lock Line 2316  I286_P _lock(void) {      // F0: lock
   
 I286_P _repne(void) {                                           // F2:  repne  I286_P _repne(void) {                                           // F2:  repne
   
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD op;                  DWORD op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2327  I286_P _repne(void) {      // F2: repne Line 2330  I286_P _repne(void) {      // F2: repne
   
 I286_P _repe(void) {                                            // F3:  repe  I286_P _repe(void) {                                            // F3:  repe
   
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD op;                  DWORD op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2706  I286_P _repe_segprefix_es(void) { Line 2709  I286_P _repe_segprefix_es(void) {
   
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2723  I286_P _repe_segprefix_cs(void) { Line 2726  I286_P _repe_segprefix_cs(void) {
   
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2740  I286_P _repe_segprefix_ss(void) { Line 2743  I286_P _repe_segprefix_ss(void) {
   
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2757  I286_P _repe_segprefix_ds(void) { Line 2760  I286_P _repe_segprefix_ds(void) {
   
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3051  I286_P _repne_segprefix_es(void) { Line 3054  I286_P _repne_segprefix_es(void) {
   
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3068  I286_P _repne_segprefix_cs(void) { Line 3071  I286_P _repne_segprefix_cs(void) {
   
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3085  I286_P _repne_segprefix_ss(void) { Line 3088  I286_P _repne_segprefix_ss(void) {
   
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3102  I286_P _repne_segprefix_ds(void) { Line 3105  I286_P _repne_segprefix_ds(void) {
   
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         i286s.prefix++;          i286reg.prefix++;
         if (i286s.prefix < MAX_PREFIX) {          if (i286reg.prefix < MAX_PREFIX) {
                 DWORD   op;                  DWORD   op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286s.prefix = 0;                  i286reg.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3408  void INTR_CALL i286c_interrupt(BYTE vect Line 3411  void INTR_CALL i286c_interrupt(BYTE vect
         REGPUSH0(I286_IP)          REGPUSH0(I286_IP)
         I286_IP = GETWORD(mem + vect*4);                        // real mode!          I286_IP = GETWORD(mem + vect*4);                        // real mode!
         I286_CS = GETWORD(mem + vect*4 + 2);            // real mode!          I286_CS = GETWORD(mem + vect*4 + 2);            // real mode!
         CS_BASE = (DWORD)I286_CS << 4;          CS_BASE = I286_CS << 4;
         I286_CLOCK(20)          I286_CLOCK(20)
 }  }
   

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


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