Organize the engine/ directory, take 2
Renamed `game` to `games` and `menu` to `menus`. Moved some functions from `engine/routines/` to their fitting subdirectories. Made two new subdirectories: * engine/rtc: Contains all RTC-related things. Menus, hardware, misc functions. * engine/items: Contains all item-related things. Pack, item effects, other item handlers.
This commit is contained in:
254
engine/rtc/clock_reset.asm
Executable file
254
engine/rtc/clock_reset.asm
Executable file
@@ -0,0 +1,254 @@
|
||||
|
||||
ResetClock_GetWraparoundTime: ; 20000 (8:4000)
|
||||
push hl
|
||||
dec a
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .WrapAroundTimes
|
||||
rept 4
|
||||
add hl, de
|
||||
endr
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
inc hl
|
||||
ld b, [hl]
|
||||
inc hl
|
||||
ld c, [hl]
|
||||
pop hl
|
||||
ret
|
||||
; 20015 (8:4015)
|
||||
|
||||
.WrapAroundTimes: ; 20015
|
||||
dw wBuffer4
|
||||
db 7, 4
|
||||
|
||||
dw wBuffer5
|
||||
db 24, 12
|
||||
|
||||
dw wBuffer6
|
||||
db 60, 15
|
||||
; 20021
|
||||
|
||||
RestartClock: ; 20021 (8:4021)
|
||||
; If we're here, we had an RTC overflow.
|
||||
ld hl, .Text_ClockTimeMayBeWrong
|
||||
call PrintText
|
||||
ld hl, wOptions
|
||||
ld a, [hl]
|
||||
push af
|
||||
set NO_TEXT_SCROLL, [hl]
|
||||
call LoadStandardMenuHeader
|
||||
call ClearTileMap
|
||||
ld hl, .Text_SetWithControlPad
|
||||
call PrintText
|
||||
call .SetClock
|
||||
call ExitMenu
|
||||
pop bc
|
||||
ld hl, wOptions
|
||||
ld [hl], b
|
||||
ld c, a
|
||||
ret
|
||||
; 20047 (8:4047)
|
||||
|
||||
.Text_ClockTimeMayBeWrong: ; 0x20047
|
||||
; The clock's time may be wrong. Please reset the time.
|
||||
text_jump UnknownText_0x1c40e6
|
||||
db "@"
|
||||
; 0x2004c
|
||||
|
||||
.Text_SetWithControlPad: ; 0x2004c
|
||||
; Set with the Control Pad. Confirm: A Button Cancel: B Button
|
||||
text_jump UnknownText_0x1c411c
|
||||
db "@"
|
||||
; 0x20051
|
||||
|
||||
.SetClock: ; 20051 (8:4051)
|
||||
ld a, 1
|
||||
ld [wBuffer1], a ; which digit
|
||||
ld [wBuffer2], a
|
||||
ld a, 8
|
||||
ld [wBuffer3], a
|
||||
call UpdateTime
|
||||
call GetWeekday
|
||||
ld [wBuffer4], a
|
||||
ld a, [hHours]
|
||||
ld [wBuffer5], a
|
||||
ld a, [hMinutes]
|
||||
ld [wBuffer6], a
|
||||
|
||||
.loop
|
||||
call .joy_loop
|
||||
jr nc, .loop
|
||||
and a
|
||||
ret nz
|
||||
call .PrintTime
|
||||
ld hl, .Text_IsThisOK
|
||||
call PrintText
|
||||
call YesNoBox
|
||||
jr c, .cancel
|
||||
ld a, [wBuffer4]
|
||||
ld [wStringBuffer2], a
|
||||
ld a, [wBuffer5]
|
||||
ld [wStringBuffer2 + 1], a
|
||||
ld a, [wBuffer6]
|
||||
ld [wStringBuffer2 + 2], a
|
||||
xor a
|
||||
ld [wStringBuffer2 + 3], a
|
||||
call InitTime
|
||||
call .PrintTime
|
||||
ld hl, .Text_ClockReset
|
||||
call PrintText
|
||||
call WaitPressAorB_BlinkCursor
|
||||
xor a
|
||||
ret
|
||||
|
||||
.cancel
|
||||
ld a, $1
|
||||
ret
|
||||
; 200b0 (8:40b0)
|
||||
|
||||
.Text_IsThisOK: ; 0x200b0
|
||||
; Is this OK?
|
||||
text_jump UnknownText_0x1c415b
|
||||
db "@"
|
||||
; 0x200b5
|
||||
|
||||
.Text_ClockReset: ; 0x200b5
|
||||
; The clock has been reset.
|
||||
text_jump UnknownText_0x1c4168
|
||||
db "@"
|
||||
; 0x200ba
|
||||
|
||||
.joy_loop
|
||||
call JoyTextDelay_ForcehJoyDown
|
||||
ld c, a
|
||||
push af
|
||||
call .PrintTime
|
||||
pop af
|
||||
bit 0, a
|
||||
jr nz, .press_A
|
||||
bit 1, a
|
||||
jr nz, .press_B
|
||||
bit 6, a
|
||||
jr nz, .pressed_up
|
||||
bit 7, a
|
||||
jr nz, .pressed_down
|
||||
bit 5, a
|
||||
jr nz, .pressed_left
|
||||
bit 4, a
|
||||
jr nz, .pressed_right
|
||||
jr .joy_loop
|
||||
|
||||
.press_A
|
||||
ld a, $0
|
||||
scf
|
||||
ret
|
||||
|
||||
.press_B
|
||||
ld a, $1
|
||||
scf
|
||||
ret
|
||||
|
||||
.pressed_up
|
||||
ld a, [wBuffer1]
|
||||
call ResetClock_GetWraparoundTime
|
||||
ld a, [de]
|
||||
inc a
|
||||
ld [de], a
|
||||
cp b
|
||||
jr c, .done_scroll
|
||||
ld a, $0
|
||||
ld [de], a
|
||||
jr .done_scroll
|
||||
|
||||
.pressed_down
|
||||
ld a, [wBuffer1]
|
||||
call ResetClock_GetWraparoundTime
|
||||
ld a, [de]
|
||||
dec a
|
||||
ld [de], a
|
||||
cp -1
|
||||
jr nz, .done_scroll
|
||||
ld a, b
|
||||
dec a
|
||||
ld [de], a
|
||||
jr .done_scroll
|
||||
|
||||
.pressed_left
|
||||
ld hl, wBuffer1
|
||||
dec [hl]
|
||||
jr nz, .done_scroll
|
||||
ld [hl], $3
|
||||
jr .done_scroll
|
||||
|
||||
.pressed_right
|
||||
ld hl, wBuffer1
|
||||
inc [hl]
|
||||
ld a, [hl]
|
||||
cp $4
|
||||
jr c, .done_scroll
|
||||
ld [hl], $1
|
||||
|
||||
.done_scroll
|
||||
xor a
|
||||
ret
|
||||
|
||||
.PrintTime: ; 2011f (8:411f)
|
||||
hlcoord 0, 5
|
||||
ld b, 5
|
||||
ld c, 18
|
||||
call TextBox
|
||||
decoord 1, 8
|
||||
ld a, [wBuffer4]
|
||||
ld b, a
|
||||
farcall PrintDayOfWeek
|
||||
ld a, [wBuffer5]
|
||||
ld b, a
|
||||
ld a, [wBuffer6]
|
||||
ld c, a
|
||||
decoord 11, 8
|
||||
farcall PrintHoursMins
|
||||
ld a, [wBuffer2]
|
||||
lb de, " ", " "
|
||||
call .PlaceChars
|
||||
ld a, [wBuffer1]
|
||||
lb de, "▲", "▼"
|
||||
call .PlaceChars
|
||||
ld a, [wBuffer1]
|
||||
ld [wBuffer2], a
|
||||
ret
|
||||
; 20160 (8:4160)
|
||||
|
||||
.unreferenced ; 20160
|
||||
; unused
|
||||
ld a, [wBuffer3]
|
||||
ld b, a
|
||||
call Coord2Tile
|
||||
ret
|
||||
; 20168
|
||||
|
||||
.PlaceChars: ; 20168 (8:4168)
|
||||
push de
|
||||
call ResetClock_GetWraparoundTime
|
||||
ld a, [wBuffer3]
|
||||
dec a
|
||||
ld b, a
|
||||
call Coord2Tile
|
||||
pop de
|
||||
ld [hl], d
|
||||
ld bc, 2 * SCREEN_WIDTH
|
||||
add hl, bc
|
||||
ld [hl], e
|
||||
ret
|
||||
; 2017c (8:417c)
|
||||
|
||||
UnreferencedString_HourJP: ; 2017c
|
||||
; unused
|
||||
db "じ@" ; HR
|
||||
; 2017e
|
||||
|
||||
UnreferencedString_MinuteJP: ; 2017e
|
||||
; unused
|
||||
db "ふん@" ; MIN
|
||||
; 20181
|
296
engine/rtc/delete_save_change_clock.asm
Executable file
296
engine/rtc/delete_save_change_clock.asm
Executable file
@@ -0,0 +1,296 @@
|
||||
_ResetClock: ; 4d3b1
|
||||
farcall BlankScreen
|
||||
ld b, SCGB_DIPLOMA
|
||||
call GetSGBLayout
|
||||
call LoadStandardFont
|
||||
call LoadFontsExtra
|
||||
ld de, MUSIC_MAIN_MENU
|
||||
call PlayMusic
|
||||
ld hl, .text_askreset
|
||||
call PrintText
|
||||
ld hl, .NoYes_MenuHeader
|
||||
call CopyMenuHeader
|
||||
call VerticalMenu
|
||||
ret c
|
||||
ld a, [wMenuCursorY]
|
||||
cp $1
|
||||
ret z
|
||||
call ClockResetPassword
|
||||
jr c, .wrongpassword
|
||||
ld a, BANK(sRTCStatusFlags)
|
||||
call GetSRAMBank
|
||||
ld a, $80
|
||||
ld [sRTCStatusFlags], a
|
||||
call CloseSRAM
|
||||
ld hl, .text_okay
|
||||
call PrintText
|
||||
ret
|
||||
|
||||
.wrongpassword
|
||||
ld hl, .text_wrong
|
||||
call PrintText
|
||||
ret
|
||||
|
||||
.text_okay ; 0x4d3fe
|
||||
; Password OK. Select CONTINUE & reset settings.
|
||||
text_jump UnknownText_0x1c55db
|
||||
db "@"
|
||||
|
||||
.text_wrong ; 0x4d403
|
||||
; Wrong password!
|
||||
text_jump UnknownText_0x1c560b
|
||||
db "@"
|
||||
|
||||
.text_askreset ; 0x4d408
|
||||
; Reset the clock?
|
||||
text_jump UnknownText_0x1c561c
|
||||
db "@"
|
||||
|
||||
.NoYes_MenuHeader: ; 0x4d40d
|
||||
db 0 ; flags
|
||||
menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1
|
||||
dw .NoYes_MenuData
|
||||
db 1 ; default option
|
||||
|
||||
.NoYes_MenuData: ; 0x4d415
|
||||
db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
|
||||
db 2 ; items
|
||||
db "NO@"
|
||||
db "YES@"
|
||||
|
||||
ClockResetPassword: ; 4d41e
|
||||
call .CalculatePassword
|
||||
push de
|
||||
ld hl, wStringBuffer2
|
||||
ld bc, 5
|
||||
xor a
|
||||
call ByteFill
|
||||
ld a, $4
|
||||
ld [wStringBuffer2 + 5], a
|
||||
ld hl, .pleaseenterpasswordtext
|
||||
call PrintText
|
||||
.loop
|
||||
call .updateIDdisplay
|
||||
.loop2
|
||||
call JoyTextDelay
|
||||
ld a, [hJoyLast]
|
||||
ld b, a
|
||||
and A_BUTTON
|
||||
jr nz, .confirm
|
||||
ld a, b
|
||||
and D_PAD
|
||||
jr z, .loop2
|
||||
call .dpadinput
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
jr .loop
|
||||
|
||||
.confirm
|
||||
call .ConvertDecIDToBytes
|
||||
pop de
|
||||
ld a, e
|
||||
cp l
|
||||
jr nz, .nope
|
||||
ld a, d
|
||||
cp h
|
||||
jr nz, .nope
|
||||
and a
|
||||
ret
|
||||
|
||||
.nope
|
||||
scf
|
||||
ret
|
||||
|
||||
.pleaseenterpasswordtext ; 0x4d463
|
||||
; Please enter the password.
|
||||
text_jump UnknownText_0x1c562e
|
||||
db "@"
|
||||
|
||||
.updateIDdisplay ; 4d468
|
||||
hlcoord 14, 15
|
||||
ld de, wStringBuffer2
|
||||
ld c, 5
|
||||
.loop3
|
||||
ld a, [de]
|
||||
add "0"
|
||||
ld [hli], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .loop3
|
||||
hlcoord 14, 16
|
||||
ld bc, 5
|
||||
ld a, " "
|
||||
call ByteFill
|
||||
hlcoord 14, 16
|
||||
ld a, [wStringBuffer2 + 5]
|
||||
ld e, a
|
||||
ld d, $0
|
||||
add hl, de
|
||||
ld [hl], "▲"
|
||||
ret
|
||||
|
||||
.dpadinput ; 4d490
|
||||
ld a, b
|
||||
and D_LEFT
|
||||
jr nz, .left
|
||||
ld a, b
|
||||
and D_RIGHT
|
||||
jr nz, .right
|
||||
ld a, b
|
||||
and D_UP
|
||||
jr nz, .up
|
||||
ld a, b
|
||||
and D_DOWN
|
||||
jr nz, .down
|
||||
ret
|
||||
|
||||
.left
|
||||
ld a, [wStringBuffer2 + 5]
|
||||
and a
|
||||
ret z
|
||||
dec a
|
||||
ld [wStringBuffer2 + 5], a
|
||||
ret
|
||||
|
||||
.right
|
||||
ld a, [wStringBuffer2 + 5]
|
||||
cp $4
|
||||
ret z
|
||||
inc a
|
||||
ld [wStringBuffer2 + 5], a
|
||||
ret
|
||||
|
||||
.up
|
||||
call .getcurrentdigit
|
||||
ld a, [hl]
|
||||
cp 9
|
||||
jr z, .wraparound_up
|
||||
inc a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.wraparound_up
|
||||
ld [hl], $0
|
||||
ret
|
||||
|
||||
.down
|
||||
call .getcurrentdigit
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .wraparound_down
|
||||
dec a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.wraparound_down
|
||||
ld [hl], 9
|
||||
ret
|
||||
|
||||
.getcurrentdigit ; 4d4d5
|
||||
ld a, [wStringBuffer2 + 5]
|
||||
ld e, a
|
||||
ld d, $0
|
||||
ld hl, wStringBuffer2
|
||||
add hl, de
|
||||
ret
|
||||
|
||||
.ConvertDecIDToBytes: ; 4d4e0
|
||||
ld hl, 0
|
||||
ld de, wStringBuffer2 + 4
|
||||
ld bc, 1
|
||||
call .ConvertToBytes
|
||||
ld bc, 10
|
||||
call .ConvertToBytes
|
||||
ld bc, 100
|
||||
call .ConvertToBytes
|
||||
ld bc, 1000
|
||||
call .ConvertToBytes
|
||||
ld bc, 10000
|
||||
.ConvertToBytes: ; 4d501
|
||||
ld a, [de]
|
||||
dec de
|
||||
push hl
|
||||
ld hl, 0
|
||||
call AddNTimes
|
||||
ld c, l
|
||||
ld b, h
|
||||
pop hl
|
||||
add hl, bc
|
||||
ret
|
||||
|
||||
.CalculatePassword: ; 4d50f
|
||||
ld a, BANK(sPlayerData)
|
||||
call GetSRAMBank
|
||||
ld de, 0
|
||||
ld hl, sPlayerData + (wPlayerID - wPlayerData)
|
||||
ld c, $2
|
||||
call .ComponentFromNumber
|
||||
ld hl, sPlayerData + (wPlayerName - wPlayerData)
|
||||
ld c, NAME_LENGTH_JAPANESE - 1
|
||||
call .ComponentFromString
|
||||
ld hl, sPlayerData + (wMoney - wPlayerData)
|
||||
ld c, $3
|
||||
call .ComponentFromNumber
|
||||
call CloseSRAM
|
||||
ret
|
||||
|
||||
.ComponentFromNumber: ; 4d533
|
||||
ld a, [hli]
|
||||
add e
|
||||
ld e, a
|
||||
ld a, $0
|
||||
adc d
|
||||
ld d, a
|
||||
dec c
|
||||
jr nz, .ComponentFromNumber
|
||||
ret
|
||||
|
||||
.ComponentFromString: ; 4d53e
|
||||
ld a, [hli]
|
||||
cp "@"
|
||||
ret z
|
||||
add e
|
||||
ld e, a
|
||||
ld a, $0
|
||||
adc d
|
||||
ld d, a
|
||||
dec c
|
||||
jr nz, .ComponentFromString
|
||||
ret
|
||||
|
||||
_DeleteSaveData: ; 4d54c
|
||||
farcall BlankScreen
|
||||
ld b, SCGB_DIPLOMA
|
||||
call GetSGBLayout
|
||||
call LoadStandardFont
|
||||
call LoadFontsExtra
|
||||
ld de, MUSIC_MAIN_MENU
|
||||
call PlayMusic
|
||||
ld hl, .Text_ClearAllSaveData
|
||||
call PrintText
|
||||
ld hl, .NoYesMenuHeader
|
||||
call CopyMenuHeader
|
||||
call VerticalMenu
|
||||
ret c
|
||||
ld a, [wMenuCursorY]
|
||||
cp $1
|
||||
ret z
|
||||
farcall EmptyAllSRAMBanks
|
||||
ret
|
||||
|
||||
.Text_ClearAllSaveData: ; 0x4d580
|
||||
; Clear all save data?
|
||||
text_jump UnknownText_0x1c564a
|
||||
db "@"
|
||||
|
||||
.NoYesMenuHeader: ; 0x4d585
|
||||
db 0 ; flags
|
||||
menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1
|
||||
dw .MenuData
|
||||
db 1 ; default option
|
||||
|
||||
.MenuData: ; 0x4d58d
|
||||
db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
|
||||
db 2 ; items
|
||||
db "NO@"
|
||||
db "YES@"
|
63
engine/rtc/printhoursmins.asm
Normal file
63
engine/rtc/printhoursmins.asm
Normal file
@@ -0,0 +1,63 @@
|
||||
Unreferenced_Function1dd6a9: ; 1dd6a9
|
||||
ld a, b
|
||||
ld b, c
|
||||
ld c, a
|
||||
push bc
|
||||
push de
|
||||
ld hl, sp+$2
|
||||
ld d, h
|
||||
ld e, l
|
||||
pop hl
|
||||
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
|
||||
call PrintNum
|
||||
pop bc
|
||||
ret
|
||||
|
||||
PrintHoursMins: ; 1dd6bb (77:56bb)
|
||||
; Hours in b, minutes in c
|
||||
ld a, b
|
||||
cp 12
|
||||
push af
|
||||
jr c, .AM
|
||||
jr z, .PM
|
||||
sub 12
|
||||
jr .PM
|
||||
.AM:
|
||||
or a
|
||||
jr nz, .PM
|
||||
ld a, 12
|
||||
.PM:
|
||||
ld b, a
|
||||
; Crazy stuff happening with the stack
|
||||
push bc
|
||||
ld hl, sp+$1
|
||||
push de
|
||||
push hl
|
||||
pop de
|
||||
pop hl
|
||||
ld [hl], " "
|
||||
lb bc, 1, 2
|
||||
call PrintNum
|
||||
ld [hl], ":"
|
||||
inc hl
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld hl, sp+$0
|
||||
push de
|
||||
push hl
|
||||
pop de
|
||||
pop hl
|
||||
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
|
||||
call PrintNum
|
||||
pop bc
|
||||
ld de, String_AM
|
||||
pop af
|
||||
jr c, .place_am_pm
|
||||
ld de, String_PM
|
||||
.place_am_pm
|
||||
inc hl
|
||||
call PlaceString
|
||||
ret
|
||||
|
||||
String_AM: db "AM@" ; 1dd6fc
|
||||
String_PM: db "PM@" ; 1dd6ff
|
209
engine/rtc/rtc.asm
Executable file
209
engine/rtc/rtc.asm
Executable file
@@ -0,0 +1,209 @@
|
||||
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
|
||||
; 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
|
||||
inc hl
|
||||
inc hl
|
||||
; try again
|
||||
jr .check
|
||||
|
||||
.match
|
||||
; get time of day
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
ld [wTimeOfDay], a
|
||||
ret
|
||||
; 14044
|
||||
|
||||
TimesOfDay: ; 14044
|
||||
; 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
|
||||
; 1404e
|
||||
|
||||
Unreferenced_1404e:
|
||||
db 20, NITE_F
|
||||
db 40, MORN_F
|
||||
db 60, DAY_F
|
||||
db -1, MORN_F
|
||||
; 14056
|
||||
|
||||
StageRTCTimeForSave: ; 14056
|
||||
call UpdateTime
|
||||
ld hl, wRTC
|
||||
ld a, [wCurDay]
|
||||
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, [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
|
||||
; 140ed
|
||||
|
||||
_InitTime:: ; 140ed
|
||||
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
|
||||
; 1412a
|
773
engine/rtc/timeset.asm
Executable file
773
engine/rtc/timeset.asm
Executable file
@@ -0,0 +1,773 @@
|
||||
TIMESET_UP_ARROW EQUS "\"♂\"" ; $ef
|
||||
TIMESET_DOWN_ARROW EQUS "\"♀\"" ; $f5
|
||||
|
||||
InitClock: ; 90672 (24:4672)
|
||||
; Ask the player to set the time.
|
||||
ld a, [hInMenu]
|
||||
push af
|
||||
ld a, $1
|
||||
ld [hInMenu], a
|
||||
|
||||
ld a, $0
|
||||
ld [wSpriteUpdatesEnabled], a
|
||||
ld a, $10
|
||||
ld [wMusicFade], a
|
||||
ld a, LOW(MUSIC_NONE)
|
||||
ld [wMusicFadeID], a
|
||||
ld a, HIGH(MUSIC_NONE)
|
||||
ld [wMusicFadeID + 1], a
|
||||
ld c, 8
|
||||
call DelayFrames
|
||||
call RotateFourPalettesLeft
|
||||
call ClearTileMap
|
||||
call ClearSprites
|
||||
ld b, SCGB_DIPLOMA
|
||||
call GetSGBLayout
|
||||
xor a
|
||||
ld [hBGMapMode], a
|
||||
call LoadStandardFont
|
||||
ld de, TimeSetBackgroundGFX
|
||||
ld hl, vTiles2 tile $00
|
||||
lb bc, BANK(TimeSetBackgroundGFX), 1
|
||||
call Request1bpp
|
||||
ld de, TimeSetUpArrowGFX
|
||||
ld hl, vTiles2 tile $01
|
||||
lb bc, BANK(TimeSetUpArrowGFX), 1
|
||||
call Request1bpp
|
||||
ld de, TimeSetDownArrowGFX
|
||||
ld hl, vTiles2 tile $02
|
||||
lb bc, BANK(TimeSetDownArrowGFX), 1
|
||||
call Request1bpp
|
||||
call .ClearScreen
|
||||
call WaitBGMap
|
||||
call RotateFourPalettesRight
|
||||
ld hl, Text_WokeUpOak
|
||||
call PrintText
|
||||
ld hl, wTimeSetBuffer
|
||||
ld bc, 50
|
||||
xor a
|
||||
call ByteFill
|
||||
ld a, 10 ; default hour = 10 AM
|
||||
ld [wInitHourBuffer], a
|
||||
|
||||
.loop
|
||||
ld hl, Text_WhatTimeIsIt
|
||||
call PrintText
|
||||
hlcoord 3, 7
|
||||
ld b, 2
|
||||
ld c, 15
|
||||
call TextBox
|
||||
hlcoord 11, 7
|
||||
ld [hl], $1
|
||||
hlcoord 11, 10
|
||||
ld [hl], $2
|
||||
hlcoord 4, 9
|
||||
call DisplayHourOClock
|
||||
ld c, 10
|
||||
call DelayFrames
|
||||
|
||||
.SetHourLoop:
|
||||
call JoyTextDelay
|
||||
call SetHour
|
||||
jr nc, .SetHourLoop
|
||||
|
||||
ld a, [wInitHourBuffer]
|
||||
ld [wStringBuffer2 + 1], a
|
||||
call .ClearScreen
|
||||
ld hl, Text_WhatHrs
|
||||
call PrintText
|
||||
call YesNoBox
|
||||
jr nc, .HourIsSet
|
||||
call .ClearScreen
|
||||
jr .loop
|
||||
|
||||
.HourIsSet:
|
||||
ld hl, Text_HowManyMinutes
|
||||
call PrintText
|
||||
hlcoord 11, 7
|
||||
lb bc, 2, 7
|
||||
call TextBox
|
||||
hlcoord 15, 7
|
||||
ld [hl], $1
|
||||
hlcoord 15, 10
|
||||
ld [hl], $2
|
||||
hlcoord 12, 9
|
||||
call DisplayMinutesWithMinString
|
||||
ld c, 10
|
||||
call DelayFrames
|
||||
|
||||
.SetMinutesLoop:
|
||||
call JoyTextDelay
|
||||
call SetMinutes
|
||||
jr nc, .SetMinutesLoop
|
||||
|
||||
ld a, [wInitMinuteBuffer]
|
||||
ld [wStringBuffer2 + 2], a
|
||||
call .ClearScreen
|
||||
ld hl, Text_WhoaMins
|
||||
call PrintText
|
||||
call YesNoBox
|
||||
jr nc, .MinutesAreSet
|
||||
call .ClearScreen
|
||||
jr .HourIsSet
|
||||
|
||||
.MinutesAreSet:
|
||||
call InitTimeOfDay
|
||||
ld hl, OakText_ResponseToSetTime
|
||||
call PrintText
|
||||
call WaitPressAorB_BlinkCursor
|
||||
pop af
|
||||
ld [hInMenu], a
|
||||
ret
|
||||
|
||||
.ClearScreen: ; 90783 (24:4783)
|
||||
xor a
|
||||
ld [hBGMapMode], a
|
||||
hlcoord 0, 0
|
||||
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
|
||||
xor a
|
||||
call ByteFill
|
||||
ld a, $1
|
||||
ld [hBGMapMode], a
|
||||
ret
|
||||
|
||||
SetHour: ; 90795 (24:4795)
|
||||
ld a, [hJoyPressed]
|
||||
and A_BUTTON
|
||||
jr nz, .Confirm
|
||||
|
||||
ld hl, hJoyLast
|
||||
ld a, [hl]
|
||||
and D_UP
|
||||
jr nz, .up
|
||||
ld a, [hl]
|
||||
and D_DOWN
|
||||
jr nz, .down
|
||||
call DelayFrame
|
||||
and a
|
||||
ret
|
||||
|
||||
.down
|
||||
ld hl, wInitHourBuffer
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr nz, .DecreaseThroughMidnight
|
||||
ld a, 23 + 1
|
||||
.DecreaseThroughMidnight:
|
||||
dec a
|
||||
ld [hl], a
|
||||
jr .okay
|
||||
|
||||
.up
|
||||
ld hl, wInitHourBuffer
|
||||
ld a, [hl]
|
||||
cp 23
|
||||
jr c, .AdvanceThroughMidnight
|
||||
ld a, -1
|
||||
.AdvanceThroughMidnight:
|
||||
inc a
|
||||
ld [hl], a
|
||||
|
||||
.okay
|
||||
hlcoord 4, 9
|
||||
ld a, " "
|
||||
ld bc, 15
|
||||
call ByteFill
|
||||
hlcoord 4, 9
|
||||
call DisplayHourOClock
|
||||
call WaitBGMap
|
||||
and a
|
||||
ret
|
||||
|
||||
.Confirm:
|
||||
scf
|
||||
ret
|
||||
|
||||
DisplayHourOClock: ; 907de (24:47de)
|
||||
push hl
|
||||
ld a, [wInitHourBuffer]
|
||||
ld c, a
|
||||
ld e, l
|
||||
ld d, h
|
||||
call PrintHour
|
||||
inc hl
|
||||
ld de, String_oclock
|
||||
call PlaceString
|
||||
pop hl
|
||||
ret
|
||||
; 907f1 (24:47f1)
|
||||
|
||||
UnreferencedFunction907f1: ; 907f1
|
||||
ld h, d
|
||||
ld l, e
|
||||
push hl
|
||||
call DisplayHourOClock
|
||||
pop de
|
||||
inc de
|
||||
inc de
|
||||
ld a, ":"
|
||||
ld [de], a
|
||||
inc de
|
||||
push de
|
||||
ld hl, 3
|
||||
add hl, de
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
ld a, [de]
|
||||
ld [hl], a
|
||||
pop hl
|
||||
call DisplayMinutesWithMinString
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
ret
|
||||
; 90810
|
||||
|
||||
SetMinutes: ; 90810 (24:4810)
|
||||
ld a, [hJoyPressed]
|
||||
and A_BUTTON
|
||||
jr nz, .a_button
|
||||
ld hl, hJoyLast
|
||||
ld a, [hl]
|
||||
and D_UP
|
||||
jr nz, .d_up
|
||||
ld a, [hl]
|
||||
and D_DOWN
|
||||
jr nz, .d_down
|
||||
call DelayFrame
|
||||
and a
|
||||
ret
|
||||
|
||||
.d_down
|
||||
ld hl, wInitMinuteBuffer
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr nz, .decrease
|
||||
ld a, 59 + 1
|
||||
.decrease
|
||||
dec a
|
||||
ld [hl], a
|
||||
jr .finish_dpad
|
||||
|
||||
.d_up
|
||||
ld hl, wInitMinuteBuffer
|
||||
ld a, [hl]
|
||||
cp 59
|
||||
jr c, .increase
|
||||
ld a, -1
|
||||
.increase
|
||||
inc a
|
||||
ld [hl], a
|
||||
.finish_dpad
|
||||
hlcoord 12, 9
|
||||
ld a, " "
|
||||
ld bc, 7
|
||||
call ByteFill
|
||||
hlcoord 12, 9
|
||||
call DisplayMinutesWithMinString
|
||||
call WaitBGMap
|
||||
and a
|
||||
ret
|
||||
.a_button
|
||||
scf
|
||||
ret
|
||||
|
||||
DisplayMinutesWithMinString: ; 90859 (24:4859)
|
||||
ld de, wInitMinuteBuffer
|
||||
call PrintTwoDigitNumberRightAlign
|
||||
inc hl
|
||||
ld de, String_min
|
||||
call PlaceString
|
||||
ret
|
||||
|
||||
PrintTwoDigitNumberRightAlign: ; 90867 (24:4867)
|
||||
push hl
|
||||
ld a, " "
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
pop hl
|
||||
lb bc, PRINTNUM_RIGHTALIGN | 1, 2
|
||||
call PrintNum
|
||||
ret
|
||||
; 90874 (24:4874)
|
||||
|
||||
Text_WokeUpOak: ; 0x90874
|
||||
; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me?
|
||||
text_jump UnknownText_0x1bc29c
|
||||
db "@"
|
||||
; 0x90879
|
||||
|
||||
Text_WhatTimeIsIt: ; 0x90879
|
||||
; What time is it?
|
||||
text_jump UnknownText_0x1bc2eb
|
||||
db "@"
|
||||
; 0x9087e
|
||||
|
||||
String_oclock:
|
||||
db "o'clock@"
|
||||
; 90886
|
||||
|
||||
Text_WhatHrs: ; 0x90886
|
||||
; What?@ @
|
||||
text_jump UnknownText_0x1bc2fd
|
||||
start_asm
|
||||
hlcoord 1, 16
|
||||
call DisplayHourOClock
|
||||
ld hl, .QuestionMark
|
||||
ret
|
||||
; 90895 (24:4895)
|
||||
|
||||
.QuestionMark: ; 0x90895
|
||||
; ?
|
||||
text_jump UnknownText_0x1bc305
|
||||
db "@"
|
||||
; 0x9089a
|
||||
|
||||
Text_HowManyMinutes: ; 0x9089a
|
||||
; How many minutes?
|
||||
text_jump UnknownText_0x1bc308
|
||||
db "@"
|
||||
; 0x9089f
|
||||
|
||||
String_min:
|
||||
db "min.@"
|
||||
; 908a4
|
||||
|
||||
Text_WhoaMins: ; 0x908a4
|
||||
; Whoa!@ @
|
||||
text_jump UnknownText_0x1bc31b
|
||||
start_asm
|
||||
hlcoord 7, 14
|
||||
call DisplayMinutesWithMinString
|
||||
ld hl, .QuestionMark
|
||||
ret
|
||||
; 908b3 (24:48b3)
|
||||
|
||||
.QuestionMark: ; 0x908b3
|
||||
; ?
|
||||
text_jump UnknownText_0x1bc323
|
||||
db "@"
|
||||
; 0x908b8
|
||||
|
||||
OakText_ResponseToSetTime: ; 0x908b8
|
||||
start_asm
|
||||
decoord 1, 14
|
||||
ld a, [wInitHourBuffer]
|
||||
ld c, a
|
||||
call PrintHour
|
||||
ld [hl], ":"
|
||||
inc hl
|
||||
ld de, wInitMinuteBuffer
|
||||
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
|
||||
call PrintNum
|
||||
ld b, h
|
||||
ld c, l
|
||||
ld a, [wInitHourBuffer]
|
||||
cp MORN_HOUR
|
||||
jr c, .nite
|
||||
cp DAY_HOUR + 1
|
||||
jr c, .morn
|
||||
cp NITE_HOUR
|
||||
jr c, .day
|
||||
.nite:
|
||||
ld hl, .sodark
|
||||
ret
|
||||
.morn:
|
||||
ld hl, .overslept
|
||||
ret
|
||||
.day:
|
||||
ld hl, .yikes
|
||||
ret
|
||||
; 908ec (24:48ec)
|
||||
|
||||
.overslept ; 0x908ec
|
||||
; ! I overslept!
|
||||
text_jump UnknownText_0x1bc326
|
||||
db "@"
|
||||
; 0x908f1
|
||||
|
||||
.yikes ; 0x908f1
|
||||
; ! Yikes! I over- slept!
|
||||
text_jump UnknownText_0x1bc336
|
||||
db "@"
|
||||
; 0x908f6
|
||||
|
||||
.sodark ; 0x908f6
|
||||
; ! No wonder it's so dark!
|
||||
text_jump UnknownText_0x1bc34f
|
||||
db "@"
|
||||
; 0x908fb
|
||||
|
||||
TimeSetBackgroundGFX: ; 908fb
|
||||
INCBIN "gfx/new_game/timeset_bg.1bpp"
|
||||
TimeSetUpArrowGFX: ; 90903
|
||||
INCBIN "gfx/new_game/up_arrow.1bpp"
|
||||
TimeSetDownArrowGFX: ; 9090b
|
||||
INCBIN "gfx/new_game/down_arrow.1bpp"
|
||||
; 90913
|
||||
|
||||
SetDayOfWeek: ; 90913
|
||||
ld a, [hInMenu]
|
||||
push af
|
||||
ld a, $1
|
||||
ld [hInMenu], a
|
||||
ld de, TimeSetUpArrowGFX
|
||||
ld hl, vTiles0 tile TIMESET_UP_ARROW
|
||||
lb bc, BANK(TimeSetUpArrowGFX), 1
|
||||
call Request1bpp
|
||||
ld de, TimeSetDownArrowGFX
|
||||
ld hl, vTiles0 tile TIMESET_DOWN_ARROW
|
||||
lb bc, BANK(TimeSetDownArrowGFX), 1
|
||||
call Request1bpp
|
||||
xor a
|
||||
ld [wTempDayOfWeek], a
|
||||
.loop
|
||||
hlcoord 0, 12
|
||||
lb bc, 4, 18
|
||||
call TextBox
|
||||
call LoadStandardMenuHeader
|
||||
ld hl, .WhatDayIsItText
|
||||
call PrintText
|
||||
hlcoord 9, 3
|
||||
ld b, 2
|
||||
ld c, 9
|
||||
call TextBox
|
||||
hlcoord 14, 3
|
||||
ld [hl], TIMESET_UP_ARROW
|
||||
hlcoord 14, 6
|
||||
ld [hl], TIMESET_DOWN_ARROW
|
||||
hlcoord 10, 5
|
||||
call .PlaceWeekdayString
|
||||
call ApplyTilemap
|
||||
ld c, 10
|
||||
call DelayFrames
|
||||
.loop2
|
||||
call JoyTextDelay
|
||||
call .GetJoypadAction
|
||||
jr nc, .loop2
|
||||
call ExitMenu
|
||||
call UpdateSprites
|
||||
ld hl, .ConfirmWeekdayText
|
||||
call PrintText
|
||||
call YesNoBox
|
||||
jr c, .loop
|
||||
ld a, [wTempDayOfWeek]
|
||||
ld [wStringBuffer2], a
|
||||
call InitDayOfWeek
|
||||
call LoadStandardFont
|
||||
pop af
|
||||
ld [hInMenu], a
|
||||
ret
|
||||
; 90993
|
||||
|
||||
.GetJoypadAction: ; 90993
|
||||
ld a, [hJoyPressed]
|
||||
and A_BUTTON
|
||||
jr z, .not_A
|
||||
scf
|
||||
ret
|
||||
|
||||
.not_A
|
||||
ld hl, hJoyLast
|
||||
ld a, [hl]
|
||||
and D_UP
|
||||
jr nz, .d_up
|
||||
ld a, [hl]
|
||||
and D_DOWN
|
||||
jr nz, .d_down
|
||||
call DelayFrame
|
||||
and a
|
||||
ret
|
||||
|
||||
.d_down
|
||||
ld hl, wTempDayOfWeek
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr nz, .decrease
|
||||
ld a, SATURDAY + 1
|
||||
|
||||
.decrease
|
||||
dec a
|
||||
ld [hl], a
|
||||
jr .finish_dpad
|
||||
|
||||
.d_up
|
||||
ld hl, wTempDayOfWeek
|
||||
ld a, [hl]
|
||||
cp 6
|
||||
jr c, .increase
|
||||
ld a, SUNDAY - 1
|
||||
|
||||
.increase
|
||||
inc a
|
||||
ld [hl], a
|
||||
|
||||
.finish_dpad
|
||||
xor a
|
||||
ld [hBGMapMode], a
|
||||
hlcoord 10, 4
|
||||
ld b, 2
|
||||
ld c, 9
|
||||
call ClearBox
|
||||
hlcoord 10, 5
|
||||
call .PlaceWeekdayString
|
||||
call WaitBGMap
|
||||
and a
|
||||
ret
|
||||
; 909de
|
||||
|
||||
.PlaceWeekdayString: ; 909de
|
||||
push hl
|
||||
ld a, [wTempDayOfWeek]
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .WeekdayStrings
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld d, [hl]
|
||||
ld e, a
|
||||
pop hl
|
||||
call PlaceString
|
||||
ret
|
||||
; 909f2
|
||||
|
||||
.WeekdayStrings: ; 909f2
|
||||
; entries correspond to wCurDay constants (see constants/wram_constants.asm)
|
||||
dw .Sunday
|
||||
dw .Monday
|
||||
dw .Tuesday
|
||||
dw .Wednesday
|
||||
dw .Thursday
|
||||
dw .Friday
|
||||
dw .Saturday
|
||||
dw .Sunday
|
||||
|
||||
.Sunday: db " SUNDAY@"
|
||||
.Monday: db " MONDAY@"
|
||||
.Tuesday: db " TUESDAY@"
|
||||
.Wednesday: db "WEDNESDAY@"
|
||||
.Thursday: db "THURSDAY@"
|
||||
.Friday: db " FRIDAY@"
|
||||
.Saturday: db "SATURDAY@"
|
||||
|
||||
|
||||
.WhatDayIsItText: ; 0x90a3f
|
||||
; What day is it?
|
||||
text_jump UnknownText_0x1bc369
|
||||
db "@"
|
||||
; 0x90a44
|
||||
|
||||
.ConfirmWeekdayText: ; 0x90a44
|
||||
start_asm
|
||||
hlcoord 1, 14
|
||||
call .PlaceWeekdayString
|
||||
ld hl, .IsIt
|
||||
ret
|
||||
; 90a4f (24:4a4f)
|
||||
|
||||
.IsIt: ; 0x90a4f
|
||||
; , is it?
|
||||
text_jump UnknownText_0x1bc37a
|
||||
db "@"
|
||||
; 0x90a54
|
||||
|
||||
InitialSetDSTFlag: ; 90a54
|
||||
ld a, [wDST]
|
||||
set 7, a
|
||||
ld [wDST], a
|
||||
hlcoord 1, 14
|
||||
lb bc, 3, 18
|
||||
call ClearBox
|
||||
ld hl, .Text
|
||||
call PlaceHLTextAtBC
|
||||
ret
|
||||
; 90a6c
|
||||
|
||||
.Text: ; 90a6c
|
||||
start_asm
|
||||
call UpdateTime
|
||||
ld a, [hHours]
|
||||
ld b, a
|
||||
ld a, [hMinutes]
|
||||
ld c, a
|
||||
decoord 1, 14
|
||||
farcall PrintHoursMins
|
||||
ld hl, .DSTIsThatOK
|
||||
ret
|
||||
; 90a83 (24:4a83)
|
||||
|
||||
.DSTIsThatOK: ; 0x90a83
|
||||
; DST, is that OK?
|
||||
text_jump Text_DSTIsThatOK
|
||||
db "@"
|
||||
; 0x90a88
|
||||
|
||||
InitialClearDSTFlag: ; 90a88
|
||||
ld a, [wDST]
|
||||
res 7, a
|
||||
ld [wDST], a
|
||||
hlcoord 1, 14
|
||||
lb bc, 3, 18
|
||||
call ClearBox
|
||||
ld hl, .Text
|
||||
call PlaceHLTextAtBC
|
||||
ret
|
||||
; 90aa0
|
||||
|
||||
.Text: ; 90aa0
|
||||
start_asm
|
||||
call UpdateTime
|
||||
ld a, [hHours]
|
||||
ld b, a
|
||||
ld a, [hMinutes]
|
||||
ld c, a
|
||||
decoord 1, 14
|
||||
farcall PrintHoursMins
|
||||
ld hl, .IsThatOK
|
||||
ret
|
||||
; 90ab7
|
||||
|
||||
.IsThatOK: ; 0x90ab7
|
||||
; , is that OK?
|
||||
text_jump UnknownText_0x1c5ff1
|
||||
db "@"
|
||||
; 0x90abc
|
||||
|
||||
DebugDisplayTime: ; 90abc
|
||||
hlcoord 1, 14
|
||||
lb bc, 3, SCREEN_WIDTH - 2
|
||||
call ClearBox
|
||||
ld hl, .Text
|
||||
call PlaceHLTextAtBC
|
||||
ret
|
||||
; 90acc
|
||||
|
||||
.Text: ; 0x90acc
|
||||
start_asm
|
||||
call UpdateTime
|
||||
|
||||
hlcoord 1, 14
|
||||
ld [hl], "R"
|
||||
inc hl
|
||||
ld [hl], "T"
|
||||
inc hl
|
||||
ld [hl], " "
|
||||
inc hl
|
||||
|
||||
ld de, hRTCDayLo
|
||||
call .PrintTime
|
||||
|
||||
hlcoord 1, 16
|
||||
ld [hl], "D"
|
||||
inc hl
|
||||
ld [hl], "F"
|
||||
inc hl
|
||||
ld [hl], " "
|
||||
inc hl
|
||||
|
||||
ld de, wStartDay
|
||||
call .PrintTime
|
||||
|
||||
ld [hl], " "
|
||||
inc hl
|
||||
|
||||
ld a, [wDST]
|
||||
bit 7, a
|
||||
jr z, .off
|
||||
|
||||
ld [hl], "O"
|
||||
inc hl
|
||||
ld [hl], "N"
|
||||
inc hl
|
||||
jr .done
|
||||
|
||||
.off
|
||||
ld [hl], "O"
|
||||
inc hl
|
||||
ld [hl], "F"
|
||||
inc hl
|
||||
ld [hl], "F"
|
||||
inc hl
|
||||
|
||||
.done
|
||||
ld hl, .NowOnDebug
|
||||
ret
|
||||
; 90b13
|
||||
|
||||
.NowOnDebug: ; 0x90b13
|
||||
text "<PARA>Now on DEBUG…"
|
||||
prompt
|
||||
; 0x90b23
|
||||
|
||||
.PrintTime: ; 90b23
|
||||
lb bc, 1, 3
|
||||
call PrintNum
|
||||
ld [hl], "."
|
||||
inc hl
|
||||
inc de
|
||||
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
|
||||
call PrintNum
|
||||
ld [hl], ":"
|
||||
inc hl
|
||||
inc de
|
||||
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
|
||||
call PrintNum
|
||||
ret
|
||||
; 90b3e
|
||||
|
||||
PrintHour: ; 90b3e (24:4b3e)
|
||||
ld l, e
|
||||
ld h, d
|
||||
push bc
|
||||
call GetTimeOfDayString
|
||||
call PlaceString
|
||||
ld l, c
|
||||
ld h, b
|
||||
inc hl
|
||||
pop bc
|
||||
call AdjustHourForAMorPM
|
||||
ld [wd265], a
|
||||
ld de, wd265
|
||||
call PrintTwoDigitNumberRightAlign
|
||||
ret
|
||||
|
||||
GetTimeOfDayString: ; 90b58 (24:4b58)
|
||||
ld a, c
|
||||
cp MORN_HOUR
|
||||
jr c, .nite
|
||||
cp DAY_HOUR
|
||||
jr c, .morn
|
||||
cp NITE_HOUR
|
||||
jr c, .day
|
||||
.nite
|
||||
ld de, .nite_string
|
||||
ret
|
||||
.morn
|
||||
ld de, .morn_string
|
||||
ret
|
||||
.day
|
||||
ld de, .day_string
|
||||
ret
|
||||
; 90b71 (24:4b71)
|
||||
|
||||
.nite_string: db "NITE@"
|
||||
.morn_string: db "MORN@"
|
||||
.day_string: db "DAY@"
|
||||
; 90b7f
|
||||
|
||||
AdjustHourForAMorPM:
|
||||
; Convert the hour stored in c (0-23) to a 1-12 value
|
||||
ld a, c
|
||||
or a
|
||||
jr z, .midnight
|
||||
cp NOON_HOUR
|
||||
ret c
|
||||
ret z
|
||||
sub NOON_HOUR
|
||||
ret
|
||||
|
||||
.midnight
|
||||
ld a, NOON_HOUR
|
||||
ret
|
Reference in New Issue
Block a user