From e461ebb90a7b30480fa64e5544e9772602a8ef7b Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri, 15 May 2026 22:48:36 -0700 Subject: [PATCH] Fix GBA serial timings to pass serial timing tests Yes, this is weird. There is apparently just an extra 6 cycles for serial transfers, at least as far as testing indicates. See https://github.com/mgba-emu/suite and https://github.com/alyosha-tas/gba-tests for serial timing tests. --- Core/GBA/GbaSerial.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Core/GBA/GbaSerial.h b/Core/GBA/GbaSerial.h index 6ff3b8a51..15935355e 100644 --- a/Core/GBA/GbaSerial.h +++ b/Core/GBA/GbaSerial.h @@ -133,6 +133,7 @@ class GbaSerial final : public ISerializable if(active && !_state.Active) { _state.StartMasterClock = _memoryManager->GetMasterClock(); _state.EndMasterClock = _state.StartMasterClock + (_state.InternalShiftClockSpeed2MHz ? 8 : 64) * (_state.TransferWord ? 32 : 8); + _state.EndMasterClock += 6; if(_state.IrqEnabled) { _state.IrqMasterClock = _state.EndMasterClock; _memoryManager->SetPendingUpdateFlag(); @@ -156,6 +157,7 @@ class GbaSerial final : public ISerializable if(_state.StartMasterClock == _memoryManager->GetMasterClock()) { //Update end based on params _state.EndMasterClock = _state.StartMasterClock + (_state.InternalShiftClockSpeed2MHz ? 8 : 64) * (_state.TransferWord ? 32 : 8); + _state.EndMasterClock += 6; } if(_state.IrqEnabled) { _state.IrqMasterClock = _state.EndMasterClock;