You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-04-09 05:44:44 -07:00
This commit is contained in:
@@ -140,8 +140,6 @@ Init::
|
||||
xor a ; LOW(vBGMap1)
|
||||
ldh [hBGMapAddress], a
|
||||
|
||||
farcall StartClock
|
||||
|
||||
xor a ; SRAM_DISABLE
|
||||
ld [MBC3LatchClock], a
|
||||
ld [MBC3SRamEnable], a
|
||||
|
@@ -268,7 +268,7 @@ JoyWaitAorB::
|
||||
ldh a, [hJoyPressed]
|
||||
and A_BUTTON | B_BUTTON
|
||||
ret nz
|
||||
call UpdateTimeAndPals
|
||||
call UpdateTimeSensitivePals
|
||||
jr .loop
|
||||
|
||||
WaitButton::
|
||||
@@ -386,7 +386,7 @@ PromptButton::
|
||||
ldh a, [hJoyPressed]
|
||||
and A_BUTTON | B_BUTTON
|
||||
jr nz, .received_input
|
||||
call UpdateTimeAndPals
|
||||
call UpdateTimeSensitivePals
|
||||
ld a, $1
|
||||
ldh [hBGMapMode], a
|
||||
call DelayFrame
|
||||
|
267
home/time.asm
267
home/time.asm
@@ -1,269 +1,4 @@
|
||||
; Functions relating to the timer interrupt and the real-time-clock.
|
||||
; Functions relating to the timer interrupt.
|
||||
|
||||
Timer::
|
||||
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
|
||||
call CloseSRAM
|
||||
ret
|
||||
|
||||
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::
|
||||
call .ClearhRTC
|
||||
call SetClock
|
||||
ret
|
||||
|
||||
.ClearhRTC:
|
||||
xor a
|
||||
ldh [hRTCSeconds], a
|
||||
ldh [hRTCMinutes], a
|
||||
ldh [hRTCHours], a
|
||||
ldh [hRTCDayLo], a
|
||||
ldh [hRTCDayHi], a
|
||||
ret
|
||||
|
||||
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
|
||||
|
||||
; seems to be a halt check that got partially commented out
|
||||
; this block is totally pointless
|
||||
ld [hl], RTC_DH
|
||||
ld a, [de]
|
||||
bit 6, a ; halt
|
||||
ld [de], a
|
||||
|
||||
; 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
|
||||
call CloseSRAM ; unlatch clock, disable clock r/w
|
||||
ret
|
||||
|
||||
RecordRTCStatus::
|
||||
; append flags to sRTCStatusFlags
|
||||
ld hl, sRTCStatusFlags
|
||||
push af
|
||||
ld a, BANK(sRTCStatusFlags)
|
||||
call OpenSRAM
|
||||
pop af
|
||||
or [hl]
|
||||
ld [hl], a
|
||||
call CloseSRAM
|
||||
ret
|
||||
|
||||
CheckRTCStatus::
|
||||
; check sRTCStatusFlags
|
||||
ld a, BANK(sRTCStatusFlags)
|
||||
call OpenSRAM
|
||||
ld a, [sRTCStatusFlags]
|
||||
call CloseSRAM
|
||||
ret
|
||||
|
@@ -1,13 +1,11 @@
|
||||
UpdateTimeAndPals::
|
||||
; update time and time-sensitive palettes
|
||||
UpdateTimeSensitivePals::
|
||||
; update time-sensitive palettes if overworld sprite updates are enabled
|
||||
|
||||
; rtc enabled?
|
||||
; sprite updates enabled?
|
||||
ld a, [wSpriteUpdatesEnabled]
|
||||
cp 0
|
||||
ret z
|
||||
|
||||
call UpdateTime
|
||||
|
||||
; obj update on?
|
||||
ld a, [wVramState]
|
||||
bit 0, a ; obj update
|
||||
|
Reference in New Issue
Block a user