summaryrefslogtreecommitdiff
path: root/engine/rtc
diff options
context:
space:
mode:
Diffstat (limited to 'engine/rtc')
-rw-r--r--engine/rtc/print_hours_mins.asm76
-rw-r--r--engine/rtc/restart_clock.asm236
2 files changed, 312 insertions, 0 deletions
diff --git a/engine/rtc/print_hours_mins.asm b/engine/rtc/print_hours_mins.asm
new file mode 100644
index 00000000..faa69756
--- /dev/null
+++ b/engine/rtc/print_hours_mins.asm
@@ -0,0 +1,76 @@
+Unreferenced_Function1c0a0d:
+ 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:
+; 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@"
+String_PM: db "PM@"
+
+UpdateTimePredef::
+ call UpdateTime
+ ld hl, wDSTBackupDay
+ ld a, [wCurDay]
+ ld [hli], a ; wDSTBackupDay
+ ldh a, [hHours]
+ ld [hli], a ; wDSTBackupHours
+ ldh a, [hMinutes]
+ ld [hli], a ; wDSTBackupMinutes
+ ldh a, [hSeconds]
+ ld [hli], a ; wDSTBackupSeconds
+ ret
diff --git a/engine/rtc/restart_clock.asm b/engine/rtc/restart_clock.asm
new file mode 100644
index 00000000..5dc98718
--- /dev/null
+++ b/engine/rtc/restart_clock.asm
@@ -0,0 +1,236 @@
+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
+
+.WrapAroundTimes:
+ dw wBuffer4
+ db 7, 4
+
+ dw wBuffer5
+ db 24, 12
+
+ dw wBuffer6
+ db 60, 15
+
+RestartClock:
+; If we're here, we had an RTC overflow.
+ ld hl, .ClockTimeMayBeWrongText
+ call PrintText
+ 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
+ ld hl, wOptions
+ ld [hl], b
+ ld c, a
+ ret
+
+.ClockTimeMayBeWrongText:
+ text_far _ClockTimeMayBeWrongText
+ text_end
+
+.ClockSetWithControlPadText:
+ text_far _ClockSetWithControlPadText
+ text_end
+
+.SetClock:
+ ld a, 1
+ ld [wBuffer1], a ; which digit
+ ld [wBuffer2], a
+ ld a, 8
+ ld [wBuffer3], a
+ call UpdateTime
+ call GetWeekday
+ ld [wBuffer4], a
+ ldh a, [hHours]
+ ld [wBuffer5], a
+ ldh a, [hMinutes]
+ ld [wBuffer6], a
+
+.loop
+ call .joy_loop
+ jr nc, .loop
+ and a
+ ret nz
+ call .PrintTime
+ ld hl, .ClockIsThisOKText
+ 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, .ClockHasResetText
+ call PrintText
+ call WaitPressAorB_BlinkCursor
+ xor a
+ ret
+
+.cancel
+ ld a, $1
+ 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
+ ld a, $0
+ scf
+ ret
+
+.press_B
+ ld a, $1
+ scf
+ ret
+
+.pressed_up
+ ld a, [wBuffer1]
+ call RestartClock_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 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
+ 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:
+ 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
+
+.unreferenced
+; unused
+ ld a, [wBuffer3]
+ ld b, a
+ call Coord2Tile
+ ret
+
+.PlaceChars:
+ push de
+ call RestartClock_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
+
+UnreferencedString_HourJP:
+; unused
+ db "じ@" ; HR
+
+UnreferencedString_MinuteJP:
+; unused
+ db "ふん@" ; MIN