Diff for /np2/i286c/i286c_mn.c between versions 1.21 and 1.22

version 1.21, 2003/12/03 07:59:57 version 1.22, 2003/12/08 00:55:31
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        "memory.h"
 #include        "pccore.h"  #include        "pccore.h"
Line 623  I286FN _segprefix_es(void) {     // 26:  Line 623  I286FN _segprefix_es(void) {     // 26: 
   
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 769  I286FN _segprefix_cs(void) {     // 2e:  Line 769  I286FN _segprefix_cs(void) {     // 2e: 
   
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 910  I286FN _segprefix_ss(void) {     // 36:  Line 910  I286FN _segprefix_ss(void) {     // 36: 
   
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 1027  I286FN _segprefix_ds(void) {     // 3e:  Line 1027  I286FN _segprefix_ds(void) {     // 3e: 
   
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 1820  I286FN _popf(void) {      // 9D: popf Line 1820  I286FN _popf(void) {      // 9D: popf
         I286_TRAP = ((flag & 0x300) == 0x300);          I286_TRAP = ((flag & 0x300) == 0x300);
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
 #if defined(INTR_FAST)  #if defined(INTR_FAST)
         if ((flag & I_FLAG) && (PICEXISTINTR)) {          if ((I286_TRAP) || ((flag & I_FLAG) && (PICEXISTINTR))) {
                 I286IRQCHECKTERM                  I286IRQCHECKTERM
         }          }
 #else  #else
Line 2282  I286FN _iret(void) {      // CF: iret Line 2282  I286FN _iret(void) {      // CF: iret
         CS_BASE = I286_CS << 4;          CS_BASE = I286_CS << 4;
         I286_WORKCLOCK(31);          I286_WORKCLOCK(31);
 #if defined(INTR_FAST)  #if defined(INTR_FAST)
         if ((flag & I_FLAG) && (PICEXISTINTR)) {          if ((I286_TRAP) || ((flag & I_FLAG) && (PICEXISTINTR))) {
                 I286IRQCHECKTERM                  I286IRQCHECKTERM
         }          }
 #else  #else
Line 2475  I286FN _in_al_data8(void) {     // E4: i Line 2475  I286FN _in_al_data8(void) {     // E4: i
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         GET_PCBYTE(port)          GET_PCBYTE(port)
         i286core.s.inport = CS_BASE + I286_IP;          I286_INPADRS = CS_BASE + I286_IP;
         I286_AL = iocore_inp8(port);          I286_AL = iocore_inp8(port);
         i286core.s.inport = 0;          I286_INPADRS = 0;
 }  }
   
 I286FN _in_ax_data8(void) {                                     // E5:  in              ax, DATA8  I286FN _in_ax_data8(void) {                                     // E5:  in              ax, DATA8
Line 2577  I286FN _lock(void) {      // F0: lock Line 2577  I286FN _lock(void) {      // F0: lock
   
 I286FN _repne(void) {                                           // F2:  repne  I286FN _repne(void) {                                           // F2:  repne
   
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2591  I286FN _repne(void) {      // F2: repne Line 2591  I286FN _repne(void) {      // F2: repne
   
 I286FN _repe(void) {                                            // F3:  repe  I286FN _repe(void) {                                            // F3:  repe
   
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2662  I286FN _sti(void) {       // FB: sti Line 2662  I286FN _sti(void) {       // FB: sti
         I286_FLAG |= I_FLAG;          I286_FLAG |= I_FLAG;
         I286_TRAP = (I286_FLAG & T_FLAG) >> 8;          I286_TRAP = (I286_FLAG & T_FLAG) >> 8;
 #if defined(INTR_FAST)  #if defined(INTR_FAST)
         if (!PICEXISTINTR) {          if ((I286_TRAP) || (PICEXISTINTR)) {
                 NEXT_OPCODE;                  REMAIN_ADJUST(1)
         }          }
         else {          else {
                 REMAIN_ADJUST(1)                  NEXT_OPCODE;
         }          }
 #else  #else
         REMAIN_ADJUST(1)          REMAIN_ADJUST(1)
Line 2985  I286FN _repe_segprefix_es(void) { Line 2985  I286FN _repe_segprefix_es(void) {
   
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3002  I286FN _repe_segprefix_cs(void) { Line 3002  I286FN _repe_segprefix_cs(void) {
   
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3019  I286FN _repe_segprefix_ss(void) { Line 3019  I286FN _repe_segprefix_ss(void) {
   
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3036  I286FN _repe_segprefix_ds(void) { Line 3036  I286FN _repe_segprefix_ds(void) {
   
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3330  I286FN _repne_segprefix_es(void) { Line 3330  I286FN _repne_segprefix_es(void) {
   
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3347  I286FN _repne_segprefix_cs(void) { Line 3347  I286FN _repne_segprefix_cs(void) {
   
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3364  I286FN _repne_segprefix_ss(void) { Line 3364  I286FN _repne_segprefix_ss(void) {
   
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3381  I286FN _repne_segprefix_ds(void) { Line 3381  I286FN _repne_segprefix_ds(void) {
   
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         i286core.s.prefix++;          I286_PREFIX++;
         if (i286core.s.prefix < MAX_PREFIX) {          if (I286_PREFIX < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286core.s.prefix = 0;                  I286_PREFIX = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);

Removed from v.1.21  
changed lines
  Added in v.1.22


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