MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / GoemonPreloadTlb

Function GoemonPreloadTlb

pcsx2/vtlb.cpp:459–484  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

457}
458
459void GoemonPreloadTlb()
460{
461 // 0x3d5580 is the address of the TLB cache table
462 GoemonTlb* tlb = (GoemonTlb*)&eeMem->Main[0x3d5580];
463
464 for (u32 i = 0; i < 150; i++)
465 {
466 if (tlb[i].valid == 0x1 && tlb[i].low_add != tlb[i].high_add)
467 {
468
469 u32 size = tlb[i].high_add - tlb[i].low_add;
470 u32 vaddr = tlb[i].low_add;
471 u32 paddr = tlb[i].physical_add;
472
473 // TODO: The old code (commented below) seems to check specifically for handler 0. Is this really correct?
474 //if ((uptr)vtlbdata.vmap[vaddr>>VTLB_PAGE_BITS] == POINTER_SIGN_BIT) {
475 auto vmv = vtlbdata.vmap[vaddr >> VTLB_PAGE_BITS];
476 if (vmv.isHandler(vaddr) && vmv.assumeHandlerGetID() == 0)
477 {
478 DevCon.WriteLn("GoemonPreloadTlb: Entry %d. Key %x. From V:0x%8.8x to P:0x%8.8x (%d pages)", i, tlb[i].key, vaddr, paddr, size >> VTLB_PAGE_BITS);
479 vtlb_VMap(vaddr, paddr, size);
480 vtlb_VMap(0x20000000 | vaddr, paddr, size);
481 }
482 }
483 }
484}
485
486void GoemonUnloadTlb(u32 key)
487{

Callers 2

JRFunction · 0.85
PostLoadPrepFunction · 0.85

Calls 4

vtlb_VMapFunction · 0.85
assumeHandlerGetIDMethod · 0.80
isHandlerMethod · 0.45
WriteLnMethod · 0.45

Tested by

no test coverage detected