Core: Get tlb addresses to be 64bit

This commit is contained in:
zilmar 2023-10-05 13:42:31 +10:30
parent 4b844495b7
commit 9f07fe2aac
8 changed files with 76 additions and 64 deletions

View File

@ -1030,34 +1030,43 @@ const char * CMipsMemoryVM::LabelName(uint32_t Address) const
return m_strLabelName; return m_strLabelName;
} }
void CMipsMemoryVM::TLB_Mapped(uint32_t VAddr, uint32_t Len, uint32_t PAddr, bool bReadOnly) void CMipsMemoryVM::TLB_Mapped(uint64_t VAddr, uint32_t Len, uint32_t PAddr, bool bReadOnly)
{ {
uint32_t VEnd = VAddr + Len; uint64_t VEnd = VAddr + Len;
for (uint32_t Address = VAddr; Address < VEnd; Address += 0x1000) for (uint64_t Address = VAddr; Address < VEnd; Address += 0x1000)
{ {
size_t Index = Address >> 12; if ((uint64_t)((int32_t)Address) != Address)
{
break;
}
size_t Index = (size_t)(Address >> 12);
if ((Address - VAddr + PAddr) < m_AllocatedRdramSize) if ((Address - VAddr + PAddr) < m_AllocatedRdramSize)
{ {
m_MemoryReadMap[Index] = (size_t)((m_RDRAM + (Address - VAddr + PAddr)) - Address); m_MemoryReadMap[Index] = (size_t)((m_RDRAM + (Address - VAddr + PAddr)) - Address);
} }
m_TLB_ReadMap[Index] = ((size_t)(Address - VAddr + PAddr)) - Address; m_TLB_ReadMap[Index] = (size_t)((Address - VAddr + PAddr) - Address);
if (!bReadOnly) if (!bReadOnly)
{ {
if ((Address - VAddr + PAddr) < m_AllocatedRdramSize) if ((Address - VAddr + PAddr) < m_AllocatedRdramSize)
{ {
m_MemoryWriteMap[Index] = (size_t)((m_RDRAM + (Address - VAddr + PAddr)) - Address); m_MemoryWriteMap[Index] = (size_t)((m_RDRAM + (Address - VAddr + PAddr)) - Address);
} }
m_TLB_WriteMap[Index] = ((size_t)(Address - VAddr + PAddr)) - Address; m_TLB_WriteMap[Index] = (size_t)((Address - VAddr + PAddr) - Address);
} }
} }
} }
void CMipsMemoryVM::TLB_Unmaped(uint32_t Vaddr, uint32_t Len) void CMipsMemoryVM::TLB_Unmaped(uint64_t Vaddr, uint32_t Len)
{ {
uint32_t End = Vaddr + Len; uint64_t End = Vaddr + Len;
for (uint32_t Address = Vaddr; Address < End; Address += 0x1000) for (uint64_t Address = Vaddr; Address < End && Address >= Vaddr; Address += 0x1000)
{ {
size_t Index = Address >> 12; if ((uint64_t)((int32_t)Address) != Address)
{
continue;
}
size_t Index = (size_t)(Address >> 12);
m_MemoryReadMap[Index] = (size_t)-1; m_MemoryReadMap[Index] = (size_t)-1;
m_MemoryWriteMap[Index] = (size_t)-1; m_MemoryWriteMap[Index] = (size_t)-1;
m_TLB_ReadMap[Index] = (uint32_t)-1; m_TLB_ReadMap[Index] = (uint32_t)-1;

View File

@ -122,8 +122,8 @@ public:
void UnProtectMemory(uint32_t StartVaddr, uint32_t EndVaddr); void UnProtectMemory(uint32_t StartVaddr, uint32_t EndVaddr);
// Functions for TLB notification // Functions for TLB notification
void TLB_Mapped(uint32_t VAddr, uint32_t Len, uint32_t PAddr, bool bReadOnly); void TLB_Mapped(uint64_t VAddr, uint32_t Len, uint32_t PAddr, bool bReadOnly);
void TLB_Unmaped(uint32_t Vaddr, uint32_t Len); void TLB_Unmaped(uint64_t Vaddr, uint32_t Len);
bool ValidVaddr(uint32_t VAddr) const; bool ValidVaddr(uint32_t VAddr) const;
bool VAddrToPAddr(uint32_t VAddr, uint32_t & PAddr) const; bool VAddrToPAddr(uint32_t VAddr, uint32_t & PAddr) const;

View File

@ -232,10 +232,10 @@ uint32_t * CSystemRegisters::_LLBit = nullptr;
CP0registers::CP0registers(uint64_t * _CP0) : CP0registers::CP0registers(uint64_t * _CP0) :
INDEX_REGISTER(_CP0[0]), INDEX_REGISTER(_CP0[0]),
RANDOM_REGISTER(_CP0[1]), RANDOM_REGISTER(_CP0[1]),
ENTRYLO0_REGISTER(_CP0[2]), ENTRYLO0_REGISTER((COP0EntryLo &)_CP0[2]),
ENTRYLO1_REGISTER(_CP0[3]), ENTRYLO1_REGISTER((COP0EntryLo &)_CP0[3]),
CONTEXT_REGISTER((COP0Context &)_CP0[4]), CONTEXT_REGISTER((COP0Context &)_CP0[4]),
PAGE_MASK_REGISTER(_CP0[5]), PAGE_MASK_REGISTER((COP0PageMask &)_CP0[5]),
WIRED_REGISTER(_CP0[6]), WIRED_REGISTER(_CP0[6]),
BAD_VADDR_REGISTER(_CP0[8]), BAD_VADDR_REGISTER(_CP0[8]),
COUNT_REGISTER(_CP0[9]), COUNT_REGISTER(_CP0[9]),

View File

@ -124,10 +124,10 @@ union COP0Context
struct struct
{ {
unsigned : 4; uint64_t : 4;
unsigned BadVPN2 : 19; uint64_t BadVPN2 : 19;
unsigned PTEBaseHi : 9; uint64_t PTEBaseHi : 9;
unsigned PTEBaseLo : 32; uint64_t PTEBaseLo : 32;
}; };
}; };
@ -210,10 +210,10 @@ protected:
public: public:
uint64_t & INDEX_REGISTER; uint64_t & INDEX_REGISTER;
uint64_t & RANDOM_REGISTER; uint64_t & RANDOM_REGISTER;
uint64_t & ENTRYLO0_REGISTER; COP0EntryLo & ENTRYLO0_REGISTER;
uint64_t & ENTRYLO1_REGISTER; COP0EntryLo & ENTRYLO1_REGISTER;
COP0Context & CONTEXT_REGISTER; COP0Context & CONTEXT_REGISTER;
uint64_t & PAGE_MASK_REGISTER; COP0PageMask & PAGE_MASK_REGISTER;
uint64_t & WIRED_REGISTER; uint64_t & WIRED_REGISTER;
uint64_t & BAD_VADDR_REGISTER; uint64_t & BAD_VADDR_REGISTER;
uint64_t & COUNT_REGISTER; uint64_t & COUNT_REGISTER;

View File

@ -76,19 +76,17 @@ TLB_ENTRY & CTLB::TlbEntry(int32_t Entry)
void CTLB::Probe() void CTLB::Probe()
{ {
int Counter;
WriteTrace(TraceTLB, TraceDebug, "Start"); WriteTrace(TraceTLB, TraceDebug, "Start");
m_Reg.INDEX_REGISTER |= 0x80000000; m_Reg.INDEX_REGISTER = 0x80000000;
for (Counter = 0; Counter < 32; Counter++) for (uint32_t i = 0; i < 32; i++)
{ {
if (!m_tlb[Counter].EntryDefined) if (!m_tlb[i].EntryDefined)
{ {
continue; continue;
} }
uint64_t & TlbEntryHiValue = m_tlb[Counter].EntryHi.Value; uint64_t & TlbEntryHiValue = m_tlb[i].EntryHi.Value;
uint32_t Mask = (uint32_t)(~m_tlb[Counter].PageMask.Mask << 13); uint32_t Mask = (uint32_t)(~m_tlb[i].PageMask.Mask << 13);
uint32_t TlbValueMasked = TlbEntryHiValue & Mask; uint32_t TlbValueMasked = TlbEntryHiValue & Mask;
uint32_t EntryHiMasked = m_Reg.ENTRYHI_REGISTER.Value & Mask; uint32_t EntryHiMasked = m_Reg.ENTRYHI_REGISTER.Value & Mask;
@ -97,8 +95,8 @@ void CTLB::Probe()
if ((TlbEntryHiValue & 0x100) != 0 || // Global if ((TlbEntryHiValue & 0x100) != 0 || // Global
((TlbEntryHiValue & 0xFF) == (m_Reg.ENTRYHI_REGISTER.Value & 0xFF))) // SameAsid ((TlbEntryHiValue & 0xFF) == (m_Reg.ENTRYHI_REGISTER.Value & 0xFF))) // SameAsid
{ {
m_Reg.INDEX_REGISTER = Counter; m_Reg.INDEX_REGISTER = i;
int FastIndx = Counter << 1; uint32_t FastIndx = i << 1;
m_FastTlb[FastIndx].Probed = true; m_FastTlb[FastIndx].Probed = true;
m_FastTlb[FastIndx + 1].Probed = true; m_FastTlb[FastIndx + 1].Probed = true;
return; return;
@ -112,27 +110,25 @@ void CTLB::ReadEntry()
{ {
uint32_t Index = m_Reg.INDEX_REGISTER & 0x1F; uint32_t Index = m_Reg.INDEX_REGISTER & 0x1F;
m_Reg.PAGE_MASK_REGISTER = m_tlb[Index].PageMask.Value; m_Reg.PAGE_MASK_REGISTER.Value = m_tlb[Index].PageMask.Value;
m_Reg.ENTRYHI_REGISTER.Value = (m_tlb[Index].EntryHi.Value & ~m_tlb[Index].PageMask.Value); m_Reg.ENTRYHI_REGISTER.Value = (m_tlb[Index].EntryHi.Value & ~m_tlb[Index].PageMask.Value);
m_Reg.ENTRYLO0_REGISTER = m_tlb[Index].EntryLo0.Value; m_Reg.ENTRYLO0_REGISTER.Value = m_tlb[Index].EntryLo0.Value;
m_Reg.ENTRYLO1_REGISTER = m_tlb[Index].EntryLo1.Value; m_Reg.ENTRYLO1_REGISTER.Value = m_tlb[Index].EntryLo1.Value;
} }
void CTLB::WriteEntry(uint32_t Index, bool Random) void CTLB::WriteEntry(uint32_t Index, bool Random)
{ {
uint32_t FastIndx; WriteTrace(TraceTLB, TraceDebug, "%02d %d %I64X %I64X %I64X %I64X", Index, Random, m_Reg.PAGE_MASK_REGISTER, m_Reg.ENTRYHI_REGISTER, m_Reg.ENTRYLO0_REGISTER, m_Reg.ENTRYLO1_REGISTER);
WriteTrace(TraceTLB, TraceDebug, "%02d %d %08X %08X %08X %08X ", Index, Random, m_Reg.PAGE_MASK_REGISTER, m_Reg.ENTRYHI_REGISTER, m_Reg.ENTRYLO0_REGISTER, m_Reg.ENTRYLO1_REGISTER);
// Check to see if entry is unmapping itself // Check to see if entry is unmapping itself
if (m_tlb[Index].EntryDefined) if (m_tlb[Index].EntryDefined)
{ {
FastIndx = Index << 1; uint32_t FastIndx = Index << 1;
if (*_PROGRAM_COUNTER >= m_FastTlb[FastIndx].VSTART && if (*_PROGRAM_COUNTER >= m_FastTlb[FastIndx].VSTART &&
*_PROGRAM_COUNTER < m_FastTlb[FastIndx].VEND && *_PROGRAM_COUNTER < m_FastTlb[FastIndx].VEND &&
m_FastTlb[FastIndx].ValidEntry && m_FastTlb[FastIndx].VALID) m_FastTlb[FastIndx].ValidEntry && m_FastTlb[FastIndx].VALID)
{ {
WriteTrace(TraceTLB, TraceDebug, "Ignored PC: %X VAddr Start: %X VEND: %X", *_PROGRAM_COUNTER, m_FastTlb[FastIndx].VSTART, m_FastTlb[FastIndx].VEND); WriteTrace(TraceTLB, TraceDebug, "Ignored PC: %X VAddr Start: %I64X VEND: %I64X", *_PROGRAM_COUNTER, m_FastTlb[FastIndx].VSTART, m_FastTlb[FastIndx].VEND);
return; return;
} }
if (*_PROGRAM_COUNTER >= m_FastTlb[FastIndx + 1].VSTART && if (*_PROGRAM_COUNTER >= m_FastTlb[FastIndx + 1].VSTART &&
@ -147,7 +143,7 @@ void CTLB::WriteEntry(uint32_t Index, bool Random)
// Reset old addresses // Reset old addresses
if (m_tlb[Index].EntryDefined) if (m_tlb[Index].EntryDefined)
{ {
for (FastIndx = Index << 1; FastIndx <= (Index << 1) + 1; FastIndx++) for (uint32_t FastIndx = Index << 1; FastIndx <= (Index << 1) + 1; FastIndx++)
{ {
if (!m_FastTlb[FastIndx].ValidEntry) if (!m_FastTlb[FastIndx].ValidEntry)
{ {
@ -157,14 +153,14 @@ void CTLB::WriteEntry(uint32_t Index, bool Random)
{ {
continue; continue;
} }
if (m_tlb[Index].PageMask.Value == m_Reg.PAGE_MASK_REGISTER && if (m_tlb[Index].PageMask.Value == m_Reg.PAGE_MASK_REGISTER.Value &&
m_tlb[Index].EntryHi.Value == m_Reg.ENTRYHI_REGISTER.Value) m_tlb[Index].EntryHi.Value == m_Reg.ENTRYHI_REGISTER.Value)
{ {
if (FastIndx == (Index << 1) && m_tlb[Index].EntryLo0.Value == m_Reg.ENTRYLO0_REGISTER) if (FastIndx == (Index << 1) && m_tlb[Index].EntryLo0.Value == m_Reg.ENTRYLO0_REGISTER.Value)
{ {
continue; continue;
} }
if (FastIndx != (Index << 1) && m_tlb[Index].EntryLo1.Value == m_Reg.ENTRYLO1_REGISTER) if (FastIndx != (Index << 1) && m_tlb[Index].EntryLo1.Value == m_Reg.ENTRYLO1_REGISTER.Value)
{ {
continue; continue;
} }
@ -174,10 +170,16 @@ void CTLB::WriteEntry(uint32_t Index, bool Random)
} }
// Fill in m_tlb entry // Fill in m_tlb entry
m_tlb[Index].PageMask.Value = (uint32_t)m_Reg.PAGE_MASK_REGISTER; bool Gloabl = m_Reg.ENTRYLO0_REGISTER.GLOBAL & m_Reg.ENTRYLO1_REGISTER.GLOBAL;
m_tlb[Index].EntryHi.Value = (uint32_t)m_Reg.ENTRYHI_REGISTER.Value; m_tlb[Index].PageMask.Value = m_Reg.PAGE_MASK_REGISTER.Value & 0x01554000;
m_tlb[Index].EntryLo0.Value = (uint32_t)m_Reg.ENTRYLO0_REGISTER; m_tlb[Index].PageMask.Value |= m_tlb[Index].PageMask.Value >> 1;
m_tlb[Index].EntryLo1.Value = (uint32_t)m_Reg.ENTRYLO1_REGISTER; m_tlb[Index].EntryHi = m_Reg.ENTRYHI_REGISTER;
m_tlb[Index].EntryLo0 = m_Reg.ENTRYLO0_REGISTER;
m_tlb[Index].EntryLo0.PFN = m_Reg.ENTRYLO0_REGISTER.PFN & 0xFFFFF;
m_tlb[Index].EntryLo0.GLOBAL = Gloabl;
m_tlb[Index].EntryLo1 = m_Reg.ENTRYLO1_REGISTER;
m_tlb[Index].EntryLo1.PFN = m_Reg.ENTRYLO1_REGISTER.PFN & 0xFFFFF;
m_tlb[Index].EntryLo1.GLOBAL = Gloabl;
m_tlb[Index].EntryDefined = true; m_tlb[Index].EntryDefined = true;
SetupTLB_Entry(Index, Random); SetupTLB_Entry(Index, Random);
if (g_Debugger != nullptr) if (g_Debugger != nullptr)
@ -199,10 +201,10 @@ void CTLB::SetupTLB_Entry(uint32_t Index, bool Random)
{ {
TLB_Unmaped(m_FastTlb[FastIndx].VSTART, m_FastTlb[FastIndx].Length); TLB_Unmaped(m_FastTlb[FastIndx].VSTART, m_FastTlb[FastIndx].Length);
} }
m_FastTlb[FastIndx].Length = (uint32_t)((m_tlb[Index].PageMask.Mask << 12) + 0xFFF); m_FastTlb[FastIndx].Length = (m_tlb[Index].PageMask.Mask << 12) + 0xFFF;
m_FastTlb[FastIndx].VSTART = (uint32_t)(m_tlb[Index].EntryHi.VPN2 << 13); m_FastTlb[FastIndx].VSTART = m_tlb[Index].EntryHi.R << 62 | m_tlb[Index].EntryHi.VPN2 << 13;
m_FastTlb[FastIndx].VEND = m_FastTlb[FastIndx].VSTART + m_FastTlb[FastIndx].Length; m_FastTlb[FastIndx].VEND = m_FastTlb[FastIndx].VSTART + m_FastTlb[FastIndx].Length;
m_FastTlb[FastIndx].PHYSSTART = (uint32_t)(m_tlb[Index].EntryLo0.PFN << 12); m_FastTlb[FastIndx].PHYSSTART = m_tlb[Index].EntryLo0.PFN << 12;
m_FastTlb[FastIndx].PHYSEND = m_FastTlb[FastIndx].PHYSSTART + m_FastTlb[FastIndx].Length; m_FastTlb[FastIndx].PHYSEND = m_FastTlb[FastIndx].PHYSSTART + m_FastTlb[FastIndx].Length;
m_FastTlb[FastIndx].VALID = m_tlb[Index].EntryLo0.V; m_FastTlb[FastIndx].VALID = m_tlb[Index].EntryLo0.V;
m_FastTlb[FastIndx].DIRTY = m_tlb[Index].EntryLo0.D; m_FastTlb[FastIndx].DIRTY = m_tlb[Index].EntryLo0.D;
@ -216,10 +218,10 @@ void CTLB::SetupTLB_Entry(uint32_t Index, bool Random)
{ {
TLB_Unmaped(m_FastTlb[FastIndx].VSTART, m_FastTlb[FastIndx].Length); TLB_Unmaped(m_FastTlb[FastIndx].VSTART, m_FastTlb[FastIndx].Length);
} }
m_FastTlb[FastIndx].Length = (uint32_t)((m_tlb[Index].PageMask.Mask << 12) + 0xFFF); m_FastTlb[FastIndx].Length = (m_tlb[Index].PageMask.Mask << 12) + 0xFFF;
m_FastTlb[FastIndx].VSTART = (uint32_t)((m_tlb[Index].EntryHi.VPN2 << 13) + (m_FastTlb[FastIndx].Length + 1)); m_FastTlb[FastIndx].VSTART = (m_tlb[Index].EntryHi.R << 62 | (m_tlb[Index].EntryHi.VPN2 << 13)) + (m_FastTlb[FastIndx].Length + 1);
m_FastTlb[FastIndx].VEND = m_FastTlb[FastIndx].VSTART + m_FastTlb[FastIndx].Length; m_FastTlb[FastIndx].VEND = m_FastTlb[FastIndx].VSTART + m_FastTlb[FastIndx].Length;
m_FastTlb[FastIndx].PHYSSTART = (uint32_t)(m_tlb[Index].EntryLo1.PFN << 12); m_FastTlb[FastIndx].PHYSSTART = m_tlb[Index].EntryLo1.PFN << 12;
m_FastTlb[FastIndx].PHYSEND = m_FastTlb[FastIndx].PHYSSTART + m_FastTlb[FastIndx].Length; m_FastTlb[FastIndx].PHYSEND = m_FastTlb[FastIndx].PHYSSTART + m_FastTlb[FastIndx].Length;
m_FastTlb[FastIndx].VALID = m_tlb[Index].EntryLo1.V; m_FastTlb[FastIndx].VALID = m_tlb[Index].EntryLo1.V;
m_FastTlb[FastIndx].DIRTY = m_tlb[Index].EntryLo1.D; m_FastTlb[FastIndx].DIRTY = m_tlb[Index].EntryLo1.D;

View File

@ -26,8 +26,8 @@ class CTLB :
struct FASTTLB struct FASTTLB
{ {
uint32_t VSTART; uint64_t VSTART;
uint32_t VEND; uint64_t VEND;
uint32_t PHYSSTART; uint32_t PHYSSTART;
uint32_t PHYSEND; uint32_t PHYSEND;
uint32_t Length; uint32_t Length;
@ -46,9 +46,10 @@ public:
void Reset(bool InvalidateTLB); void Reset(bool InvalidateTLB);
void Probe(); void Probe();
void ReadEntry(); void ReadEntry();
void WriteEntry(uint32_t index, bool Random); void WriteEntry(uint32_t Index, bool Random);
bool AddressDefined(uint64_t VAddr); bool AddressDefined(uint64_t VAddr);
TLB_ENTRY & TlbEntry(int32_t Entry); TLB_ENTRY & TlbEntry(int32_t Entry);
bool PAddrToVAddr(uint32_t PAddr, uint32_t & VAddr, uint32_t & Index); bool PAddrToVAddr(uint32_t PAddr, uint32_t & VAddr, uint32_t & Index);
void RecordDifference(CLog & LogFile, const CTLB & rTLB); void RecordDifference(CLog & LogFile, const CTLB & rTLB);
@ -60,7 +61,7 @@ private:
CTLB(const CTLB &); CTLB(const CTLB &);
CTLB & operator=(const CTLB &); CTLB & operator=(const CTLB &);
void SetupTLB_Entry(uint32_t index, bool Random); void SetupTLB_Entry(uint32_t Index, bool Random);
void TLB_Unmaped(uint32_t VAddr, uint32_t Len); void TLB_Unmaped(uint32_t VAddr, uint32_t Len);
CMipsMemoryVM & m_MMU; CMipsMemoryVM & m_MMU;

View File

@ -134,10 +134,10 @@ void CRegisterTabs::RefreshEdits()
m_COP0Edits[0].SetValue((uint32_t)g_Reg->INDEX_REGISTER, DisplayMode::ZeroExtend); m_COP0Edits[0].SetValue((uint32_t)g_Reg->INDEX_REGISTER, DisplayMode::ZeroExtend);
m_COP0Edits[1].SetValue((uint32_t)g_Reg->RANDOM_REGISTER, DisplayMode::ZeroExtend); m_COP0Edits[1].SetValue((uint32_t)g_Reg->RANDOM_REGISTER, DisplayMode::ZeroExtend);
m_COP0Edits[2].SetValue((uint32_t)g_Reg->ENTRYLO0_REGISTER, DisplayMode::ZeroExtend); m_COP0Edits[2].SetValue((uint32_t)g_Reg->ENTRYLO0_REGISTER.Value, DisplayMode::ZeroExtend);
m_COP0Edits[3].SetValue((uint32_t)g_Reg->ENTRYLO1_REGISTER, DisplayMode::ZeroExtend); m_COP0Edits[3].SetValue((uint32_t)g_Reg->ENTRYLO1_REGISTER.Value, DisplayMode::ZeroExtend);
m_COP0Edits[4].SetValue((uint32_t)g_Reg->CONTEXT_REGISTER.Value, DisplayMode::ZeroExtend); m_COP0Edits[4].SetValue((uint32_t)g_Reg->CONTEXT_REGISTER.Value, DisplayMode::ZeroExtend);
m_COP0Edits[5].SetValue((uint32_t)g_Reg->PAGE_MASK_REGISTER, DisplayMode::ZeroExtend); m_COP0Edits[5].SetValue((uint32_t)g_Reg->PAGE_MASK_REGISTER.Value, DisplayMode::ZeroExtend);
m_COP0Edits[6].SetValue((uint32_t)g_Reg->WIRED_REGISTER, DisplayMode::ZeroExtend); m_COP0Edits[6].SetValue((uint32_t)g_Reg->WIRED_REGISTER, DisplayMode::ZeroExtend);
m_COP0Edits[7].SetValue((uint32_t)g_Reg->BAD_VADDR_REGISTER, DisplayMode::ZeroExtend); m_COP0Edits[7].SetValue((uint32_t)g_Reg->BAD_VADDR_REGISTER, DisplayMode::ZeroExtend);
m_COP0Edits[8].SetValue((uint32_t)g_Reg->COUNT_REGISTER, DisplayMode::ZeroExtend); m_COP0Edits[8].SetValue((uint32_t)g_Reg->COUNT_REGISTER, DisplayMode::ZeroExtend);
@ -313,10 +313,10 @@ void CRegisterTabs::RegisterChanged(HWND hDlg, TAB_ID srcTabId, WPARAM wParam)
{ {
case IDC_COP0_0_EDIT: g_Reg->INDEX_REGISTER = value; break; case IDC_COP0_0_EDIT: g_Reg->INDEX_REGISTER = value; break;
case IDC_COP0_1_EDIT: g_Reg->RANDOM_REGISTER = value; break; case IDC_COP0_1_EDIT: g_Reg->RANDOM_REGISTER = value; break;
case IDC_COP0_2_EDIT: g_Reg->ENTRYLO0_REGISTER = value; break; case IDC_COP0_2_EDIT: g_Reg->ENTRYLO0_REGISTER.Value = value; break;
case IDC_COP0_3_EDIT: g_Reg->ENTRYLO1_REGISTER = value; break; case IDC_COP0_3_EDIT: g_Reg->ENTRYLO1_REGISTER.Value = value; break;
case IDC_COP0_4_EDIT: g_Reg->CONTEXT_REGISTER.Value = value; break; case IDC_COP0_4_EDIT: g_Reg->CONTEXT_REGISTER.Value = value; break;
case IDC_COP0_5_EDIT: g_Reg->PAGE_MASK_REGISTER = value; break; case IDC_COP0_5_EDIT: g_Reg->PAGE_MASK_REGISTER.Value = value; break;
case IDC_COP0_6_EDIT: g_Reg->WIRED_REGISTER = value; break; case IDC_COP0_6_EDIT: g_Reg->WIRED_REGISTER = value; break;
case IDC_COP0_7_EDIT: g_Reg->BAD_VADDR_REGISTER = value; break; case IDC_COP0_7_EDIT: g_Reg->BAD_VADDR_REGISTER = value; break;
case IDC_COP0_8_EDIT: g_Reg->COUNT_REGISTER = value; break; case IDC_COP0_8_EDIT: g_Reg->COUNT_REGISTER = value; break;

View File

@ -265,7 +265,7 @@ void CDebugTlb::RefreshTLBWindow(void)
if (FastTlb[count].ValidEntry && FastTlb[count].VALID) if (FastTlb[count].ValidEntry && FastTlb[count].VALID)
{ {
swprintf(Output, sizeof(Output), L"%08X:%08X -> %08X:%08X", FastTlb[count].VSTART, FastTlb[count].VEND, swprintf(Output, sizeof(Output), L"%I64X:%I64X -> %08X:%08X", FastTlb[count].VSTART, FastTlb[count].VEND,
FastTlb[count].PHYSSTART, FastTlb[count].PHYSEND); FastTlb[count].PHYSSTART, FastTlb[count].PHYSEND);
} }
else else