Diff for /np2/i286c/i286c.mcr between versions 1.14 and 1.17

version 1.14, 2003/11/30 12:41:29 version 1.17, 2003/12/08 00:55:31
Line 1 Line 1
   
 #if defined(ARM) && defined(BYTESEX_LITTLE)  #if defined(X11) && (defined(i386) || defined(__i386__))
 #define INHIBIT_WORDP(m)        (((m) & 1) || ((m) >= 0xa0000))  #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  #else
 #define INHIBIT_WORDP(m)        (1)  #define INHIBIT_WORDP(m)        (1)
 #endif  #endif
Line 22 Line 24
   
 #if defined(I286C_TEST)  #if defined(I286C_TEST)
   
 extern BYTE BYTESZPF(UINT r);  extern UINT8 BYTESZPF(UINT r);
 extern BYTE BYTESZPCF(UINT r);  extern UINT8 BYTESZPCF(UINT r);
 #define BYTESZPCF2(a)   BYTESZPCF((a) & 0x1ff)  #define BYTESZPCF2(a)   BYTESZPCF((a) & 0x1ff)
 extern BYTE WORDSZPF(UINT32 r);  extern UINT8 WORDSZPF(UINT32 r);
 extern BYTE WORDSZPCF(UINT32 r);  extern UINT8 WORDSZPCF(UINT32 r);
   
 #elif !defined(MEMOPTIMIZE)  #elif !defined(MEMOPTIMIZE)
   
 extern  BYTE    _szpcflag8[0x200];  extern  UINT8   _szpcflag8[0x200];
 extern  BYTE    _szpflag16[0x10000];  extern  UINT8   _szpflag16[0x10000];
 #define BYTESZPF(a)             (_szpcflag8[(a)])  #define BYTESZPF(a)             (_szpcflag8[(a)])
 #define BYTESZPCF(a)    (_szpcflag8[(a)])  #define BYTESZPCF(a)    (_szpcflag8[(a)])
 #define BYTESZPCF2(a)   (_szpcflag8[(a) & 0x1ff])  #define BYTESZPCF2(a)   (_szpcflag8[(a) & 0x1ff])
Line 40  extern BYTE _szpflag16[0x10000]; Line 42  extern BYTE _szpflag16[0x10000];
   
 #else  #else
   
 extern  BYTE    _szpcflag8[0x200];  extern  UINT8   _szpcflag8[0x200];
   
 #define BYTESZPF(a)             (_szpcflag8[(a)])  #define BYTESZPF(a)             (_szpcflag8[(a)])
 #define BYTESZPCF(a)    (_szpcflag8[(a)])  #define BYTESZPCF(a)    (_szpcflag8[(a)])
Line 57  extern BYTE _szpcflag8[0x200]; Line 59  extern BYTE _szpcflag8[0x200];
 // ---- reg position  // ---- reg position
   
 #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)  #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)
 extern  BYTE    *_reg8_b53[256];  extern  UINT8   *_reg8_b53[256];
 extern  BYTE    *_reg8_b20[256];  extern  UINT8   *_reg8_b20[256];
 #define REG8_B53(op)            _reg8_b53[(op)]  #define REG8_B53(op)            _reg8_b53[(op)]
 #define REG8_B20(op)            _reg8_b20[(op)]  #define REG8_B20(op)            _reg8_b20[(op)]
 #else  #else
 #if defined(BYTESEX_LITTLE)  #if defined(BYTESEX_LITTLE)
 #define REG8_B53(op)            \  #define REG8_B53(op)            \
                                 (((BYTE *)&I286_REG) + (((op) >> 2) & 6) + (((op) >> 5) & 1))                                  (((UINT8 *)&I286_REG) + (((op) >> 2) & 6) + (((op) >> 5) & 1))
 #define REG8_B20(op)            \  #define REG8_B20(op)            \
                                 (((BYTE *)&I286_REG) + (((op) & 3) * 2) + (((op) >> 2) & 1))                                  (((UINT8 *)&I286_REG) + (((op) & 3) * 2) + (((op) >> 2) & 1))
 #else  #else
 #define REG8_B53(op)            (((BYTE *)&I286_REG) + (((op) >> 2) & 6) +      \  #define REG8_B53(op)            (((UINT8 *)&I286_REG) + (((op) >> 2) & 6) +     \
                                                                                                         ((((op) >> 5) & 1) ^ 1))                                                                                                          ((((op) >> 5) & 1) ^ 1))
 #define REG8_B20(op)            (((BYTE *)&I286_REG) + (((op) & 3) * 2) +       \  #define REG8_B20(op)            (((UINT8 *)&I286_REG) + (((op) & 3) * 2) +      \
                                                                                                         ((((op) >> 2) & 1) ^ 1))                                                                                                          ((((op) >> 2) & 1) ^ 1))
 #endif  #endif
 #endif  #endif
Line 109  extern UINT calc_a(UINT op, UINT32 *seg) Line 111  extern UINT calc_a(UINT op, UINT32 *seg)
   
   
 #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 212  extern UINT calc_a(UINT op, UINT32 *seg) Line 215  extern UINT calc_a(UINT op, UINT32 *seg)
 #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);                       \
                 I286_FLAGL |= WORDSZPCF(r);                  I286_FLAGL |= WORDSZPCF(r);
   
   
Line 231  extern UINT calc_a(UINT op, UINT32 *seg) Line 234  extern UINT calc_a(UINT op, UINT32 *seg)
 #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 |= BYTESZPCF(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);                       \
                 I286_FLAGL |= WORDSZPCF(r);                  I286_FLAGL |= WORDSZPCF(r);
   
   
Line 245  extern UINT calc_a(UINT op, UINT32 *seg) Line 248  extern UINT calc_a(UINT op, UINT32 *seg)
 #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 |= BYTESZPCF2(r);                  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);                       \
                 I286_FLAGL |= WORDSZPCF(r);                  I286_FLAGL |= WORDSZPCF(r);
   
   
Line 271  extern UINT calc_a(UINT op, UINT32 *seg) Line 274  extern UINT calc_a(UINT op, UINT32 *seg)
 #define SUBBYTE(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 |= BYTESZPCF2(r);                  I286_FLAGL |= BYTESZPCF2(r);
   
 #define SUBWORD(r, d, s)                                                                                        \  #define SUBWORD(r, d, s)                                                                                        \
Line 296  extern UINT calc_a(UINT op, UINT32 *seg) Line 299  extern UINT calc_a(UINT op, UINT32 *seg)
 #define NEGBYTE(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 |= BYTESZPCF2(d);                  I286_FLAGL |= BYTESZPCF2(d);
   
 #define NEGWORD(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);                                     \
                 I286_FLAGL |= WORDSZPCF(d);                  I286_FLAGL |= WORDSZPCF(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;                                                                   \
Line 346  extern UINT calc_a(UINT op, UINT32 *seg) Line 349  extern UINT calc_a(UINT op, UINT32 *seg)
                 (s)++;                                                                                                          \                  (s)++;                                                                                                          \
                 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 |= BYTESZPF((BYTE)(s));                                                      \                  I286_FLAGL |= BYTESZPF((UINT8)(s));                                                     \
         }          }
   
 #define INCWORD(s) {                                                                                            \  #define INCWORD(s) {                                                                                            \
Line 355  extern UINT calc_a(UINT op, UINT32 *seg) Line 358  extern UINT calc_a(UINT op, UINT32 *seg)
                 (s)++;                                                                                                          \                  (s)++;                                                                                                          \
                 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((UINT16)(s));                                            \                  I286_FLAGL |= WORDSZPF((UINT16)(s));                                            \
         }          }
   
Line 366  extern UINT calc_a(UINT op, UINT32 *seg) Line 369  extern UINT calc_a(UINT op, UINT32 *seg)
                 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 |= BYTESZPF((BYTE)b);                                                        \                  I286_FLAGL |= BYTESZPF((UINT8)b);                                                       \
                 (s) = b;                                                                                                        \                  (s) = b;                                                                                                        \
         }          }
   
Line 376  extern UINT calc_a(UINT op, UINT32 *seg) Line 379  extern UINT calc_a(UINT op, UINT32 *seg)
                 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((UINT16)b);                                                      \                  I286_FLAGL |= WORDSZPF((UINT16)b);                                                      \
                 (s) = b;                                                                                                        \                  (s) = b;                                                                                                        \
         }          }
Line 390  extern UINT calc_a(UINT op, UINT32 *seg) Line 393  extern UINT calc_a(UINT op, UINT32 *seg)
                 (r) = (UINT16)d;                                                                                        \                  (r) = (UINT16)d;                                                                                        \
                 I286_OV = d & (d ^ s) & 0x8000;                                                         \                  I286_OV = d & (d ^ s) & 0x8000;                                                         \
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)((d ^ s) & A_FLAG);                                         \                  I286_FLAGL |= (UINT8)((d ^ s) & A_FLAG);                                        \
                 I286_FLAGL |= WORDSZPF((UINT16)d);                                                      \                  I286_FLAGL |= WORDSZPF((UINT16)d);                                                      \
                 I286_WORKCLOCK(clock);                                                                          \                  I286_WORKCLOCK(clock);                                                                          \
         }          }
Line 402  extern UINT calc_a(UINT op, UINT32 *seg) Line 405  extern UINT calc_a(UINT op, UINT32 *seg)
                 (r) = (UINT16)d;                                                                                        \                  (r) = (UINT16)d;                                                                                        \
                 I286_OV = s & (d ^ s) & 0x8000;                                                         \                  I286_OV = s & (d ^ s) & 0x8000;                                                         \
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)((d ^ s) & A_FLAG);                                         \                  I286_FLAGL |= (UINT8)((d ^ s) & A_FLAG);                                        \
                 I286_FLAGL |= WORDSZPF((UINT16)d);                                                      \                  I286_FLAGL |= WORDSZPF((UINT16)d);                                                      \
                 I286_WORKCLOCK(clock);                                                                          \                  I286_WORKCLOCK(clock);                                                                          \
         }          }
Line 418  extern UINT calc_a(UINT op, UINT32 *seg) Line 421  extern UINT calc_a(UINT op, UINT32 *seg)
                 reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \                  reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \
                 I286_SP += 2;                  I286_SP += 2;
   
 #if defined(ARM) && defined(BYTESEX_LITTLE)  #if (defined(ARM) || defined(X11)) && defined(BYTESEX_LITTLE)
   
 #define REGPUSH(reg, clock)     {                                                                               \  #define REGPUSH(reg, clock)     {                                                                               \
                 UINT32 addr;                                                                                            \                  UINT32 addr;                                                                                            \
Line 500  extern UINT calc_a(UINT op, UINT32 *seg) Line 503  extern UINT calc_a(UINT op, UINT32 *seg)
         }          }
   
   
 #define INT_NUM(a, b)           i286_intnum(a, b)  #define INT_NUM(a, b)           i286c_intnum((a), (REG16)(b))
   

Removed from v.1.14  
changed lines
  Added in v.1.17


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