mirror of https://github.com/mgba-emu/mgba.git
GB: Fix timer edge conditions
This commit is contained in:
parent
e82c9aadea
commit
c280d8efa6
23
src/gb/mbc.c
23
src/gb/mbc.c
|
@ -183,18 +183,33 @@ static void _latchRtc(struct mRTCSource* rtc, uint8_t* rtcRegs, time_t* rtcLastL
|
||||||
t -= *rtcLastLatch;
|
t -= *rtcLastLatch;
|
||||||
*rtcLastLatch = currentLatch;
|
*rtcLastLatch = currentLatch;
|
||||||
|
|
||||||
unsigned diff;
|
int64_t diff;
|
||||||
diff = rtcRegs[0] + t % 60;
|
diff = rtcRegs[0] + t % 60;
|
||||||
|
if (diff < 0) {
|
||||||
|
diff += 60;
|
||||||
|
t -= 60;
|
||||||
|
}
|
||||||
rtcRegs[0] = diff % 60;
|
rtcRegs[0] = diff % 60;
|
||||||
t = t / 60 + diff / 60;
|
t /= 60;
|
||||||
|
t += diff / 60;
|
||||||
|
|
||||||
diff = rtcRegs[1] + t % 60;
|
diff = rtcRegs[1] + t % 60;
|
||||||
|
if (diff < 0) {
|
||||||
|
diff += 60;
|
||||||
|
t -= 60;
|
||||||
|
}
|
||||||
rtcRegs[1] = diff % 60;
|
rtcRegs[1] = diff % 60;
|
||||||
t = t / 60 + diff / 60;
|
t /= 60;
|
||||||
|
t += diff / 60;
|
||||||
|
|
||||||
diff = rtcRegs[2] + t % 24;
|
diff = rtcRegs[2] + t % 24;
|
||||||
|
if (diff < 0) {
|
||||||
|
diff += 24;
|
||||||
|
t -= 24;
|
||||||
|
}
|
||||||
rtcRegs[2] = diff % 24;
|
rtcRegs[2] = diff % 24;
|
||||||
t = t / 24 + diff / 24;
|
t /= 24;
|
||||||
|
t += diff / 24;
|
||||||
|
|
||||||
diff = rtcRegs[3] + ((rtcRegs[4] & 1) << 8) + (t & 0x1FF);
|
diff = rtcRegs[3] + ((rtcRegs[4] & 1) << 8) + (t & 0x1FF);
|
||||||
rtcRegs[3] = diff;
|
rtcRegs[3] = diff;
|
||||||
|
|
Loading…
Reference in New Issue