Diff for /np2/i286c/i286c.c between versions 1.13 and 1.16

version 1.13, 2003/12/08 00:55:31 version 1.16, 2003/12/25 19:26:55
Line 2 Line 2
 #include        "cpucore.h"  #include        "cpucore.h"
 #include        "i286c.h"  #include        "i286c.h"
 #include        "v30patch.h"  #include        "v30patch.h"
 #include        "memory.h"  
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "dmap.h"  #include        "dmap.h"
Line 11 Line 10
   
         I286CORE        i286core;          I286CORE        i286core;
   
 const UINT8 iflags[256] = {                                     // Z_FLAG, S_FLAG, P_FLAG  const UINT8 iflags[512] = {                                     // Z_FLAG, S_FLAG, P_FLAG
                         0x44, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00,                          0x44, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00,
                         0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04,                          0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04,
                         0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04,                          0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04,
Line 43  const UINT8 iflags[256] = {     // Z_FLA Line 42  const UINT8 iflags[256] = {     // Z_FLA
                         0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84,                          0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84,
                         0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80,                          0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80,
                         0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80,                          0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80,
                         0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84};                          0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84,
                           0x45, 0x01, 0x01, 0x05, 0x01, 0x05, 0x05, 0x01,
                           0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05,
                           0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05,
                           0x05, 0x01, 0x01, 0x05, 0x01, 0x05, 0x05, 0x01,
                           0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05,
                           0x05, 0x01, 0x01, 0x05, 0x01, 0x05, 0x05, 0x01,
                           0x05, 0x01, 0x01, 0x05, 0x01, 0x05, 0x05, 0x01,
                           0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05,
                           0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05,
                           0x05, 0x01, 0x01, 0x05, 0x01, 0x05, 0x05, 0x01,
                           0x05, 0x01, 0x01, 0x05, 0x01, 0x05, 0x05, 0x01,
                           0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05,
                           0x05, 0x01, 0x01, 0x05, 0x01, 0x05, 0x05, 0x01,
                           0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05,
                           0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05,
                           0x05, 0x01, 0x01, 0x05, 0x01, 0x05, 0x05, 0x01,
                           0x81, 0x85, 0x85, 0x81, 0x85, 0x81, 0x81, 0x85,
                           0x85, 0x81, 0x81, 0x85, 0x81, 0x85, 0x85, 0x81,
                           0x85, 0x81, 0x81, 0x85, 0x81, 0x85, 0x85, 0x81,
                           0x81, 0x85, 0x85, 0x81, 0x85, 0x81, 0x81, 0x85,
                           0x85, 0x81, 0x81, 0x85, 0x81, 0x85, 0x85, 0x81,
                           0x81, 0x85, 0x85, 0x81, 0x85, 0x81, 0x81, 0x85,
                           0x81, 0x85, 0x85, 0x81, 0x85, 0x81, 0x81, 0x85,
                           0x85, 0x81, 0x81, 0x85, 0x81, 0x85, 0x85, 0x81,
                           0x85, 0x81, 0x81, 0x85, 0x81, 0x85, 0x85, 0x81,
                           0x81, 0x85, 0x85, 0x81, 0x85, 0x81, 0x81, 0x85,
                           0x81, 0x85, 0x85, 0x81, 0x85, 0x81, 0x81, 0x85,
                           0x85, 0x81, 0x81, 0x85, 0x81, 0x85, 0x85, 0x81,
                           0x81, 0x85, 0x85, 0x81, 0x85, 0x81, 0x81, 0x85,
                           0x85, 0x81, 0x81, 0x85, 0x81, 0x85, 0x85, 0x81,
                           0x85, 0x81, 0x81, 0x85, 0x81, 0x85, 0x85, 0x81,
                           0x81, 0x85, 0x85, 0x81, 0x85, 0x81, 0x81, 0x85};
   
   
 // ----  // ----
   
         UINT8   _szpcflag8[0x200];  
   
 #if !defined(MEMOPTIMIZE)  #if !defined(MEMOPTIMIZE)
         UINT8   _szpflag16[0x10000];          UINT8   _szpflag16[0x10000];
 #endif  #endif
Line 69  void i286c_initialize(void) { Line 98  void i286c_initialize(void) {
         UINT    bit;          UINT    bit;
         REG8    f;          REG8    f;
   
         for (i=0; i<0x100; i++) {  
                 f = P_FLAG;  
                 for (bit=0x80; bit; bit>>=1) {  
                         if (i & bit) {  
                                 f ^= P_FLAG;  
                         }  
                 }  
                 if (!(i & 0xff)) {  
                         f |= Z_FLAG;  
                 }  
                 if (i & 0x80) {  
                         f |= S_FLAG;  
                 }  
                 _szpcflag8[i+0x000] = f;  
                 _szpcflag8[i+0x100] = f | C_FLAG;  
         }  
   
 #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)  #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)
         for (i=0; i<0x100; i++) {          for (i=0; i<0x100; i++) {
                 int pos;                  int pos;
Line 136  void i286c_initialize(void) { Line 148  void i286c_initialize(void) {
 void i286c_reset(void) {  void i286c_reset(void) {
   
         ZeroMemory(&I286_STAT, sizeof(I286_STAT));          ZeroMemory(&I286_STAT, sizeof(I286_STAT));
         I286_CS = 0x1fc0;          I286_CS = 0xffff;
         CS_BASE = 0x1fc00;          CS_BASE = 0xffff0;
           I286_ADRSMASK = 0xfffff;
   }
   
   void i286c_shut(void) {
   
           I286_MSW = 0;
           I286_CS = 0xffff;
           CS_BASE = 0xffff0;
           I286_IP = 0;
         I286_ADRSMASK = 0xfffff;          I286_ADRSMASK = 0xfffff;
 }  }
   
Line 152  const BYTE *ptr; Line 173  const BYTE *ptr;
         I286_FLAG &= ~(T_FLAG | I_FLAG);          I286_FLAG &= ~(T_FLAG | I_FLAG);
         I286_TRAP = 0;          I286_TRAP = 0;
   
         ptr = I286_MEM + (vect * 4);          ptr = mem + (vect * 4);
         I286_IP = LOADINTELWORD(ptr+0);                         // real mode!          I286_IP = LOADINTELWORD(ptr+0);                         // real mode!
         I286_CS = LOADINTELWORD(ptr+2);                         // real mode!          I286_CS = LOADINTELWORD(ptr+2);                         // real mode!
         CS_BASE = I286_CS << 4;          CS_BASE = I286_CS << 4;
Line 175  const BYTE *ptr; Line 196  const BYTE *ptr;
         I286_FLAG &= ~(T_FLAG | I_FLAG);          I286_FLAG &= ~(T_FLAG | I_FLAG);
         I286_TRAP = 0;          I286_TRAP = 0;
   
         ptr = I286_MEM + (vect * 4);          ptr = mem + (vect * 4);
         I286_IP = LOADINTELWORD(ptr + 0);                       // real mode!          I286_IP = LOADINTELWORD(ptr + 0);                       // real mode!
         I286_CS = LOADINTELWORD(ptr + 2);                       // real mode!          I286_CS = LOADINTELWORD(ptr + 2);                       // real mode!
         CS_BASE = I286_CS << 4;          CS_BASE = I286_CS << 4;
Line 237  BYTE BYTESZPF(UINT r) { Line 258  BYTE BYTESZPF(UINT r) {
         if (r & (~0xff)) {          if (r & (~0xff)) {
                 TRACEOUT(("BYTESZPF bound error: %x", r));                  TRACEOUT(("BYTESZPF bound error: %x", r));
         }          }
         return(_szpcflag8[r & 0xff]);          return(iflags[r & 0xff]);
 }  }
   
 BYTE BYTESZPCF(UINT r) {  BYTE BYTESZPCF(UINT r) {
Line 245  BYTE BYTESZPCF(UINT r) { Line 266  BYTE BYTESZPCF(UINT r) {
         if (r & (~0x1ff)) {          if (r & (~0x1ff)) {
                 TRACEOUT(("BYTESZPCF bound error: %x", r));                  TRACEOUT(("BYTESZPCF bound error: %x", r));
         }          }
         return(_szpcflag8[r & 0x1ff]);          return(iflags[r & 0x1ff]);
 }  }
   
 BYTE WORDSZPF(UINT32 r) {  BYTE WORDSZPF(UINT32 r) {
Line 257  BYTE WORDSZPF(UINT32 r) { Line 278  BYTE WORDSZPF(UINT32 r) {
                 TRACEOUT(("WORDSZPF bound error: %x", r));                  TRACEOUT(("WORDSZPF bound error: %x", r));
         }          }
         f1 = _szpflag16[r & 0xffff];          f1 = _szpflag16[r & 0xffff];
         f2 = _szpcflag8[r & 0xff] & P_FLAG;          f2 = iflags[r & 0xff] & P_FLAG;
         f2 += (r)?0:Z_FLAG;          f2 += (r)?0:Z_FLAG;
         f2 += (r >> 8) & S_FLAG;          f2 += (r >> 8) & S_FLAG;
         if (f1 != f2) {          if (f1 != f2) {
Line 277  BYTE WORDSZPCF(UINT32 r) { Line 298  BYTE WORDSZPCF(UINT32 r) {
         f1 = (r >> 16) & 1;          f1 = (r >> 16) & 1;
         f1 += _szpflag16[LOW16(r)];          f1 += _szpflag16[LOW16(r)];
   
         f2 = _szpcflag8[r & 0xff] & P_FLAG;          f2 = iflags[r & 0xff] & P_FLAG;
         f2 += (LOW16(r))?0:Z_FLAG;          f2 += (LOW16(r))?0:Z_FLAG;
         f2 += (r >> 8) & S_FLAG;          f2 += (r >> 8) & S_FLAG;
         f2 += (r >> 16) & 1;          f2 += (r >> 16) & 1;

Removed from v.1.13  
changed lines
  Added in v.1.16


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