Diff for /np2/i286c/i286c_mn.c between versions 1.16 and 1.19

version 1.16, 2003/11/30 11:20:55 version 1.19, 2003/12/01 17:13:36
Line 10 Line 10
   
 #define MAX_PREFIX              8  #define MAX_PREFIX              8
   
 #define EXISTINTR               (isI286EI) && (!pic.ext_irq) &&                         \  
                                                 ((pic.pi[0].irr & (~pic.pi[0].imr)) ||          \  
                                                 (pic.pi[1].irr & (~pic.pi[1].imr)))  
   
   
 #define NEXT_OPCODE                                                                                             \  #define NEXT_OPCODE                                                                                             \
                 if (I286_REMCLOCK < 1) {                                                                \                  if (I286_REMCLOCK < 1) {                                                                \
Line 627  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;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 773  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;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 914  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;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 1030  I286FN _segprefix_ds(void) {     // 3e:  Line 1026  I286FN _segprefix_ds(void) {     // 3e: 
   
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op[op]();                  i286op[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 1090  I286FN _pop_bp(void) REGPOP(I286_BP, 5)  Line 1086  I286FN _pop_bp(void) REGPOP(I286_BP, 5) 
 I286FN _pop_si(void) REGPOP(I286_SI, 5)         // 5E:  pop             si  I286FN _pop_si(void) REGPOP(I286_SI, 5)         // 5E:  pop             si
 I286FN _pop_di(void) REGPOP(I286_DI, 5)         // 5F:  pop             di  I286FN _pop_di(void) REGPOP(I286_DI, 5)         // 5F:  pop             di
   
 #if defined(ARM) && defined(BYTESEX_LITTLE)  #if (defined(ARM) || defined(X11)) && defined(BYTESEX_LITTLE)
   
 I286FN _pusha(void) {                                           // 60:  pusha  I286FN _pusha(void) {                                           // 60:  pusha
   
Line 1823  I286FN _popf(void) {      // 9D: popf Line 1819  I286FN _popf(void) {      // 9D: popf
         I286_FLAG = flag & (0xfff ^ O_FLAG);          I286_FLAG = flag & (0xfff ^ O_FLAG);
         I286_TRAP = ((flag & 0x300) == 0x300);          I286_TRAP = ((flag & 0x300) == 0x300);
 #if defined(INTR_FAST)  #if defined(INTR_FAST)
         if (EXISTINTR) {          if ((flag & I_FLAG) && (PICEXISTINTR)) {
                 I286IRQCHECKTERM                  I286IRQCHECKTERM
         }          }
 #else  #else
Line 2285  I286FN _iret(void) {      // CF: iret Line 2281  I286FN _iret(void) {      // CF: iret
         I286_TRAP = ((flag & 0x300) == 0x300);          I286_TRAP = ((flag & 0x300) == 0x300);
         CS_BASE = I286_CS << 4;          CS_BASE = I286_CS << 4;
 #if defined(INTR_FAST)  #if defined(INTR_FAST)
         if (EXISTINTR) {          if ((flag & I_FLAG) && (PICEXISTINTR)) {
                 I286IRQCHECKTERM                  I286IRQCHECKTERM
         }          }
 #else  #else
Line 2478  I286FN _in_al_data8(void) {     // E4: i Line 2474  I286FN _in_al_data8(void) {     // E4: i
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         GET_PCBYTE(port)          GET_PCBYTE(port)
         i286reg.inport = CS_BASE + I286_IP;          i286core.s.inport = CS_BASE + I286_IP;
         I286_AL = iocore_inp8(port);          I286_AL = iocore_inp8(port);
         i286reg.inport = 0;          i286core.s.inport = 0;
 }  }
   
 I286FN _in_ax_data8(void) {                                     // E5:  in              ax, DATA8  I286FN _in_ax_data8(void) {                                     // E5:  in              ax, DATA8
Line 2580  I286FN _lock(void) {      // F0: lock Line 2576  I286FN _lock(void) {      // F0: lock
   
 I286FN _repne(void) {                                           // F2:  repne  I286FN _repne(void) {                                           // F2:  repne
   
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2594  I286FN _repne(void) {      // F2: repne Line 2590  I286FN _repne(void) {      // F2: repne
   
 I286FN _repe(void) {                                            // F3:  repe  I286FN _repe(void) {                                            // F3:  repe
   
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 2664  I286FN _sti(void) {       // FB: sti Line 2660  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 (EXISTINTR) {          if (PICEXISTINTR) {
                 REMAIN_ADJUST(1)                  REMAIN_ADJUST(1)
         }          }
 #else  #else
Line 2984  I286FN _repe_segprefix_es(void) { Line 2980  I286FN _repe_segprefix_es(void) {
   
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3001  I286FN _repe_segprefix_cs(void) { Line 2997  I286FN _repe_segprefix_cs(void) {
   
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3018  I286FN _repe_segprefix_ss(void) { Line 3014  I286FN _repe_segprefix_ss(void) {
   
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3035  I286FN _repe_segprefix_ds(void) { Line 3031  I286FN _repe_segprefix_ds(void) {
   
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repe[op]();                  i286op_repe[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3329  I286FN _repne_segprefix_es(void) { Line 3325  I286FN _repne_segprefix_es(void) {
   
         DS_FIX = ES_BASE;          DS_FIX = ES_BASE;
         SS_FIX = ES_BASE;          SS_FIX = ES_BASE;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3346  I286FN _repne_segprefix_cs(void) { Line 3342  I286FN _repne_segprefix_cs(void) {
   
         DS_FIX = CS_BASE;          DS_FIX = CS_BASE;
         SS_FIX = CS_BASE;          SS_FIX = CS_BASE;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3363  I286FN _repne_segprefix_ss(void) { Line 3359  I286FN _repne_segprefix_ss(void) {
   
         DS_FIX = SS_BASE;          DS_FIX = SS_BASE;
         SS_FIX = SS_BASE;          SS_FIX = SS_BASE;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);
Line 3380  I286FN _repne_segprefix_ds(void) { Line 3376  I286FN _repne_segprefix_ds(void) {
   
         DS_FIX = DS_BASE;          DS_FIX = DS_BASE;
         SS_FIX = DS_BASE;          SS_FIX = DS_BASE;
         i286reg.prefix++;          i286core.s.prefix++;
         if (i286reg.prefix < MAX_PREFIX) {          if (i286core.s.prefix < MAX_PREFIX) {
                 UINT op;                  UINT op;
                 GET_PCBYTE(op);                  GET_PCBYTE(op);
                 i286op_repne[op]();                  i286op_repne[op]();
                 REMOVE_PREFIX                  REMOVE_PREFIX
                 i286reg.prefix = 0;                  i286core.s.prefix = 0;
         }          }
         else {          else {
                 INT_NUM(6, I286_IP);                  INT_NUM(6, I286_IP);

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


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