From a382c1ee9bb7bc79ce0445658eb2d4d771554766 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 3 Feb 2018 21:47:10 -0800 Subject: [PATCH] GB Timer: Fix low bit of DIV resetting --- .../mooneye-gb/acceptance/timer/tim01_div_trigger/manifest.yml | 1 - src/gb/timer.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 cinema/gb/mooneye-gb/acceptance/timer/tim01_div_trigger/manifest.yml diff --git a/cinema/gb/mooneye-gb/acceptance/timer/tim01_div_trigger/manifest.yml b/cinema/gb/mooneye-gb/acceptance/timer/tim01_div_trigger/manifest.yml deleted file mode 100644 index a697ada66..000000000 --- a/cinema/gb/mooneye-gb/acceptance/timer/tim01_div_trigger/manifest.yml +++ /dev/null @@ -1 +0,0 @@ -fail: true diff --git a/src/gb/timer.c b/src/gb/timer.c index 061fc8f2e..d5fe20089 100644 --- a/src/gb/timer.c +++ b/src/gb/timer.c @@ -70,7 +70,7 @@ void GBTimerDivReset(struct GBTimer* timer) { timer->nextDiv -= mTimingUntil(&timer->p->timing, &timer->event); mTimingDeschedule(&timer->p->timing, &timer->event); _GBTimerDivIncrement(timer, (timer->p->cpu->executionState + 1) & 3); - if (timer->internalDiv & (timer->timaPeriod >> 1)) { + if (((timer->internalDiv << 1) | ((timer->nextDiv >> 3) & 1)) & timer->timaPeriod) { ++timer->p->memory.io[REG_TIMA]; if (!timer->p->memory.io[REG_TIMA]) { mTimingSchedule(&timer->p->timing, &timer->irq, 4 - ((timer->p->cpu->executionState + 1) & 3));