Diff for /np2/i286c/i286c_fe.c between versions 1.7 and 1.14

version 1.7, 2003/11/24 09:14:01 version 1.14, 2004/02/18 18:29:29
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "i286.h"  #include        "cpucore.h"
 #include        "i286c.h"  #include        "i286c.h"
 #include        "memory.h"  
 #include        "i286c.mcr"  #include        "i286c.mcr"
   
   
Line 17  I286_F6 _nop_int(UINT op) { Line 16  I286_F6 _nop_int(UINT op) {
 I286_F6 _inc_ea8(UINT op) {  I286_F6 _inc_ea8(UINT op) {
   
         UINT32  madr;          UINT32  madr;
         BYTE    *out;          UINT8   *out;
           REG8    res;
   
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
Line 27  I286_F6 _inc_ea8(UINT op) { Line 27  I286_F6 _inc_ea8(UINT op) {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = CALC_EA(op);                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         BYTE value = i286_memoryread(madr);                          res = i286_memoryread(madr);
                         BYTE_INC(value)                          INCBYTE(res)
                         i286_memorywrite(madr, value);                          i286_memorywrite(madr, res);
                         return;                          return;
                 }                  }
                 out = mem + madr;                  out = mem + madr;
         }          }
         BYTE_INC(*out)          res = *out;
           INCBYTE(res)
           *out = (UINT8)res;
 }  }
   
 I286_F6 _dec_ea8(UINT op) {  I286_F6 _dec_ea8(UINT op) {
   
         UINT32  madr;          UINT32  madr;
         BYTE    *out;          UINT8   *out;
           REG8    res;
   
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
Line 50  I286_F6 _dec_ea8(UINT op) { Line 53  I286_F6 _dec_ea8(UINT op) {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = CALC_EA(op);                  madr = CALC_EA(op);
                 if (madr >= I286_MEMWRITEMAX) {                  if (madr >= I286_MEMWRITEMAX) {
                         BYTE value = i286_memoryread(madr);                          res = i286_memoryread(madr);
                         BYTE_DEC(value)                          DECBYTE(res)
                         i286_memorywrite(madr, value);                          i286_memorywrite(madr, res);
                         return;                          return;
                 }                  }
                 out = mem + madr;                  out = mem + madr;
         }          }
         BYTE_DEC(*out)          res = *out;
           DECBYTE(res)
           *out = (UINT8)res;
 }  }
   
 I286_F6 _inc_ea16(UINT op) {  I286_F6 _inc_ea16(UINT op) {
   
         UINT32  madr;          UINT32  madr;
         UINT16  *out;          UINT16  *out;
           REG16   res;
   
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
Line 73  I286_F6 _inc_ea16(UINT op) { Line 79  I286_F6 _inc_ea16(UINT op) {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = CALC_EA(op);                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         UINT16 value = i286_memoryread_w(madr);                          res = i286_memoryread_w(madr);
                         WORD_INC(value)                          INCWORD(res)
                         i286_memorywrite_w(madr, value);                          i286_memorywrite_w(madr, res);
                         return;                          return;
                 }                  }
                 out = (UINT16 *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         WORD_INC(*out)          res = *out;
           INCWORD(res)
           *out = (UINT16)res;
 }  }
   
 I286_F6 _dec_ea16(UINT op) {  I286_F6 _dec_ea16(UINT op) {
   
         UINT32  madr;          UINT32  madr;
         UINT16  *out;          UINT16  *out;
           REG16   res;
   
         if (op >= 0xc0) {          if (op >= 0xc0) {
                 I286_WORKCLOCK(2);                  I286_WORKCLOCK(2);
Line 96  I286_F6 _dec_ea16(UINT op) { Line 105  I286_F6 _dec_ea16(UINT op) {
                 I286_WORKCLOCK(7);                  I286_WORKCLOCK(7);
                 madr = CALC_EA(op);                  madr = CALC_EA(op);
                 if (INHIBIT_WORDP(madr)) {                  if (INHIBIT_WORDP(madr)) {
                         UINT16 value = i286_memoryread_w(madr);                          res = i286_memoryread_w(madr);
                         WORD_DEC(value)                          DECWORD(res)
                         i286_memorywrite_w(madr, value);                          i286_memorywrite_w(madr, res);
                         return;                          return;
                 }                  }
                 out = (UINT16 *)(mem + madr);                  out = (UINT16 *)(mem + madr);
         }          }
         WORD_DEC(*out)          res = *out;
           DECWORD(res)
           *out = (UINT16)res;
 }  }
   
 I286_F6 _call_ea16(UINT op) {  I286_F6 _call_ea16(UINT op) {
Line 125  I286_F6 _call_ea16(UINT op) { Line 136  I286_F6 _call_ea16(UINT op) {
 I286_F6 _call_far_ea16(UINT op) {  I286_F6 _call_far_ea16(UINT op) {
   
         UINT32  seg;          UINT32  seg;
         UINT16  ad;          UINT    ad;
   
         I286_WORKCLOCK(16);          I286_WORKCLOCK(16);
         if (op < 0xc0) {          if (op < 0xc0) {
Line 133  I286_F6 _call_far_ea16(UINT op) { Line 144  I286_F6 _call_far_ea16(UINT op) {
                 REGPUSH0(I286_CS)                                                               // ToDo                  REGPUSH0(I286_CS)                                                               // ToDo
                 REGPUSH0(I286_IP)                  REGPUSH0(I286_IP)
                 I286_IP = i286_memoryread_w(seg + ad);                  I286_IP = i286_memoryread_w(seg + ad);
                 ad += 2;                  I286_CS = i286_memoryread_w(seg + LOW16(ad + 2));
                 I286_CS = i286_memoryread_w(seg + ad);                  CS_BASE = SEGSELECT(I286_CS);
                 CS_BASE = I286_CS << 4;  
         }          }
         else {          else {
                 INT_NUM(6, I286_IP - 2);                  INT_NUM(6, I286_IP - 2);
Line 157  I286_F6 _jmp_ea16(UINT op) { Line 167  I286_F6 _jmp_ea16(UINT op) {
 I286_F6 _jmp_far_ea16(UINT op) {  I286_F6 _jmp_far_ea16(UINT op) {
   
         UINT32  seg;          UINT32  seg;
         UINT16  ad;          UINT    ad;
   
         I286_WORKCLOCK(11);          I286_WORKCLOCK(11);
         if (op < 0xc0) {          if (op < 0xc0) {
                 ad = GET_EA(op, &seg);                  ad = GET_EA(op, &seg);
                 I286_IP = i286_memoryread_w(seg + ad);                  I286_IP = i286_memoryread_w(seg + ad);
                 ad += 2;                  I286_CS = i286_memoryread_w(seg + LOW16(ad + 2));
                 I286_CS = i286_memoryread_w(seg + ad);                  CS_BASE = SEGSELECT(I286_CS);
                 CS_BASE = I286_CS << 4;  
         }          }
         else {          else {
                 INT_NUM(6, I286_IP - 2);                  INT_NUM(6, I286_IP - 2);

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


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