summaryrefslogtreecommitdiff
path: root/retro_emu_thread.h
diff options
context:
space:
mode:
authorjdgleaver2020-10-23 15:22:56 +0100
committerjdgleaver2020-10-23 15:37:48 +0100
commit00406feed91e4a6b2b398093fee937ee5f5bdfdc (patch)
treee7eb952b728f800a9336ffb99442609df2d223de /retro_emu_thread.h
parente5bb2ffdd21ef83baf15152969e36dcf23bf80f1 (diff)
downloadpicogpsp-00406feed91e4a6b2b398093fee937ee5f5bdfdc.tar.gz
picogpsp-00406feed91e4a6b2b398093fee937ee5f5bdfdc.tar.bz2
picogpsp-00406feed91e4a6b2b398093fee937ee5f5bdfdc.zip
Add build-time option to run the emulator in a thread instead of libco (fixes OpenDingux target)
Diffstat (limited to 'retro_emu_thread.h')
-rw-r--r--retro_emu_thread.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/retro_emu_thread.h b/retro_emu_thread.h
new file mode 100644
index 0000000..472ae8b
--- /dev/null
+++ b/retro_emu_thread.h
@@ -0,0 +1,51 @@
+#ifndef EMU_THREAD_H
+#define EMU_THREAD_H
+
+#include "common.h"
+
+/* gpSP doesn't have a top-level main loop that we can use, so instead we run it in its own thread
+ * and switch between it and the main thread. Calling this function will block the current thread
+ * and unblock the other.
+ *
+ * This function can be called from either the main or the emulation thread.
+ */
+void retro_switch_thread(void);
+
+/* Initialize the emulation thread and any related resources.
+ *
+ * Only call this function from the main thread.
+ */
+bool retro_init_emu_thread(bool dynarec, u32 cycles);
+
+/* Destroy the emulation thread and any related resources. Only call this after the emulation thread
+ * has finished (or canceled) and joined.
+ *
+ * Only call this function from the main thread.
+ */
+void retro_deinit_emu_thread(void);
+
+/* Returns true if the emulation thread was initialized successfully.
+ *
+ * This function can be called from either the main or the emulation thread.
+ */
+bool retro_is_emu_thread_initialized(void);
+
+/* Join the emulation thread. The thread must have exited naturally or been canceled.
+ *
+ * Only call this function from the main thread.
+ */
+void retro_join_emu_thread(void);
+
+/* Cancel the emulation thread.
+ *
+ * Only call this function from the main thread.
+ */
+void retro_cancel_emu_thread(void);
+
+/* Returns true if the emulation thread has exited naturally.
+ *
+ * This function can be called from either the main or the emulation thread.
+ */
+bool retro_emu_thread_exited(void);
+
+#endif