Diff for /np2/i386c/ia32/ctrlxfer.c between versions 1.24 and 1.26

version 1.24, 2011/12/29 13:32:12 version 1.26, 2012/03/02 03:35:05
Line 973  RETfar_pm(UINT nbytes) Line 973  RETfar_pm(UINT nbytes)
                          && (CPU_STAT_CPL > sdp->dpl)) {                           && (CPU_STAT_CPL > sdp->dpl)) {
                                 /* current segment descriptor is invalid */                                  /* current segment descriptor is invalid */
                                 CPU_REGS_SREG(i) = 0;                                  CPU_REGS_SREG(i) = 0;
                                 segdesc_clear(sdp);                                  memset(sdp, 0, sizeof(*sdp));
                                 continue;                                  continue;
                         }                          }
   
Line 982  RETfar_pm(UINT nbytes) Line 982  RETfar_pm(UINT nbytes)
                         if (rv < 0) {                          if (rv < 0) {
                                 /* segment register is invalid */                                  /* segment register is invalid */
                                 CPU_REGS_SREG(i) = 0;                                  CPU_REGS_SREG(i) = 0;
                                 segdesc_clear(sdp);                                  memset(sdp, 0, sizeof(*sdp));
                                 continue;                                  continue;
                         }                          }
   
Line 999  RETfar_pm(UINT nbytes) Line 999  RETfar_pm(UINT nbytes)
                              && (CPU_STAT_CPL > temp_sel.desc.dpl))) {                               && (CPU_STAT_CPL > temp_sel.desc.dpl))) {
                                 /* segment descriptor is invalid */                                  /* segment descriptor is invalid */
                                 CPU_REGS_SREG(i) = 0;                                  CPU_REGS_SREG(i) = 0;
                                 segdesc_clear(sdp);                                  memset(sdp, 0, sizeof(*sdp));
                         }                          }
                 }                  }
         }          }
Line 1334  IRET_pm_protected_mode_return_outer_priv Line 1334  IRET_pm_protected_mode_return_outer_priv
                          && (sdp->dpl < CPU_STAT_CPL)) {                           && (sdp->dpl < CPU_STAT_CPL)) {
                                 /* segment register is invalid */                                  /* segment register is invalid */
                                 CPU_REGS_SREG(i) = 0;                                  CPU_REGS_SREG(i) = 0;
                                 segdesc_clear(sdp);                                  memset(sdp, 0, sizeof(*sdp));
                         }                          }
                 }                  }
         }          }
Line 1364  IRET_pm_return_to_vm86(UINT16 new_cs, UI Line 1364  IRET_pm_return_to_vm86(UINT16 new_cs, UI
         }          }
         SS_POP_CHECK(sp, 36);          SS_POP_CHECK(sp, 36);
   
         if (new_ip > 0xffff) {  
                 EXCEPTION(GP_EXCEPTION, 0);  
         }  
   
         new_sp = cpu_vmemoryread_d(CPU_SS_INDEX, sp + 12);          new_sp = cpu_vmemoryread_d(CPU_SS_INDEX, sp + 12);
         segsel[CPU_SS_INDEX] = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 16);          segsel[CPU_SS_INDEX] = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 16);
         segsel[CPU_ES_INDEX] = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 20);          segsel[CPU_ES_INDEX] = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 20);
Line 1381  IRET_pm_return_to_vm86(UINT16 new_cs, UI Line 1377  IRET_pm_return_to_vm86(UINT16 new_cs, UI
         }          }
   
         CPU_ESP = new_sp;          CPU_ESP = new_sp;
         CPU_EIP = new_ip;          CPU_EIP = new_ip & 0xffff;
   
         /* to VM86 mode */          /* to VM86 mode */
         set_eflags(new_flags, IOPL_FLAG|I_FLAG|VM_FLAG|RF_FLAG);          set_eflags(new_flags, IOPL_FLAG|I_FLAG|VM_FLAG|RF_FLAG);

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


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