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

version 1.2, 2003/10/17 07:17:20 version 1.6, 2003/10/26 06:44:47
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(CPUW2TEST)
   #define WORDSZPF(a)             ((szpcflag[(a) & 0xff] & P_FLAG) | \
                                                                           (((a))?0:Z_FLAG) | (((a) >> 8) & S_FLAG))
   #else
   #define WORDSZPF(a)             szpflag_w[(a)]
   #endif
   
 #define SWAPBYTE(p, q) {                                                                                        \  #define SWAPBYTE(p, q) {                                                                                        \
                 BYTE tmp = (p);                                                                                         \                  BYTE tmp = (p);                                                                                         \
Line 30 Line 36
   
   
 #define I286IRQCHECKTERM                                                                                        \  #define I286IRQCHECKTERM                                                                                        \
                 if (nevent.remainclock > 0) {                                                           \                  if (I286_REMCLOCK > 0) {                                                                        \
                         nevent.baseclock -= nevent.remainclock;                                 \                          I286_BASECLOCK -= I286_REMCLOCK;                                                \
                         nevent.remainclock = 0;                                                                 \                          I286_REMCLOCK = 0;                                                                              \
                 }                  }
   
   
Line 41 Line 47
                 DS_FIX = DS_BASE;                  DS_FIX = DS_BASE;
   
   
 #define I286_CLOCK(clock)       nevent.remainclock -= (clock);  #define I286_WORKCLOCK(c)       I286_REMCLOCK -= (c)
   
   
 #define GET_PCBYTE(b)                                                                                           \  #define GET_PCBYTE(b)                                                                                           \
Line 87 Line 93
 #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_CLOCK(regclk)                                                                              \                          I286_WORKCLOCK(regclk);                                                                 \
                         (s) = *(reg8_b20[b]);                                                                   \                          (s) = *(reg8_b20[b]);                                                                   \
                 }                                                                                                                       \                  }                                                                                                                       \
                 else {                                                                                                          \                  else {                                                                                                          \
                         I286_CLOCK(memclk)                                                                              \                          I286_WORKCLOCK(memclk);                                                                 \
                         (s) = i286_memoryread(c_calc_ea_dst[(b)]());                    \                          (s) = i286_memoryread(c_calc_ea_dst[(b)]());                    \
                 }                                                                                                                       \                  }                                                                                                                       \
                 (d) = reg8_b53[(b)];                  (d) = reg8_b53[(b)];
Line 100 Line 106
 #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_CLOCK(regclk)                                                                              \                          I286_WORKCLOCK(regclk);                                                                 \
                         s = *(reg16_b20[b]);                                                                    \                          s = *(reg16_b20[b]);                                                                    \
                 }                                                                                                                       \                  }                                                                                                                       \
                 else {                                                                                                          \                  else {                                                                                                          \
                         I286_CLOCK(memclk)                                                                              \                          I286_WORKCLOCK(memclk);                                                                 \
                         s = i286_memoryread_w(c_calc_ea_dst[b]());                              \                          s = i286_memoryread_w(c_calc_ea_dst[b]());                              \
                 }                                                                                                                       \                  }                                                                                                                       \
                 d = reg16_b53[b];                  d = reg16_b53[b];
Line 125 Line 131
                         (r) &= 0x0000ffff;                                                                              \                          (r) &= 0x0000ffff;                                                                              \
                         I286_FLAGL |= C_FLAG;                                                                   \                          I286_FLAGL |= C_FLAG;                                                                   \
                 }                                                                                                                       \                  }                                                                                                                       \
                 I286_FLAGL |= szpflag_w[(r)];                  I286_FLAGL |= WORDSZPF(r);
   
   
 // flag no check  // flag no check
Line 138 Line 144
 #define ORWORD(d, s)                                                                                            \  #define ORWORD(d, s)                                                                                            \
                 (d) |= (s);                                                                                                     \                  (d) |= (s);                                                                                                     \
                 I286_OV = 0;                                                                                            \                  I286_OV = 0;                                                                                            \
                 I286_FLAGL = szpflag_w[(d)];                  I286_FLAGL = WORDSZPF(d);
   
   
 #define ADCBYTE(r, d, s)                                                                                        \  #define ADCBYTE(r, d, s)                                                                                        \
Line 156 Line 162
                         (r) &= 0x0000ffff;                                                                              \                          (r) &= 0x0000ffff;                                                                              \
                         I286_FLAGL |= C_FLAG;                                                                   \                          I286_FLAGL |= C_FLAG;                                                                   \
                 }                                                                                                                       \                  }                                                                                                                       \
                 I286_FLAGL |= szpflag_w[(r)];                  I286_FLAGL |= WORDSZPF(r);
   
   
 // flag no check  // flag no check
Line 174 Line 180
                         (r) &= 0x0000ffff;                                                                              \                          (r) &= 0x0000ffff;                                                                              \
                         I286_FLAGL |= C_FLAG;                                                                   \                          I286_FLAGL |= C_FLAG;                                                                   \
                 }                                                                                                                       \                  }                                                                                                                       \
                 I286_FLAGL |= szpflag_w[(r)];                  I286_FLAGL |= WORDSZPF(r);
   
   
 // flag no check  // flag no check
Line 187 Line 193
 #define ANDWORD(d, s)                                                                                           \  #define ANDWORD(d, s)                                                                                           \
                 (d) &= s;                                                                                                       \                  (d) &= s;                                                                                                       \
                 I286_OV = 0;                                                                                            \                  I286_OV = 0;                                                                                            \
                 I286_FLAGL = szpflag_w[(d)];                  I286_FLAGL = WORDSZPF(d);
   
   
 // flag no check  // flag no check
Line 205 Line 211
                         (r) &= 0x0000ffff;                                                                              \                          (r) &= 0x0000ffff;                                                                              \
                         I286_FLAGL |= C_FLAG;                                                                   \                          I286_FLAGL |= C_FLAG;                                                                   \
                 }                                                                                                                       \                  }                                                                                                                       \
                 I286_FLAGL |= szpflag_w[(r)];                  I286_FLAGL |= WORDSZPF(r);
   
   
 // flag no check  // flag no check
Line 218 Line 224
 #define WORD_XOR(d, s)                                                                                          \  #define WORD_XOR(d, s)                                                                                          \
                 (d) ^= (s);                                                                                                     \                  (d) ^= (s);                                                                                                     \
                 I286_OV = 0;                                                                                            \                  I286_OV = 0;                                                                                            \
                 I286_FLAGL = szpflag_w[(d)];                  I286_FLAGL = WORDSZPF(d);
   
   
 #define BYTE_NEG(d, s)                                                                                          \  #define BYTE_NEG(d, s)                                                                                          \
Line 236 Line 242
                         (d) &= 0x0000ffff;                                                                              \                          (d) &= 0x0000ffff;                                                                              \
                         I286_FLAGL |= C_FLAG;                                                                   \                          I286_FLAGL |= C_FLAG;                                                                   \
                 }                                                                                                                       \                  }                                                                                                                       \
                 I286_FLAGL |= szpflag_w[(d)];                  I286_FLAGL |= WORDSZPF(d);
   
   
 #define BYTE_MUL(r, d, s)                                                                                       \  #define BYTE_MUL(r, d, s)                                                                                       \
Line 295 Line 301
                 I286_OV = b & (b ^ (s)) & 0x8000;                                                       \                  I286_OV = b & (b ^ (s)) & 0x8000;                                                       \
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)((b ^ (s)) & A_FLAG);                                       \                  I286_FLAGL |= (BYTE)((b ^ (s)) & A_FLAG);                                       \
                 I286_FLAGL |= szpflag_w[b];                                                                     \                  I286_FLAGL |= WORDSZPF(b);                                                                      \
                 (s) = b;                                                                                                        \                  (s) = b;                                                                                                        \
         }          }
   
Line 318 Line 324
                 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 |= (BYTE)((b ^ (s)) & A_FLAG);                                       \
                 I286_FLAGL |= szpflag_w[b];                                                                     \                  I286_FLAGL |= WORDSZPF(b);                                                                      \
                 (s) = b;                                                                                                        \                  (s) = b;                                                                                                        \
         }          }
   
Line 331 Line 337
                 I286_OV = (w) & ((w) ^ bak) & 0x8000;                                           \                  I286_OV = (w) & ((w) ^ bak) & 0x8000;                                           \
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)(((w) ^ bak) & A_FLAG);                                     \                  I286_FLAGL |= (BYTE)(((w) ^ bak) & A_FLAG);                                     \
                 I286_FLAGL |= szpflag_w[(w)];                                                           \                  I286_FLAGL |= WORDSZPF(w);                                                                      \
                 I286_CLOCK(clock);                                                                                      \                  I286_WORKCLOCK(clock);                                                                          \
         }          }
   
   
Line 343 Line 349
                 I286_OV = bak & (w ^ bak) & 0x8000;                                                     \                  I286_OV = bak & (w ^ bak) & 0x8000;                                                     \
                 I286_FLAGL &= C_FLAG;                                                                           \                  I286_FLAGL &= C_FLAG;                                                                           \
                 I286_FLAGL |= (BYTE)((w ^ bak) & A_FLAG);                                       \                  I286_FLAGL |= (BYTE)((w ^ bak) & A_FLAG);                                       \
                 I286_FLAGL |= szpflag_w[w];                                                                     \                  I286_FLAGL |= WORDSZPF(w);                                                                      \
                 I286_CLOCK(clock);                                                                                      \                  I286_WORKCLOCK(clock);                                                                          \
         }          }
   
   
 #define REGPUSH(reg, clock)     {                                                                               \  #define REGPUSH(reg, clock)     {                                                                               \
                 I286_CLOCK(clock);                                                                                      \                  I286_WORKCLOCK(clock);                                                                          \
                 I286_SP -= 2;                                                                                           \                  I286_SP -= 2;                                                                                           \
                 i286_memorywrite_w(I286_SP + SS_BASE, reg);                                     \                  i286_memorywrite_w(I286_SP + SS_BASE, reg);                                     \
         }          }
Line 361 Line 367
   
   
 #define SP_PUSH(reg, clock)     {                                                                               \  #define SP_PUSH(reg, clock)     {                                                                               \
                 WORD sp = reg;                                                                                          \                  UINT16 sp = reg;                                                                                        \
                 I286_SP -= 2;                                                                                           \                  I286_SP -= 2;                                                                                           \
                 i286_memorywrite_w(I286_SP + SS_BASE, sp);                                      \                  i286_memorywrite_w(I286_SP + SS_BASE, sp);                                      \
                 I286_CLOCK(clock);                                                                                      \                  I286_WORKCLOCK(clock);                                                                          \
         }          }
   
   
 #define REGPOP(reg, clock) {                                                                            \  #define REGPOP(reg, clock) {                                                                            \
                 I286_CLOCK(clock);                                                                                      \                  I286_WORKCLOCK(clock);                                                                          \
                 reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \                  reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \
                 I286_SP += 2;                                                                                           \                  I286_SP += 2;                                                                                           \
         }          }
   
   #define SP_POP(reg, clock) {                                                                            \
                   I286_WORKCLOCK(clock);                                                                          \
                   reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \
           }
   
   
 #define REGPOP0(reg)                                                                                            \  #define REGPOP0(reg)                                                                                            \
                 reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \                  reg = i286_memoryread_w(I286_SP + SS_BASE);                                     \
Line 382 Line 393
   
   
 #define JMPSHORT(clock) {                                                                                       \  #define JMPSHORT(clock) {                                                                                       \
                 I286_CLOCK(clock);                                                                                      \                  I286_WORKCLOCK(clock);                                                                          \
                 I286_IP += __CBW(i286_memoryread(CS_BASE + I286_IP));           \                  I286_IP += __CBW(i286_memoryread(CS_BASE + I286_IP));           \
                 I286_IP++;                                                                                                      \                  I286_IP++;                                                                                                      \
         }          }
   
   
 #define JMPNOP(clock) {                                                                                         \  #define JMPNOP(clock) {                                                                                         \
                 I286_CLOCK(clock);                                                                                      \                  I286_WORKCLOCK(clock);                                                                          \
                 I286_IP++;                                                                                                      \                  I286_IP++;                                                                                                      \
         }          }
   
   
 #define MOVIMM8(reg) {                                                                                          \  #define MOVIMM8(reg) {                                                                                          \
                 I286_CLOCK(2)                                                                                           \                  I286_WORKCLOCK(2);                                                                                      \
                 GET_PCBYTE(reg)                                                                                         \                  GET_PCBYTE(reg)                                                                                         \
         }          }
   
   
 #define MOVIMM16(reg) {                                                                                         \  #define MOVIMM16(reg) {                                                                                         \
                 I286_CLOCK(2)                                                                                           \                  I286_WORKCLOCK(2);                                                                                      \
                 GET_PCWORD(reg)                                                                                         \                  GET_PCWORD(reg)                                                                                         \
         }          }
   

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


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