mirror of
https://github.com/N64Recomp/N64ModernRuntime.git
synced 2026-05-10 19:01:53 +00:00
Add ultramodern::set_callbacks and some other cleanups
This commit is contained in:
parent
048a3172d7
commit
06a8c5070a
11 changed files with 75 additions and 38 deletions
|
|
@ -38,8 +38,8 @@ namespace recomp {
|
|||
void set_rom_contents(std::vector<uint8_t>&& new_rom);
|
||||
void do_rom_read(uint8_t* rdram, gpr ram_address, uint32_t physical_addr, size_t num_bytes);
|
||||
void do_rom_pio(uint8_t* rdram, gpr ram_address, uint32_t physical_addr);
|
||||
void start(ultramodern::WindowHandle window_handle, const ultramodern::audio_callbacks_t& audio_callbacks, const ultramodern::input_callbacks_t& input_callbacks, const ultramodern::gfx_callbacks_t& gfx_callbacks, const ultramodern::rsp::rsp_callbacks_t& rsp_callbacks_);
|
||||
void start_game(std::u8string game_id);
|
||||
void start(ultramodern::WindowHandle window_handle, const ultramodern::audio_callbacks_t& audio_callbacks, const ultramodern::input_callbacks_t& input_callbacks, const ultramodern::gfx_callbacks_t& gfx_callbacks, const ultramodern::rsp::callbacks_t& rsp_callbacks, const ultramodern::events::callbacks_t& thread_callbacks, const ultramodern::error_handling::callbacks_t& error_handling_callbacks_);
|
||||
void start_game(const std::u8string& game_id);
|
||||
void message_box(const char* message);
|
||||
std::filesystem::path get_app_folder_path();
|
||||
std::u8string current_game_id();
|
||||
|
|
|
|||
|
|
@ -402,7 +402,7 @@ std::u8string recomp::current_game_id() {
|
|||
return current_game.value();
|
||||
};
|
||||
|
||||
void recomp::start_game(std::u8string game_id) {
|
||||
void recomp::start_game(const std::u8string& game_id) {
|
||||
std::lock_guard<std::mutex> lock(current_game_mutex);
|
||||
current_game = game_id;
|
||||
game_status.store(GameStatus::Running);
|
||||
|
|
@ -412,7 +412,6 @@ bool ultramodern::is_game_started() {
|
|||
return game_status.load() != GameStatus::None;
|
||||
}
|
||||
|
||||
void set_audio_callbacks(const ultramodern::audio_callbacks_t& callbacks);
|
||||
void set_input_callbacks(const ultramodern::input_callbacks_t& callback);
|
||||
|
||||
std::atomic_bool exited = false;
|
||||
|
|
@ -426,11 +425,12 @@ void ultramodern::quit() {
|
|||
current_game.reset();
|
||||
}
|
||||
|
||||
void recomp::start(ultramodern::WindowHandle window_handle, const ultramodern::audio_callbacks_t& audio_callbacks, const ultramodern::input_callbacks_t& input_callbacks, const ultramodern::gfx_callbacks_t& gfx_callbacks_, const ultramodern::rsp::rsp_callbacks_t& rsp_callbacks_) {
|
||||
void recomp::start(ultramodern::WindowHandle window_handle, const ultramodern::audio_callbacks_t& audio_callbacks, const ultramodern::input_callbacks_t& input_callbacks, const ultramodern::gfx_callbacks_t& gfx_callbacks_, const ultramodern::rsp::callbacks_t& rsp_callbacks_, const ultramodern::events::callbacks_t& thread_callbacks_, const ultramodern::error_handling::callbacks_t& error_handling_callbacks_) {
|
||||
recomp::check_all_stored_roms();
|
||||
set_audio_callbacks(audio_callbacks);
|
||||
|
||||
ultramodern::set_callbacks(audio_callbacks, input_callbacks, gfx_callbacks_, rsp_callbacks_, thread_callbacks_, error_handling_callbacks_);
|
||||
|
||||
set_input_callbacks(input_callbacks);
|
||||
ultramodern::rsp::set_callbacks(rsp_callbacks_);
|
||||
|
||||
ultramodern::gfx_callbacks_t gfx_callbacks = gfx_callbacks_;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
#ifndef __ERROR_HANDLING_HPP__
|
||||
#define __ERROR_HANDLING_HPP__
|
||||
|
||||
|
||||
namespace ultramodern {
|
||||
namespace error_handling {
|
||||
struct error_handling_callbacks_t {
|
||||
struct callbacks_t {
|
||||
using message_box_t = void(const char* msg);
|
||||
|
||||
/**
|
||||
|
|
@ -15,7 +14,7 @@ namespace ultramodern {
|
|||
message_box_t *message_box;
|
||||
};
|
||||
|
||||
void set_error_handling_callbacks(const error_handling_callbacks_t& callbacks);
|
||||
void set_callbacks(const callbacks_t& callbacks);
|
||||
|
||||
void message_box(const char* msg);
|
||||
}
|
||||
|
|
|
|||
25
ultramodern/include/ultramodern/events.hpp
Normal file
25
ultramodern/include/ultramodern/events.hpp
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#ifndef __EVENTS_HPP__
|
||||
#define __EVENTS_HPP__
|
||||
|
||||
namespace ultramodern {
|
||||
namespace events {
|
||||
struct callbacks_t {
|
||||
using vi_callback_t = void();
|
||||
using gfx_init_callback_t = void();
|
||||
|
||||
/**
|
||||
* Called in each VI.
|
||||
*/
|
||||
vi_callback_t* vi_callback;
|
||||
|
||||
/**
|
||||
* Called before entering the gfx main loop.
|
||||
*/
|
||||
gfx_init_callback_t* gfx_init_callback;
|
||||
};
|
||||
|
||||
void set_callbacks(const callbacks_t& callbacks);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -25,13 +25,16 @@ extern uint16_t rspInverseSquareRoots[512];
|
|||
|
||||
namespace ultramodern {
|
||||
namespace rsp {
|
||||
struct rsp_callbacks_t {
|
||||
struct callbacks_t {
|
||||
using dma_rdram_to_dmem_t = void(uint8_t* rdram, uint32_t dmem_addr, uint32_t dram_addr, uint32_t rd_len);
|
||||
using get_rsp_microcode_t = RspUcodeFunc*(uint32_t task_type, OSTask* task);
|
||||
|
||||
/**
|
||||
* Simulate a DMA copy from RDRAM (CPU) to DMEM (RSP).
|
||||
*
|
||||
* This function should fill the ultramodern's `dmem` by reading from the `rdram` parameter.
|
||||
*/
|
||||
void (*dma_rdram_to_dmem)(uint8_t* rdram, uint32_t dmem_addr, uint32_t dram_addr, uint32_t rd_len);
|
||||
dma_rdram_to_dmem_t* dma_rdram_to_dmem;
|
||||
|
||||
/**
|
||||
* Return a function pointer to the corresponding RSP microcode function for the given `task_type`.
|
||||
|
|
@ -40,10 +43,10 @@ namespace ultramodern {
|
|||
*
|
||||
* This function is allowed to return `nullptr` if no microcode matches the specified task. In this case a message will be printed to stderr and the program will exit.
|
||||
*/
|
||||
RspUcodeFunc* (*get_rsp_microcode)(uint32_t task_type, OSTask* task);
|
||||
get_rsp_microcode_t* get_rsp_microcode;
|
||||
};
|
||||
|
||||
void set_callbacks(const rsp_callbacks_t& callbacks);
|
||||
void set_callbacks(const callbacks_t& callbacks);
|
||||
|
||||
void constants_init();
|
||||
|
||||
|
|
|
|||
|
|
@ -25,8 +25,9 @@
|
|||
# undef Success
|
||||
#endif
|
||||
|
||||
#include <ultramodern/rsp_stuff.hpp>
|
||||
#include <ultramodern/error_handling.hpp>
|
||||
#include "ultramodern/error_handling.hpp"
|
||||
#include "ultramodern/events.hpp"
|
||||
#include "ultramodern/rsp_stuff.hpp"
|
||||
|
||||
struct UltraThreadContext {
|
||||
std::thread host_thread;
|
||||
|
|
@ -163,27 +164,20 @@ struct gfx_callbacks_t {
|
|||
destroy_ui_t* destroy_ui;
|
||||
};
|
||||
|
||||
struct threads_callbacks_t {
|
||||
using vi_callback_t = void();
|
||||
using gfx_init_callback_t = void();
|
||||
|
||||
/**
|
||||
* Called in each VI.
|
||||
*/
|
||||
vi_callback_t* vi_callback;
|
||||
|
||||
/**
|
||||
* Called before entering the gfx main loop.
|
||||
*/
|
||||
gfx_init_callback_t* gfx_init_callback;
|
||||
};
|
||||
|
||||
bool is_game_started();
|
||||
void quit();
|
||||
void join_event_threads();
|
||||
void join_thread_cleaner_thread();
|
||||
void join_saving_thread();
|
||||
|
||||
void set_audio_callbacks(const audio_callbacks_t& callbacks);
|
||||
|
||||
/**
|
||||
* Register all the callbacks required by `ultramodern`.
|
||||
*
|
||||
* It must be called only once and it must be called before `ultramodern::preinit`.
|
||||
*/
|
||||
void set_callbacks(const audio_callbacks_t& audio_callbacks, const input_callbacks_t& input_callbacks, const gfx_callbacks_t& gfx_callbacks_, const rsp::callbacks_t& rsp_callbacks_, const events::callbacks_t& thread_callbacks, const error_handling::callbacks_t& error_handling_callbacks);
|
||||
} // namespace ultramodern
|
||||
|
||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ static uint32_t sample_rate = 48000;
|
|||
|
||||
static ultramodern::audio_callbacks_t audio_callbacks;
|
||||
|
||||
void set_audio_callbacks(const ultramodern::audio_callbacks_t& callbacks) {
|
||||
void ultramodern::set_audio_callbacks(const ultramodern::audio_callbacks_t& callbacks) {
|
||||
audio_callbacks = callbacks;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
#include "ultramodern/error_handling.hpp"
|
||||
|
||||
static ultramodern::error_handling::error_handling_callbacks_t error_handling_callbacks{};
|
||||
static ultramodern::error_handling::callbacks_t error_handling_callbacks{};
|
||||
|
||||
void ultramodern::error_handling::set_error_handling_callbacks(const ultramodern::error_handling::error_handling_callbacks_t& callbacks) {
|
||||
void ultramodern::error_handling::set_callbacks(const ultramodern::error_handling::callbacks_t& callbacks) {
|
||||
error_handling_callbacks = callbacks;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@
|
|||
#include "rt64_layer.h"
|
||||
#include "rsp_stuff.hpp"
|
||||
|
||||
static ultramodern::threads_callbacks_t threads_callbacks{};
|
||||
static ultramodern::events::callbacks_t threads_callbacks{};
|
||||
|
||||
void set_threads_callbacks(const ultramodern::threads_callbacks_t& callbacks) {
|
||||
void ultramodern::events::set_callbacks(const ultramodern::events::callbacks_t& callbacks) {
|
||||
threads_callbacks = callbacks;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
#include "rsp_stuff.hpp"
|
||||
|
||||
|
||||
static ultramodern::rsp::rsp_callbacks_t rsp_callbacks;
|
||||
static ultramodern::rsp::callbacks_t rsp_callbacks;
|
||||
|
||||
void ultramodern::rsp::set_callbacks(const ultramodern::rsp::rsp_callbacks_t& callbacks) {
|
||||
void ultramodern::rsp::set_callbacks(const ultramodern::rsp::callbacks_t& callbacks) {
|
||||
rsp_callbacks = callbacks;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,22 @@
|
|||
#include "ultra64.h"
|
||||
#include "ultramodern.hpp"
|
||||
|
||||
void ultramodern::set_callbacks(
|
||||
const audio_callbacks_t& audio_callbacks,
|
||||
const input_callbacks_t& input_callbacks,
|
||||
const gfx_callbacks_t& gfx_callbacks,
|
||||
const rsp::callbacks_t& rsp_callbacks,
|
||||
const events::callbacks_t& thread_callbacks,
|
||||
const error_handling::callbacks_t& error_handling_callbacks
|
||||
) {
|
||||
ultramodern::set_audio_callbacks(audio_callbacks);
|
||||
(void)input_callbacks; // nothing yet
|
||||
(void)gfx_callbacks; // nothing yet
|
||||
ultramodern::rsp::set_callbacks(rsp_callbacks);
|
||||
ultramodern::events::set_callbacks(thread_callbacks);
|
||||
ultramodern::error_handling::set_callbacks(error_handling_callbacks);
|
||||
}
|
||||
|
||||
void ultramodern::preinit(RDRAM_ARG ultramodern::WindowHandle window_handle) {
|
||||
ultramodern::set_main_thread();
|
||||
ultramodern::init_events(PASS_RDRAM window_handle);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue