|
|
| version 1.25, 2012/02/05 06:31:44 | version 1.26, 2012/03/02 03:35:05 |
|---|---|
| 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); |