diff options
Diffstat (limited to 'libretro.c')
-rw-r--r-- | libretro.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -22,7 +22,8 @@ static inline int align(int x, int n) { #define MB_ALIGN(x) align(x, 20) int _newlib_vm_size_user = ROM_TRANSLATION_CACHE_SIZE + - RAM_TRANSLATION_CACHE_SIZE; + RAM_TRANSLATION_CACHE_SIZE + + BIOS_TRANSLATION_CACHE_SIZE; int getVMBlock(); @@ -460,6 +461,8 @@ void retro_init(void) PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0); ram_translation_cache = mmap(NULL, RAM_TRANSLATION_CACHE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0); + bios_translation_cache = mmap(NULL, BIOS_TRANSLATION_CACHE_SIZE, + PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0); #elif defined(_3DS) if (__ctr_svchax && !translation_caches_inited) { @@ -468,6 +471,7 @@ void retro_init(void) rom_translation_cache_ptr = memalign(0x1000, ROM_TRANSLATION_CACHE_SIZE); ram_translation_cache_ptr = memalign(0x1000, RAM_TRANSLATION_CACHE_SIZE); + bios_translation_cache_ptr = memalign(0x1000, BIOS_TRANSLATION_CACHE_SIZE); svcDuplicateHandle(¤tHandle, 0xFFFF8001); svcControlProcessMemory(currentHandle, @@ -476,9 +480,13 @@ void retro_init(void) svcControlProcessMemory(currentHandle, ram_translation_cache, ram_translation_cache_ptr, RAM_TRANSLATION_CACHE_SIZE, MEMOP_MAP, 0b111); + svcControlProcessMemory(currentHandle, + bios_translation_cache, bios_translation_cache_ptr, + BIOS_TRANSLATION_CACHE_SIZE, MEMOP_MAP, 0b111); svcCloseHandle(currentHandle); rom_translation_ptr = rom_translation_cache; ram_translation_ptr = ram_translation_cache; + bios_translation_ptr = bios_translation_cache; ctr_flush_invalidate_cache(); translation_caches_inited = 1; } @@ -502,8 +510,10 @@ void retro_init(void) rom_translation_cache = (u8*)currentHandle; ram_translation_cache = rom_translation_cache + ROM_TRANSLATION_CACHE_SIZE; + bios_translation_cache = ram_translation_cache + RAM_TRANSLATION_CACHE_SIZE; rom_translation_ptr = rom_translation_cache; ram_translation_ptr = ram_translation_cache; + bios_translation_ptr = bios_translation_cache; sceKernelOpenVMDomain(); translation_caches_inited = 1; } @@ -550,6 +560,7 @@ void retro_deinit(void) #if defined(HAVE_MMAP) && defined(HAVE_DYNAREC) munmap(rom_translation_cache, ROM_TRANSLATION_CACHE_SIZE); munmap(ram_translation_cache, RAM_TRANSLATION_CACHE_SIZE); + munmap(bios_translation_cache, BIOS_TRANSLATION_CACHE_SIZE); #endif #if defined(_3DS) && defined(HAVE_DYNAREC) @@ -563,9 +574,13 @@ void retro_deinit(void) svcControlProcessMemory(currentHandle, ram_translation_cache, ram_translation_cache_ptr, RAM_TRANSLATION_CACHE_SIZE, MEMOP_UNMAP, 0b111); + svcControlProcessMemory(currentHandle, + bios_translation_cache, bios_translation_cache_ptr, + BIOS_TRANSLATION_CACHE_SIZE, MEMOP_UNMAP, 0b111); svcCloseHandle(currentHandle); free(rom_translation_cache_ptr); free(ram_translation_cache_ptr); + free(bios_translation_cache_ptr); translation_caches_inited = 0; } #endif @@ -976,7 +991,7 @@ bool retro_load_game(const struct retro_game_info* info) memset(gamepak_backup, -1, sizeof(gamepak_backup)); gamepak_filename[0] = 0; - if (load_gamepak(info, info->path) != 0) + if (load_gamepak(info->path) != 0) { error_msg("Could not load the game file."); return false; |