From 8b5800233a9ecbfec8db7d7d2454a085557d33b2 Mon Sep 17 00:00:00 2001 From: dcvz Date: Wed, 19 Jun 2024 10:57:17 +0200 Subject: [PATCH] Implement osViGetStatus --- librecomp/src/vi.cpp | 4 ++++ ultramodern/include/ultramodern/ultra64.h | 1 + ultramodern/src/events.cpp | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/librecomp/src/vi.cpp b/librecomp/src/vi.cpp index 4e62c2a..8c20aa6 100644 --- a/librecomp/src/vi.cpp +++ b/librecomp/src/vi.cpp @@ -30,6 +30,10 @@ extern "C" void osViGetCurrentField_recomp(uint8_t* rdram, recomp_context* ctx) ctx->r2 = (gpr)osViGetCurrentField(); } +extern "C" void osViGetStatus_recomp(uint8_t* rdram, recomp_context* ctx) { + ctx->r2 = (gpr)osViGetStatus(); +} + extern "C" void osViSetSpecialFeatures_recomp(uint8_t* rdram, recomp_context* ctx) { osViSetSpecialFeatures((uint32_t)ctx->r4); } diff --git a/ultramodern/include/ultramodern/ultra64.h b/ultramodern/include/ultramodern/ultra64.h index fd6ab8c..aa7ae8c 100644 --- a/ultramodern/include/ultramodern/ultra64.h +++ b/ultramodern/include/ultramodern/ultra64.h @@ -289,6 +289,7 @@ void osViBlack(uint8_t active); void osViRepeatLine(uint8_t active); u32 osViGetCurrentLine(); u32 osViGetCurrentField(); +u32 osViGetStatus(); void osViSetXScale(float scale); void osViSetYScale(float scale); PTR(void) osViGetNextFramebuffer(); diff --git a/ultramodern/src/events.cpp b/ultramodern/src/events.cpp index a20cc72..baadd33 100644 --- a/ultramodern/src/events.cpp +++ b/ultramodern/src/events.cpp @@ -488,6 +488,10 @@ extern "C" u32 osViGetCurrentField() { return IO_READ(VI_V_CURRENT_LINE_REG) & 1; } +extern "C" u32 osViGetStatus() { + return IO_READ(VI_STATUS_REG); +} + extern "C" void osViSetXScale(float scale) { if (scale != 1.0f) { assert(false);