From 00c5fed6bcaafa18fc5faa89ed85d3f5b8296418 Mon Sep 17 00:00:00 2001 From: Mr-Wiseguy Date: Sun, 10 Aug 2025 02:13:05 -0400 Subject: [PATCH] Update runtime for more accurate VI and switch to improved pacing RT64 branch --- CMakeLists.txt | 2 +- include/zelda_render.h | 2 +- lib/N64ModernRuntime | 2 +- lib/rt64 | 2 +- src/main/main.cpp | 10 +++++++ src/main/rt64_render_context.cpp | 49 +++++++++++--------------------- 6 files changed, 31 insertions(+), 36 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ced391..264734b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -291,7 +291,7 @@ if (WIN32) ) target_sources(Zelda64Recompiled PRIVATE ${CMAKE_SOURCE_DIR}/icons/app.rc) - target_link_libraries(Zelda64Recompiled PRIVATE SDL2) + target_link_libraries(Zelda64Recompiled PRIVATE SDL2 Winmm.lib) endif() if (APPLE) diff --git a/include/zelda_render.h b/include/zelda_render.h index 451c66b..15397f9 100644 --- a/include/zelda_render.h +++ b/include/zelda_render.h @@ -27,7 +27,7 @@ namespace zelda64 { void enable_instant_present() override; void send_dl(const OSTask *task) override; - void update_screen(uint32_t vi_origin) override; + void update_screen() override; void shutdown() override; uint32_t get_display_framerate() const override; float get_resolution_scale() const override; diff --git a/lib/N64ModernRuntime b/lib/N64ModernRuntime index cea072b..257b5db 160000 --- a/lib/N64ModernRuntime +++ b/lib/N64ModernRuntime @@ -1 +1 @@ -Subproject commit cea072b59b8db7e9cd3eb2852ce820992d4ff1ae +Subproject commit 257b5db9d6a38c5f9b96fb67ad4f5abc69809b77 diff --git a/lib/rt64 b/lib/rt64 index 5164996..151e56b 160000 --- a/lib/rt64 +++ b/lib/rt64 @@ -1 +1 @@ -Subproject commit 51649963618de9b3067eee398090946ae9004954 +Subproject commit 151e56bb0b8fb377c7f487d78b05869cba27804e diff --git a/src/main/main.cpp b/src/main/main.cpp index 68b879a..763344b 100644 --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -50,6 +50,7 @@ #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include +#include #include "SDL_syswm.h" #endif @@ -586,6 +587,10 @@ int main(int argc, char** argv) { } #ifdef _WIN32 + // Set up high resolution timing period. + timeBeginPeriod(1); + + // Process arguments. for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "--show-console") == 0) @@ -745,5 +750,10 @@ int main(int argc, char** argv) { release_preload(preload_context); } +#ifdef _WIN32 + // End high resolution timing period. + timeEndPeriod(1); +#endif + return EXIT_SUCCESS; } diff --git a/src/main/rt64_render_context.cpp b/src/main/rt64_render_context.cpp index 4994f34..2eff6f8 100644 --- a/src/main/rt64_render_context.cpp +++ b/src/main/rt64_render_context.cpp @@ -56,21 +56,6 @@ unsigned int DPC_BUFBUSY_REG = 0; unsigned int DPC_PIPEBUSY_REG = 0; unsigned int DPC_TMEM_REG = 0; -unsigned int VI_STATUS_REG = 0; -unsigned int VI_ORIGIN_REG = 0; -unsigned int VI_WIDTH_REG = 0; -unsigned int VI_INTR_REG = 0; -unsigned int VI_V_CURRENT_LINE_REG = 0; -unsigned int VI_TIMING_REG = 0; -unsigned int VI_V_SYNC_REG = 0; -unsigned int VI_H_SYNC_REG = 0; -unsigned int VI_LEAP_REG = 0; -unsigned int VI_H_START_REG = 0; -unsigned int VI_V_START_REG = 0; -unsigned int VI_V_BURST_REG = 0; -unsigned int VI_X_SCALE_REG = 0; -unsigned int VI_Y_SCALE_REG = 0; - void dummy_check_interrupts() {} RT64::UserConfiguration::Antialiasing compute_max_supported_aa(RT64::RenderSampleCounts bits) { @@ -250,20 +235,22 @@ zelda64::renderer::RT64Context::RT64Context(uint8_t* rdram, ultramodern::rendere appCore.DPC_PIPEBUSY_REG = &DPC_PIPEBUSY_REG; appCore.DPC_TMEM_REG = &DPC_TMEM_REG; - appCore.VI_STATUS_REG = &VI_STATUS_REG; - appCore.VI_ORIGIN_REG = &VI_ORIGIN_REG; - appCore.VI_WIDTH_REG = &VI_WIDTH_REG; - appCore.VI_INTR_REG = &VI_INTR_REG; - appCore.VI_V_CURRENT_LINE_REG = &VI_V_CURRENT_LINE_REG; - appCore.VI_TIMING_REG = &VI_TIMING_REG; - appCore.VI_V_SYNC_REG = &VI_V_SYNC_REG; - appCore.VI_H_SYNC_REG = &VI_H_SYNC_REG; - appCore.VI_LEAP_REG = &VI_LEAP_REG; - appCore.VI_H_START_REG = &VI_H_START_REG; - appCore.VI_V_START_REG = &VI_V_START_REG; - appCore.VI_V_BURST_REG = &VI_V_BURST_REG; - appCore.VI_X_SCALE_REG = &VI_X_SCALE_REG; - appCore.VI_Y_SCALE_REG = &VI_Y_SCALE_REG; + ultramodern::renderer::ViRegs* vi_regs = ultramodern::renderer::get_vi_regs(); + + appCore.VI_STATUS_REG = &vi_regs->VI_STATUS_REG; + appCore.VI_ORIGIN_REG = &vi_regs->VI_ORIGIN_REG; + appCore.VI_WIDTH_REG = &vi_regs->VI_WIDTH_REG; + appCore.VI_INTR_REG = &vi_regs->VI_INTR_REG; + appCore.VI_V_CURRENT_LINE_REG = &vi_regs->VI_V_CURRENT_LINE_REG; + appCore.VI_TIMING_REG = &vi_regs->VI_TIMING_REG; + appCore.VI_V_SYNC_REG = &vi_regs->VI_V_SYNC_REG; + appCore.VI_H_SYNC_REG = &vi_regs->VI_H_SYNC_REG; + appCore.VI_LEAP_REG = &vi_regs->VI_LEAP_REG; + appCore.VI_H_START_REG = &vi_regs->VI_H_START_REG; + appCore.VI_V_START_REG = &vi_regs->VI_V_START_REG; + appCore.VI_V_BURST_REG = &vi_regs->VI_V_BURST_REG; + appCore.VI_X_SCALE_REG = &vi_regs->VI_X_SCALE_REG; + appCore.VI_Y_SCALE_REG = &vi_regs->VI_Y_SCALE_REG; // Set up the RT64 application configuration fields. RT64::ApplicationConfiguration appConfig; @@ -338,9 +325,7 @@ void zelda64::renderer::RT64Context::send_dl(const OSTask* task) { app->processDisplayLists(app->core.RDRAM, task->t.data_ptr & 0x3FFFFFF, 0, true); } -void zelda64::renderer::RT64Context::update_screen(uint32_t vi_origin) { - VI_ORIGIN_REG = vi_origin; - +void zelda64::renderer::RT64Context::update_screen() { app->updateScreen(); }