Diff for /np2/i286c/i286c_mn.c between versions 1.26 and 1.27

version 1.26, 2003/12/25 19:26:55 version 1.27, 2003/12/26 02:02:09
Line 22 Line 22
                         I286_REMCLOCK = (c);                                                            \                          I286_REMCLOCK = (c);                                                            \
                 }                  }
   
 // ---- select...  
   
 static UINT32 segselect(UINT sel) {  
   
         I286DTR *dtr;  
         UINT32  addr;  
         UINT32  ret;  
   
         dtr = (sel & 4)?&I286_IDTR:&I286_GDTR;  
         addr = (dtr->base24 << 16) + dtr->base + (sel & (~7));  
         ret = i286_memoryread_w(addr+2);  
         ret += i286_memoryread(addr+4) << 16;  
         TRACEOUT(("PE - select %.4x %.8x", sel, ret));  
         return(ret);  
 }  
   
   
 // ----  // ----
   
Line 167  I286FN _pop_es(void) {       // 07: pop  Line 151  I286FN _pop_es(void) {       // 07: pop 
   
         REGPOP(tmp, 5)          REGPOP(tmp, 5)
         I286_ES = tmp;          I286_ES = tmp;
         if (!(I286_MSW & 1)) {          if (!(I286_MSW & MSW_PE)) {
                 ES_BASE = tmp << 4;                  ES_BASE = tmp << 4;
                 NEXT_OPCODE                  NEXT_OPCODE
         }          }
         else {          else {
                 ES_BASE = segselect(tmp);                  ES_BASE = i286c_selector(tmp);
         }          }
 }  }
   
Line 411  I286FN _pop_ss(void) {       // 17: pop  Line 395  I286FN _pop_ss(void) {       // 17: pop 
   
         REGPOP(tmp, 5)          REGPOP(tmp, 5)
         I286_SS = tmp;          I286_SS = tmp;
         if (!(I286_MSW & 1)) {          if (!(I286_MSW & MSW_PE)) {
                 SS_BASE = tmp << 4;                  SS_BASE = tmp << 4;
                 SS_FIX = tmp << 4;                  SS_FIX = tmp << 4;
                 NEXT_OPCODE                  NEXT_OPCODE
         }          }
         else {          else {
                 base = segselect(tmp);                  base = i286c_selector(tmp);
                 SS_BASE = base;                  SS_BASE = base;
                 SS_FIX = base;                  SS_FIX = base;
                 NEXT_OPCODE                  NEXT_OPCODE
Line 546  I286FN _pop_ds(void) {       // 1f: pop  Line 530  I286FN _pop_ds(void) {       // 1f: pop 
   
         REGPOP(tmp, 5)          REGPOP(tmp, 5)
         I286_DS = tmp;          I286_DS = tmp;
         if (!(I286_MSW & 1)) {          if (!(I286_MSW & MSW_PE)) {
                 DS_BASE = tmp << 4;                  DS_BASE = tmp << 4;
                 DS_FIX = tmp << 4;                  DS_FIX = tmp << 4;
                 NEXT_OPCODE                  NEXT_OPCODE
         }          }
         else {          else {
                 base = segselect(tmp);                  base = i286c_selector(tmp);
                 DS_BASE = base;                  DS_BASE = base;
                 DS_FIX = base;                  DS_FIX = base;
                 NEXT_OPCODE                  NEXT_OPCODE
Line 1721  I286FN _mov_seg_ea(void) {     // 8E: mo Line 1705  I286FN _mov_seg_ea(void) {     // 8E: mo
                 I286_WORKCLOCK(5);                  I286_WORKCLOCK(5);
                 tmp = i286_memoryread_w(CALC_EA(op));                  tmp = i286_memoryread_w(CALC_EA(op));
         }          }
         if (!(I286_MSW & 1)) {          if (!(I286_MSW & MSW_PE)) {
                 base = tmp << 4;                  base = tmp << 4;
         }          }
         else {          else {
                 base = segselect(tmp);                  base = i286c_selector(tmp);
         }          }
   
         switch(op & 0x18) {          switch(op & 0x18) {

Removed from v.1.26  
changed lines
  Added in v.1.27


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