diff --git a/CHANGES b/CHANGES index 67f4ebb62..e537e96f6 100644 --- a/CHANGES +++ b/CHANGES @@ -163,6 +163,7 @@ Bugfixes: - GB Video: Fix LYC regression - Qt: Fix translation initialization (fixes mgba.io/i/776) - PSP2: Use custom localtime_r since newlib version is broken (fixes mgba.io/i/560) + - GBA SIO: Improve SIO Normal dummy driver (fixes mgba.io/i/520) Misc: - Qt: Add language selector - GBA Timer: Improve accuracy of timers diff --git a/src/gba/sio.c b/src/gba/sio.c index 33a7c99d7..67b051303 100644 --- a/src/gba/sio.c +++ b/src/gba/sio.c @@ -155,11 +155,13 @@ void GBASIOWriteSIOCNT(struct GBASIO* sio, uint16_t value) { case SIO_NORMAL_8: case SIO_NORMAL_32: value |= 0x0004; - if ((value & 0x4080) == 0x4080) { - // TODO: Test this on hardware to see if this is correct - GBARaiseIRQ(sio->p, IRQ_SIO); + if ((value & 0x0081) == 0x0081) { + if (value & 0x4000) { + // TODO: Test this on hardware to see if this is correct + GBARaiseIRQ(sio->p, IRQ_SIO); + } + value &= ~0x0080; } - value &= ~0x0080; break; default: // TODO