2020-06-21 20:27:43 +00:00
|
|
|
StopRTC: ; unreferenced
|
2015-12-15 23:59:49 +00:00
|
|
|
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
|
|
|
|
|
2018-06-24 14:09:41 +00:00
|
|
|
StartRTC:
|
2015-12-15 23:59:49 +00:00
|
|
|
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
|
|
|
|
|
2018-06-24 14:09:41 +00:00
|
|
|
GetTimeOfDay::
|
2015-12-15 23:59:49 +00:00
|
|
|
; get time of day based on the current hour
|
2018-08-25 18:28:22 +00:00
|
|
|
ldh a, [hHours] ; hour
|
2015-12-15 23:59:49 +00:00
|
|
|
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
|
|
|
|
inc hl
|
2016-05-04 15:46:23 +00:00
|
|
|
inc hl
|
2015-12-15 23:59:49 +00:00
|
|
|
; try again
|
|
|
|
jr .check
|
|
|
|
|
|
|
|
.match
|
|
|
|
; get time of day
|
|
|
|
inc hl
|
|
|
|
ld a, [hl]
|
2018-01-23 22:39:09 +00:00
|
|
|
ld [wTimeOfDay], a
|
2015-12-15 23:59:49 +00:00
|
|
|
ret
|
|
|
|
|
2018-06-24 14:09:41 +00:00
|
|
|
TimesOfDay:
|
2015-12-15 23:59:49 +00:00
|
|
|
; hours for the time of day
|
2017-12-11 17:20:01 +00:00
|
|
|
; 0400-0959 morn | 1000-1759 day | 1800-0359 nite
|
|
|
|
db MORN_HOUR, NITE_F
|
|
|
|
db DAY_HOUR, MORN_F
|
|
|
|
db NITE_HOUR, DAY_F
|
|
|
|
db MAX_HOUR, NITE_F
|
2017-12-11 06:02:28 +00:00
|
|
|
db -1, MORN_F
|
2015-12-15 23:59:49 +00:00
|
|
|
|
2020-06-21 20:27:43 +00:00
|
|
|
BetaTimesOfDay: ; unreferenced
|
2017-12-25 01:07:23 +00:00
|
|
|
db 20, NITE_F
|
|
|
|
db 40, MORN_F
|
|
|
|
db 60, DAY_F
|
|
|
|
db -1, MORN_F
|
2015-12-15 23:59:49 +00:00
|
|
|
|
2018-06-24 14:09:41 +00:00
|
|
|
StageRTCTimeForSave:
|
2015-12-15 23:59:49 +00:00
|
|
|
call UpdateTime
|
|
|
|
ld hl, wRTC
|
2018-01-23 22:39:09 +00:00
|
|
|
ld a, [wCurDay]
|
2015-12-15 23:59:49 +00:00
|
|
|
ld [hli], a
|
2018-08-25 18:28:22 +00:00
|
|
|
ldh a, [hHours]
|
2015-12-15 23:59:49 +00:00
|
|
|
ld [hli], a
|
2018-08-25 18:28:22 +00:00
|
|
|
ldh a, [hMinutes]
|
2015-12-15 23:59:49 +00:00
|
|
|
ld [hli], a
|
2018-08-25 18:28:22 +00:00
|
|
|
ldh a, [hSeconds]
|
2015-12-15 23:59:49 +00:00
|
|
|
ld [hli], a
|
|
|
|
ret
|
|
|
|
|
2018-06-24 14:09:41 +00:00
|
|
|
SaveRTC:
|
2020-06-17 15:29:00 +00:00
|
|
|
ld a, SRAM_ENABLE
|
2015-12-15 23:59:49 +00:00
|
|
|
ld [MBC3SRamEnable], a
|
|
|
|
call LatchClock
|
|
|
|
ld hl, MBC3RTC
|
2020-06-17 15:29:00 +00:00
|
|
|
ld a, RTC_DH
|
2015-12-15 23:59:49 +00:00
|
|
|
ld [MBC3SRamBank], a
|
|
|
|
res 7, [hl]
|
|
|
|
ld a, BANK(sRTCStatusFlags)
|
|
|
|
ld [MBC3SRamBank], a
|
|
|
|
xor a
|
|
|
|
ld [sRTCStatusFlags], a
|
|
|
|
call CloseSRAM
|
|
|
|
ret
|
|
|
|
|
2018-06-24 14:09:41 +00:00
|
|
|
StartClock::
|
2015-12-15 23:59:49 +00:00
|
|
|
call GetClock
|
2020-06-16 15:28:52 +00:00
|
|
|
call _FixDays
|
2015-12-15 23:59:49 +00:00
|
|
|
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
|
|
|
|
|
2020-06-16 15:28:52 +00:00
|
|
|
_FixDays:
|
2015-12-15 23:59:49 +00:00
|
|
|
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
|
|
|
|
|
2020-06-16 15:28:52 +00:00
|
|
|
ClockContinue:
|
2015-12-15 23:59:49 +00:00
|
|
|
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
|
2018-01-23 22:39:09 +00:00
|
|
|
ld a, [wCurDay]
|
2015-12-15 23:59:49 +00:00
|
|
|
cp b
|
|
|
|
jr c, .dont_update
|
|
|
|
|
|
|
|
.time_overflow
|
2017-12-24 17:47:30 +00:00
|
|
|
farcall ClearDailyTimers
|
|
|
|
farcall Function170923
|
2020-02-28 16:51:42 +00:00
|
|
|
ld a, BANK(s5_aa8c) ; aka BANK(s5_b2fa)
|
2020-06-17 21:03:38 +00:00
|
|
|
call OpenSRAM
|
2020-02-25 18:38:24 +00:00
|
|
|
ld a, [s5_aa8c]
|
2015-12-15 23:59:49 +00:00
|
|
|
inc a
|
2020-02-25 18:38:24 +00:00
|
|
|
ld [s5_aa8c], a
|
|
|
|
ld a, [s5_b2fa]
|
2015-12-15 23:59:49 +00:00
|
|
|
inc a
|
2020-02-25 18:38:24 +00:00
|
|
|
ld [s5_b2fa], a
|
2015-12-15 23:59:49 +00:00
|
|
|
call CloseSRAM
|
|
|
|
ret
|
|
|
|
|
|
|
|
.dont_update
|
|
|
|
xor a
|
|
|
|
ret
|
|
|
|
|
2018-06-24 14:09:41 +00:00
|
|
|
_InitTime::
|
2015-12-15 23:59:49 +00:00
|
|
|
call GetClock
|
|
|
|
call FixDays
|
|
|
|
ld hl, hRTCSeconds
|
2018-01-23 22:39:09 +00:00
|
|
|
ld de, wStartSecond
|
2015-12-15 23:59:49 +00:00
|
|
|
|
2018-01-23 22:39:09 +00:00
|
|
|
ld a, [wStringBuffer2 + 3]
|
2015-12-15 23:59:49 +00:00
|
|
|
sub [hl]
|
|
|
|
dec hl
|
|
|
|
jr nc, .okay_secs
|
|
|
|
add 60
|
|
|
|
.okay_secs
|
|
|
|
ld [de], a
|
|
|
|
dec de
|
|
|
|
|
2018-01-23 22:39:09 +00:00
|
|
|
ld a, [wStringBuffer2 + 2]
|
2015-12-15 23:59:49 +00:00
|
|
|
sbc [hl]
|
|
|
|
dec hl
|
|
|
|
jr nc, .okay_mins
|
|
|
|
add 60
|
|
|
|
.okay_mins
|
|
|
|
ld [de], a
|
|
|
|
dec de
|
|
|
|
|
2018-01-23 22:39:09 +00:00
|
|
|
ld a, [wStringBuffer2 + 1]
|
2015-12-15 23:59:49 +00:00
|
|
|
sbc [hl]
|
|
|
|
dec hl
|
|
|
|
jr nc, .okay_hrs
|
|
|
|
add 24
|
|
|
|
.okay_hrs
|
|
|
|
ld [de], a
|
|
|
|
dec de
|
|
|
|
|
2018-01-23 22:39:09 +00:00
|
|
|
ld a, [wStringBuffer2]
|
2015-12-15 23:59:49 +00:00
|
|
|
sbc [hl]
|
|
|
|
dec hl
|
|
|
|
jr nc, .okay_days
|
|
|
|
add 140
|
|
|
|
ld c, 7
|
|
|
|
call SimpleDivide
|
|
|
|
|
|
|
|
.okay_days
|
|
|
|
ld [de], a
|
|
|
|
ret
|