mirror of https://gitee.com/openkylin/qemu.git
Do not use load_seg_vm to load CS in real mode iret handling
load_seg_vm calls cpu_x86_load_seg_cache which updates hflags of current env, real hardware doesn't do this, nor the code that handles real mode lret/lcall/ljmp. This unbreaks "unreal mode" and makes QEMU the first emulator being able to run Project Angel demo by IMPACT Studios. (Not that there are many physical machines out there capable of doing the same) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5403 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
78f5bf1e6f
commit
bdadc0b5b6
|
@ -2651,7 +2651,8 @@ void helper_iret_real(int shift)
|
|||
POPW(ssp, sp, sp_mask, new_eflags);
|
||||
}
|
||||
ESP = (ESP & ~sp_mask) | (sp & sp_mask);
|
||||
load_seg_vm(R_CS, new_cs);
|
||||
env->segs[R_CS].selector = new_cs;
|
||||
env->segs[R_CS].base = (new_cs << 4);
|
||||
env->eip = new_eip;
|
||||
if (env->eflags & VM_MASK)
|
||||
eflags_mask = TF_MASK | AC_MASK | ID_MASK | IF_MASK | RF_MASK | NT_MASK;
|
||||
|
|
Loading…
Reference in New Issue