mirror of
https://github.com/N64Recomp/N64ModernRuntime.git
synced 2026-02-01 19:26:14 +00:00
address review issues
This commit is contained in:
parent
47c364a51d
commit
06d1f6541f
7 changed files with 33 additions and 23 deletions
|
|
@ -154,7 +154,7 @@ extern "C" void osFlashWriteBuffer_recomp(uint8_t * rdram, recomp_context * ctx)
|
|||
}
|
||||
|
||||
// Send the message indicating write completion
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, OS_EVENT_PI);
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, ultramodern::EventMessageSource::Pi);
|
||||
|
||||
ctx->r2 = 0;
|
||||
}
|
||||
|
|
@ -193,7 +193,7 @@ extern "C" void osFlashReadArray_recomp(uint8_t * rdram, recomp_context * ctx) {
|
|||
save_read(PASS_RDRAM dramAddr, offset, count);
|
||||
|
||||
// Send the message indicating read completion
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, OS_EVENT_PI);
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, ultramodern::EventMessageSource::Pi);
|
||||
|
||||
ctx->r2 = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ void do_dma(RDRAM_ARG PTR(OSMesgQueue) mq, gpr rdram_address, uint32_t physical_
|
|||
recomp::do_rom_read(rdram, rdram_address, physical_addr, size);
|
||||
|
||||
// Send a message to the mq to indicate that the transfer completed
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, OS_EVENT_PI);
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, ultramodern::EventMessageSource::Pi);
|
||||
} else if (physical_addr >= recomp::sram_base) {
|
||||
if (!recomp::sram_allowed()) {
|
||||
ultramodern::error_handling::message_box("Attempted to use SRAM saving with other save type");
|
||||
|
|
@ -285,7 +285,7 @@ void do_dma(RDRAM_ARG PTR(OSMesgQueue) mq, gpr rdram_address, uint32_t physical_
|
|||
save_read(rdram, rdram_address, physical_addr - recomp::sram_base, size);
|
||||
|
||||
// Send a message to the mq to indicate that the transfer completed
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, OS_EVENT_PI);
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, ultramodern::EventMessageSource::Pi);
|
||||
} else {
|
||||
fprintf(stderr, "[WARN] PI DMA read from unknown region, phys address 0x%08X\n", physical_addr);
|
||||
}
|
||||
|
|
@ -302,7 +302,7 @@ void do_dma(RDRAM_ARG PTR(OSMesgQueue) mq, gpr rdram_address, uint32_t physical_
|
|||
save_write(rdram, rdram_address, physical_addr - recomp::sram_base, size);
|
||||
|
||||
// Send a message to the mq to indicate that the transfer completed
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, OS_EVENT_PI);
|
||||
ultramodern::enqueue_external_message_type(mq, 0, false, ultramodern::EventMessageSource::Pi);
|
||||
} else {
|
||||
fprintf(stderr, "[WARN] PI DMA write to unknown region, phys address 0x%08X\n", physical_addr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,8 +52,18 @@ bool thread_queue_empty(RDRAM_ARG PTR(PTR(OSThread)) queue);
|
|||
PTR(OSThread) thread_queue_peek(RDRAM_ARG PTR(PTR(OSThread)) queue);
|
||||
|
||||
// Message queues.
|
||||
enum class EventMessageSource : int {
|
||||
Timer,
|
||||
Sp,
|
||||
Si,
|
||||
Ai,
|
||||
Vi,
|
||||
Pi,
|
||||
Dp,
|
||||
};
|
||||
|
||||
struct MessageQueueControl {
|
||||
bool requeue_counter{true};
|
||||
bool requeue_timer{true};
|
||||
bool requeue_sp{true};
|
||||
bool requeue_si{true};
|
||||
bool requeue_ai{false};
|
||||
|
|
@ -62,7 +72,7 @@ struct MessageQueueControl {
|
|||
bool requeue_dp{true};
|
||||
};
|
||||
void set_message_queue_control(const MessageQueueControl& mqc);
|
||||
void enqueue_external_message_type(PTR(OSMesgQueue) mq, OSMesg msg, bool jam, OSEvent event_type);
|
||||
void enqueue_external_message_type(PTR(OSMesgQueue) mq, OSMesg msg, bool jam, EventMessageSource src);
|
||||
void enqueue_external_message(PTR(OSMesgQueue) mq, OSMesg msg, bool jam, bool requeue_if_blocked);
|
||||
void wait_for_external_message(RDRAM_ARG1);
|
||||
void wait_for_external_message_timed(RDRAM_ARG1, u32 millis);
|
||||
|
|
|
|||
|
|
@ -233,13 +233,13 @@ void vi_thread_func() {
|
|||
if (cur_state->mq != NULLPTR) {
|
||||
// Send a message to the VI queue, and do not set it to be requeued if the queue was full.
|
||||
// The worst case scenario is that the game misses a VI message and has to wait a little longer for the next.
|
||||
ultramodern::enqueue_external_message_type(cur_state->mq, cur_state->msg, false, OS_EVENT_VI);
|
||||
ultramodern::enqueue_external_message_type(cur_state->mq, cur_state->msg, false, ultramodern::EventMessageSource::Vi);
|
||||
}
|
||||
remaining_retraces = cur_state->retrace_count;
|
||||
}
|
||||
if (events_context.ai.mq != NULLPTR) {
|
||||
// Send a message to the VI queue, and do not set it to be requeued if the queue was full for the same reason as the VI message above.
|
||||
ultramodern::enqueue_external_message_type(events_context.ai.mq, events_context.ai.msg, false, OS_EVENT_AI);
|
||||
ultramodern::enqueue_external_message_type(events_context.ai.mq, events_context.ai.msg, false, ultramodern::EventMessageSource::Ai);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -252,13 +252,13 @@ void vi_thread_func() {
|
|||
void sp_complete() {
|
||||
uint8_t* rdram = events_context.rdram;
|
||||
std::lock_guard lock{ events_context.message_mutex };
|
||||
ultramodern::enqueue_external_message_type(events_context.sp.mq, events_context.sp.msg, false, OS_EVENT_SP);
|
||||
ultramodern::enqueue_external_message_type(events_context.sp.mq, events_context.sp.msg, false, ultramodern::EventMessageSource::Sp);
|
||||
}
|
||||
|
||||
void dp_complete() {
|
||||
uint8_t* rdram = events_context.rdram;
|
||||
std::lock_guard lock{ events_context.message_mutex };
|
||||
ultramodern::enqueue_external_message_type(events_context.dp.mq, events_context.dp.msg, false, OS_EVENT_DP);
|
||||
ultramodern::enqueue_external_message_type(events_context.dp.mq, events_context.dp.msg, false, ultramodern::EventMessageSource::Dp);
|
||||
}
|
||||
|
||||
void task_thread_func(uint8_t* rdram, moodycamel::LightweightSemaphore* thread_ready) {
|
||||
|
|
@ -566,7 +566,7 @@ void ultramodern::submit_rsp_task(RDRAM_ARG PTR(OSTask) task_) {
|
|||
}
|
||||
|
||||
void ultramodern::send_si_message() {
|
||||
ultramodern::enqueue_external_message_type(events_context.si.mq, events_context.si.msg, false, OS_EVENT_SI);
|
||||
ultramodern::enqueue_external_message_type(events_context.si.mq, events_context.si.msg, false, ultramodern::EventMessageSource::Si);
|
||||
}
|
||||
|
||||
void ultramodern::init_events(RDRAM_ARG ultramodern::renderer::WindowHandle window_handle) {
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ void dispatch_displaylist_events(PTR(void) displaylist, u32 event_type) {
|
|||
for (auto iter = extension_state.dl_events.pending_events.begin(); iter != extension_state.dl_events.pending_events.end(); ) {
|
||||
if (iter->displaylist == displaylist && iter->event_type == event_type) {
|
||||
// Send the provided message to the corresponding message queue for this event, then remove this event from the queue.
|
||||
ultramodern::enqueue_external_message_type(iter->mq, iter->mesg, false, OS_EVENT_SP);
|
||||
ultramodern::enqueue_external_message_type(iter->mq, iter->mesg, false, ultramodern::EventMessageSource::Sp);
|
||||
iter = extension_state.dl_events.pending_events.erase(iter);
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -18,17 +18,17 @@ std::bitset<32> requeue_enabled;
|
|||
|
||||
void ultramodern::set_message_queue_control(const ultramodern::MessageQueueControl& mqc) {
|
||||
requeue_enabled.reset();
|
||||
requeue_enabled.set(OS_EVENT_COUNTER, mqc.requeue_counter);
|
||||
requeue_enabled.set(OS_EVENT_SP, mqc.requeue_sp);
|
||||
requeue_enabled.set(OS_EVENT_SI, mqc.requeue_si);
|
||||
requeue_enabled.set(OS_EVENT_AI, mqc.requeue_ai);
|
||||
requeue_enabled.set(OS_EVENT_VI, mqc.requeue_vi);
|
||||
requeue_enabled.set(OS_EVENT_PI, mqc.requeue_pi);
|
||||
requeue_enabled.set(OS_EVENT_DP, mqc.requeue_dp);
|
||||
requeue_enabled.set(static_cast<int>(EventMessageSource::Timer), mqc.requeue_timer);
|
||||
requeue_enabled.set(static_cast<int>(EventMessageSource::Sp), mqc.requeue_sp);
|
||||
requeue_enabled.set(static_cast<int>(EventMessageSource::Si), mqc.requeue_si);
|
||||
requeue_enabled.set(static_cast<int>(EventMessageSource::Ai), mqc.requeue_ai);
|
||||
requeue_enabled.set(static_cast<int>(EventMessageSource::Vi), mqc.requeue_vi);
|
||||
requeue_enabled.set(static_cast<int>(EventMessageSource::Pi), mqc.requeue_pi);
|
||||
requeue_enabled.set(static_cast<int>(EventMessageSource::Dp), mqc.requeue_dp);
|
||||
}
|
||||
|
||||
void ultramodern::enqueue_external_message_type(PTR(OSMesgQueue) mq, OSMesg msg, bool jam, OSEvent event_type) {
|
||||
external_messages.enqueue({mq, msg, jam, requeue_enabled[event_type]});
|
||||
void ultramodern::enqueue_external_message_type(PTR(OSMesgQueue) mq, OSMesg msg, bool jam, EventMessageSource src) {
|
||||
external_messages.enqueue({mq, msg, jam, requeue_enabled[static_cast<int>(src)]});
|
||||
}
|
||||
|
||||
void ultramodern::enqueue_external_message(PTR(OSMesgQueue) mq, OSMesg msg, bool jam, bool requeue_if_blocked) {
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ void timer_thread(RDRAM_ARG1) {
|
|||
}
|
||||
else {
|
||||
// Waiting for the timer completed, so send the timer's message to its message queue
|
||||
ultramodern::enqueue_external_message_type(cur_timer->mq, cur_timer->msg, false, OS_EVENT_COUNTER);
|
||||
ultramodern::enqueue_external_message_type(cur_timer->mq, cur_timer->msg, false, ultramodern::EventMessageSource::Timer);
|
||||
// If the timer has a specified interval then reload it with that value
|
||||
if (cur_timer->interval != 0) {
|
||||
cur_timer->timestamp = cur_timer->interval + time_now();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue