diff options
Diffstat (limited to 'patches/fake-08')
-rw-r--r-- | patches/fake-08/0001-fix-resume-state.patch | 81 | ||||
-rw-r--r-- | patches/fake-08/1000-funkey-s-build.patch | 17 |
2 files changed, 98 insertions, 0 deletions
diff --git a/patches/fake-08/0001-fix-resume-state.patch b/patches/fake-08/0001-fix-resume-state.patch new file mode 100644 index 0000000..b3d73bc --- /dev/null +++ b/patches/fake-08/0001-fix-resume-state.patch @@ -0,0 +1,81 @@ +diff --git a/platform/libretro/libretro.cpp b/platform/libretro/libretro.cpp +index 927ea8d4b8d1658a1d7521fe7e9abcbdede0ba5f..63a43f3f065344cdf45e0b10e5c9c089736695f2 100644 +--- a/platform/libretro/libretro.cpp ++++ b/platform/libretro/libretro.cpp +@@ -82,6 +82,46 @@ EXPORT void retro_set_audio_sample_batch(retro_audio_sample_batch_t cb) { audio_ + EXPORT void retro_set_input_poll(retro_input_poll_t cb) { input_poll_cb = cb; } + EXPORT void retro_set_input_state(retro_input_state_t cb) { input_state_cb = cb; } + ++ ++static int frames = 0; ++static int defer_frames = 2; ++static void* deferred_data = NULL; ++static size_t deferred_size = 0; ++ ++static void free_deferred_data(void) { ++ if (deferred_size) { ++ if (log_cb) log_cb(RETRO_LOG_INFO, "Freed deferred save state.\n"); ++ free(deferred_data); ++ deferred_data = NULL; ++ deferred_size = 0; ++ } ++} ++ ++static void defer_unserialize(const void *data, size_t size) { ++ free_deferred_data(); ++ ++ if (data==NULL || size<=0) return; ++ ++ if (log_cb) log_cb(RETRO_LOG_INFO, "Deferred save state load.\n"); ++ ++ deferred_data = malloc(size); ++ memcpy(deferred_data, data, size); ++ deferred_size = size; ++} ++static void update_deferred(void) { ++ frames += 1; ++ ++ if (frames<defer_frames) return; ++ ++ if (deferred_size==0) return; ++ ++ retro_unserialize(deferred_data, deferred_size); ++ ++ if (log_cb) log_cb(RETRO_LOG_INFO, "Loaded deferred save state.\n"); ++ ++ free_deferred_data(); ++} ++ + EXPORT void retro_init() + { + retro_log_callback log; +@@ -132,6 +172,8 @@ EXPORT void retro_deinit() + if (log_cb) { + log_cb(RETRO_LOG_INFO, "Retro deinit called. tearing down\n"); + } ++ free_deferred_data(); ++ + //delete things created in init + _vm->CloseCart(); + _host->oneTimeCleanup(); +@@ -205,6 +247,8 @@ int flip = 0; + + EXPORT void retro_run() + { ++ if (frames<defer_frames) update_deferred(); ++ + //TODO: improve this so slower hardware can play 30fps games at full speed + if (_vm->getTargetFps() == 60 || frame % 2 == 0) + { +@@ -396,6 +440,11 @@ EXPORT bool retro_serialize(void *data, size_t size) + + EXPORT bool retro_unserialize(const void *data, size_t size) + { ++ if (frames<defer_frames) { ++ defer_unserialize(data,size); ++ return true; ++ } ++ + if (log_cb) { + log_cb(RETRO_LOG_INFO, "lua deserialize\n"); + } diff --git a/patches/fake-08/1000-funkey-s-build.patch b/patches/fake-08/1000-funkey-s-build.patch new file mode 100644 index 0000000..e5f5046 --- /dev/null +++ b/patches/fake-08/1000-funkey-s-build.patch @@ -0,0 +1,17 @@ +diff --git a/platform/libretro/Makefile b/platform/libretro/Makefile +index 420f9b7..b247ec0 100644 +--- a/platform/libretro/Makefile ++++ b/platform/libretro/Makefile +@@ -123,7 +123,11 @@ else ifeq ($(platform), miyoomini) + CXXFLAGS += -marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7ve + fpic := -fPIC + SHARED := -shared -Wl,--version-script=link.T +- ++else ifeq ($(platform), classic_armv7_a7) ++ TARGET := $(TARGET_NAME)_libretro.so ++ CXXFLAGS += -marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7ve ++ fpic := -fPIC ++ SHARED := -shared -Wl,--version-script=link.T + else ifeq ($(platform), gcw0) + TARGET := $(TARGET_NAME)_libretro_gcw0.so + CC = /opt/gcw0-toolchain/usr/bin/mipsel-linux-gcc |