From 5d6cf748bf89cefdd0bca20f62c80a779db6b45f Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 21 Nov 2021 11:38:23 -0500 Subject: [PATCH] GBHawk: fix linking in perfect dark --- .../Consoles/Nintendo/GBHawk/SerialPort.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs index 7e05a55491..8fa2aaf90d 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs @@ -16,6 +16,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public byte coming_in; public bool can_pulse; public bool IRQ_block; + public bool tranfser_complete_flag; public byte ReadReg(int addr) { @@ -41,9 +42,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk case 0xFF02: if ((value & 0x1) == 1) { - - serial_bits = 8; - if (((value & 2) > 0) && Core.GBC_compat) { clk_rate = 16; @@ -69,14 +67,21 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } */ } - can_pulse = true; + + if (tranfser_complete_flag) + { + can_pulse = true; + serial_bits = 8; + tranfser_complete_flag = false; + } } else { serial_bits = 8; clk_rate = -1; serial_clock = clk_rate; - can_pulse = false; + can_pulse = false; + tranfser_complete_flag = true; } if (Core.GBC_compat) @@ -112,6 +117,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if (serial_bits == 0) { serial_control &= 0x7F; + tranfser_complete_flag = true; if (Core.REG_FFFF.Bit(3)) { Core.cpu.FlagI = true; } Core.REG_FF0F |= 0x08; @@ -139,6 +145,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk coming_in = 1; can_pulse = false; IRQ_block = false; + tranfser_complete_flag = true; } public void SyncState(Serializer ser) @@ -152,6 +159,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk ser.Sync(nameof(coming_in), ref coming_in); ser.Sync(nameof(can_pulse), ref can_pulse); ser.Sync(nameof(IRQ_block), ref IRQ_block); + ser.Sync(nameof(tranfser_complete_flag), ref tranfser_complete_flag); } } }