| version 1.8, 2004/02/06 16:49:51 | version 1.13, 2004/03/12 13:34:08 | 
| Line 34 | Line 34 | 
 |  |  | 
 | I386CORE        i386core; | I386CORE        i386core; | 
 |  |  | 
| BYTE    *reg8_b20[0x100]; | UINT8   *reg8_b20[0x100]; | 
| BYTE    *reg8_b53[0x100]; | UINT8   *reg8_b53[0x100]; | 
| WORD    *reg16_b20[0x100]; | UINT16  *reg16_b20[0x100]; | 
| WORD    *reg16_b53[0x100]; | UINT16  *reg16_b53[0x100]; | 
| DWORD   *reg32_b20[0x100]; | UINT32  *reg32_b20[0x100]; | 
| DWORD   *reg32_b53[0x100]; | UINT32  *reg32_b53[0x100]; | 
 |  |  | 
 |  |  | 
 | void | void | 
| Line 78  ia32_init(void) | Line 78  ia32_init(void) | 
 | } | } | 
 |  |  | 
 | resolve_init(); | resolve_init(); | 
 | #if defined(IA32_SUPPORT_TLB) |  | 
 | tlb_init(); |  | 
 | #endif |  | 
 | #ifdef USE_FPU | #ifdef USE_FPU | 
 | fpu_init(); | fpu_init(); | 
 | #endif | #endif | 
| Line 130  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 142  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 169  change_vm(BOOL onoff) | Line 170  change_vm(BOOL onoff) | 
 | * flags | * flags | 
 | */ | */ | 
 | static void | static void | 
| modify_eflags(DWORD new_flags, DWORD mask) | modify_eflags(UINT32 new_flags, UINT32 mask) | 
 | { | { | 
| DWORD orig = CPU_EFLAG; | UINT32 orig = CPU_EFLAG; | 
 |  |  | 
 | 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); | 
|  | } | 
 | } | } | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  | #if !defined(IA32_DONT_USE_SET_EFLAGS_FUNCTION) | 
 | void | void | 
| set_flags(WORD new_flags, WORD mask) | 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, 0xffff0000|mask); | modify_eflags(new_flags, mask); | 
 | } | } | 
 |  |  | 
 | void | void | 
| set_eflags(DWORD new_flags, DWORD mask) | set_eflags(UINT32 new_flags, UINT32 mask) | 
 | { | { | 
 |  |  | 
 | mask &= I_FLAG|IOPL_FLAG|RF_FLAG|VM_FLAG|VIF_FLAG|VIP_FLAG; | mask &= I_FLAG|IOPL_FLAG|RF_FLAG|VM_FLAG|VIF_FLAG|VIP_FLAG; | 
| Line 206  set_eflags(DWORD new_flags, DWORD mask) | Line 210  set_eflags(DWORD new_flags, DWORD 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 */ |