From 16eed8ed34d6cbe366fce2d2335b04418c489031 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 30 Mar 2018 21:11:34 -0700 Subject: [PATCH] GB I/O: Fix SGB command clocking (fixes #1029) --- src/gb/io.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gb/io.c b/src/gb/io.c index 21a7f696e..88e0f860c 100644 --- a/src/gb/io.c +++ b/src/gb/io.c @@ -106,7 +106,7 @@ static const uint8_t _registerMask[] = { static void _writeSGBBits(struct GB* gb, int bits) { if (!bits) { - gb->sgbBit = 0; + gb->sgbBit = -1; memset(gb->sgbPacket, 0, sizeof(gb->sgbPacket)); } if (bits == gb->currentSgbBits) { @@ -122,9 +122,12 @@ static void _writeSGBBits(struct GB* gb, int bits) { } switch (bits) { case 1: + if (gb->sgbBit < 0) { + return; + } gb->sgbPacket[gb->sgbBit >> 3] |= 1 << (gb->sgbBit & 7); - // Fall through - case 2: + break; + case 3: ++gb->sgbBit; default: break;