diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2015-12-15 18:59:49 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2015-12-15 18:59:49 -0500 |
commit | 77ef8404a197d015398674482103afd9651a9f42 (patch) | |
tree | 81b279747d5a42aaa46c3504cb5e420f637254b3 /engine/rtc.asm | |
parent | efe3462f9af56ce23a1e9c3badd90799204d0725 (diff) |
Menu
Diffstat (limited to 'engine/rtc.asm')
-rwxr-xr-x | engine/rtc.asm | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/engine/rtc.asm b/engine/rtc.asm new file mode 100755 index 000000000..0007e8225 --- /dev/null +++ b/engine/rtc.asm @@ -0,0 +1,210 @@ +StopRTC: ; Unreferenced??? + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + call LatchClock + ld a, RTC_DH + ld [MBC3SRamBank], a + ld a, [MBC3RTC] + set 6, a ; halt + ld [MBC3RTC], a + call CloseSRAM + ret +; 14019 + +StartRTC: ; 14019 + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + call LatchClock + ld a, RTC_DH + ld [MBC3SRamBank], a + ld a, [MBC3RTC] + res 6, a ; halt + ld [MBC3RTC], a + call CloseSRAM + ret +; 14032 + +GetTimeOfDay:: ; 14032 +; get time of day based on the current hour + ld a, [hHours] ; hour + ld hl, TimesOfDay + +.check +; if we're within the given time period, +; get the corresponding time of day + cp [hl] + jr c, .match +; else, get the next entry +rept 2 + inc hl +endr +; try again + jr .check + +.match +; get time of day + inc hl + ld a, [hl] + ld [TimeOfDay], a + ret +; 14044 + +TimesOfDay: ; 14044 +; hours for the time of day +; 04-09 morn | 10-17 day | 18-03 nite + db 04, NITE + db 10, MORN + db 18, DAY + db 24, NITE + db -1, MORN +; 1404e + +Unknown_1404e: ; Unreferenced + db 20, 2 + db 40, 0 + db 60, 1 + db -1, 0 +; 14056 + +StageRTCTimeForSave: ; 14056 + call UpdateTime + ld hl, wRTC + ld a, [CurDay] + ld [hli], a + ld a, [hHours] + ld [hli], a + ld a, [hMinutes] + ld [hli], a + ld a, [hSeconds] + ld [hli], a + ret +; 1406a + +SaveRTC: ; 1406a + ld a, $a + ld [MBC3SRamEnable], a + call LatchClock + ld hl, MBC3RTC + ld a, $c + ld [MBC3SRamBank], a + res 7, [hl] + ld a, BANK(sRTCStatusFlags) + ld [MBC3SRamBank], a + xor a + ld [sRTCStatusFlags], a + call CloseSRAM + ret +; 14089 + +StartClock:: ; 14089 + call GetClock + call Function1409b + call FixDays + jr nc, .skip_set + ; bit 5: Day count exceeds 139 + ; bit 6: Day count exceeds 255 + call RecordRTCStatus ; set flag on sRTCStatusFlags + +.skip_set + call StartRTC + ret +; 1409b + +Function1409b: ; 1409b + ld hl, hRTCDayHi + bit 7, [hl] + jr nz, .set_bit_7 + bit 6, [hl] + jr nz, .set_bit_7 + xor a + ret + +.set_bit_7 + ; Day count exceeds 16383 + ld a, %10000000 + call RecordRTCStatus ; set bit 7 on sRTCStatusFlags + ret +; 140ae + +Function140ae: ; 140ae + call CheckRTCStatus + ld c, a + and %11000000 ; Day count exceeded 255 or 16383 + jr nz, .time_overflow + + ld a, c + and %00100000 ; Day count exceeded 139 + jr z, .dont_update + + call UpdateTime + ld a, [wRTC + 0] + ld b, a + ld a, [CurDay] + cp b + jr c, .dont_update + +.time_overflow + callba ClearDailyTimers + callba Function170923 +; mobile + ld a, $5 + call GetSRAMBank + ld a, [$aa8c] + inc a + ld [$aa8c], a + ld a, [$b2fa] + inc a + ld [$b2fa], a + call CloseSRAM + ret + +.dont_update + xor a + ret +; 140ed + +Function140ed:: ; 140ed + call GetClock + call FixDays + ld hl, hRTCSeconds + ld de, StartSecond + + ld a, [StringBuffer2 + 3] + sub [hl] + dec hl + jr nc, .okay_secs + add 60 +.okay_secs + ld [de], a + dec de + + ld a, [StringBuffer2 + 2] + sbc [hl] + dec hl + jr nc, .okay_mins + add 60 +.okay_mins + ld [de], a + dec de + + ld a, [StringBuffer2 + 1] + sbc [hl] + dec hl + jr nc, .okay_hrs + add 24 +.okay_hrs + ld [de], a + dec de + + ld a, [StringBuffer2] + sbc [hl] + dec hl + jr nc, .okay_days + add 140 + ld c, 7 + call SimpleDivide + +.okay_days + ld [de], a + ret +; 1412a |