Permalink
Browse files
GBA Timer: Fix timers sometimes being late (fixes #1012)
- Loading branch information...
Showing
with
3 additions
and
2 deletions.
-
+1
−0
CHANGES
-
+2
−2
src/gba/timer.c
|
|
@@ -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)
|
|
|
|
|
|
@@ -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, ¤tTimer->event)) {
|
|
|
tickIncrement = (0x10000 - tickIncrement) << prescaleBits;
|
|
|
currentTime -= mTimingCurrentTime(&gba->timing) - cyclesLate;
|
|
|
- mTimingSchedule(&gba->timing, ¤tTimer->event, TIMER_RELOAD_DELAY + tickIncrement + currentTime);
|
|
|
+ mTimingSchedule(&gba->timing, ¤tTimer->event, tickIncrement + currentTime);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
0 comments on commit
fc53fc9