|
|
| version 1.11, 2004/03/05 14:17:35 | version 1.14, 2004/03/12 14:33:06 |
|---|---|
| Line 127 change_pm(BOOL onoff) | Line 127 change_pm(BOOL onoff) |
| CPU_STAT_SS32 = 0; | CPU_STAT_SS32 = 0; |
| CPU_SET_CPL(0); | CPU_SET_CPL(0); |
| CPU_STAT_PM = onoff; | CPU_STAT_PM = onoff; |
| tlb_flush(TRUE); | |
| } | } |
| void FASTCALL | void FASTCALL |
| Line 139 change_pg(BOOL onoff) | Line 141 change_pg(BOOL onoff) |
| VERBOSE(("Leaveing from Paging-Mode...")); | VERBOSE(("Leaveing from Paging-Mode...")); |
| } | } |
| CPU_STAT_PAGING = onoff; | CPU_STAT_PAGING = onoff; |
| tlb_flush(TRUE); | |
| } | } |
| void FASTCALL | void FASTCALL |
| Line 149 change_vm(BOOL onoff) | Line 153 change_vm(BOOL onoff) |
| CPU_STAT_VM86 = onoff; | CPU_STAT_VM86 = onoff; |
| if (onoff) { | if (onoff) { |
| for (i = 0; i < CPU_SEGREG_NUM; i++) { | for (i = 0; i < CPU_SEGREG_NUM; i++) { |
| CPU_STAT_SREGLIMIT(i) = 0xffff; | |
| CPU_SET_SEGREG(i, CPU_REGS_SREG(i)); | CPU_SET_SEGREG(i, CPU_REGS_SREG(i)); |
| } | } |
| CPU_INST_OP32 = CPU_INST_AS32 = | CPU_INST_OP32 = CPU_INST_AS32 = |
| Line 162 change_vm(BOOL onoff) | Line 167 change_vm(BOOL onoff) |
| } | } |
| } | } |
| #if !defined(IA32_DONT_USE_SET_EFLAGS_FUNCTION) | |
| /* | /* |
| * flags | * flags |
| */ | */ |
| Line 172 modify_eflags(UINT32 new_flags, UINT32 m | Line 178 modify_eflags(UINT32 new_flags, UINT32 m |
| new_flags &= ALL_EFLAG; | new_flags &= ALL_EFLAG; |
| mask &= ALL_EFLAG; | mask &= ALL_EFLAG; |
| CPU_EFLAG = (REAL_EFLAGREG & ~mask) | (new_flags & mask) | 0x2; | CPU_EFLAG = (REAL_EFLAGREG & ~mask) | (new_flags & mask); |
| CPU_OV = CPU_FLAG & O_FLAG; | CPU_OV = CPU_FLAG & O_FLAG; |
| CPU_TRAP = (CPU_FLAG & (I_FLAG|T_FLAG)) == (I_FLAG|T_FLAG); | CPU_TRAP = (CPU_FLAG & (I_FLAG|T_FLAG)) == (I_FLAG|T_FLAG); |
| if ((orig ^ CPU_EFLAG) & VM_FLAG) { | if (CPU_STAT_PM) { |
| if (CPU_EFLAG & VM_FLAG) { | if ((orig ^ CPU_EFLAG) & VM_FLAG) { |
| change_vm(1); | if (CPU_EFLAG & VM_FLAG) { |
| } else { | change_vm(1); |
| change_vm(0); | } else { |
| change_vm(0); | |
| } | |
| } | } |
| } | } |
| } | } |
| Line 190 set_flags(UINT16 new_flags, UINT16 mask) | Line 198 set_flags(UINT16 new_flags, UINT16 mask) |
| { | { |
| mask &= I_FLAG|IOPL_FLAG; | mask &= I_FLAG|IOPL_FLAG; |
| mask |= (SZAPC_FLAG|T_FLAG|D_FLAG|O_FLAG|NT_FLAG); | mask |= SZAPC_FLAG|T_FLAG|D_FLAG|O_FLAG|NT_FLAG; |
| modify_eflags(new_flags, mask); | modify_eflags(new_flags, mask); |
| } | } |
| Line 203 set_eflags(UINT32 new_flags, UINT32 mask | Line 211 set_eflags(UINT32 new_flags, UINT32 mask |
| mask |= AC_FLAG|ID_FLAG; | mask |= AC_FLAG|ID_FLAG; |
| modify_eflags(new_flags, mask); | modify_eflags(new_flags, mask); |
| } | } |
| #endif /* !IA32_DONT_USE_SET_EFLAGS_FUNCTION */ |