Diff for /np2/i286c/i286c.c between versions 1.14 and 1.24

version 1.14, 2003/12/12 01:04:40 version 1.24, 2004/01/25 07:53:08
Line 10 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 42  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 64  const UINT8 iflags[256] = {     // Z_FLA Line 94  const UINT8 iflags[256] = {     // Z_FLA
   
 void i286c_initialize(void) {  void i286c_initialize(void) {
   
   #if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2)
         UINT    i;          UINT    i;
         UINT    bit;  #endif
         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++) {
Line 111  void i286c_initialize(void) { Line 124  void i286c_initialize(void) {
   
 #if !defined(MEMOPTIMIZE)  #if !defined(MEMOPTIMIZE)
         for (i=0; i<0x10000; i++) {          for (i=0; i<0x10000; i++) {
                   REG8 f;
                   UINT bit;
                 f = P_FLAG;                  f = P_FLAG;
                 for (bit=0x80; bit; bit>>=1) {                  for (bit=0x80; bit; bit>>=1) {
                         if (i & bit) {                          if (i & bit) {
Line 130  void i286c_initialize(void) { Line 145  void i286c_initialize(void) {
         i286cea_initialize();          i286cea_initialize();
 #endif  #endif
         v30cinit();          v30cinit();
           ZeroMemory(&i286core, sizeof(i286core));
 }  }
   
 void i286c_reset(void) {  void i286c_deinitialize(void) {
   
         ZeroMemory(&I286_STAT, sizeof(I286_STAT));          if (CPU_EXTMEM) {
         I286_CS = 0x1fc0;                  _MFREE(CPU_EXTMEM);
         CS_BASE = 0x1fc00;                  CPU_EXTMEM = NULL;
                   CPU_EXTMEMSIZE = 0;
           }
   }
   
   static void i286c_initreg(void) {
   
           I286_CS = 0xf000;
           CS_BASE = 0xf0000;
           I286_IP = 0xfff0;
         I286_ADRSMASK = 0xfffff;          I286_ADRSMASK = 0xfffff;
 }  }
   
   void i286c_reset(void) {
   
           ZeroMemory(&i286core.s, sizeof(i286core.s));
           i286c_initreg();
   }
   
   void i286c_shut(void) {
   
           ZeroMemory(&i286core.s, offsetof(I286STAT, cpu_type));
           i286c_initreg();
   }
   
   void i286c_setextsize(UINT32 size) {
   
           if (CPU_EXTMEMSIZE != size) {
                   if (CPU_EXTMEM) {
                           _MFREE(CPU_EXTMEM);
                           CPU_EXTMEM = NULL;
                   }
                   if (size) {
                           CPU_EXTMEM = (BYTE *)_MALLOC(size + 16, "EXTMEM");
                           if (CPU_EXTMEM == NULL) {
                                   size = 0;
                           }
                   }
                   CPU_EXTMEMSIZE = size;
           }
           i286core.e.ems[0] = mem + 0xc0000;
           i286core.e.ems[1] = mem + 0xc4000;
           i286core.e.ems[2] = mem + 0xc8000;
           i286core.e.ems[3] = mem + 0xcc000;
   }
   
   void i286c_setemm(UINT frame, UINT32 addr) {
   
           BYTE    *ptr;
   
           frame &= 3;
           if (addr < USE_HIMEM) {
                   ptr = mem + addr;
           }
           else if ((addr - 0x100000 + 0x4000) <= CPU_EXTMEMSIZE) {
                   ptr = CPU_EXTMEM + (addr - 0x100000);
           }
           else {
                   ptr = mem + 0xc0000 + (frame << 14);
           }
           i286core.e.ems[frame] = ptr;
   }
   
   
 void CPUCALL i286c_intnum(UINT vect, REG16 IP) {  void CPUCALL i286c_intnum(UINT vect, REG16 IP) {
   
 const BYTE      *ptr;  const BYTE      *ptr;
Line 236  BYTE BYTESZPF(UINT r) { Line 312  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 244  BYTE BYTESZPCF(UINT r) { Line 320  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 256  BYTE WORDSZPF(UINT32 r) { Line 332  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 276  BYTE WORDSZPCF(UINT32 r) { Line 352  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.14  
changed lines
  Added in v.1.24


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