Diff for /np2/i286c/i286c.mcr between versions 1.6 and 1.18

version 1.6, 2003/10/26 06:44:47 version 1.18, 2003/12/19 23:33:49
Line 1 Line 1
   
   #if defined(X11) && (defined(i386) || defined(__i386__))
   #define INHIBIT_WORDP(m)        ((m) >= (I286_MEMWRITEMAX - 1))
   #elif (defined(ARM) || defined(X11)) && defined(BYTESEX_LITTLE)
   #define INHIBIT_WORDP(m)        (((m) & 1) || ((m) >= I286_MEMWRITEMAX))
   #else
 #define INHIBIT_WORDP(m)        (1)  #define INHIBIT_WORDP(m)        (1)
   #endif
   
 #define __CBW(src)              (UINT16)((char)(src))  #define __CBW(src)              (UINT16)((SINT8)(src))
 #define __CBD(src)              ((char)(src))  #define __CBD(src)              ((SINT8)(src))
 #define WORD2LONG(src)  ((short)(src))  #define WORD2LONG(src)  ((SINT16)(src))
   
   
 #define SEGMENTPTR(s)   ((UINT16 *)(&I286_SEGREG) + (s))  #define SEGMENTPTR(s)   (((UINT16 *)&I286_SEGREG) + (s))
   
 #define REAL_FLAGREG    (UINT16)((I286_FLAG & 0x7ff) | (I286_OV?O_FLAG:0))  #define REAL_FLAGREG    (UINT16)((I286_FLAG & 0x7ff) | (I286_OV?O_FLAG:0))
   
 #define STRING_DIR              ((I286_FLAG & D_FLAG)?-1:1)  #define STRING_DIR              ((I286_FLAG & D_FLAG)?-1:1)
 #define STRING_DIRx2    ((I286_FLAG & D_FLAG)?-2:2)  #define STRING_DIRx2    ((I286_FLAG & D_FLAG)?-2:2)
   
 #if defined(CPUW2TEST)  
 #define WORDSZPF(a)             ((szpcflag[(a) & 0xff] & P_FLAG) | \  // ---- flags
                                                                         (((a))?0:Z_FLAG) | (((a) >> 8) & S_FLAG))  
   #if defined(I286C_TEST)
   
   extern UINT8 BYTESZPF(UINT r);
   extern UINT8 BYTESZPCF(UINT r);
   #define BYTESZPCF2(a)   BYTESZPCF((a) & 0x1ff)
   extern UINT8 WORDSZPF(UINT32 r);
   extern UINT8 WORDSZPCF(UINT32 r);
   
   #elif !defined(MEMOPTIMIZE)
   
   extern  UINT8   _szpflag16[0x10000];
   #define BYTESZPF(a)             (iflags[(a)])
   #define BYTESZPCF(a)    (iflags[(a)])
   #define BYTESZPCF2(a)   (iflags[(a) & 0x1ff])
   #define WORDSZPF(a)             (_szpflag16[(a)])
   #define WORDSZPCF(a)    (_szpflag16[LOW16(a)] + (((a) >> 16) & 1))
   
   #else
   
   #define BYTESZPF(a)             (iflags[(a)])
   #define BYTESZPCF(a)    (iflags[(a)])
   #define BYTESZPCF2(a)   (iflags[(a) & 0x1ff])
   #define WORDSZPF(a)             ((iflags[(a) & 0xff] & P_FLAG) + \
                                                                           (((a))?0:Z_FLAG) + (((a) >> 8) & S_FLAG))
   #define WORDSZPCF(a)    ((iflags[(a) & 0xff] & P_FLAG) + \
                                                           ((LOW16(a))?0:Z_FLAG) + (((a) >> 8) & S_FLAG) + \
                                                           (((a) >> 16) & 1))
   
   #endif
   
   
   // ---- reg position
   
   #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)
   extern  UINT8   *_reg8_b53[256];
   extern  UINT8   *_reg8_b20[256];
   #define REG8_B53(op)            _reg8_b53[(op)]
   #define REG8_B20(op)            _reg8_b20[(op)]
 #else  #else
 #define WORDSZPF(a)             szpflag_w[(a)]  #if defined(BYTESEX_LITTLE)
   #define REG8_B53(op)            \
                                   (((UINT8 *)&I286_REG) + (((op) >> 2) & 6) + (((op) >> 5) & 1))
   #define REG8_B20(op)            \
                                   (((UINT8 *)&I286_REG) + (((op) & 3) * 2) + (((op) >> 2) & 1))
   #else
   #define REG8_B53(op)            (((UINT8 *)&I286_REG) + (((op) >> 2) & 6) +     \
                                                                                                           ((((op) >> 5) & 1) ^ 1))
   #define REG8_B20(op)            (((UINT8 *)&I286_REG) + (((op) & 3) * 2) +      \
                                                                                                           ((((op) >> 2) & 1) ^ 1))
   #endif
 #endif  #endif
   
   #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)
   extern  UINT16  *_reg16_b53[256];
   extern  UINT16  *_reg16_b20[256];
   #define REG16_B53(op)           _reg16_b53[(op)]
   #define REG16_B20(op)           _reg16_b20[(op)]
   #else
   #define REG16_B53(op)           (((UINT16 *)&I286_REG) + (((op) >> 3) & 7))
   #define REG16_B20(op)           (((UINT16 *)&I286_REG) + ((op) & 7))
   #endif
   
   
   // ---- ea
   
   #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)
   typedef UINT32 (*CALCEA)(void);
   typedef UINT16 (*CALCLEA)(void);
   typedef UINT (*GETLEA)(UINT32 *seg);
   extern  CALCEA  _calc_ea_dst[];
   extern  CALCLEA _calc_lea[];
   extern  GETLEA  _get_ea[];
   #define CALC_EA(o)              (_calc_ea_dst[(o)]())
   #define CALC_LEA(o)             (_calc_lea[(o)]())
   #define GET_EA(o, s)    (_get_ea[(o)](s))
   #else
   extern UINT32 calc_ea_dst(UINT op);
   extern UINT16 calc_lea(UINT op);
   extern UINT calc_a(UINT op, UINT32 *seg);
   #define CALC_EA(o)              (calc_ea_dst(o))
   #define CALC_LEA(o)             (calc_lea(o))
   #define GET_EA(o, s)    (calc_a(o, s))
   #endif
   
   
 #define SWAPBYTE(p, q) {                                                                                        \  #define SWAPBYTE(p, q) {                                                                                        \
                 BYTE tmp = (p);                                                                                         \                  REG8 tmp;                                                                                                       \
                   tmp = (p);                                                                                                      \
                 (p) = (q);                                                                                                      \                  (p) = (q);                                                                                                      \
                 (q) = tmp;                                                                                                      \                  (q) = tmp;                                                                                                      \
         }          }
   
   
 #define SWAPWORD(p, q) {                                                                                        \  #define SWAPWORD(p, q) {                                                                                        \
                 UINT16 tmp;                                                                                                     \                  REG16 tmp;                                                                                                      \
                 tmp = (p);                                                                                                      \                  tmp = (p);                                                                                                      \
                 (p) = (q);                                                                                                      \                  (p) = (q);                                                                                                      \
                 (q) = tmp;                                                                                                      \                  (q) = tmp;                                                                                                      \
Line 72 Line 159
   
 #define PREPART_EA_REG8(b, d_s)                                                                         \  #define PREPART_EA_REG8(b, d_s)                                                                         \
                 GET_PCBYTE((b))                                                                                         \                  GET_PCBYTE((b))                                                                                         \
                 (d_s) = *(reg8_b53[(b)]);                  (d_s) = *(REG8_B53(b));
   
   
 #define PREPART_EA_REG8P(b, d_s)                                                                        \  #define PREPART_EA_REG8P(b, d_s)                                                                        \
                 GET_PCBYTE((b))                                                                                         \                  GET_PCBYTE((b))                                                                                         \
                 (d_s) = reg8_b53[(b)];                  (d_s) = REG8_B53(b);
   
   
 #define PREPART_EA_REG16(b, d_s)                                                                        \  #define PREPART_EA_REG16(b, d_s)                                                                        \
                 GET_PCBYTE((b))                                                                                         \                  GET_PCBYTE((b))                                                                                         \
                 (d_s) = *(reg16_b53[(b)]);                  (d_s) = *(REG16_B53(b));
   
   
 #define PREPART_EA_REG16P(b, d_s)                                                                       \  #define PREPART_EA_REG16P(b, d_s)                                                                       \
                 GET_PCBYTE((b))                                                                                         \                  GET_PCBYTE((b))                                                                                         \
                 (d_s) = reg16_b53[(b)];                  (d_s) = REG16_B53(b);
   
   
 #define PREPART_REG8_EA(b, s, d, regclk, memclk)                                        \  #define PREPART_REG8_EA(b, s, d, regclk, memclk)                                        \
                 GET_PCBYTE((b))                                                                                         \                  GET_PCBYTE((b))                                                                                         \
                 if ((b) >= 0xc0) {                                                                                      \                  if ((b) >= 0xc0) {                                                                                      \
                         I286_WORKCLOCK(regclk);                                                                 \                          I286_WORKCLOCK(regclk);                                                                 \
                         (s) = *(reg8_b20[b]);                                                                   \                          (s) = *(REG8_B20(b));                                                                   \
                 }                                                                                                                       \                  }                                                                                                                       \
                 else {                                                                                                          \                  else {                                                                                                          \
                         I286_WORKCLOCK(memclk);                                                                 \                          I286_WORKCLOCK(memclk);                                                                 \
                         (s) = i286_memoryread(c_calc_ea_dst[(b)]());                    \                          (s) = i286_memoryread(CALC_EA(b));                                              \
                 }                                                                                                                       \                  }                                                                                                                       \
                 (d) = reg8_b53[(b)];                  (d) = REG8_B53(b);
   
   
 #define PREPART_REG16_EA(b, s, d, regclk, memclk)                                       \  #define PREPART_REG16_EA(b, s, d, regclk, memclk)                                       \
                 GET_PCBYTE(b)                                                                                           \                  GET_PCBYTE(b)                                                                                           \
                 if (b >= 0xc0) {                                                                                        \                  if (b >= 0xc0) {                                                                                        \
                         I286_WORKCLOCK(regclk);                                                                 \                          I286_WORKCLOCK(regclk);                                                                 \
                         s = *(reg16_b20[b]);                                                                    \                          s = *(REG16_B20(b));                                                                    \
                 }                                                                                                                       \                  }                                                                                                                       \
                 else {                                                                                                          \                  else {                                                                                                          \
                         I286_WORKCLOCK(memclk);                                                                 \                          I286_WORKCLOCK(memclk);                                                                 \
                         s = i286_memoryread_w(c_calc_ea_dst[b]());                              \                          s = i286_memoryread_w(CALC_EA(b));                                              \
                 }                                                                                                                       \                  }                                                                                                                       \
                 d = reg16_b53[b];                  d = REG16_B53(b);
   
   
 #define ADDBYTE(r, d, s)                                                                                        \  #define ADDBYTE(r, d, s)                                                                                        \
                 (r) = (s) + (d);                                                                                        \                  (r) = (s) + (d);                                                                                        \
                 I286_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x80;                                     \                  I286_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x80;                                     \
                 I286_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \                  I286_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \
                 I286_FLAGL |= szpcflag[(r)];                  I286_FLAGL |= BYTESZPCF(r);
   
   
 #define ADDWORD(r, d, s)                                                                                        \  #define ADDWORD(r, d, s)                                                                                        \
                 (r) = (s) + (d);                                                                                        \                  (r) = (s) + (d);                                                                                        \
                 I286_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x8000;                           \                  I286_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x8000;                           \
                 I286_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \                  I286_FLAGL = (UINT8)(((r) ^ (d) ^ (s)) & A_FLAG);                       \
                 if ((r) & 0xffff0000) {                                                                         \                  I286_FLAGL |= WORDSZPCF(r);
                         (r) &= 0x0000ffff;                                                                              \  
                         I286_FLAGL |= C_FLAG;                                                                   \  
                 }                                                                                                                       \  
                 I286_FLAGL |= WORDSZPF(r);  
   
   
 // flag no check  // flag no check
 #define ORBYTE(d, s)                                                                                            \  #define ORBYTE(d, s)                                                                                            \
                 (d) |= (s);                                                                                                     \                  (d) |= (s);                                                                                                     \
                 I286_OV = 0;                                                                                            \                  I286_OV = 0;                                                                                            \
                 I286_FLAGL = szpcflag[(d)];                  I286_FLAGL = BYTESZPF(d);
   
   
 #define ORWORD(d, s)                                                                                            \  #define ORWORD(d, s)                                                                                            \
                 (d) |= (s);                                                                                                     \                  (d) |= (s);                                                                                                     \
Line 150 Line 231
 #define ADCBYTE(r, d, s)                                                                                        \  #define ADCBYTE(r, d, s)                                                                                        \
                 (r) = (I286_FLAGL & 1) + (s) + (d);                                                     \                  (r) = (I286_FLAGL & 1) + (s) + (d);                                                     \
                 I286_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x80;                                     \                  I286_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x80;                                     \
                 I286_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \                  I286_FLAGL = (UINT8)(((r) ^ (d) ^ (s)) & A_FLAG);                       \
                 I286_FLAGL |= szpcflag[(r)];                  I286_FLAGL |= BYTESZPCF(r);
   
   
 #define ADCWORD(r, d, s)                                                                                        \  #define ADCWORD(r, d, s)                                                                                        \
                 (r) = (I286_FLAGL & 1) + (s) + (d);                                                     \                  (r) = (I286_FLAGL & 1) + (s) + (d);                                                     \
                 I286_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x8000;                           \                  I286_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x8000;                           \
                 I286_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \                  I286_FLAGL = (UINT8)(((r) ^ (d) ^ (s)) & A_FLAG);                       \
                 if ((r) & 0xffff0000) {                                                                         \                  I286_FLAGL |= WORDSZPCF(r);
                         (r) &= 0x0000ffff;                                                                              \  
                         I286_FLAGL |= C_FLAG;                                                                   \  
                 }                                                                                                                       \  
                 I286_FLAGL |= WORDSZPF(r);  
   
   
 // flag no check  // flag no check
 #define SBBBYTE(r, d, s)                                                                                        \  #define SBBBYTE(r, d, s)                                                                                        \
                 (r) = (d) - (s) - (I286_FLAGL & 1);                                                     \                  (r) = (d) - (s) - (I286_FLAGL & 1);                                                     \
                 I286_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x80;                                     \                  I286_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x80;                                     \
                 I286_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \                  I286_FLAGL = (UINT8)(((r) ^ (d) ^ (s)) & A_FLAG);                       \
                 I286_FLAGL |= szpcflag[(r) & 0x1ff];                  I286_FLAGL |= BYTESZPCF2(r);
   
 #define SBBWORD(r, d, s)                                                                                        \  #define SBBWORD(r, d, s)                                                                                        \
                 (r) = (d) - (s) - (I286_FLAGL & 1);                                                     \                  (r) = (d) - (s) - (I286_FLAGL & 1);                                                     \
                 I286_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x8000;                           \                  I286_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x8000;                           \
                 I286_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \                  I286_FLAGL = (UINT8)(((r) ^ (d) ^ (s)) & A_FLAG);                       \
                 if ((r) & 0xffff0000) {                                                                         \                  I286_FLAGL |= WORDSZPCF(r);
                         (r) &= 0x0000ffff;                                                                              \  
                         I286_FLAGL |= C_FLAG;                                                                   \  
                 }                                                                                                                       \  
                 I286_FLAGL |= WORDSZPF(r);  
   
   
 // flag no check  // flag no check
 #define ANDBYTE(d, s)                                                                                           \  #define ANDBYTE(d, s)                                                                                           \
                 (d) &= (s);                                                                                                     \                  (d) &= (s);                                                                                                     \
                 I286_OV = 0;                                                                                            \                  I286_OV = 0;                                                                                            \
                 I286_FLAGL = szpcflag[(d)];                  I286_FLAGL = BYTESZPF(d);
   
   
 #define ANDWORD(d, s)                                                                                           \  #define ANDWORD(d, s)                                                                                           \
                 (d) &= s;                                                                                                       \                  (d) &= (s);                                                                                                     \
                 I286_OV = 0;                                                                                            \                  I286_OV = 0;                                                                                            \
                 I286_FLAGL = WORDSZPF(d);                  I286_FLAGL = WORDSZPF(d);
   
   
 // flag no check  // flag no check
 #define BYTE_SUB(r, d, s)                                                                                       \  #define SUBBYTE(r, d, s)                                                                                        \
                 (r) = (d) - (s);                                                                                        \                  (r) = (d) - (s);                                                                                        \
                 I286_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x80;                                     \                  I286_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x80;                                     \
                 I286_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \                  I286_FLAGL = (UINT8)(((r) ^ (d) ^ (s)) & A_FLAG);                       \
                 I286_FLAGL |= szpcflag[(r) & 0x1ff];                  I286_FLAGL |= BYTESZPCF2(r);
   
 #define WORD_SUB(r, d, s)                                                                                       \  #define SUBWORD(r, d, s)                                                                                        \
                 (r) = (d) - (s);                                                                                        \                  (r) = (d) - (s);                                                                                        \
                 I286_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x8000;                           \                  I286_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x8000;                           \
                 I286_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \                  I286_FLAGL = ((r) ^ (d) ^ (s)) & A_FLAG;                                        \
                 if ((r) & 0xffff0000) {                                                                         \                  I286_FLAGL |= WORDSZPCF(r);
                         (r) &= 0x0000ffff;                                                                              \  
                         I286_FLAGL |= C_FLAG;                                                                   \  
                 }                                                                                                                       \  
                 I286_FLAGL |= WORDSZPF(r);  
   
   
 // flag no check  // flag no check
 #define BYTE_XOR(d, s)                                                                                          \  #define XORBYTE(d, s)                                                                                           \
                 (d) ^= s;                                                                                                       \                  (d) ^= s;                                                                                                       \
                 I286_OV = 0;                                                                                            \                  I286_OV = 0;                                                                                            \
                 I286_FLAGL = szpcflag[(d)];                  I286_FLAGL = BYTESZPF(d);
   
   #define XORWORD(d, s)                                                                                           \
 #define WORD_XOR(d, s)                                                                                          \  
                 (d) ^= (s);                                                                                                     \                  (d) ^= (s);                                                                                                     \
                 I286_OV = 0;                                                                                            \                  I286_OV = 0;                                                                                            \
                 I286_FLAGL = WORDSZPF(d);                  I286_FLAGL = WORDSZPF(d);
   
   
 #define BYTE_NEG(d, s)                                                                                          \  #define NEGBYTE(d, s)                                                                                           \
                 (d) = 0 - (s);                                                                                          \                  (d) = 0 - (s);                                                                                          \
                 I286_OV = ((d) & (s)) & 0x80;                                                           \                  I286_OV = ((d) & (s)) & 0x80;                                                           \
                 I286_FLAGL = (BYTE)(((d) ^ (s)) & A_FLAG);                                      \                  I286_FLAGL = (UINT8)(((d) ^ (s)) & A_FLAG);                                     \
                 I286_FLAGL |= szpcflag[(d) & 0x1ff];                  I286_FLAGL |= BYTESZPCF2(d);
   
   
 #define WORD_NEG(d, s)                                                                                          \  #define NEGWORD(d, s)                                                                                           \
                 (d) = 0 - (s);                                                                                          \                  (d) = 0 - (s);                                                                                          \
                 I286_OV = ((d) & (s)) & 0x8000;                                                         \                  I286_OV = ((d) & (s)) & 0x8000;                                                         \
                 I286_FLAGL = (BYTE)(((d) ^ (s)) & A_FLAG);                                      \                  I286_FLAGL = (UINT8)(((d) ^ (s)) & A_FLAG);                                     \
                 if ((d) & 0xffff0000) {                                                                         \                  I286_FLAGL |= WORDSZPCF(d);
                         (d) &= 0x0000ffff;                                                                              \  
                         I286_FLAGL |= C_FLAG;                                                                   \  
                 }                                                                                                                       \  
                 I286_FLAGL |= WORDSZPF(d);  
   
   
 #define BYTE_MUL(r, d, s)                                                                                       \  #define BYTE_MUL(r, d, s)                                                                                       \
                 I286_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG);                      \                  I286_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG);                      \
                 (r) = (BYTE)(d) * (BYTE)(s);                                                            \                  (r) = (UINT8)(d) * (UINT8)(s);                                                          \
                 I286_OV = (r) >> 8;                                                                                     \                  I286_OV = (r) >> 8;                                                                                     \
                 if (I286_OV) {                                                                                          \                  if (I286_OV) {                                                                                          \
                         I286_FLAGL |= C_FLAG;                                                                   \                          I286_FLAGL |= C_FLAG;                                                                   \
                 }                  }
   
   
 #define WORD_MUL(r, d, s)                                                                                       \  #define WORD_MUL(r, d, s)                                                                                       \
                 I286_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG);                      \                  I286_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG);                      \
                 (r) = (UINT16)(d) * (UINT16)(s);                                                        \                  (r) = (UINT16)(d) * (UINT16)(s);                                                        \
Line 265 Line 325
   
 #define BYTE_IMUL(r, d, s)                                                                                      \  #define BYTE_IMUL(r, d, s)                                                                                      \
                 I286_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG);                      \                  I286_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG);                      \
                 (r) = (char)(d) * (char)(s);                                                            \                  (r) = (SINT8)(d) * (SINT8)(s);                                                          \
                 I286_OV = ((r) + 0x80) & 0xffffff00;                                            \                  I286_OV = ((r) + 0x80) & 0xffffff00;                                            \
                 if (I286_OV) {                                                                                          \                  if (I286_OV) {                                                                                          \
                         I286_FLAGL |= C_FLAG;                                                                   \                          I286_FLAGL |= C_FLAG;                                                                   \
                 }                  }
   
   
 #define WORD_IMUL(r, d, s)                                                                                      \  #define WORD_IMUL(r, d, s)                                                                                      \
                 I286_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG);                      \                  I286_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG);                      \
                 (r) = (short)(d) * (short)(s);                                                          \                  (r) = (SINT16)(d) * (SINT16)(s);                                                        \
                 I286_OV = ((r) + 0x8000) & 0xffff0000;                                          \                  I286_OV = ((r) + 0x8000) & 0xffff0000;                                          \
                 if (I286_OV) {                                                                                          \                  if (I286_OV) {                                                                                          \
                         I286_FLAGL |= C_FLAG;                                                                   \                          I286_FLAGL |= C_FLAG;                                                                   \
Line 282 Line 341
   
   
 // flag no check  // flag no check
 #define BYTE_INC(s) {                                                                                           \  #define INCBYTE(s) {                                                                                            \
                 BYTE    b;                                                                                                      \                  UINT b = (s);                                                                                           \
                 b = (s);                                                                                                        \                  (s)++;                                                                                                          \
                 b++;                                                                                                            \                  I286_OV = (s) & (b ^ (s)) & 0x80;                                                       \
                 I286_OV = b & (b ^ (s)) & 0x80;                                                         \  
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)((b ^ (s)) & A_FLAG);                                       \                  I286_FLAGL |= (UINT8)((b ^ (s)) & A_FLAG);                                      \
                 I286_FLAGL |= szpcflag[b];                                                                      \                  I286_FLAGL |= BYTESZPF((UINT8)(s));                                                     \
                 (s) = b;                                                                                                        \  
         }          }
   
   #define INCWORD(s) {                                                                                            \
 #define WORD_INC(s) {                                                                                           \                  UINT32 b = (s);                                                                                         \
                 UINT16 b;                                                                                                       \                  (s)++;                                                                                                          \
                 b = (s);                                                                                                        \                  I286_OV = (s) & (b ^ (s)) & 0x8000;                                                     \
                 b++;                                                                                                            \  
                 I286_OV = b & (b ^ (s)) & 0x8000;                                                       \  
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)((b ^ (s)) & A_FLAG);                                       \                  I286_FLAGL |= (UINT8)((b ^ (s)) & A_FLAG);                                      \
                 I286_FLAGL |= WORDSZPF(b);                                                                      \                  I286_FLAGL |= WORDSZPF((UINT16)(s));                                            \
                 (s) = b;                                                                                                        \  
         }          }
   
   
 // flag no check  // flag no check
 #define BYTE_DEC(s) {                                                                                           \  #define DECBYTE(s) {                                                                                            \
                 BYTE b = (s);                                                                                           \                  UINT b = (s);                                                                                           \
                 b--;                                                                                                            \                  b--;                                                                                                            \
                 I286_OV = (s) & (b ^ (s)) & 0x80;                                                       \                  I286_OV = (s) & (b ^ (s)) & 0x80;                                                       \
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)((b ^ (s)) & A_FLAG);                                       \                  I286_FLAGL |= (UINT8)((b ^ (s)) & A_FLAG);                                      \
                 I286_FLAGL |= szpcflag[b];                                                                      \                  I286_FLAGL |= BYTESZPF((UINT8)b);                                                       \
                 (s) = b;                                                                                                        \                  (s) = b;                                                                                                        \
         }          }
   
   #define DECWORD(s) {                                                                                            \
 #define WORD_DEC(s) {                                                                                           \                  UINT32 b = (s);                                                                                         \
                 UINT16 b = (s);                                                                                         \  
                 b--;                                                                                                            \                  b--;                                                                                                            \
                 I286_OV = (s) & (b ^ (s)) & 0x8000;                                                     \                  I286_OV = (s) & (b ^ (s)) & 0x8000;                                                     \
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)((b ^ (s)) & A_FLAG);                                       \                  I286_FLAGL |= (UINT8)((b ^ (s)) & A_FLAG);                                      \
                 I286_FLAGL |= WORDSZPF(b);                                                                      \                  I286_FLAGL |= WORDSZPF((UINT16)b);                                                      \
                 (s) = b;                                                                                                        \                  (s) = b;                                                                                                        \
         }          }
   
   
 // flag no check  // flag no check
 #define INCWORD(w, clock) {                                                                                     \  #define INCWORD2(r, clock) {                                                                            \
                 UINT16 bak;                                                                                                     \                  REG16 s = (r);                                                                                          \
                 bak = (w);                                                                                                      \                  REG16 d = (r);                                                                                          \
                 (w)++;                                                                                                          \                  d++;                                                                                                            \
                 I286_OV = (w) & ((w) ^ bak) & 0x8000;                                           \                  (r) = (UINT16)d;                                                                                        \
                   I286_OV = d & (d ^ s) & 0x8000;                                                         \
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)(((w) ^ bak) & A_FLAG);                                     \                  I286_FLAGL |= (UINT8)((d ^ s) & A_FLAG);                                        \
                 I286_FLAGL |= WORDSZPF(w);                                                                      \                  I286_FLAGL |= WORDSZPF((UINT16)d);                                                      \
                 I286_WORKCLOCK(clock);                                                                          \                  I286_WORKCLOCK(clock);                                                                          \
         }          }
   
   #define DECWORD2(r, clock) {                                                                            \
 #define DECWORD(w, clock) {                                                                                     \                  REG16 s = (r);                                                                                          \
                 UINT16 bak;                                                                                                     \                  REG16 d = (r);                                                                                          \
                 bak = (w);                                                                                                      \                  d--;                                                                                                            \
                 w--;                                                                                                            \                  (r) = (UINT16)d;                                                                                        \
                 I286_OV = bak & (w ^ bak) & 0x8000;                                                     \                  I286_OV = s & (d ^ s) & 0x8000;                                                         \
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)((w ^ bak) & A_FLAG);                                       \                  I286_FLAGL |= (UINT8)((d ^ s) & A_FLAG);                                        \
                 I286_FLAGL |= WORDSZPF(w);                                                                      \                  I286_FLAGL |= WORDSZPF((UINT16)d);                                                      \
                 I286_WORKCLOCK(clock);                                                                          \                  I286_WORKCLOCK(clock);                                                                          \
         }          }
   
   
 #define REGPUSH(reg, clock)     {                                                                               \  // ---- stack
                 I286_WORKCLOCK(clock);                                                                          \  
                 I286_SP -= 2;                                                                                           \  
                 i286_memorywrite_w(I286_SP + SS_BASE, reg);                                     \  
         }  
   
   
 #define REGPUSH0(reg)                                                                                           \  #define REGPUSH0(reg)                                                                                           \
                 I286_SP -= 2;                                                                                           \                  I286_SP -= 2;                                                                                           \
                 i286_memorywrite_w(I286_SP + SS_BASE, reg);                  i286_memorywrite_w(I286_SP + SS_BASE, reg);
   
   #define REGPOP0(reg)                                                                                            \
                   reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \
                   I286_SP += 2;
   
 #define SP_PUSH(reg, clock)     {                                                                               \  #if (defined(ARM) || defined(X11)) && defined(BYTESEX_LITTLE)
                 UINT16 sp = reg;                                                                                        \  
   #define REGPUSH(reg, clock)     {                                                                               \
                   UINT32 addr;                                                                                            \
                   I286_WORKCLOCK(clock);                                                                          \
                 I286_SP -= 2;                                                                                           \                  I286_SP -= 2;                                                                                           \
                 i286_memorywrite_w(I286_SP + SS_BASE, sp);                                      \                  addr = I286_SP + SS_BASE;                                                                       \
                   if (INHIBIT_WORDP(addr)) {                                                                      \
                           i286_memorywrite_w(addr, reg);                                                  \
                   }                                                                                                                       \
                   else {                                                                                                          \
                           *(UINT16 *)(mem + addr) = (reg);                                                \
                   }                                                                                                                       \
           }
   
   #define REGPOP(reg, clock) {                                                                            \
                   UINT32 addr;                                                                                            \
                 I286_WORKCLOCK(clock);                                                                          \                  I286_WORKCLOCK(clock);                                                                          \
                   addr = I286_SP + SS_BASE;                                                                       \
                   if (INHIBIT_WORDP(addr)) {                                                                      \
                           (reg) = i286_memoryread_w(addr);                                                \
                   }                                                                                                                       \
                   else {                                                                                                          \
                           (reg) = *(UINT16 *)(mem + addr);                                                \
                   }                                                                                                                       \
                   I286_SP += 2;                                                                                           \
         }          }
   
   #else
   
   #define REGPUSH(reg, clock)     {                                                                               \
                   I286_WORKCLOCK(clock);                                                                          \
                   I286_SP -= 2;                                                                                           \
                   i286_memorywrite_w(I286_SP + SS_BASE, reg);                                     \
           }
   
 #define REGPOP(reg, clock) {                                                                            \  #define REGPOP(reg, clock) {                                                                            \
                 I286_WORKCLOCK(clock);                                                                          \                  I286_WORKCLOCK(clock);                                                                          \
Line 380 Line 460
                 I286_SP += 2;                                                                                           \                  I286_SP += 2;                                                                                           \
         }          }
   
 #define SP_POP(reg, clock) {                                                                            \  #endif
   
   #define SP_PUSH(reg, clock)     {                                                                               \
                   REG16 sp = (reg);                                                                                       \
                   I286_SP -= 2;                                                                                           \
                   i286_memorywrite_w(I286_SP + SS_BASE, sp);                                      \
                 I286_WORKCLOCK(clock);                                                                          \                  I286_WORKCLOCK(clock);                                                                          \
                 reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \  
         }          }
   
   #define SP_POP(reg, clock) {                                                                            \
 #define REGPOP0(reg)                                                                                            \                  I286_WORKCLOCK(clock);                                                                          \
                 reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \                  reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \
                 I286_SP += 2;          }
   
   
   
 #define JMPSHORT(clock) {                                                                                       \  #define JMPSHORT(clock) {                                                                                       \
Line 417 Line 500
         }          }
   
   
 #define INT_NUM(a, b)           i286_intnum((a), (UINT16)(b))  #define INT_NUM(a, b)           i286c_intnum((a), (REG16)(b))
   

Removed from v.1.6  
changed lines
  Added in v.1.18


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