From 7e66a9af8494aa4eeefcf7c43ab0d33478c7d2f1 Mon Sep 17 00:00:00 2001 From: dcvz Date: Tue, 28 May 2024 01:07:50 +0200 Subject: [PATCH] Updates for game registering --- librecomp/include/recomp_game.h | 3 ++- librecomp/src/recomp.cpp | 14 +++----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/librecomp/include/recomp_game.h b/librecomp/include/recomp_game.h index 788a7fd..f9b997d 100644 --- a/librecomp/include/recomp_game.h +++ b/librecomp/include/recomp_game.h @@ -16,7 +16,8 @@ namespace recomp { std::span cache_data; bool is_enabled; - void (*entrypoint)(); + gpr entrypoint_address; + void (*entrypoint)(uint8_t* rdram, recomp_context* context); std::u8string stored_filename() const; }; diff --git a/librecomp/src/recomp.cpp b/librecomp/src/recomp.cpp index 374859e..150e5df 100644 --- a/librecomp/src/recomp.cpp +++ b/librecomp/src/recomp.cpp @@ -346,24 +346,16 @@ void run_thread_function(uint8_t* rdram, uint64_t addr, uint64_t sp, uint64_t ar func(rdram, &ctx); } -// Recomp generation functions -extern "C" void recomp_entrypoint(uint8_t * rdram, recomp_context * ctx); -gpr get_entrypoint_address(); -const char* get_rom_name(); - void read_patch_data(uint8_t* rdram, gpr patch_data_address) { for (size_t i = 0; i < patch_data.size(); i++) { MEM_B(i, patch_data_address) = patch_data[i]; } } -void init(uint8_t* rdram, recomp_context* ctx) { +void init(uint8_t* rdram, recomp_context* ctx, gpr entrypoint) { // Initialize the overlays init_overlays(); - // Get entrypoint from recomp function - gpr entrypoint = get_entrypoint_address(); - // Load overlays in the first 1MB load_overlays(0x1000, (int32_t)entrypoint, 1024 * 1024); @@ -483,9 +475,9 @@ void recomp::start(ultramodern::WindowHandle window_handle, const recomp::rsp::c const recomp::GameEntry& game_entry = find_it->second; ultramodern::load_shader_cache(game_entry.cache_data); - init(rdram, &context); + init(rdram, &context, game_entry.entrypoint_address); try { - recomp_entrypoint(rdram, &context); + game_entry.entrypoint(rdram, &context); } catch (ultramodern::thread_terminated& terminated) { }