diff --git a/pkg/worker/caged/libretro/nanoarch/nanoarch.c b/pkg/worker/caged/libretro/nanoarch/nanoarch.c index 2bbd1883..cb474d98 100644 --- a/pkg/worker/caged/libretro/nanoarch/nanoarch.c +++ b/pkg/worker/caged/libretro/nanoarch/nanoarch.c @@ -4,6 +4,8 @@ #include #include +#define RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB (3 | 0x800000) + int initialized = 0; typedef struct { @@ -127,16 +129,41 @@ static bool clear_all_thread_waits_cb(unsigned v, void *data) { return true; } -void bridge_clear_all_thread_waits_cb(void *data) { - *(retro_environment_t *)data = clear_all_thread_waits_cb; -} - void bridge_retro_keyboard_callback(void *cb, bool down, unsigned keycode, uint32_t character, uint16_t keyModifiers) { (*(retro_keyboard_event_t *) cb)(down, keycode, character, keyModifiers); } bool core_environment_cgo(unsigned cmd, void *data) { bool coreEnvironment(unsigned, void *); + + switch (cmd) + { + case RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE: + return false; + break; + case RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE: + return false; + break; + case RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB: + *(retro_environment_t *)data = clear_all_thread_waits_cb; + return true; + break; + case RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS: + *(unsigned *)data = 4; + core_log_cgo(RETRO_LOG_DEBUG, "Set max users: %d\n", 4); + return true; + break; + case RETRO_ENVIRONMENT_GET_INPUT_BITMASKS: + return false; + case RETRO_ENVIRONMENT_SHUTDOWN: + return false; + break; + case RETRO_ENVIRONMENT_GET_SAVESTATE_CONTEXT: + if (data != NULL) *(int *)data = RETRO_SAVESTATE_CONTEXT_NORMAL; + return true; + break; + } + return coreEnvironment(cmd, data); } diff --git a/pkg/worker/caged/libretro/nanoarch/nanoarch.go b/pkg/worker/caged/libretro/nanoarch/nanoarch.go index 9d8447a0..40b3c231 100644 --- a/pkg/worker/caged/libretro/nanoarch/nanoarch.go +++ b/pkg/worker/caged/libretro/nanoarch/nanoarch.go @@ -23,8 +23,6 @@ import ( #include "libretro.h" #include "nanoarch.h" #include - -#define RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB (3 | 0x800000) */ import "C" @@ -771,13 +769,8 @@ func coreGetProcAddress(sym *C.char) C.retro_proc_address_t { //export coreEnvironment func coreEnvironment(cmd C.unsigned, data unsafe.Pointer) C.bool { - // spammy - switch cmd { - case C.RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE: - return false - case C.RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE: - return false - } + + // see core_environment_cgo switch cmd { case C.RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO: @@ -829,9 +822,6 @@ func coreEnvironment(cmd C.unsigned, data unsafe.Pointer) C.bool { return true } return false - case C.RETRO_ENVIRONMENT_SHUTDOWN: - //window.SetShouldClose(true) - return false case C.RETRO_ENVIRONMENT_GET_VARIABLE: if Nan0.options == nil { return false @@ -884,25 +874,10 @@ func coreEnvironment(cmd C.unsigned, data unsafe.Pointer) C.bool { //Nan0.log.Debug().Msgf("%v", cInfo.String()) } return true - case C.RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS: - *(*C.unsigned)(data) = C.unsigned(4) - Nan0.log.Debug().Msgf("Set max users: %v", 4) - return true case C.RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK: Nan0.log.Debug().Msgf("Keyboard event callback was set") Nan0.keyboardCb = (*C.struct_retro_keyboard_callback)(data) return true - case C.RETRO_ENVIRONMENT_GET_INPUT_BITMASKS: - Nan0.log.Debug().Msgf("Set input bitmasks: false") - return false - case C.RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB: - C.bridge_clear_all_thread_waits_cb(data) - return true - case C.RETRO_ENVIRONMENT_GET_SAVESTATE_CONTEXT: - if ctx := (*C.int)(data); ctx != nil { - *ctx = C.RETRO_SAVESTATE_CONTEXT_NORMAL - } - return true } return false } diff --git a/pkg/worker/caged/libretro/nanoarch/nanoarch.h b/pkg/worker/caged/libretro/nanoarch/nanoarch.h index c1e09462..1ad85f08 100644 --- a/pkg/worker/caged/libretro/nanoarch/nanoarch.h +++ b/pkg/worker/caged/libretro/nanoarch/nanoarch.h @@ -23,7 +23,6 @@ void bridge_retro_set_controller_port_device(void *f, unsigned port, unsigned de void bridge_retro_set_input_poll(void *f, void *callback); void bridge_retro_set_input_state(void *f, void *callback); void bridge_retro_set_video_refresh(void *f, void *callback); -void bridge_clear_all_thread_waits_cb(void *f); void bridge_retro_keyboard_callback(void *f, bool down, unsigned keycode, uint32_t character, uint16_t keyModifiers); bool core_environment_cgo(unsigned cmd, void *data);