mirror of
https://github.com/thornAvery/jep-hack.git
synced 2026-02-22 15:32:16 +13:00
First Commit
Upload literally everything from the pokecrystal16 expand-move-ID branch
This commit is contained in:
commit
2f8a41f833
4618 changed files with 480386 additions and 0 deletions
271
home/time.asm
Normal file
271
home/time.asm
Normal file
|
|
@ -0,0 +1,271 @@
|
|||
; Functions relating to the timer interrupt and the real-time-clock.
|
||||
|
||||
Timer:: ; unreferenced
|
||||
push af
|
||||
ldh a, [hMobile]
|
||||
and a
|
||||
jr z, .not_mobile
|
||||
call MobileTimer
|
||||
|
||||
.not_mobile
|
||||
pop af
|
||||
reti
|
||||
|
||||
LatchClock::
|
||||
; latch clock counter data
|
||||
ld a, 0
|
||||
ld [MBC3LatchClock], a
|
||||
ld a, 1
|
||||
ld [MBC3LatchClock], a
|
||||
ret
|
||||
|
||||
UpdateTime::
|
||||
call GetClock
|
||||
call FixDays
|
||||
call FixTime
|
||||
farcall GetTimeOfDay
|
||||
ret
|
||||
|
||||
GetClock::
|
||||
; store clock data in hRTCDayHi-hRTCSeconds
|
||||
|
||||
; enable clock r/w
|
||||
ld a, SRAM_ENABLE
|
||||
ld [MBC3SRamEnable], a
|
||||
|
||||
; clock data is 'backwards' in hram
|
||||
|
||||
call LatchClock
|
||||
ld hl, MBC3SRamBank
|
||||
ld de, MBC3RTC
|
||||
|
||||
ld [hl], RTC_S
|
||||
ld a, [de]
|
||||
maskbits 60
|
||||
ldh [hRTCSeconds], a
|
||||
|
||||
ld [hl], RTC_M
|
||||
ld a, [de]
|
||||
maskbits 60
|
||||
ldh [hRTCMinutes], a
|
||||
|
||||
ld [hl], RTC_H
|
||||
ld a, [de]
|
||||
maskbits 24
|
||||
ldh [hRTCHours], a
|
||||
|
||||
ld [hl], RTC_DL
|
||||
ld a, [de]
|
||||
ldh [hRTCDayLo], a
|
||||
|
||||
ld [hl], RTC_DH
|
||||
ld a, [de]
|
||||
ldh [hRTCDayHi], a
|
||||
|
||||
; unlatch clock / disable clock r/w
|
||||
jp CloseSRAM
|
||||
|
||||
FixDays::
|
||||
; fix day count
|
||||
; mod by 140
|
||||
|
||||
; check if day count > 255 (bit 8 set)
|
||||
ldh a, [hRTCDayHi] ; DH
|
||||
bit 0, a
|
||||
jr z, .daylo
|
||||
; reset dh (bit 8)
|
||||
res 0, a
|
||||
ldh [hRTCDayHi], a
|
||||
|
||||
; mod 140
|
||||
; mod twice since bit 8 (DH) was set
|
||||
ldh a, [hRTCDayLo]
|
||||
.modh
|
||||
sub 140
|
||||
jr nc, .modh
|
||||
.modl
|
||||
sub 140
|
||||
jr nc, .modl
|
||||
add 140
|
||||
|
||||
; update dl
|
||||
ldh [hRTCDayLo], a
|
||||
|
||||
; flag for sRTCStatusFlags
|
||||
ld a, %01000000
|
||||
jr .set
|
||||
|
||||
.daylo
|
||||
; quit if fewer than 140 days have passed
|
||||
ldh a, [hRTCDayLo]
|
||||
cp 140
|
||||
jr c, .quit
|
||||
|
||||
; mod 140
|
||||
.mod
|
||||
sub 140
|
||||
jr nc, .mod
|
||||
add 140
|
||||
|
||||
; update dl
|
||||
ldh [hRTCDayLo], a
|
||||
|
||||
; flag for sRTCStatusFlags
|
||||
ld a, %00100000
|
||||
|
||||
.set
|
||||
; update clock with modded day value
|
||||
push af
|
||||
call SetClock
|
||||
pop af
|
||||
scf
|
||||
ret
|
||||
|
||||
.quit
|
||||
xor a
|
||||
ret
|
||||
|
||||
FixTime::
|
||||
; add ingame time (set at newgame) to current time
|
||||
; store time in wCurDay, hHours, hMinutes, hSeconds
|
||||
|
||||
; second
|
||||
ldh a, [hRTCSeconds]
|
||||
ld c, a
|
||||
ld a, [wStartSecond]
|
||||
add c
|
||||
sub 60
|
||||
jr nc, .updatesec
|
||||
add 60
|
||||
.updatesec
|
||||
ldh [hSeconds], a
|
||||
|
||||
; minute
|
||||
ccf ; carry is set, so turn it off
|
||||
ldh a, [hRTCMinutes]
|
||||
ld c, a
|
||||
ld a, [wStartMinute]
|
||||
adc c
|
||||
sub 60
|
||||
jr nc, .updatemin
|
||||
add 60
|
||||
.updatemin
|
||||
ldh [hMinutes], a
|
||||
|
||||
; hour
|
||||
ccf ; carry is set, so turn it off
|
||||
ldh a, [hRTCHours]
|
||||
ld c, a
|
||||
ld a, [wStartHour]
|
||||
adc c
|
||||
sub 24
|
||||
jr nc, .updatehr
|
||||
add 24
|
||||
.updatehr
|
||||
ldh [hHours], a
|
||||
|
||||
; day
|
||||
ccf ; carry is set, so turn it off
|
||||
ldh a, [hRTCDayLo]
|
||||
ld c, a
|
||||
ld a, [wStartDay]
|
||||
adc c
|
||||
ld [wCurDay], a
|
||||
ret
|
||||
|
||||
InitTimeOfDay::
|
||||
xor a
|
||||
ld [wStringBuffer2], a
|
||||
ld a, 0 ; useless
|
||||
ld [wStringBuffer2 + 3], a
|
||||
jr InitTime
|
||||
|
||||
InitDayOfWeek::
|
||||
call UpdateTime
|
||||
ldh a, [hHours]
|
||||
ld [wStringBuffer2 + 1], a
|
||||
ldh a, [hMinutes]
|
||||
ld [wStringBuffer2 + 2], a
|
||||
ldh a, [hSeconds]
|
||||
ld [wStringBuffer2 + 3], a
|
||||
jr InitTime ; useless
|
||||
|
||||
InitTime::
|
||||
farcall _InitTime
|
||||
ret
|
||||
|
||||
ClearClock::
|
||||
xor a
|
||||
ldh [hRTCSeconds], a
|
||||
ldh [hRTCMinutes], a
|
||||
ldh [hRTCHours], a
|
||||
ldh [hRTCDayLo], a
|
||||
ldh [hRTCDayHi], a
|
||||
; fallthrough
|
||||
|
||||
SetClock::
|
||||
; set clock data from hram
|
||||
|
||||
; enable clock r/w
|
||||
ld a, SRAM_ENABLE
|
||||
ld [MBC3SRamEnable], a
|
||||
|
||||
; set clock data
|
||||
; stored 'backwards' in hram
|
||||
|
||||
call LatchClock
|
||||
ld hl, MBC3SRamBank
|
||||
ld de, MBC3RTC
|
||||
|
||||
; seconds
|
||||
ld [hl], RTC_S
|
||||
ldh a, [hRTCSeconds]
|
||||
ld [de], a
|
||||
; minutes
|
||||
ld [hl], RTC_M
|
||||
ldh a, [hRTCMinutes]
|
||||
ld [de], a
|
||||
; hours
|
||||
ld [hl], RTC_H
|
||||
ldh a, [hRTCHours]
|
||||
ld [de], a
|
||||
; day lo
|
||||
ld [hl], RTC_DL
|
||||
ldh a, [hRTCDayLo]
|
||||
ld [de], a
|
||||
; day hi
|
||||
ld [hl], RTC_DH
|
||||
ldh a, [hRTCDayHi]
|
||||
res 6, a ; make sure timer is active
|
||||
ld [de], a
|
||||
|
||||
; cleanup
|
||||
jp CloseSRAM ; unlatch clock, disable clock r/w
|
||||
|
||||
ClearRTCStatus:: ; unreferenced
|
||||
; clear sRTCStatusFlags
|
||||
xor a
|
||||
push af
|
||||
ld a, BANK(sRTCStatusFlags)
|
||||
call OpenSRAM
|
||||
pop af
|
||||
ld [sRTCStatusFlags], a
|
||||
jp CloseSRAM
|
||||
|
||||
RecordRTCStatus::
|
||||
; append flags to sRTCStatusFlags
|
||||
ld hl, sRTCStatusFlags
|
||||
push af
|
||||
ld a, BANK(sRTCStatusFlags)
|
||||
call OpenSRAM
|
||||
pop af
|
||||
or [hl]
|
||||
ld [hl], a
|
||||
jp CloseSRAM
|
||||
|
||||
CheckRTCStatus::
|
||||
; check sRTCStatusFlags
|
||||
ld a, BANK(sRTCStatusFlags)
|
||||
call OpenSRAM
|
||||
ld a, [sRTCStatusFlags]
|
||||
jp CloseSRAM
|
||||
Loading…
Add table
Add a link
Reference in a new issue