Diff for /np2/i286c/i286c_mn.c between versions 1.6 and 1.32

version 1.6, 2003/10/19 14:56:15 version 1.32, 2004/01/31 20:05:23
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "i286.h"  #include        "cpucore.h"
 #include        "i286c.h"  #include        "i286c.h"
 #include        "memory.h"  
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "bios.h"  #include        "bios.h"
Line 10 Line 9
   
 #define MAX_PREFIX              8  #define MAX_PREFIX              8
   
   
 #define NEXT_OPCODE                                                                                             \  #define NEXT_OPCODE                                                                                             \
                 if (I286_REMCLOCK < 1) {                                                                \                  if (I286_REMCLOCK < 1) {                                                                \
                         I286_BASECLOCK += (1 - I286_REMCLOCK);                          \                          I286_BASECLOCK += (1 - I286_REMCLOCK);                          \
Line 27 Line 27
   
 I286FN _reserved(void) {  I286FN _reserved(void) {
   
         I286_WORKCLOCK(23);                                                     // ToDo  
         INT_NUM(6, I286_IP - 1);          INT_NUM(6, I286_IP - 1);
 }  }
   
Line 43  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_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         dst = i286_memoryread(madr);                          dst = i286_memoryread(madr);
                         ADDBYTE(res, dst, src);                          ADDBYTE(res, dst, src);
                         i286_memorywrite(madr, (BYTE)res);                          i286_memorywrite(madr, (REG8)res);
                         return;                          return;
                 }                  }
                 out = mem + madr;                  out = mem + madr;
Line 73  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_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         dst = i286_memoryread_w(madr);                          dst = i286_memoryread_w(madr);
                         ADDWORD(res, dst, src);                          ADDWORD(res, dst, src);
                         i286_memorywrite_w(madr, (UINT16)res);                          i286_memorywrite_w(madr, (REG16)res);
                         return;                          return;
                 }                  }
                 out = (UINT16 *)(mem + madr);                  out = (UINT16 *)(mem + madr);
Line 148  I286FN _push_es(void) {       // 06: pus Line 147  I286FN _push_es(void) {       // 06: pus
   
 I286FN _pop_es(void) {                                                  // 07: pop es  I286FN _pop_es(void) {                                                  // 07: pop es
   
         REGPOP(I286_ES, 5)          UINT    tmp;
         ES_BASE = (UINT32)I286_ES << 4;  
           REGPOP(tmp, 5)
           I286_ES = tmp;
           if (!(I286_MSW & MSW_PE)) {
                   ES_BASE = tmp << 4;
                   NEXT_OPCODE
           }
           else {
                   ES_BASE = i286c_selector(tmp);
           }
 }  }
   
 I286FN _or_ea_r8(void) {                                                // 08: or EA, REG8  I286FN _or_ea_r8(void) {                                                // 08: or EA, REG8
Line 163  I286FN _or_ea_r8(void) {      // 08: or  Line 171  I286FN _or_ea_r8(void) {      // 08: or 
         PREPART_EA_REG8(op, src);          PREPART_EA_REG8(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         dst = i286_memoryread(madr);                          dst = i286_memoryread(madr);
                         ORBYTE(dst, src);                          ORBYTE(dst, src);
                         i286_memorywrite(madr, (BYTE)dst);                          i286_memorywrite(madr, (REG8)dst);
                         return;                          return;
                 }                  }
                 out = mem + madr;                  out = mem + madr;
         }          }
         ORBYTE(*out, src);          dst = *out;
           ORBYTE(dst, src);
           *out = (BYTE)dst;
 }  }
   
 I286FN _or_ea_r16(void) {                                                       // 09: or EA, REG16  I286FN _or_ea_r16(void) {                                                       // 09: or EA, REG16
Line 190  I286FN _or_ea_r16(void) {       // 09: o Line 200  I286FN _or_ea_r16(void) {       // 09: o
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 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, (UINT16)dst);                          i286_memorywrite_w(madr, (REG16)dst);
                         return;                          return;
                 }                  }
                 out = (UINT16 *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         ORWORD(*out, src);          dst = *out;
           ORWORD(dst, src);
           *out = (UINT16)dst;
 }  }
   
 I286FN _or_r8_ea(void) {                                                // 0a: or REG8, EA  I286FN _or_r8_ea(void) {                                                // 0a: or REG8, EA
Line 211  I286FN _or_r8_ea(void) {      // 0a: or  Line 223  I286FN _or_r8_ea(void) {      // 0a: or 
         BYTE    *out;          BYTE    *out;
         UINT    op;          UINT    op;
         UINT    src;          UINT    src;
           UINT    dst;
   
         PREPART_REG8_EA(op, src, out, 2, 7);          PREPART_REG8_EA(op, src, out, 2, 7);
         ORBYTE(*out, src);          dst = *out;
           ORBYTE(dst, src);
           *out = (BYTE)dst;
 }  }
   
 I286FN _or_r16_ea(void) {                                               // 0b: or REG16, EA  I286FN _or_r16_ea(void) {                                               // 0b: or REG16, EA
Line 221  I286FN _or_r16_ea(void) {      // 0b: or Line 236  I286FN _or_r16_ea(void) {      // 0b: or
         UINT16  *out;          UINT16  *out;
         UINT    op;          UINT    op;
         UINT32  src;          UINT32  src;
           UINT32  dst;
   
         PREPART_REG16_EA(op, src, out, 2, 7);          PREPART_REG16_EA(op, src, out, 2, 7);
         ORWORD(*out, src);          dst = *out;
           ORWORD(dst, src);
           *out = (UINT16)dst;
 }  }
   
 I286FN _or_al_data8(void) {                                             // 0c: or al, DATA8  I286FN _or_al_data8(void) {                                             // 0c: or al, DATA8
   
         UINT    src;          UINT    src;
           UINT    dst;
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCBYTE(src);          GET_PCBYTE(src);
         ORBYTE(I286_AL, src);          dst = I286_AL;
           ORBYTE(dst, src);
           I286_AL = (BYTE)dst;
 }  }
   
 I286FN _or_ax_data16(void) {                                    // 0d: or ax, DATA16  I286FN _or_ax_data16(void) {                                    // 0d: or ax, DATA16
   
         UINT32  src;          UINT32  src;
           UINT32  dst;
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCWORD(src);          GET_PCWORD(src);
         ORWORD(I286_AX, src);          dst = I286_AX;
           ORWORD(dst, src);
           I286_AX = (UINT16)dst;
 }  }
   
 I286FN _push_cs(void) {                                                 // 0e: push cs  I286FN _push_cs(void) {                                                 // 0e: push cs
Line 261  I286FN _adc_ea_r8(void) {      // 10: ad Line 285  I286FN _adc_ea_r8(void) {      // 10: ad
         PREPART_EA_REG8(op, src);          PREPART_EA_REG8(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         dst = i286_memoryread(madr);                          dst = i286_memoryread(madr);
                         ADCBYTE(res, dst, src);                          ADCBYTE(res, dst, src);
                         i286_memorywrite(madr, (BYTE)res);                          i286_memorywrite(madr, (REG8)res);
                         return;                          return;
                 }                  }
                 out = mem + madr;                  out = mem + madr;
Line 291  I286FN _adc_ea_r16(void) {      // 11: a Line 315  I286FN _adc_ea_r16(void) {      // 11: a
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 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, (UINT16)res);                          i286_memorywrite_w(madr, (REG16)res);
                         return;                          return;
                 }                  }
                 out = (UINT16 *)(mem + madr);                  out = (UINT16 *)(mem + madr);
Line 366  I286FN _push_ss(void) {       // 16: pus Line 390  I286FN _push_ss(void) {       // 16: pus
   
 I286FN _pop_ss(void) {                                                  // 17: pop ss  I286FN _pop_ss(void) {                                                  // 17: pop ss
   
         REGPOP(I286_SS, 5)          UINT    tmp;
         SS_BASE = I286_SS << 4;          UINT32  base;
         SS_FIX = SS_BASE;  
         NEXT_OPCODE          REGPOP(tmp, 5)
           I286_SS = tmp;
           if (!(I286_MSW & MSW_PE)) {
                   SS_BASE = tmp << 4;
                   SS_FIX = tmp << 4;
                   NEXT_OPCODE
           }
           else {
                   base = i286c_selector(tmp);
                   SS_BASE = base;
                   SS_FIX = base;
                   NEXT_OPCODE
           }
 }  }
   
 I286FN _sbb_ea_r8(void) {                                               // 18: sbb EA, REG8  I286FN _sbb_ea_r8(void) {                                               // 18: sbb EA, REG8
Line 384  I286FN _sbb_ea_r8(void) {      // 18: sb Line 420  I286FN _sbb_ea_r8(void) {      // 18: sb
         PREPART_EA_REG8(op, src);          PREPART_EA_REG8(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         dst = i286_memoryread(madr);                          dst = i286_memoryread(madr);
                         SBBBYTE(res, dst, src);                          SBBBYTE(res, dst, src);
                         i286_memorywrite(madr, (BYTE)res);                          i286_memorywrite(madr, (REG8)res);
                         return;                          return;
                 }                  }
                 out = mem + madr;                  out = mem + madr;
Line 414  I286FN _sbb_ea_r16(void) {      // 19: s Line 450  I286FN _sbb_ea_r16(void) {      // 19: s
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 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, (UINT16)res);                          i286_memorywrite_w(madr, (REG16)res);
                         return;                          return;
                 }                  }
                 out = (UINT16 *)(mem + madr);                  out = (UINT16 *)(mem + madr);
Line 489  I286FN _push_ds(void) {       // 1e: pus Line 525  I286FN _push_ds(void) {       // 1e: pus
   
 I286FN _pop_ds(void) {                                                  // 1f: pop ds  I286FN _pop_ds(void) {                                                  // 1f: pop ds
   
         REGPOP(I286_DS, 5)          UINT    tmp;
         DS_BASE = I286_DS << 4;          UINT32  base;
         DS_FIX = DS_BASE;  
           REGPOP(tmp, 5)
           I286_DS = tmp;
           if (!(I286_MSW & MSW_PE)) {
                   DS_BASE = tmp << 4;
                   DS_FIX = tmp << 4;
                   NEXT_OPCODE
           }
           else {
                   base = i286c_selector(tmp);
                   DS_BASE = base;
                   DS_FIX = base;
                   NEXT_OPCODE
           }
 }  }
   
 I286FN _and_ea_r8(void) {                                               // 20: and EA, REG8  I286FN _and_ea_r8(void) {                                               // 20: and EA, REG8
Line 505  I286FN _and_ea_r8(void) {      // 20: an Line 554  I286FN _and_ea_r8(void) {      // 20: an
         PREPART_EA_REG8(op, src);          PREPART_EA_REG8(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         dst = i286_memoryread(madr);                          dst = i286_memoryread(madr);
                         ANDBYTE(dst, src);                          ANDBYTE(dst, src);
                         i286_memorywrite(madr, (BYTE)dst);                          i286_memorywrite(madr, (REG8)dst);
                         return;                          return;
                 }                  }
                 out = mem + madr;                  out = mem + madr;
         }          }
         ANDBYTE(*out, src);          dst = *out;
           ANDBYTE(dst, src);
           *out = (BYTE)dst;
 }  }
   
 I286FN _and_ea_r16(void) {                                              // 21: and EA, REG16  I286FN _and_ea_r16(void) {                                              // 21: and EA, REG16
Line 532  I286FN _and_ea_r16(void) {      // 21: a Line 583  I286FN _and_ea_r16(void) {      // 21: a
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 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, (UINT16)dst);                          i286_memorywrite_w(madr, (REG16)dst);
                         return;                          return;
                 }                  }
                 out = (UINT16 *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         ANDWORD(*out, src);          dst = *out;
           ANDWORD(dst, src);
           *out = (UINT16)dst;
 }  }
   
 I286FN _and_r8_ea(void) {                                               // 22: and REG8, EA  I286FN _and_r8_ea(void) {                                               // 22: and REG8, EA
Line 553  I286FN _and_r8_ea(void) {      // 22: an Line 606  I286FN _and_r8_ea(void) {      // 22: an
         BYTE    *out;          BYTE    *out;
         UINT    op;          UINT    op;
         UINT    src;          UINT    src;
           UINT    dst;
   
         PREPART_REG8_EA(op, src, out, 2, 7);          PREPART_REG8_EA(op, src, out, 2, 7);
         ANDBYTE(*out, src);          dst = *out;
           ANDBYTE(dst, src);
           *out = (BYTE)dst;
 }  }
   
 I286FN _and_r16_ea(void) {                                              // 23: and REG16, EA  I286FN _and_r16_ea(void) {                                              // 23: and REG16, EA
Line 563  I286FN _and_r16_ea(void) {      // 23: a Line 619  I286FN _and_r16_ea(void) {      // 23: a
         UINT16  *out;          UINT16  *out;
         UINT    op;          UINT    op;
         UINT32  src;          UINT32  src;
           UINT32  dst;
   
         PREPART_REG16_EA(op, src, out, 2, 7);          PREPART_REG16_EA(op, src, out, 2, 7);
         ANDWORD(*out, src);          dst = *out;
           ANDWORD(dst, src);
           *out = (UINT16)dst;
 }  }
   
 I286FN _and_al_data8(void) {                                    // 24: and al, DATA8  I286FN _and_al_data8(void) {                                    // 24: and al, DATA8
   
         UINT    src;          UINT    src;
           UINT    dst;
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCBYTE(src);          GET_PCBYTE(src);
         ANDBYTE(I286_AL, src);          dst = I286_AL;
           ANDBYTE(dst, src);
           I286_AL = (BYTE)dst;
 }  }
   
 I286FN _and_ax_data16(void) {                                   // 25: and ax, DATA16  I286FN _and_ax_data16(void) {                                   // 25: and ax, DATA16
   
         UINT32  src;          UINT32  src;
           UINT32  dst;
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCWORD(src);          GET_PCWORD(src);
         ANDWORD(I286_AX, src);          dst = I286_AX;
           ANDWORD(dst, src);
           I286_AX = (UINT16)dst;
 }  }
   
 I286FN _segprefix_es(void) {                                    // 26: es:  I286FN _segprefix_es(void) {                                    // 26: es:
   
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 619  I286FN _daa(void) {        // 27: daa Line 684  I286FN _daa(void) {        // 27: daa
                 I286_AL += 0x60;                  I286_AL += 0x60;
         }          }
         I286_FLAGL &= A_FLAG | C_FLAG;          I286_FLAGL &= A_FLAG | C_FLAG;
         I286_FLAGL |= szpcflag[I286_AL];          I286_FLAGL |= BYTESZPF(I286_AL);
 }  }
   
 I286FN _sub_ea_r8(void) {                                               // 28: sub EA, REG8  I286FN _sub_ea_r8(void) {                                               // 28: sub EA, REG8
Line 634  I286FN _sub_ea_r8(void) {      // 28: su Line 699  I286FN _sub_ea_r8(void) {      // 28: su
         PREPART_EA_REG8(op, src);          PREPART_EA_REG8(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         dst = i286_memoryread(madr);                          dst = i286_memoryread(madr);
                         BYTE_SUB(res, dst, src);                          SUBBYTE(res, dst, src);
                         i286_memorywrite(madr, (BYTE)res);                          i286_memorywrite(madr, (REG8)res);
                         return;                          return;
                 }                  }
                 out = mem + madr;                  out = mem + madr;
         }          }
         dst = *out;          dst = *out;
         BYTE_SUB(res, dst, src);          SUBBYTE(res, dst, src);
         *out = (BYTE)res;          *out = (BYTE)res;
 }  }
   
Line 664  I286FN _sub_ea_r16(void) {      // 29: s Line 729  I286FN _sub_ea_r16(void) {      // 29: s
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         dst = i286_memoryread_w(madr);                          dst = i286_memoryread_w(madr);
                         WORD_SUB(res, dst, src);                          SUBWORD(res, dst, src);
                         i286_memorywrite_w(madr, (UINT16)res);                          i286_memorywrite_w(madr, (REG16)res);
                         return;                          return;
                 }                  }
                 out = (UINT16 *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         dst = *out;          dst = *out;
         WORD_SUB(res, dst, src);          SUBWORD(res, dst, src);
         *out = (UINT16)res;          *out = (UINT16)res;
 }  }
   
Line 692  I286FN _sub_r8_ea(void) {      // 2a: su Line 757  I286FN _sub_r8_ea(void) {      // 2a: su
   
         PREPART_REG8_EA(op, src, out, 2, 7);          PREPART_REG8_EA(op, src, out, 2, 7);
         dst = *out;          dst = *out;
         BYTE_SUB(res, dst, src);          SUBBYTE(res, dst, src);
         *out = (BYTE)res;          *out = (BYTE)res;
 }  }
   
Line 706  I286FN _sub_r16_ea(void) {      // 2b: s Line 771  I286FN _sub_r16_ea(void) {      // 2b: s
   
         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);          SUBWORD(res, dst, src);
         *out = (UINT16)res;          *out = (UINT16)res;
 }  }
   
Line 717  I286FN _sub_al_data8(void) {     // 2c:  Line 782  I286FN _sub_al_data8(void) {     // 2c: 
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCBYTE(src);          GET_PCBYTE(src);
         BYTE_SUB(res, I286_AL, src);          SUBBYTE(res, I286_AL, src);
         I286_AL = (BYTE)res;          I286_AL = (BYTE)res;
 }  }
   
Line 728  I286FN _sub_ax_data16(void) {     // 2d: Line 793  I286FN _sub_ax_data16(void) {     // 2d:
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCWORD(src);          GET_PCWORD(src);
         WORD_SUB(res, I286_AX, src);          SUBWORD(res, I286_AX, src);
         I286_AX = (UINT16)res;          I286_AX = (UINT16)res;
 }  }
   
Line 736  I286FN _segprefix_cs(void) {     // 2e:  Line 801  I286FN _segprefix_cs(void) {     // 2e: 
   
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 762  I286FN _das(void) {        // 2f: das Line 827  I286FN _das(void) {        // 2f: das
                 I286_AL -= 6;                  I286_AL -= 6;
         }          }
         I286_FLAGL &= A_FLAG | C_FLAG;          I286_FLAGL &= A_FLAG | C_FLAG;
         I286_FLAGL |= szpcflag[I286_AL];          I286_FLAGL |= BYTESZPF(I286_AL);
 }  }
   
 I286FN _xor_ea_r8(void) {                                               // 30: xor EA, REG8  I286FN _xor_ea_r8(void) {                                               // 30: xor EA, REG8
Line 776  I286FN _xor_ea_r8(void) {      // 30: xo Line 841  I286FN _xor_ea_r8(void) {      // 30: xo
         PREPART_EA_REG8(op, src);          PREPART_EA_REG8(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         dst = i286_memoryread(madr);                          dst = i286_memoryread(madr);
                         BYTE_XOR(dst, src);                          XORBYTE(dst, src);
                         i286_memorywrite(madr, (BYTE)dst);                          i286_memorywrite(madr, (REG8)dst);
                         return;                          return;
                 }                  }
                 out = mem + madr;                  out = mem + madr;
         }          }
         BYTE_XOR(*out, src);          dst = *out;
           XORBYTE(dst, src);
           *out = (BYTE)dst;
 }  }
   
 I286FN _xor_ea_r16(void) {                                              // 31: xor EA, REG16  I286FN _xor_ea_r16(void) {                                              // 31: xor EA, REG16
Line 803  I286FN _xor_ea_r16(void) {      // 31: x Line 870  I286FN _xor_ea_r16(void) {      // 31: x
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         dst = i286_memoryread_w(madr);                          dst = i286_memoryread_w(madr);
                         WORD_XOR(dst, src);                          XORWORD(dst, src);
                         i286_memorywrite_w(madr, (UINT16)dst);                          i286_memorywrite_w(madr, (REG16)dst);
                         return;                          return;
                 }                  }
                 out = (UINT16 *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         WORD_XOR(*out, src);          dst = *out;
           XORWORD(dst, src);
           *out = (UINT16)dst;
 }  }
   
 I286FN _xor_r8_ea(void) {                                               // 32: xor REG8, EA  I286FN _xor_r8_ea(void) {                                               // 32: xor REG8, EA
Line 824  I286FN _xor_r8_ea(void) {      // 32: xo Line 893  I286FN _xor_r8_ea(void) {      // 32: xo
         BYTE    *out;          BYTE    *out;
         UINT    op;          UINT    op;
         UINT    src;          UINT    src;
           UINT    dst;
   
         PREPART_REG8_EA(op, src, out, 2, 7);          PREPART_REG8_EA(op, src, out, 2, 7);
         BYTE_XOR(*out, src);          dst = *out;
           XORBYTE(dst, src);
           *out = (BYTE)dst;
 }  }
   
 I286FN _xor_r16_ea(void) {                                              // 33: or REG16, EA  I286FN _xor_r16_ea(void) {                                              // 33: or REG16, EA
Line 834  I286FN _xor_r16_ea(void) {      // 33: o Line 906  I286FN _xor_r16_ea(void) {      // 33: o
         UINT16  *out;          UINT16  *out;
         UINT    op;          UINT    op;
         UINT32  src;          UINT32  src;
           UINT32  dst;
   
         PREPART_REG16_EA(op, src, out, 2, 7);          PREPART_REG16_EA(op, src, out, 2, 7);
         WORD_XOR(*out, src);          dst = *out;
           XORWORD(dst, src);
           *out = (UINT16)dst;
 }  }
   
 I286FN _xor_al_data8(void) {                                    // 34: or al, DATA8  I286FN _xor_al_data8(void) {                                    // 34: or al, DATA8
   
         UINT    src;          UINT    src;
           UINT    dst;
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCBYTE(src);          GET_PCBYTE(src);
         BYTE_XOR(I286_AL, src);          dst = I286_AL;
           XORBYTE(dst, src);
           I286_AL = (BYTE)dst;
 }  }
   
 I286FN _xor_ax_data16(void) {                                   // 35: or ax, DATA16  I286FN _xor_ax_data16(void) {                                   // 35: or ax, DATA16
   
         UINT32  src;          UINT32  src;
           UINT32  dst;
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCWORD(src);          GET_PCWORD(src);
         WORD_XOR(I286_AX, src);          dst = I286_AX;
           XORWORD(dst, src);
           I286_AX = (UINT16)dst;
 }  }
   
 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;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 885  I286FN _aaa(void) {        // 37: aaa Line 966  I286FN _aaa(void) {        // 37: aaa
         else {          else {
                 I286_FLAGL &= ~(A_FLAG | C_FLAG);                  I286_FLAGL &= ~(A_FLAG | C_FLAG);
         }          }
           I286_AL &= 0x0f;
 }  }
   
 I286FN _cmp_ea_r8(void) {                                               // 38: cmp EA, REG8  I286FN _cmp_ea_r8(void) {                                               // 38: cmp EA, REG8
Line 897  I286FN _cmp_ea_r8(void) {      // 38: cm Line 979  I286FN _cmp_ea_r8(void) {      // 38: cm
         PREPART_EA_REG8(op, src);          PREPART_EA_REG8(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 dst = *(reg8_b20[op]);                  dst = *(REG8_B20(op));
                 BYTE_SUB(res, dst, src);                  SUBBYTE(res, dst, src);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 dst = i286_memoryread(c_calc_ea_dst[op]());                  dst = i286_memoryread(CALC_EA(op));
                 BYTE_SUB(res, dst, src);                  SUBBYTE(res, dst, src);
         }          }
 }  }
   
Line 917  I286FN _cmp_ea_r16(void) {      // 39: c Line 999  I286FN _cmp_ea_r16(void) {      // 39: c
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 dst = *(reg16_b20[op]);                  dst = *(REG16_B20(op));
                 WORD_SUB(res, dst, src);                  SUBWORD(res, dst, src);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 dst = i286_memoryread_w(c_calc_ea_dst[op]());                  dst = i286_memoryread_w(CALC_EA(op));
                 WORD_SUB(res, dst, src);                  SUBWORD(res, dst, src);
         }          }
 }  }
   
Line 937  I286FN _cmp_r8_ea(void) {      // 3a: cm Line 1019  I286FN _cmp_r8_ea(void) {      // 3a: cm
   
         PREPART_REG8_EA(op, src, out, 2, 6);          PREPART_REG8_EA(op, src, out, 2, 6);
         dst = *out;          dst = *out;
         BYTE_SUB(res, dst, src);          SUBBYTE(res, dst, src);
 }  }
   
 I286FN _cmp_r16_ea(void) {                                              // 3b: cmp REG16, EA  I286FN _cmp_r16_ea(void) {                                              // 3b: cmp REG16, EA
Line 950  I286FN _cmp_r16_ea(void) {      // 3b: c Line 1032  I286FN _cmp_r16_ea(void) {      // 3b: c
   
         PREPART_REG16_EA(op, src, out, 2, 6);          PREPART_REG16_EA(op, src, out, 2, 6);
         dst = *out;          dst = *out;
         WORD_SUB(res, dst, src);          SUBWORD(res, dst, src);
 }  }
   
 I286FN _cmp_al_data8(void) {                                    // 3c: cmp al, DATA8  I286FN _cmp_al_data8(void) {                                    // 3c: cmp al, DATA8
Line 960  I286FN _cmp_al_data8(void) {     // 3c:  Line 1042  I286FN _cmp_al_data8(void) {     // 3c: 
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCBYTE(src);          GET_PCBYTE(src);
         BYTE_SUB(res, I286_AL, src);          SUBBYTE(res, I286_AL, src);
 }  }
   
 I286FN _cmp_ax_data16(void) {                                   // 3d: cmp ax, DATA16  I286FN _cmp_ax_data16(void) {                                   // 3d: cmp ax, DATA16
Line 970  I286FN _cmp_ax_data16(void) {     // 3d: Line 1052  I286FN _cmp_ax_data16(void) {     // 3d:
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCWORD(src);          GET_PCWORD(src);
         WORD_SUB(res, I286_AX, src);          SUBWORD(res, I286_AX, src);
 }  }
   
 I286FN _segprefix_ds(void) {                                    // 3e: ds:  I286FN _segprefix_ds(void) {                                    // 3e: ds:
   
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 1003  I286FN _aas(void) {        // 3f: aas Line 1085  I286FN _aas(void) {        // 3f: aas
         }          }
 }  }
   
 I286FN _inc_ax(void) INCWORD(I286_AX, 2)        // 40:  inc             ax  I286FN _inc_ax(void) INCWORD2(I286_AX, 2)       // 40:  inc             ax
 I286FN _inc_cx(void) INCWORD(I286_CX, 2)        // 41:  inc             cx  I286FN _inc_cx(void) INCWORD2(I286_CX, 2)       // 41:  inc             cx
 I286FN _inc_dx(void) INCWORD(I286_DX, 2)        // 42:  inc             dx  I286FN _inc_dx(void) INCWORD2(I286_DX, 2)       // 42:  inc             dx
 I286FN _inc_bx(void) INCWORD(I286_BX, 2)        // 43:  inc             bx  I286FN _inc_bx(void) INCWORD2(I286_BX, 2)       // 43:  inc             bx
 I286FN _inc_sp(void) INCWORD(I286_SP, 2)        // 44:  inc             sp  I286FN _inc_sp(void) INCWORD2(I286_SP, 2)       // 44:  inc             sp
 I286FN _inc_bp(void) INCWORD(I286_BP, 2)        // 45:  inc             bp  I286FN _inc_bp(void) INCWORD2(I286_BP, 2)       // 45:  inc             bp
 I286FN _inc_si(void) INCWORD(I286_SI, 2)        // 46:  inc             si  I286FN _inc_si(void) INCWORD2(I286_SI, 2)       // 46:  inc             si
 I286FN _inc_di(void) INCWORD(I286_DI, 2)        // 47:  inc             di  I286FN _inc_di(void) INCWORD2(I286_DI, 2)       // 47:  inc             di
 I286FN _dec_ax(void) DECWORD(I286_AX, 2)        // 48:  dec             ax  I286FN _dec_ax(void) DECWORD2(I286_AX, 2)       // 48:  dec             ax
 I286FN _dec_cx(void) DECWORD(I286_CX, 2)        // 49:  dec             cx  I286FN _dec_cx(void) DECWORD2(I286_CX, 2)       // 49:  dec             cx
 I286FN _dec_dx(void) DECWORD(I286_DX, 2)        // 4a:  dec             dx  I286FN _dec_dx(void) DECWORD2(I286_DX, 2)       // 4a:  dec             dx
 I286FN _dec_bx(void) DECWORD(I286_BX, 2)        // 4b:  dec             bx  I286FN _dec_bx(void) DECWORD2(I286_BX, 2)       // 4b:  dec             bx
 I286FN _dec_sp(void) DECWORD(I286_SP, 2)        // 4c:  dec             sp  I286FN _dec_sp(void) DECWORD2(I286_SP, 2)       // 4c:  dec             sp
 I286FN _dec_bp(void) DECWORD(I286_BP, 2)        // 4d:  dec             bp  I286FN _dec_bp(void) DECWORD2(I286_BP, 2)       // 4d:  dec             bp
 I286FN _dec_si(void) DECWORD(I286_SI, 2)        // 4e:  dec             si  I286FN _dec_si(void) DECWORD2(I286_SI, 2)       // 4e:  dec             si
 I286FN _dec_di(void) DECWORD(I286_DI, 2)        // 4f:  dec             di  I286FN _dec_di(void) DECWORD2(I286_DI, 2)       // 4f:  dec             di
   
 I286FN _push_ax(void) REGPUSH(I286_AX, 3)       // 50:  push    ax  I286FN _push_ax(void) REGPUSH(I286_AX, 3)       // 50:  push    ax
 I286FN _push_cx(void) REGPUSH(I286_CX, 3)       // 51:  push    cx  I286FN _push_cx(void) REGPUSH(I286_CX, 3)       // 51:  push    cx
Line 1032  I286FN _pop_ax(void) REGPOP(I286_AX, 5)  Line 1114  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
   
   #if (defined(ARM) || defined(X11)) && defined(BYTESEX_LITTLE)
   
 I286FN _pusha(void) {                                           // 60:  pusha  I286FN _pusha(void) {                                           // 60:  pusha
   
         UINT16  tmp;          REG16   tmp;
           UINT32  addr;
   
           I286_WORKCLOCK(17);
           tmp = I286_SP;
           addr = tmp + SS_BASE;
           if ((tmp < 16) || (INHIBIT_WORDP(addr))) {
                   REGPUSH0(I286_AX)
                   REGPUSH0(I286_CX)
                   REGPUSH0(I286_DX)
                   REGPUSH0(I286_BX)
               REGPUSH0(tmp)
                   REGPUSH0(I286_BP)
                   REGPUSH0(I286_SI)
                   REGPUSH0(I286_DI)
           }
           else {
                   *(UINT16 *)(mem + addr - 2) = I286_AX;
                   *(UINT16 *)(mem + addr - 4) = I286_CX;
                   *(UINT16 *)(mem + addr - 6) = I286_DX;
                   *(UINT16 *)(mem + addr - 8) = I286_BX;
                   *(UINT16 *)(mem + addr - 10) = tmp;
                   *(UINT16 *)(mem + addr - 12) = I286_BP;
                   *(UINT16 *)(mem + addr - 14) = I286_SI;
                   *(UINT16 *)(mem + addr - 16) = I286_DI;
                   I286_SP -= 16;
           }
   }
   
   I286FN _popa(void) {                                            // 61:  popa
   
           UINT    tmp;
           UINT32  addr;
   
           I286_WORKCLOCK(19);
           tmp = I286_SP + 16;
           addr = tmp + SS_BASE;
           if ((tmp >= 0x10000) || (INHIBIT_WORDP(addr))) {
                   REGPOP0(I286_DI);
                   REGPOP0(I286_SI);
                   REGPOP0(I286_BP);
                   I286_SP += 2;
                   REGPOP0(I286_BX);
                   REGPOP0(I286_DX);
                   REGPOP0(I286_CX);
                   REGPOP0(I286_AX);
           }
           else {
                   I286_DI = *(UINT16 *)(mem + addr - 16);
                   I286_SI = *(UINT16 *)(mem + addr - 14);
                   I286_BP = *(UINT16 *)(mem + addr - 12);
                   I286_BX = *(UINT16 *)(mem + addr - 8);
                   I286_DX = *(UINT16 *)(mem + addr - 6);
                   I286_CX = *(UINT16 *)(mem + addr - 4);
                   I286_AX = *(UINT16 *)(mem + addr - 2);
                   I286_SP = tmp;
           }
   }
   
   #else
   
   I286FN _pusha(void) {                                           // 60:  pusha
   
           REG16   tmp;
   
         tmp = I286_SP;          tmp = I286_SP;
         REGPUSH0(I286_AX)          REGPUSH0(I286_AX)
Line 1066  I286FN _popa(void) {      // 61: popa Line 1213  I286FN _popa(void) {      // 61: popa
         I286_WORKCLOCK(19);          I286_WORKCLOCK(19);
 }  }
   
   #endif
   
 I286FN _bound(void) {                                           // 62:  bound  I286FN _bound(void) {                                           // 62:  bound
   
         UINT    vect = 0;          UINT    vect = 0;
         UINT    op;          UINT    op;
         UINT32  madr;          UINT32  madr;
         UINT16  reg;          REG16   reg;
   
         I286_WORKCLOCK(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 = CALC_EA(op);
                 if (reg >= i286_memoryread_w(madr)) {                  if (reg >= i286_memoryread_w(madr)) {
                         madr += 2;                                                                      // ToDo                          madr += 2;                                                                              // ToDo
                         if (reg <= i286_memoryread_w(madr)) {                          if (reg <= i286_memoryread_w(madr)) {
                                 return;                                  return;
                         }                          }
Line 1150  I286FN _imul_reg_ea_data8(void) {  // 6B Line 1299  I286FN _imul_reg_ea_data8(void) {  // 6B
   
 I286FN _insb(void) {                                            // 6C:  insb  I286FN _insb(void) {                                            // 6C:  insb
   
         BYTE    dat;          REG8    dat;
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         dat = iocore_inp8(I286_DX);          dat = iocore_inp8(I286_DX);
Line 1160  I286FN _insb(void) {      // 6C: insb Line 1309  I286FN _insb(void) {      // 6C: insb
   
 I286FN _insw(void) {                                            // 6D:  insw  I286FN _insw(void) {                                            // 6D:  insw
   
         UINT16  dat;          REG16   dat;
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         dat = iocore_inp16(I286_DX);          dat = iocore_inp16(I286_DX);
Line 1170  I286FN _insw(void) {      // 6D: insw Line 1319  I286FN _insw(void) {      // 6D: insw
   
 I286FN _outsb(void) {                                           // 6E:  outsb  I286FN _outsb(void) {                                           // 6E:  outsb
   
         BYTE    dat;          REG8    dat;
   
         I286_WORKCLOCK(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, (BYTE)dat);
 }  }
   
 I286FN _outsw(void) {                                           // 6F:  outsw  I286FN _outsw(void) {                                           // 6F:  outsw
   
         UINT16  dat;          REG16   dat;
   
         I286_WORKCLOCK(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, (UINT16)dat);
 }  }
   
 I286FN _jo_short(void) {                                        // 70:  jo short  I286FN _jo_short(void) {                                        // 70:  jo short
Line 1282  I286FN _calc_ea8_i8(void) {     // 80: o Line 1431  I286FN _calc_ea8_i8(void) {     // 80: o
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         c_op8xext8_table[(op >> 3) & 7](madr);                          c_op8xext8_table[(op >> 3) & 7](madr);
                         return;                          return;
Line 1306  I286FN _calc_ea16_i16(void) {    // 81:  Line 1455  I286FN _calc_ea16_i16(void) {    // 81: 
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         GET_PCWORD(src);                          GET_PCWORD(src);
                         c_op8xext16_table[(op >> 3) & 7](madr, src);                          c_op8xext16_table[(op >> 3) & 7](madr, src);
Line 1332  I286FN _calc_ea16_i8(void) {    // 83: o Line 1481  I286FN _calc_ea16_i8(void) {    // 83: o
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         GET_PCBYTES(src);                          GET_PCBYTES(src);
                         c_op8xext16_table[(op >> 3) & 7](madr, src);                          c_op8xext16_table[(op >> 3) & 7](madr, src);
Line 1359  I286FN _test_ea_r8(void) {     // 84: te Line 1508  I286FN _test_ea_r8(void) {     // 84: te
         PREPART_EA_REG8(op, src);          PREPART_EA_REG8(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(6);                  I286_WORKCLOCK(6);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         tmp = i286_memoryread(madr);                          tmp = i286_memoryread(madr);
                         ANDBYTE(tmp, src);                          ANDBYTE(tmp, src);
Line 1386  I286FN _test_ea_r16(void) {     // 85: t Line 1535  I286FN _test_ea_r16(void) {     // 85: t
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         tmp = i286_memoryread_w(madr);                          tmp = i286_memoryread_w(madr);
                         ANDWORD(tmp, src);                          ANDWORD(tmp, src);
Line 1412  I286FN _xchg_ea_r8(void) {     // 86: xc Line 1561  I286FN _xchg_ea_r8(void) {     // 86: xc
         PREPART_EA_REG8P(op, src);          PREPART_EA_REG8P(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(5);                  I286_WORKCLOCK(5);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         BYTE tmp = i286_memoryread(madr);                          BYTE tmp = i286_memoryread(madr);
                         i286_memorywrite(madr, *src);                          i286_memorywrite(madr, *src);
Line 1438  I286FN _xchg_ea_r16(void) {     // 87: x Line 1587  I286FN _xchg_ea_r16(void) {     // 87: x
         PREPART_EA_REG16P(op, src);          PREPART_EA_REG16P(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(5);                  I286_WORKCLOCK(5);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         UINT16 tmp = i286_memoryread_w(madr);                          UINT16 tmp = i286_memoryread_w(madr);
                         i286_memorywrite_w(madr, *src);                          i286_memorywrite_w(madr, *src);
Line 1463  I286FN _mov_ea_r8(void) {     // 88: mov Line 1612  I286FN _mov_ea_r8(void) {     // 88: mov
         PREPART_EA_REG8(op, src)          PREPART_EA_REG8(op, src)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 *(reg8_b20[op]) = src;                  *(REG8_B20(op)) = src;
         }          }
         else {          else {
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 i286_memorywrite(madr, src);                  i286_memorywrite(madr, src);
         }          }
 }  }
Line 1480  I286FN _mov_ea_r16(void) {     // 89: mo Line 1629  I286FN _mov_ea_r16(void) {     // 89: mo
         PREPART_EA_REG16(op, src);          PREPART_EA_REG16(op, src);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 *(reg16_b20[op]) = src;                  *(REG16_B20(op)) = src;
         }          }
         else {          else {
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 i286_memorywrite_w(c_calc_ea_dst[op](), src);                  i286_memorywrite_w(CALC_EA(op), src);
         }          }
 }  }
   
Line 1517  I286FN _mov_ea_seg(void) {     // 8C: mo Line 1666  I286FN _mov_ea_seg(void) {     // 8C: mo
         tmp = *SEGMENTPTR((op >> 3) & 3);          tmp = *SEGMENTPTR((op >> 3) & 3);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 *(reg16_b20[op]) = tmp;                  *(REG16_B20(op)) = tmp;
         }          }
         else {          else {
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 i286_memorywrite_w(c_calc_ea_dst[op](), tmp);                  i286_memorywrite_w(CALC_EA(op), tmp);
         }          }
 }  }
   
Line 1532  I286FN _lea_r16_ea(void) {     // 8D: le Line 1681  I286FN _lea_r16_ea(void) {     // 8D: le
         I286_WORKCLOCK(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)) = CALC_LEA(op);
         }          }
         else {          else {
                 INT_NUM(6, I286_SP - 2);                  INT_NUM(6, I286_SP - 2);
Line 1543  I286FN _mov_seg_ea(void) {     // 8E: mo Line 1692  I286FN _mov_seg_ea(void) {     // 8E: mo
   
         UINT    op;          UINT    op;
         UINT    tmp;          UINT    tmp;
           UINT32  base;
         UINT16  ipbak;          UINT16  ipbak;
   
         ipbak = I286_IP;          ipbak = I286_IP;
         GET_PCBYTE(op);          GET_PCBYTE(op);
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 tmp = *(reg16_b20[op]);                  tmp = *(REG16_B20(op));
         }          }
         else {          else {
                 I286_WORKCLOCK(5);                  I286_WORKCLOCK(5);
                 tmp = i286_memoryread_w(c_calc_ea_dst[op]());                  tmp = i286_memoryread_w(CALC_EA(op));
         }          }
           if (!(I286_MSW & MSW_PE)) {
                   base = tmp << 4;
           }
           else {
                   base = i286c_selector(tmp);
           }
   
         switch(op & 0x18) {          switch(op & 0x18) {
                 case 0x00:                      // es                  case 0x00:                      // es
                         I286_ES = (UINT16)tmp;                          I286_ES = (UINT16)tmp;
                         ES_BASE = tmp << 4;                          ES_BASE = base;
                         break;                          break;
   
                 case 0x10:                      // ss                  case 0x10:                      // ss
                         I286_SS = (UINT16)tmp;                          I286_SS = (UINT16)tmp;
                         SS_BASE = tmp << 4;                          SS_BASE = base;
                         SS_FIX = SS_BASE;                          SS_FIX = base;
                         NEXT_OPCODE                          NEXT_OPCODE
                         break;                          break;
   
                 case 0x18:                      // ds                  case 0x18:                      // ds
                         I286_DS = (UINT16)tmp;                          I286_DS = (UINT16)tmp;
                         DS_BASE = tmp << 4;                          DS_BASE = base;
                         DS_FIX = DS_BASE;                          DS_FIX = base;
                         break;                          break;
   
                 default:                        // cs                  default:                        // cs
Line 1590  I286FN _pop_ea(void) {      // 8F: pop   Line 1747  I286FN _pop_ea(void) {      // 8F: pop  
   
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op < 0xc0) {          if (op < 0xc0) {
                 i286_memorywrite_w(c_calc_ea_dst[op](), tmp);                  i286_memorywrite_w(CALC_EA(op), tmp);
         }          }
         else {          else {
                 *(reg16_b20[op]) = tmp;                  *(REG16_B20(op)) = tmp;
         }          }
 }  }
   
Line 1602  I286FN _nop(void) {       // 90: nop / b Line 1759  I286FN _nop(void) {       // 90: nop / b
 #if 1                                                                           // call BIOS  #if 1                                                                           // call BIOS
         UINT32  adrs;          UINT32  adrs;
   
         adrs = ((I286_IP - 1) & 0xffff) + CS_BASE;          adrs = LOW16(I286_IP - 1) + CS_BASE;
         if ((adrs >= 0xf8000) && (adrs < 0x100000)) {          if ((adrs >= 0xf8000) && (adrs < 0x100000)) {
                 biosfunc(adrs);                  biosfunc(adrs);
                 ES_BASE = I286_ES << 4;                  ES_BASE = I286_ES << 4;
Line 1695  I286FN _pushf(void) {      // 9C: pushf Line 1852  I286FN _pushf(void) {      // 9C: pushf
   
 I286FN _popf(void) {                                            // 9D:  popf  I286FN _popf(void) {                                            // 9D:  popf
   
           UINT    flag;
   
           REGPOP0(flag)
           I286_OV = flag & O_FLAG;
           I286_FLAG = flag & (0xfff ^ O_FLAG);
           I286_TRAP = ((flag & 0x300) == 0x300);
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         REGPOP0(I286_FLAG)  #if defined(INTR_FAST)
         I286_OV = I286_FLAG & O_FLAG;          if ((I286_TRAP) || ((flag & I_FLAG) && (PICEXISTINTR))) {
         I286_FLAG &= (0xfff ^ O_FLAG);                  I286IRQCHECKTERM
         I286_TRAP = ((I286_FLAG & 0x300) == 0x300);          }
   #else
         I286IRQCHECKTERM          I286IRQCHECKTERM
   #endif
 }  }
   
 I286FN _sahf(void) {                                            // 9E:  sahf  I286FN _sahf(void) {                                            // 9E:  sahf
Line 1782  I286FN _cmpsb(void) {      // A6: cmpsb Line 1947  I286FN _cmpsb(void) {      // A6: cmpsb
         I286_WORKCLOCK(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)          SUBBYTE(res, dst, src)
         I286_SI += STRING_DIR;          I286_SI += STRING_DIR;
         I286_DI += STRING_DIR;          I286_DI += STRING_DIR;
 }  }
Line 1796  I286FN _cmpsw(void) {      // A7: cmpsw Line 1961  I286FN _cmpsw(void) {      // A7: cmpsw
         I286_WORKCLOCK(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)          SUBWORD(res, dst, src)
         I286_SI += STRING_DIRx2;          I286_SI += STRING_DIRx2;
         I286_DI += STRING_DIRx2;          I286_DI += STRING_DIRx2;
 }  }
Line 1860  I286FN _scasb(void) {      // AE: scasb Line 2025  I286FN _scasb(void) {      // AE: scasb
         I286_WORKCLOCK(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)          SUBBYTE(res, dst, src)
         I286_DI += STRING_DIR;          I286_DI += STRING_DIR;
 }  }
   
Line 1873  I286FN _scasw(void) {      // AF: scasw Line 2038  I286FN _scasw(void) {      // AF: scasw
         I286_WORKCLOCK(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)          SUBWORD(res, dst, src)
         I286_DI += STRING_DIRx2;          I286_DI += STRING_DIRx2;
 }  }
   
Line 1904  I286FN _shift_ea8_data8(void) {    // C0 Line 2069  I286FN _shift_ea8_data8(void) {    // C0
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(5);                  I286_WORKCLOCK(5);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(8);                  I286_WORKCLOCK(8);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         GET_PCBYTE(cl)                          GET_PCBYTE(cl)
                         I286_WORKCLOCK(cl);                          I286_WORKCLOCK(cl);
Line 1932  I286FN _shift_ea16_data8(void) {   // C1 Line 2097  I286FN _shift_ea16_data8(void) {   // C1
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(5);                  I286_WORKCLOCK(5);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(8);                  I286_WORKCLOCK(8);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         GET_PCBYTE(cl);                          GET_PCBYTE(cl);
                         I286_WORKCLOCK(cl);                          I286_WORKCLOCK(cl);
Line 1969  I286FN _ret_near(void) {     // C3: ret  Line 2134  I286FN _ret_near(void) {     // C3: ret 
 I286FN _les_r16_ea(void) {                                      // C4:  les             REG16, EA  I286FN _les_r16_ea(void) {                                      // C4:  les             REG16, EA
   
         UINT    op;          UINT    op;
         UINT16  ad;          UINT32  seg;
           UINT    ad;
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op < 0xc0) {          if (op < 0xc0) {
                 ad = c_get_ea[op]();                  ad = GET_EA(op, &seg);
                 *(reg16_b53[op]) = i286_memoryread_w(ad + EA_FIX);                  *(REG16_B53(op)) = i286_memoryread_w(seg + ad);
                 ad += 2;                  I286_ES = i286_memoryread_w(seg + LOW16(ad + 2));
                 I286_ES = i286_memoryread_w(ad + EA_FIX);  
                 ES_BASE = I286_ES << 4;                  ES_BASE = I286_ES << 4;
         }          }
         else {          else {
Line 1988  I286FN _les_r16_ea(void) {     // C4: le Line 2153  I286FN _les_r16_ea(void) {     // C4: le
 I286FN _lds_r16_ea(void) {                                      // C5:  lds             REG16, EA  I286FN _lds_r16_ea(void) {                                      // C5:  lds             REG16, EA
   
         UINT    op;          UINT    op;
         UINT16  ad;          UINT32  seg;
           UINT    ad;
   
         I286_WORKCLOCK(3);          I286_WORKCLOCK(3);
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op < 0xc0) {          if (op < 0xc0) {
                 ad = c_get_ea[op]();                  ad = GET_EA(op, &seg);
                 *(reg16_b53[op]) = i286_memoryread_w(ad + EA_FIX);                  *(REG16_B53(op)) = i286_memoryread_w(seg + ad);
                 ad += 2;                  I286_DS = i286_memoryread_w(seg + LOW16(ad + 2));
                 I286_DS = i286_memoryread_w(ad + EA_FIX);  
                 DS_BASE = I286_DS << 4;                  DS_BASE = I286_DS << 4;
                 DS_FIX = DS_BASE;                  DS_FIX = DS_BASE;
         }          }
Line 2012  I286FN _mov_ea8_data8(void) {    // C6:  Line 2177  I286FN _mov_ea8_data8(void) {    // C6: 
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 GET_PCBYTE(*(reg8_b53[op]))                  GET_PCBYTE(*(REG8_B53(op)))
         }          }
         else {          else {                          // 03/11/23
                 UINT ad;                  UINT32 ad;
                 BYTE val;                  BYTE val;
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 ad = c_get_ea[op]();                  ad = CALC_EA(op);
                 GET_PCBYTE(val)                  GET_PCBYTE(val)
                 i286_memorywrite(ad + EA_FIX, val);                  i286_memorywrite(ad, val);
         }          }
 }  }
   
Line 2031  I286FN _mov_ea16_data16(void) {    // C7 Line 2196  I286FN _mov_ea16_data16(void) {    // C7
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 GET_PCWORD(*(reg16_b53[op]))                  GET_PCWORD(*(REG16_B53(op)))
         }          }
         else {          else {                          // 03/11/23
                 UINT    ad;                  UINT32  ad;
                 UINT16  val;                  UINT16  val;
                 I286_WORKCLOCK(3);                  I286_WORKCLOCK(3);
                 ad = c_get_ea[op]();                  ad = CALC_EA(op);
                 GET_PCWORD(val)                  GET_PCWORD(val)
                 i286_memorywrite_w(ad + EA_FIX, val);                  i286_memorywrite_w(ad, val);
         }          }
 }  }
   
Line 2073  I286FN _enter(void) {      // C8: enter  Line 2238  I286FN _enter(void) {      // C8: enter 
                         bp = I286_BP;                          bp = I286_BP;
                         I286_BP = I286_SP;                          I286_BP = I286_SP;
                         while(level--) {                          while(level--) {
   #if 1                                                                                   // なにやってんだヲレ
                                   REG16 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 2257  I286FN _enter(void) {      // C8: enter 
         }          }
 }  }
   
 I286FN leave(void) {                                            // C9:  leave  I286FN fleave(void) {                                           // C9:  leave
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         I286_SP = I286_BP;          I286_SP = I286_BP;
Line 2113  I286FN _ret_far(void) {      // CB: ret  Line 2286  I286FN _ret_far(void) {      // CB: ret 
   
 I286FN _int_03(void) {                                          // CC:  int             3  I286FN _int_03(void) {                                          // CC:  int             3
   
         I286_WORKCLOCK(23);          I286_WORKCLOCK(3);
         INT_NUM(3, I286_IP);          INT_NUM(3, I286_IP);
 }  }
   
Line 2121  I286FN _int_data8(void) {     // CD: int Line 2294  I286FN _int_data8(void) {     // CD: int
   
         UINT    vect;          UINT    vect;
   
         I286_WORKCLOCK(23);          I286_WORKCLOCK(3);
         GET_PCBYTE(vect)          GET_PCBYTE(vect)
         INT_NUM(vect, I286_IP);          INT_NUM(vect, I286_IP);
 }  }
Line 2130  I286FN _into(void) {      // CE: into Line 2303  I286FN _into(void) {      // CE: into
   
         I286_WORKCLOCK(4);          I286_WORKCLOCK(4);
         if (I286_OV) {          if (I286_OV) {
                 I286_WORKCLOCK(24 - 4);  
                 INT_NUM(4, I286_IP);                  INT_NUM(4, I286_IP);
         }          }
 }  }
   
 I286FN _iret(void) {                                            // CF:  iret  I286FN _iret(void) {                                            // CF:  iret
   
         extirq_pop();          UINT    flag;
         I286_WORKCLOCK(31);  
         REGPOP0(I286_IP)          REGPOP0(I286_IP)
         REGPOP0(I286_CS)          REGPOP0(I286_CS)
         REGPOP0(I286_FLAG)          REGPOP0(flag)
         I286_OV = I286_FLAG & O_FLAG;          I286_OV = flag & O_FLAG;
         I286_FLAG &= 0x7ff;          I286_FLAG = flag & (0xfff ^ O_FLAG);
         I286_TRAP = ((I286_FLAG & 0x300) == 0x300);          I286_TRAP = ((flag & 0x300) == 0x300);
         CS_BASE = I286_CS << 4;          CS_BASE = I286_CS << 4;
           I286_WORKCLOCK(31);
   #if defined(INTR_FAST)
           if ((I286_TRAP) || ((flag & I_FLAG) && (PICEXISTINTR))) {
                   I286IRQCHECKTERM
           }
   #else
         I286IRQCHECKTERM          I286IRQCHECKTERM
   #endif
 }  }
   
 I286FN _shift_ea8_1(void) {                             // D0:  shift EA8, 1  I286FN _shift_ea8_1(void) {                             // D0:  shift EA8, 1
Line 2158  I286FN _shift_ea8_1(void) {    // D0: sh Line 2337  I286FN _shift_ea8_1(void) {    // D0: sh
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         sft_e8_table[(op >> 3) & 7](madr);                          sft_e8_table[(op >> 3) & 7](madr);
                         return;                          return;
Line 2181  I286FN _shift_ea16_1(void) {   // D1: sh Line 2360  I286FN _shift_ea16_1(void) {   // D1: sh
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         sft_e16_table[(op >> 3) & 7](madr);                          sft_e16_table[(op >> 3) & 7](madr);
                         return;                          return;
Line 2200  I286FN _shift_ea8_cl(void) {   // D2: sh Line 2379  I286FN _shift_ea8_cl(void) {   // D2: sh
         BYTE    *out;          BYTE    *out;
         UINT    op;          UINT    op;
         UINT32  madr;          UINT32  madr;
         BYTE    cl;          REG8    cl;
   
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(5);                  I286_WORKCLOCK(5);
                 out = reg8_b20[op];                  out = REG8_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(8);                  I286_WORKCLOCK(8);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         cl = I286_CL;                          cl = I286_CL;
                         I286_WORKCLOCK(cl);                          I286_WORKCLOCK(cl);
Line 2228  I286FN _shift_ea16_cl(void) {   // D3: s Line 2407  I286FN _shift_ea16_cl(void) {   // D3: s
         UINT16  *out;          UINT16  *out;
         UINT    op;          UINT    op;
         UINT32  madr;          UINT32  madr;
         BYTE    cl;          REG8    cl;
   
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(5);                  I286_WORKCLOCK(5);
                 out = reg16_b20[op];                  out = REG16_B20(op);
         }          }
         else {          else {
                 I286_WORKCLOCK(8);                  I286_WORKCLOCK(8);
                 madr = c_calc_ea_dst[op]();                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         cl = I286_CL;                          cl = I286_CL;
                         I286_WORKCLOCK(cl);                          I286_WORKCLOCK(cl);
Line 2280  I286FN _aad(void) {       // D5: AAD Line 2459  I286FN _aad(void) {       // D5: AAD
         I286_AL += (BYTE)(I286_AH * mul);          I286_AL += (BYTE)(I286_AH * mul);
         I286_AH = 0;          I286_AH = 0;
         I286_FLAGL &= ~(S_FLAG | Z_FLAG | P_FLAG);          I286_FLAGL &= ~(S_FLAG | Z_FLAG | P_FLAG);
         I286_FLAGL |= szpcflag[I286_AL];          I286_FLAGL |= BYTESZPF(I286_AL);
 }  }
   
 I286FN _setalc(void) {                                          // D6:  setalc (80286)  I286FN _setalc(void) {                                          // D6:  setalc (80286)
Line 2291  I286FN _setalc(void) {      // D6: setal Line 2470  I286FN _setalc(void) {      // D6: setal
 I286FN _xlat(void) {                                            // D7:  xlat  I286FN _xlat(void) {                                            // D7:  xlat
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         I286_AL = i286_memoryread(((I286_AL + I286_BX) & 0xffff) + DS_FIX);          I286_AL = i286_memoryread(LOW16(I286_AL + I286_BX) + DS_FIX);
 }  }
   
 I286FN _esc(void) {                                                     // D8:  esc  I286FN _esc(void) {                                                     // D8:  esc
Line 2301  I286FN _esc(void) {       // D8: esc Line 2480  I286FN _esc(void) {       // D8: esc
         I286_WORKCLOCK(2);          I286_WORKCLOCK(2);
         GET_PCBYTE(op)          GET_PCBYTE(op)
         if (op < 0xc0) {          if (op < 0xc0) {
                 c_calc_lea[op]();                  CALC_LEA(op);
         }          }
 }  }
   
Line 2334  I286FN _in_al_data8(void) {     // E4: i Line 2513  I286FN _in_al_data8(void) {     // E4: i
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         GET_PCBYTE(port)          GET_PCBYTE(port)
         i286reg.inport = CS_BASE + I286_IP;          I286_INPADRS = CS_BASE + I286_IP;
         I286_AL = iocore_inp8(port);          I286_AL = iocore_inp8(port);
         i286reg.inport = 0;          I286_INPADRS = 0;
 }  }
   
 I286FN _in_ax_data8(void) {                                     // E5:  in              ax, DATA8  I286FN _in_ax_data8(void) {                                     // E5:  in              ax, DATA8
Line 2436  I286FN _lock(void) {      // F0: lock Line 2615  I286FN _lock(void) {      // F0: lock
   
 I286FN _repne(void) {                                           // F2:  repne  I286FN _repne(void) {                                           // F2:  repne
   
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2450  I286FN _repne(void) {      // F2: repne Line 2629  I286FN _repne(void) {      // F2: repne
   
 I286FN _repe(void) {                                            // F3:  repe  I286FN _repe(void) {                                            // F3:  repe
   
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2512  I286FN _cli(void) {       // FA: cli Line 2691  I286FN _cli(void) {       // FA: cli
 I286FN _sti(void) {                                                     // FB:  sti  I286FN _sti(void) {                                                     // FB:  sti
   
         I286_WORKCLOCK(2);          I286_WORKCLOCK(2);
   #if defined(INTR_FAST)
           if (I286_FLAG & I_FLAG) {
                   NEXT_OPCODE;
                   return;                                                                 // 更新の意味なし
           }
   #endif
         I286_FLAG |= I_FLAG;          I286_FLAG |= I_FLAG;
         I286_TRAP = (I286_FLAG & T_FLAG) >> 8;          // ToDo          I286_TRAP = (I286_FLAG & T_FLAG) >> 8;
   #if defined(INTR_FAST)
           if ((I286_TRAP) || (PICEXISTINTR)) {
                   REMAIN_ADJUST(1)
           }
           else {
                   NEXT_OPCODE;
           }
   #else
         REMAIN_ADJUST(1)          REMAIN_ADJUST(1)
   #endif
 }  }
   
 I286FN _cld(void) {                                                     // FC:  cld  I286FN _cld(void) {                                                     // FC:  cld
Line 2762  const I286OP i286op[] = { Line 2955  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 2830  I286FN _repe_segprefix_es(void) { Line 3023  I286FN _repe_segprefix_es(void) {
   
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2847  I286FN _repe_segprefix_cs(void) { Line 3040  I286FN _repe_segprefix_cs(void) {
   
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2864  I286FN _repe_segprefix_ss(void) { Line 3057  I286FN _repe_segprefix_ss(void) {
   
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2881  I286FN _repe_segprefix_ds(void) { Line 3074  I286FN _repe_segprefix_ds(void) {
   
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3075  const I286OP i286op_repe[] = { Line 3268  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 3301  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 3175  I286FN _repne_segprefix_es(void) { Line 3368  I286FN _repne_segprefix_es(void) {
   
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3192  I286FN _repne_segprefix_cs(void) { Line 3385  I286FN _repne_segprefix_cs(void) {
   
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3209  I286FN _repne_segprefix_ss(void) { Line 3402  I286FN _repne_segprefix_ss(void) {
   
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3226  I286FN _repne_segprefix_ds(void) { Line 3419  I286FN _repne_segprefix_ds(void) {
   
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         i286reg.prefix++;          I286_PREFIX++;
         if (i286reg.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3420  const I286OP i286op_repne[] = { Line 3613  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 3646  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.6  
changed lines
  Added in v.1.32


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