pokecrystal-board/engine/rtc/restart_clock.asm

242 lines
4.0 KiB
NASM
Raw Normal View History

2020-11-03 16:53:07 -08:00
; RestartClock_GetWraparoundTime.WrapAroundTimes indexes
const_def 1
const RESTART_CLOCK_DAY
const RESTART_CLOCK_HOUR
const RESTART_CLOCK_MIN
DEF NUM_RESTART_CLOCK_DIVISIONS EQU const_value - 1
2020-11-03 16:53:07 -08:00
2018-06-24 07:09:41 -07:00
RestartClock_GetWraparoundTime:
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
2018-06-24 07:09:41 -07:00
.WrapAroundTimes:
2020-11-03 16:53:07 -08:00
; entries correspond to RESTART_CLOCK_* constants
MACRO wraparound_time
2020-11-03 16:53:07 -08:00
dw \1 ; value pointer
db \2 ; maximum value
db \3 ; up/down arrow x coord (pairs with wRestartClockUpArrowYCoord)
ENDM
wraparound_time wRestartClockDay, 7, 4
wraparound_time wRestartClockHour, 24, 12
wraparound_time wRestartClockMin, 60, 15
2018-06-24 07:09:41 -07:00
RestartClock:
; If we're here, we had an RTC overflow.
ld hl, .ClockTimeMayBeWrongText
call PrintText
2018-01-23 14:39:09 -08:00
ld hl, wOptions
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
call LoadStandardMenuHeader
call ClearTilemap
ld hl, .ClockSetWithControlPadText
call PrintText
call .SetClock
call ExitMenu
pop bc
2018-01-23 14:39:09 -08:00
ld hl, wOptions
ld [hl], b
ld c, a
ret
.ClockTimeMayBeWrongText:
text_far _ClockTimeMayBeWrongText
text_end
.ClockSetWithControlPadText:
text_far _ClockSetWithControlPadText
text_end
2018-06-24 07:09:41 -07:00
.SetClock:
2020-11-03 16:53:07 -08:00
ld a, RESTART_CLOCK_DAY
ld [wRestartClockCurDivision], a
ld [wRestartClockPrevDivision], a
ld a, 8
2020-11-03 16:53:07 -08:00
ld [wRestartClockUpArrowYCoord], a
call UpdateTime
call GetWeekday
2020-11-03 16:53:07 -08:00
ld [wRestartClockDay], a
ldh a, [hHours]
2020-11-03 16:53:07 -08:00
ld [wRestartClockHour], a
ldh a, [hMinutes]
2020-11-03 16:53:07 -08:00
ld [wRestartClockMin], a
.loop
call .joy_loop
jr nc, .loop
and a
ret nz
call .PrintTime
ld hl, .ClockIsThisOKText
call PrintText
call YesNoBox
jr c, .cancel
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockDay]
2018-01-23 14:39:09 -08:00
ld [wStringBuffer2], a
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockHour]
2018-01-23 14:39:09 -08:00
ld [wStringBuffer2 + 1], a
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockMin]
2018-01-23 14:39:09 -08:00
ld [wStringBuffer2 + 2], a
xor a
2018-01-23 14:39:09 -08:00
ld [wStringBuffer2 + 3], a
2015-12-18 17:07:09 -08:00
call InitTime
call .PrintTime
ld hl, .ClockHasResetText
call PrintText
call WaitPressAorB_BlinkCursor
2020-11-03 16:53:07 -08:00
xor a ; FALSE
ret
.cancel
2020-11-03 16:53:07 -08:00
ld a, TRUE
ret
.ClockIsThisOKText:
text_far _ClockIsThisOKText
text_end
.ClockHasResetText:
text_far _ClockHasResetText
text_end
.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
2020-11-03 16:53:07 -08:00
ld a, FALSE
scf
ret
.press_B
2020-11-03 16:53:07 -08:00
ld a, TRUE
scf
ret
.pressed_up
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockCurDivision]
call RestartClock_GetWraparoundTime
ld a, [de]
inc a
ld [de], a
cp b
jr c, .done_scroll
2020-11-03 16:53:07 -08:00
ld a, 0
ld [de], a
jr .done_scroll
.pressed_down
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockCurDivision]
call RestartClock_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
2020-11-03 16:53:07 -08:00
ld hl, wRestartClockCurDivision
dec [hl]
jr nz, .done_scroll
2020-11-03 16:53:07 -08:00
ld [hl], RESTART_CLOCK_MIN
jr .done_scroll
.pressed_right
2020-11-03 16:53:07 -08:00
ld hl, wRestartClockCurDivision
inc [hl]
ld a, [hl]
2020-11-03 16:53:07 -08:00
cp NUM_RESTART_CLOCK_DIVISIONS + 1
jr c, .done_scroll
2020-11-03 16:53:07 -08:00
ld [hl], RESTART_CLOCK_DAY
.done_scroll
2020-11-03 16:53:07 -08:00
xor a ; FALSE
ret
2018-06-24 07:09:41 -07:00
.PrintTime:
hlcoord 0, 5
ld b, 5
ld c, 18
2019-04-08 05:15:10 -07:00
call Textbox
decoord 1, 8
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockDay]
ld b, a
2017-12-24 09:47:30 -08:00
farcall PrintDayOfWeek
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockHour]
ld b, a
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockMin]
ld c, a
decoord 11, 8
2017-12-24 09:47:30 -08:00
farcall PrintHoursMins
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockPrevDivision]
lb de, " ", " "
call .PlaceChars
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockCurDivision]
lb de, "▲", "▼"
call .PlaceChars
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockCurDivision]
ld [wRestartClockPrevDivision], a
ret
.UnusedPlaceCharsFragment: ; unreferenced
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockUpArrowYCoord]
ld b, a
call Coord2Tile
ret
2018-06-24 07:09:41 -07:00
.PlaceChars:
push de
call RestartClock_GetWraparoundTime
2020-11-03 16:53:07 -08:00
ld a, [wRestartClockUpArrowYCoord]
dec a
ld b, a
call Coord2Tile
pop de
ld [hl], d
ld bc, 2 * SCREEN_WIDTH
add hl, bc
ld [hl], e
ret
JPHourString: ; unreferenced
db "じ@" ; HR
JPMinuteString: ; unreferenced
db "ふん@" ; MIN