From 4fa93e402d86a6d607ae0fdb1f2d2c4b7b2e3b67 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Fri, 20 Feb 2026 16:01:22 -0600 Subject: [PATCH] SI/SI_DeviceAMBaseboard: Expose the buffer size of 128 to eliminate some magic numbers. --- Source/Core/Core/HW/SI/SI.h | 4 +++- .../Core/Core/HW/SI/SI_DeviceAMBaseboard.cpp | 23 +++++++------------ Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.h | 5 +++- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/Source/Core/Core/HW/SI/SI.h b/Source/Core/Core/HW/SI/SI.h index 5f8a47afd7..8e2e3afe3b 100644 --- a/Source/Core/Core/HW/SI/SI.h +++ b/Source/Core/Core/HW/SI/SI.h @@ -68,6 +68,8 @@ public: u32 GetPollXLines(); + static constexpr u32 BUFFER_SIZE = 128; + private: // SI Interrupt Types enum SIInterruptType @@ -241,7 +243,7 @@ private: USIComCSR m_com_csr; USIStatusReg m_status_reg; USIEXIClockCount m_exi_clock_count; - std::array m_si_buffer{}; + std::array m_si_buffer{}; Core::System& m_system; }; diff --git a/Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.cpp b/Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.cpp index f002e8f24f..03524214a9 100644 --- a/Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.cpp +++ b/Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.cpp @@ -176,14 +176,6 @@ CSIDevice_AMBaseboard::CSIDevice_AMBaseboard(Core::System& system, SIDevices dev } } -constexpr u32 SI_XFER_LENGTH_MASK = 0x7f; - -// Translate [0,1,2,...,126,127] to [128,1,2,...,126,127] -constexpr s32 ConvertSILengthField(u32 field) -{ - return ((field - 1) & SI_XFER_LENGTH_MASK) + 1; -} - void CSIDevice_AMBaseboard::ICCardSendReply(ICCommand* iccommand, u8* buffer, u32* length) { iccommand->status = Common::swap16(iccommand->status); @@ -201,9 +193,9 @@ void CSIDevice_AMBaseboard::ICCardSendReply(ICCommand* iccommand, u8* buffer, u3 void CSIDevice_AMBaseboard::SwapBuffers(u8* buffer, u32* buffer_length) { - memcpy(m_last[1], buffer, 0x80); // Save current buffer - memcpy(buffer, m_last[0], 0x80); // Load previous buffer - memcpy(m_last[0], m_last[1], 0x80); // Update history + memcpy(m_last[1], buffer, RESPONSE_SIZE); // Save current buffer + memcpy(buffer, m_last[0], RESPONSE_SIZE); // Load previous buffer + memcpy(m_last[0], m_last[1], RESPONSE_SIZE); // Update history m_lastptr[1] = *buffer_length; // Swap lengths *buffer_length = m_lastptr[0]; @@ -212,11 +204,12 @@ void CSIDevice_AMBaseboard::SwapBuffers(u8* buffer, u32* buffer_length) int CSIDevice_AMBaseboard::RunBuffer(u8* buffer, int request_length) { - const auto& serial_interface = m_system.GetSerialInterface(); - u32 buffer_length = ConvertSILengthField(serial_interface.GetInLength()); - // Debug logging - ISIDevice::RunBuffer(buffer, buffer_length); + ISIDevice::RunBuffer(buffer, request_length); + + const auto& serial_interface = m_system.GetSerialInterface(); + + u32 buffer_length = RESPONSE_SIZE; u32 buffer_position = 0; while (buffer_position < buffer_length) diff --git a/Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.h b/Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.h index 4e7be13f00..55de0d357f 100644 --- a/Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.h +++ b/Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.h @@ -4,6 +4,7 @@ #pragma once #include "Core/HW/MagCard/MagneticCardReader.h" +#include "Core/HW/SI/SI.h" #include "Core/HW/SI/SI_Device.h" namespace SerialInterface @@ -175,7 +176,9 @@ private: u32 extlen; }; - u8 m_last[2][0x80] = {}; + static constexpr u32 RESPONSE_SIZE = SerialInterfaceManager::BUFFER_SIZE; + + u8 m_last[2][RESPONSE_SIZE] = {}; u32 m_lastptr[2] = {}; std::array m_coin{};