summaryrefslogtreecommitdiff
path: root/libretro.c
diff options
context:
space:
mode:
authorFrancisco José García García2016-08-08 00:31:21 +0200
committerFrancisco José García García2016-08-08 00:31:21 +0200
commit6ab0992ecfe714cb31f67038c4d5c92ab23204a9 (patch)
treea1033bb0339d2b52656a494b00c6418539f20e17 /libretro.c
parent70fff8152ff39b6a781c4331c20963ef1fc4f8a2 (diff)
downloadpicogpsp-6ab0992ecfe714cb31f67038c4d5c92ab23204a9.tar.gz
picogpsp-6ab0992ecfe714cb31f67038c4d5c92ab23204a9.tar.bz2
picogpsp-6ab0992ecfe714cb31f67038c4d5c92ab23204a9.zip
(VITA) Dynarec WIP
Diffstat (limited to 'libretro.c')
-rw-r--r--libretro.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/libretro.c b/libretro.c
index 983a826..0de5075 100644
--- a/libretro.c
+++ b/libretro.c
@@ -8,6 +8,12 @@
#include "libretro.h"
#include "memmap.h"
+
+#if defined(VITA)
+#include <psp2/kernel/sysmem.h>
+static int translation_caches_inited = 0;
+#endif
+
#if defined(_3DS)
void* linearMemAlign(size_t size, size_t alignment);
void linearFree(void* mem);
@@ -118,6 +124,7 @@ void retro_get_system_av_info(struct retro_system_av_info* info)
void retro_init(void)
{
+
#if defined(_3DS) && defined(HAVE_DYNAREC)
if (__ctr_svchax && !translation_caches_inited)
{
@@ -145,6 +152,35 @@ void retro_init(void)
}
#endif
+#if defined(VITA)
+ if(!translation_caches_inited){
+ void* currentHandle;
+
+ sceBlock = sceKernelAllocMemBlockForVM("code", ROM_TRANSLATION_CACHE_SIZE +
+ RAM_TRANSLATION_CACHE_SIZE +
+ BIOS_TRANSLATION_CACHE_SIZE);
+ if (sceBlock < 0)
+ {
+ return sceBlock;
+ }
+
+ // get base address
+ int ret = sceKernelGetMemBlockBase(sceBlock, &currentHandle);
+ if (ret < 0)
+ {
+ return ret;
+ }
+ 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;
+ translation_caches_inited = 1;
+}
+
+#endif
+
if (!gamepak_rom)
init_gamepak_buffer();
init_sound(1);
@@ -190,6 +226,15 @@ void retro_deinit(void)
translation_caches_inited = 0;
}
#endif
+
+#if defined(VITA)
+ if(translation_caches_inited){
+ sceKernelFreeMemBlock(sceBlock);
+
+ translation_caches_inited = 0;
+ }
+#endif
+
#ifdef _3DS
linearFree(gba_screen_pixels);
#else