Diff for /np2/i286c/i286c.mcr between versions 1.8 and 1.9

version 1.8, 2003/11/24 09:14:01 version 1.9, 2003/11/28 08:01:32
Line 13 Line 13
 #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(MEMOPTIMIZE)  
 extern  BYTE    szpflag_w[0x10000];  // ---- flags
 #define WORDSZPF(a)             szpflag_w[(a)]  
   #if defined(I286C_TEST)
   
   extern BYTE BYTESZPF(UINT r);
   extern BYTE BYTESZPCF(UINT r);
   #define BYTESZPCF2(a)   BYTESZPCF((a) & 0x1ff)
   extern BYTE WORDSZPF(UINT32 r);
   extern BYTE WORDSZPCF(UINT32 r);
   
   #elif !defined(MEMOPTIMIZE)
   
   extern  BYTE    _szpcflag8[0x200];
   extern  BYTE    _szpflag16[0x10000];
   #define BYTESZPF(a)             (_szpcflag8[(a)])
   #define BYTESZPCF(a)    (_szpcflag8[(a)])
   #define BYTESZPCF2(a)   (_szpcflag8[(a) & 0x1ff])
   #define WORDSZPF(a)             (_szpflag16[(a)])
   #define WORDSZPCF(a)    (_szpflag16[LOW16(a)] + (((a) >> 16) & 1))
   
 #else  #else
 #define WORDSZPF(a)             ((szpcflag[(a) & 0xff] & P_FLAG) | \  
                                                                         (((a))?0:Z_FLAG) | (((a) >> 8) & S_FLAG))  extern  BYTE    _szpcflag8[0x200];
   
   #define BYTESZPF(a)             (_szpcflag8[(a)])
   #define BYTESZPCF(a)    (_szpcflag8[(a)])
   #define BYTESZPCF2(a)   (_szpcflag8[(a) & 0x1ff])
   #define WORDSZPF(a)             ((_szpcflag8[(a) & 0xff] & P_FLAG) + \
                                                                           (((a))?0:Z_FLAG) + (((a) >> 8) & S_FLAG))
   #define WORDSZPCF(a)    ((_szpcflag8[(a) & 0xff] & P_FLAG) + \
                                                           ((LOW16(a))?0:Z_FLAG) + (((a) >> 8) & S_FLAG) + \
                                                           (((a) >> 16) & 1))
   
 #endif  #endif
   
   
   // ---- reg position
   
 #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)  #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)
 extern  BYTE    *_reg8_b53[256];  extern  BYTE    *_reg8_b53[256];
 extern  BYTE    *_reg8_b20[256];  extern  BYTE    *_reg8_b20[256];
Line 50  extern UINT16 *_reg16_b20[256]; Line 81  extern UINT16 *_reg16_b20[256];
 #define REG16_B20(op)           (((UINT16 *)&I286_REG) + ((op) & 7))  #define REG16_B20(op)           (((UINT16 *)&I286_REG) + ((op) & 7))
 #endif  #endif
   
   
   // ---- ea
   
 #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)  #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)
   typedef UINT32 (*CALCEA)(void);
   typedef UINT16 (*CALCLEA)(void);
   typedef UINT (*GETLEA)(UINT32 *seg);
 extern  CALCEA  _calc_ea_dst[];  extern  CALCEA  _calc_ea_dst[];
 extern  CALCLEA _calc_lea[];  extern  CALCLEA _calc_lea[];
 extern  GETLEA  _get_ea[];  extern  GETLEA  _get_ea[];
Line 60  extern GETLEA _get_ea[]; Line 97  extern GETLEA _get_ea[];
 #else  #else
 extern UINT32 calc_ea_dst(UINT op);  extern UINT32 calc_ea_dst(UINT op);
 extern UINT16 calc_lea(UINT op);  extern UINT16 calc_lea(UINT op);
 extern UINT16 calc_a(UINT op, UINT32 *seg);  extern UINT calc_a(UINT op, UINT32 *seg);
 #define CALC_EA(o)              (calc_ea_dst(o))  #define CALC_EA(o)              (calc_ea_dst(o))
 #define CALC_LEA(o)             (calc_lea(o))  #define CALC_LEA(o)             (calc_lea(o))
 #define GET_EA(o, s)    (calc_a(o, s))  #define GET_EA(o, s)    (calc_a(o, s))
 #endif  #endif
   
   
 #define SWAPBYTE(p, q) {                                                                                        \  #define SWAPBYTE(p, q) {                                                                                        \
                 BYTE tmp = (p);                                                                                         \                  BYTE tmp = (p);                                                                                         \
                 (p) = (q);                                                                                                      \                  (p) = (q);                                                                                                      \
                 (q) = tmp;                                                                                                      \                  (q) = tmp;                                                                                                      \
         }          }
   
   
 #define SWAPWORD(p, q) {                                                                                        \  #define SWAPWORD(p, q) {                                                                                        \
                 UINT16 tmp;                                                                                                     \                  UINT16 tmp;                                                                                                     \
                 tmp = (p);                                                                                                      \                  tmp = (p);                                                                                                      \
Line 166  extern UINT16 calc_a(UINT op, UINT32 *se Line 203  extern UINT16 calc_a(UINT op, UINT32 *se
                 (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 = (BYTE)(((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)                                                                                            \
Line 197  extern UINT16 calc_a(UINT op, UINT32 *se Line 230  extern UINT16 calc_a(UINT op, UINT32 *se
                 (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 = (BYTE)(((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 = (BYTE)(((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
Line 216  extern UINT16 calc_a(UINT op, UINT32 *se Line 245  extern UINT16 calc_a(UINT op, UINT32 *se
                 (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 = (BYTE)(((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 = (BYTE)(((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)                                                                                           \
Line 247  extern UINT16 calc_a(UINT op, UINT32 *se Line 272  extern UINT16 calc_a(UINT op, UINT32 *se
                 (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 = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG);                        \
                 I286_FLAGL |= szpcflag[(r) & 0x1ff];                  I286_FLAGL |= BYTESZPCF2(r);
   
 #define WORD_SUB(r, d, s)                                                                                       \  #define WORD_SUB(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 = (BYTE)(((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 BYTE_XOR(d, s)                                                                                          \
                 (d) ^= s;                                                                                                       \                  (d) ^= s;                                                                                                       \
                 I286_OV = 0;                                                                                            \                  I286_OV = 0;                                                                                            \
                 I286_FLAGL = szpcflag[(d)];                  I286_FLAGL = BYTESZPF(d);
   
   
 #define WORD_XOR(d, s)                                                                                          \  #define WORD_XOR(d, s)                                                                                          \
Line 277  extern UINT16 calc_a(UINT op, UINT32 *se Line 298  extern UINT16 calc_a(UINT op, UINT32 *se
                 (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 = (BYTE)(((d) ^ (s)) & A_FLAG);                                      \
                 I286_FLAGL |= szpcflag[(d) & 0x1ff];                  I286_FLAGL |= BYTESZPCF2(d);
   
   
 #define WORD_NEG(d, s)                                                                                          \  #define WORD_NEG(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 = (BYTE)(((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)                                                                                       \
Line 335  extern UINT16 calc_a(UINT op, UINT32 *se Line 352  extern UINT16 calc_a(UINT op, UINT32 *se
                 I286_OV = b & (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 |= (BYTE)((b ^ (s)) & A_FLAG);                                       \
                 I286_FLAGL |= szpcflag[b];                                                                      \                  I286_FLAGL |= BYTESZPF(b);                                                                      \
                 (s) = b;                                                                                                        \                  (s) = b;                                                                                                        \
         }          }
   
Line 359  extern UINT16 calc_a(UINT op, UINT32 *se Line 376  extern UINT16 calc_a(UINT op, UINT32 *se
                 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 |= (BYTE)((b ^ (s)) & A_FLAG);                                       \
                 I286_FLAGL |= szpcflag[b];                                                                      \                  I286_FLAGL |= BYTESZPF(b);                                                                      \
                 (s) = b;                                                                                                        \                  (s) = b;                                                                                                        \
         }          }
   
Line 463  extern UINT16 calc_a(UINT op, UINT32 *se Line 480  extern UINT16 calc_a(UINT op, UINT32 *se
         }          }
   
   
 #define INT_NUM(a, b)           i286_intnum((a), (UINT16)(b))  #define INT_NUM(a, b)           i286_intnum(a, b)
   

Removed from v.1.8  
changed lines
  Added in v.1.9


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