mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-09-09 09:51:34 -07:00
eb1e3636bb
Use explicit ldh instruction to access HRAM locations, don't rely on optimizing ld
199 lines
3.0 KiB
NASM
199 lines
3.0 KiB
NASM
Unreferenced_StopRTC:
|
|
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
|
|
|
|
StartRTC:
|
|
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
|
|
|
|
GetTimeOfDay::
|
|
; get time of day based on the current hour
|
|
ldh 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
|
|
inc hl
|
|
inc hl
|
|
; try again
|
|
jr .check
|
|
|
|
.match
|
|
; get time of day
|
|
inc hl
|
|
ld a, [hl]
|
|
ld [wTimeOfDay], a
|
|
ret
|
|
|
|
TimesOfDay:
|
|
; hours for the time of day
|
|
; 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
|
|
db -1, MORN_F
|
|
|
|
Unreferenced_1404e:
|
|
db 20, NITE_F
|
|
db 40, MORN_F
|
|
db 60, DAY_F
|
|
db -1, MORN_F
|
|
|
|
StageRTCTimeForSave:
|
|
call UpdateTime
|
|
ld hl, wRTC
|
|
ld a, [wCurDay]
|
|
ld [hli], a
|
|
ldh a, [hHours]
|
|
ld [hli], a
|
|
ldh a, [hMinutes]
|
|
ld [hli], a
|
|
ldh a, [hSeconds]
|
|
ld [hli], a
|
|
ret
|
|
|
|
SaveRTC:
|
|
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
|
|
|
|
StartClock::
|
|
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
|
|
|
|
Function1409b:
|
|
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
|
|
|
|
Function140ae:
|
|
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, [wCurDay]
|
|
cp b
|
|
jr c, .dont_update
|
|
|
|
.time_overflow
|
|
farcall ClearDailyTimers
|
|
farcall Function170923
|
|
; mobile
|
|
ld a, 5 ; MBC30 bank used by JP Crystal; inaccessible by MBC3
|
|
call GetSRAMBank
|
|
ld a, [$aa8c] ; address of MBC30 bank
|
|
inc a
|
|
ld [$aa8c], a ; address of MBC30 bank
|
|
ld a, [$b2fa] ; address of MBC30 bank
|
|
inc a
|
|
ld [$b2fa], a ; address of MBC30 bank
|
|
call CloseSRAM
|
|
ret
|
|
|
|
.dont_update
|
|
xor a
|
|
ret
|
|
|
|
_InitTime::
|
|
call GetClock
|
|
call FixDays
|
|
ld hl, hRTCSeconds
|
|
ld de, wStartSecond
|
|
|
|
ld a, [wStringBuffer2 + 3]
|
|
sub [hl]
|
|
dec hl
|
|
jr nc, .okay_secs
|
|
add 60
|
|
.okay_secs
|
|
ld [de], a
|
|
dec de
|
|
|
|
ld a, [wStringBuffer2 + 2]
|
|
sbc [hl]
|
|
dec hl
|
|
jr nc, .okay_mins
|
|
add 60
|
|
.okay_mins
|
|
ld [de], a
|
|
dec de
|
|
|
|
ld a, [wStringBuffer2 + 1]
|
|
sbc [hl]
|
|
dec hl
|
|
jr nc, .okay_hrs
|
|
add 24
|
|
.okay_hrs
|
|
ld [de], a
|
|
dec de
|
|
|
|
ld a, [wStringBuffer2]
|
|
sbc [hl]
|
|
dec hl
|
|
jr nc, .okay_days
|
|
add 140
|
|
ld c, 7
|
|
call SimpleDivide
|
|
|
|
.okay_days
|
|
ld [de], a
|
|
ret
|