Permalink
Browse files

GBA Timer: Fix timers sometimes being late (fixes #1012)

  • Loading branch information...
endrift committed Mar 28, 2018
1 parent 016e159 commit fc53fc9647353e3757a8538c01d6fd1e9a0ed3ca
Showing with 3 additions and 2 deletions.
  1. +1 −0 CHANGES
  2. +2 −2 src/gba/timer.c
View
@@ -55,6 +55,7 @@ Bugfixes:
- Python: Fix package directory
- GB Memory: Fix OAM DMA blocking regions (fixes mgba.io/i/1013)
- Wii: Fix various setup and teardown drawing issues (fixes mgba.io/i/988)
+ - GBA Timer: Fix timers sometimes being late (fixes mgba.io/i/1012)
Misc:
- GBA Timer: Use global cycles for timers
- GBA: Extend oddly-sized ROMs to full address space (fixes mgba.io/i/722)
View
@@ -51,7 +51,7 @@ static void GBATimerUpdate(struct GBA* gba, int timerId, uint32_t cyclesLate) {
int32_t tickMask = (1 << GBATimerFlagsGetPrescaleBits(timer->flags)) - 1;
currentTime &= ~tickMask;
timer->lastEvent = currentTime;
- GBATimerUpdateRegister(gba, timerId, 0);
+ GBATimerUpdateRegister(gba, timerId, TIMER_RELOAD_DELAY + cyclesLate);
if (GBATimerFlagsIsDoIrq(timer->flags)) {
timer->flags = GBATimerFlagsFillIrqPending(timer->flags);
@@ -155,7 +155,7 @@ void GBATimerUpdateRegister(struct GBA* gba, int timer, int32_t cyclesLate) {
if (!mTimingIsScheduled(&gba->timing, &currentTimer->event)) {
tickIncrement = (0x10000 - tickIncrement) << prescaleBits;
currentTime -= mTimingCurrentTime(&gba->timing) - cyclesLate;
- mTimingSchedule(&gba->timing, &currentTimer->event, TIMER_RELOAD_DELAY + tickIncrement + currentTime);
+ mTimingSchedule(&gba->timing, &currentTimer->event, tickIncrement + currentTime);
}
}

0 comments on commit fc53fc9

Please sign in to comment.