// Used to remap the VUmicro memory according to the VU0/VU1 dynarec setting. // (the VU memory operations are different for recs vs. interpreters) void memMapVUmicro() { vtlb_MapHandler(vu0_micro_mem[CHECK_VU0REC ? 0 : 1],0x11000000,0x00004000); vtlb_MapHandler(vu1_micro_mem[CHECK_VU1REC ? 0 : 1],0x11008000,0x00004000); vtlb_MapBlock(VU0.Mem,0x11004000,0x00004000,0x1000); vtlb_MapBlock(VU1.Mem,0x1100c000,0x00004000); }
void memMapVUmicro() { // VU0/VU1 micro mem (instructions) // (Like IOP memory, these are generally only used by the EE Bios kernel during // boot-up. Applications/games are "supposed" to use the thread-safe VIF instead; // or must ensure all VIF/GIF transfers are finished and all VUmicro execution stopped // prior to accessing VU memory directly). // The VU0 mapping actually repeats 4 times across the mapped range, but we don't bother // to manually mirror it here because the indirect memory handler for it (see vuMicroRead* // functions below) automatically mask and wrap the address for us. vtlb_MapHandler(vu0_micro_mem,0x11000000,0x00004000); vtlb_MapHandler(vu1_micro_mem,0x11008000,0x00004000); // VU0/VU1 memory (data) // VU0 is 4k, mirrored 4 times across a 16k area. vtlb_MapBlock(VU0.Mem,0x11004000,0x00004000,0x1000); vtlb_MapBlock(VU1.Mem,0x1100c000,0x00004000); }
void memMapPhy() { //Main mem vtlb_MapBlock(psM,0x00000000,Ps2MemSize::Base);//mirrored on first 256 mb ? //Rom vtlb_MapBlock(psR,0x1fc00000,Ps2MemSize::Rom);//Writable ? //Rom 1 vtlb_MapBlock(psR1,0x1e000000,Ps2MemSize::Rom1);//Writable ? //Rom 2 ? vtlb_MapBlock(psR2,0x1e400000,Ps2MemSize::Rom2);//Writable ? //EEProm ? vtlb_MapBlock(psER,0x1e040000,Ps2MemSize::ERom);//Writable ? //IOP mem vtlb_MapBlock(psxM,0x1c000000,0x00800000); //These fallback to mem* stuff ... vtlb_MapHandler(tlb_fallback_1,0x10000000,0x10000); vtlb_MapHandler(tlb_fallback_7,0x14000000,0x10000); vtlb_MapHandler(tlb_fallback_4,0x18000000,0x10000); vtlb_MapHandler(tlb_fallback_5,0x1a000000,0x10000); vtlb_MapHandler(tlb_fallback_6,0x12000000,0x10000); vtlb_MapHandler(tlb_fallback_8,0x1f000000,0x10000); vtlb_MapHandler(tlb_fallback_3,0x1f400000,0x10000); vtlb_MapHandler(tlb_fallback_2,0x1f800000,0x10000); vtlb_MapHandler(tlb_fallback_8,0x1f900000,0x10000); #ifdef PCSX2_DEVBUILD // Bind fallback handlers used for logging purposes only. // In release mode the Vtlb will map these addresses directly instead of using // the read/write handlers (which just issue logs and do normal memOps) #endif // map specific optimized page handlers for HW accesses vtlb_MapHandler(hw_by_page[0x0], 0x10000000, 0x01000); vtlb_MapHandler(hw_by_page[0x1], 0x10001000, 0x01000); vtlb_MapHandler(hw_by_page[0x2], 0x10002000, 0x01000); vtlb_MapHandler(hw_by_page[0x3], 0x10003000, 0x01000); vtlb_MapHandler(hw_by_page[0x4], 0x10004000, 0x01000); vtlb_MapHandler(hw_by_page[0x5], 0x10005000, 0x01000); vtlb_MapHandler(hw_by_page[0x6], 0x10006000, 0x01000); vtlb_MapHandler(hw_by_page[0x7], 0x10007000, 0x01000); vtlb_MapHandler(hw_by_page[0xb], 0x1000b000, 0x01000); vtlb_MapHandler(hw_by_page[0xe], 0x1000e000, 0x01000); vtlb_MapHandler(hw_by_page[0xf], 0x1000f000, 0x01000); vtlb_MapHandler(gs_page_0, 0x12000000, 0x01000); vtlb_MapHandler(gs_page_1, 0x12001000, 0x01000); }
void memMapPhy() { // Main memory vtlb_MapBlock(eeMem->Main, 0x00000000,Ps2MemSize::MainRam);//mirrored on first 256 mb ? // High memory, uninstalled on the configuration we emulate vtlb_MapHandler(null_handler, Ps2MemSize::MainRam, 0x10000000 - Ps2MemSize::MainRam); // Various ROMs (all read-only) vtlb_MapBlock(eeMem->ROM, 0x1fc00000,Ps2MemSize::Rom); vtlb_MapBlock(eeMem->ROM1, 0x1e000000,Ps2MemSize::Rom1); vtlb_MapBlock(eeMem->ROM2, 0x1e400000,Ps2MemSize::Rom2); vtlb_MapBlock(eeMem->EROM, 0x1e040000,Ps2MemSize::ERom); // IOP memory // (used by the EE Bios Kernel during initial hardware initialization, Apps/Games // are "supposed" to use the thread-safe SIF instead.) vtlb_MapBlock(iopMem->Main,0x1c000000,0x00800000); // Generic Handlers; These fallback to mem* stuff... vtlb_MapHandler(tlb_fallback_7,0x14000000, _64kb); vtlb_MapHandler(tlb_fallback_4,0x18000000, _64kb); vtlb_MapHandler(tlb_fallback_5,0x1a000000, _64kb); vtlb_MapHandler(tlb_fallback_6,0x12000000, _64kb); vtlb_MapHandler(tlb_fallback_8,0x1f000000, _64kb); vtlb_MapHandler(tlb_fallback_3,0x1f400000, _64kb); vtlb_MapHandler(tlb_fallback_2,0x1f800000, _64kb); vtlb_MapHandler(tlb_fallback_8,0x1f900000, _64kb); // Hardware Register Handlers : specialized/optimized per-page handling of HW register accesses // (note that hw_by_page handles are assigned in memReset prior to calling this function) for( uint i=0; i<16; ++i) vtlb_MapHandler(hw_by_page[i], 0x10000000 + (0x01000 * i), 0x01000); vtlb_MapHandler(gs_page_0, 0x12000000, 0x01000); vtlb_MapHandler(gs_page_1, 0x12001000, 0x01000); // "Secret" IOP HW mappings - Used by EE Bios Kernel during boot and generally // left untouched after that, as per EE/IOP thread safety rules. vtlb_MapHandler(iopHw_by_page_01, 0x1f801000, 0x01000); vtlb_MapHandler(iopHw_by_page_03, 0x1f803000, 0x01000); vtlb_MapHandler(iopHw_by_page_08, 0x1f808000, 0x01000); }