mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-02 11:02:28 +02:00
Adding MMU state values to state
because that allow the MMU state to be loaded
This commit is contained in:
parent
2f00f87e8e
commit
f452a6442f
@ -598,9 +598,6 @@ union UPTE2
|
|||||||
u32 Hex;
|
u32 Hex;
|
||||||
};
|
};
|
||||||
|
|
||||||
u32 pagetable_base = 0;
|
|
||||||
u32 pagetable_hashmask = 0;
|
|
||||||
|
|
||||||
void GenerateDSIException(u32 _EffectiveAddress, bool _bWrite)
|
void GenerateDSIException(u32 _EffectiveAddress, bool _bWrite)
|
||||||
{
|
{
|
||||||
if (_bWrite)
|
if (_bWrite)
|
||||||
@ -644,8 +641,8 @@ void SDRUpdated()
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pagetable_base = htaborg<<16;
|
PowerPC::ppcState.pagetable_base = htaborg<<16;
|
||||||
pagetable_hashmask = ((xx<<10)|0x3ff);
|
PowerPC::ppcState.pagetable_hashmask = ((xx<<10)|0x3ff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -821,7 +818,7 @@ u32 TranslatePageAddress(const u32 _Address, const XCheckTLBFlag _Flag)
|
|||||||
|
|
||||||
// hash function no 1 "xor" .360
|
// hash function no 1 "xor" .360
|
||||||
u32 hash1 = (VSID ^ page_index);
|
u32 hash1 = (VSID ^ page_index);
|
||||||
u32 pteg_addr = ((hash1 & pagetable_hashmask) << 6) | pagetable_base;
|
u32 pteg_addr = ((hash1 & PowerPC::ppcState.pagetable_hashmask) << 6) | PowerPC::ppcState.pagetable_base;
|
||||||
|
|
||||||
// hash1
|
// hash1
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
@ -856,7 +853,7 @@ u32 TranslatePageAddress(const u32 _Address, const XCheckTLBFlag _Flag)
|
|||||||
|
|
||||||
// hash function no 2 "not" .360
|
// hash function no 2 "not" .360
|
||||||
hash1 = ~hash1;
|
hash1 = ~hash1;
|
||||||
pteg_addr = ((hash1 & pagetable_hashmask) << 6) | pagetable_base;
|
pteg_addr = ((hash1 & PowerPC::ppcState.pagetable_hashmask) << 6) | PowerPC::ppcState.pagetable_base;
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
u32 pte = bswap(*(u32*)&pRAM[pteg_addr]);
|
u32 pte = bswap(*(u32*)&pRAM[pteg_addr]);
|
||||||
|
@ -138,6 +138,8 @@ void Init(int cpu_core)
|
|||||||
ppcState.itlb_last = 0;
|
ppcState.itlb_last = 0;
|
||||||
memset(ppcState.itlb_va, 0, sizeof(ppcState.itlb_va));
|
memset(ppcState.itlb_va, 0, sizeof(ppcState.itlb_va));
|
||||||
memset(ppcState.itlb_pa, 0, sizeof(ppcState.itlb_pa));
|
memset(ppcState.itlb_pa, 0, sizeof(ppcState.itlb_pa));
|
||||||
|
ppcState.pagetable_base = 0;
|
||||||
|
ppcState.pagetable_hashmask = 0;
|
||||||
|
|
||||||
ResetRegisters();
|
ResetRegisters();
|
||||||
PPCTables::InitTables(cpu_core);
|
PPCTables::InitTables(cpu_core);
|
||||||
|
@ -64,6 +64,9 @@ struct GC_ALIGNED64(PowerPCState)
|
|||||||
u32 itlb_va[128];
|
u32 itlb_va[128];
|
||||||
u32 itlb_pa[128];
|
u32 itlb_pa[128];
|
||||||
|
|
||||||
|
u32 pagetable_base;
|
||||||
|
u32 pagetable_hashmask;
|
||||||
|
|
||||||
InstructionCache iCache;
|
InstructionCache iCache;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ static Common::Event g_compressAndDumpStateSyncEvent;
|
|||||||
static std::thread g_save_thread;
|
static std::thread g_save_thread;
|
||||||
|
|
||||||
// Don't forget to increase this after doing changes on the savestate system
|
// Don't forget to increase this after doing changes on the savestate system
|
||||||
static const u32 STATE_VERSION = 18;
|
static const u32 STATE_VERSION = 19;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user