Menu
This commit is contained in:
210
engine/rtc.asm
Executable file
210
engine/rtc.asm
Executable file
@@ -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
|
Reference in New Issue
Block a user