1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
INCLUDE "constants.asm"
SECTION "home/toolgear.asm", ROM0
; local charmap, global charmap won't apply
; see https://github.com/gbdev/rgbds/issues/265#issuecomment-395229694
newcharmap local
charmap "0", $66
charmap "1", $67
charmap "2", $68
charmap "3", $69
charmap "4", $6a
charmap "5", $6b
charmap "6", $6c
charmap "7", $6d
charmap "8", $6e
charmap "9", $6f
; if debug coords shown
charmap "A", $70
charmap "B", $71
charmap "C", $72
charmap "D", $73
charmap "E", $74
charmap "F", $75
; small kana aren't actively loaded
; if clock shown
charmap ":", $70
charmap "日", $71
charmap "月", $72
charmap "火", $73
charmap "水", $74
charmap "木", $75
charmap "金", $76
charmap "土", $77
charmap "⚡", $78 ; power
charmap "☎", $79 ; mobile
; active frame
charmap "┌", $79 ; only if debug coords shown
charmap "─", $7a
charmap "┐", $7b
charmap "│", $7c
charmap "└", $7d
charmap "┘", $7e
charmap " ", $7f
EnableToolgear::
ld hl, wd153
res TOOLGEAR_COORDS_F, [hl]
ld hl, wToolgearFlags
set TOOLGEAR_COORDS_F, [hl]
ret
DisableToolgear::
ld hl, wToolgearFlags
res SHOW_TOOLGEAR_F, [hl]
xor a
ldh [hLCDCPointer], a
ret
InitToolgearBuffer::
xor a
ldh [hBGMapMode], a
ld hl, wToolgearFlags
bit SHOW_TOOLGEAR_F, [hl]
jr z, .hide_window
res HIDE_TOOLGEAR_F, [hl]
call LoadToolgearGraphics
bgcoord hl, 0, 0, wToolgearBuffer
ld a, "─"
ld bc, SCREEN_WIDTH
call ByteFill
bgcoord hl, 0, 1, wToolgearBuffer
ld a, " "
ld bc, SCREEN_WIDTH
call ByteFill
call UpdateToolgear
ld hl, vBGMap1
ld bc, $4 ; 4 tiles = 2 rows
bgcoord de, 0, 0, wToolgearBuffer
call Get2bpp
ld a, $80
ldh [hLCDCPointer], a
ld a, $80
ldh [rWY], a
ldh [hWY], a
ret
.hide_window
xor a
ldh [hLCDCPointer], a
ld a, $90
ldh [rWY], a
ldh [hWY], a
ret
UpdateToolgear::
; Prepares a buffer for the clock display, which in the Debug ROM is displayed on the bottom of the screen.
; This function is called every frame, and loads special tiles into the $66-$7a space.
bgcoord hl, 0, 1, wToolgearBuffer
ld bc, SCREEN_WIDTH
ld a, " "
call ByteFill
ld hl, wd153
bit TOOLGEAR_COORDS_F, [hl]
jr z, .debug_show_time
ld hl, wXCoord
bgcoord de, 4, 1, wToolgearBuffer
ld c, 1
call .printHex
ld hl, wYCoord
bgcoord de, 8, 1, wToolgearBuffer
ld c, 1
call .printHex
ret
.debug_show_time
ld hl, hRTCHours
bgcoord de, 0, 1, wToolgearBuffer
call .printDec
ld hl, hRTCMinutes
bgcoord de, 3, 1, wToolgearBuffer
call .printDec
ldh a, [hRTCDays]
and 7
add "日" ; Sunday
ldbgcoord_a 6, 1, wToolgearBuffer
ld a, "⚡" ; power
ldbgcoord_a 9, 1, wToolgearBuffer
inc a ; mobile
ldbgcoord_a 11, 1, wToolgearBuffer
ldh a, [hRTCSeconds]
and 1
ret z
ld a, ":"
ldbgcoord_a 2, 1, wToolgearBuffer
ret
.printHex::
; .printHex
; print c hexadecimal digits from hl to de
; clobbers: a, b
ld a, [hli]
ld b, a
swap a
call .printDigit
ld a, b
call .printDigit
dec c
jr nz, .printHex
ret
.printDec::
; .printDec
; print c decimal digits from hl to de
; clobbers: a, b
ld a, [hli]
ld b, 0
.mod10:
inc b
sub 10
jr nc, .mod10
dec b
add 10
push af
ld a, b
call .printDigit
pop af
call .printDigit
ret
.printDigit::
; .printDigit
; print a hexadecimal digit for value in a to de
and $f
add "0"
ld [de], a
inc de
ret
|