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
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
AskTimer:: ; 45b (0:045b)
reti
LatchClock:: ; 45c (0:045c)
ld a, $0
ld [MBC3LatchClock], a
ld a, $1
ld [MBC3LatchClock], a
ret
UpdateTime:: ; 467 (0:0467)
call GetClock
call FixDays
call FixTime
farcall Function14032
ret
GetClock:: ; 477 (0:0477)
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
call LatchClock
ld hl, MBC3SRamBank
ld de, MBC3RTC
ld [hl], RTC_S
ld a, [de]
and $3f
ld [hRTCSeconds], a
ld [hl], RTC_M
ld a, [de]
and $3f
ld [hRTCMinutes], a
ld [hl], RTC_H
ld a, [de]
and $1f
ld [hRTCHours], a
ld [hl], RTC_DL
ld a, [de]
ld [hRTCDayLo], a
ld [hl], RTC_DH
ld a, [de]
ld [hRTCDayHi], a
call CloseSRAM
ret
FixDays:: ; 4a8 (0:04a8)
ld a, [hRTCDayHi]
bit 0, a
jr z, .daylo
res 0, a
ld [hRTCDayHi], a
ld a, [hRTCDayLo]
.modh
sub 140
jr nc, .modh
.modl
sub 140
jr nc, .modl
add 140
ld [hRTCDayLo], a
ld a, $40
jr .set
.daylo
ld a, [hRTCDayLo]
cp 140
jr c, .quit
.mod
sub 140
jr nc, .mod
add 140
ld [hRTCDayLo], a
ld a, $20
.set
push af
call SetClock
pop af
scf
ret
.quit
ccf
xor a
ret
FixTime:: ; 4de (0:04de)
ld a, [hRTCSeconds]
ld c, a
ld a, [wd1df]
add c
sub 60
jr nc, .asm_4eb
add 60
.asm_4eb
ld [hSeconds], a
ccf
ld a, [hRTCMinutes]
ld c, a
ld a, [wd1de]
adc c
sub 60
jr nc, .asm_4fb
add 60
.asm_4fb
ld [hMinutes], a
ccf
ld a, [hRTCHours]
ld c, a
ld a, [wd1dd]
adc c
sub 24
jr nc, .asm_50b
add 24
.asm_50b
ld [hHours], a
ccf
ld a, [hRTCDayLo]
ld c, a
ld a, [wd1dc]
adc c
ld [wCurDay], a
ret
SetTimeOfDay::
xor a
ld [wStringBuffer2], a
ld a, $0
ld [wStringBuffer2 + 3], a
jr InitTime
SetDayOfWeek::
call UpdateTime
ld a, [hHours]
ld [wStringBuffer2 + 1], a
ld a, [hMinutes]
ld [wStringBuffer2 + 2], a
ld a, [hSeconds]
ld [wStringBuffer2 + 3], a
jr InitTime
InitTime::
farcall Function140ff
ret
PanicResetClock::
call ClearhRTC
call SetClock
ret
ClearhRTC:: ; 546 (0:0546)
xor a
ld [hRTCSeconds], a
ld [hRTCMinutes], a
ld [hRTCHours], a
ld [hRTCDayLo], a
ld [hRTCDayHi], a
ret
SetClock:: ; 552 (0:0552)
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
call LatchClock
ld hl, MBC3SRamBank
ld de, MBC3RTC
ld [hl], RTC_DH
ld a, [de]
bit 6, a
ld [de], a
ld [hl], RTC_S
ld a, [hRTCSeconds]
ld [de], a
ld [hl], RTC_M
ld a, [hRTCMinutes]
ld [de], a
ld [hl], RTC_H
ld a, [hRTCHours]
ld [de], a
ld [hl], RTC_DL
ld a, [hRTCDayLo]
ld [de], a
ld [hl], RTC_DH
ld a, [hRTCDayHi]
res 6, a
ld [de], a
call CloseSRAM
ret
ClearRTCStatus::
xor a
push af
ld a, BANK(s0_ac60)
call OpenSRAM
pop af
ld [s0_ac60], a
call CloseSRAM
ret
RecordRTCStatus::
ld hl, s0_ac60
push af
ld a, BANK(s0_ac60)
call OpenSRAM
pop af
or [hl]
ld [hl], a
call CloseSRAM
ret
CheckRTCStatus::
ld a, BANK(s0_ac60)
call OpenSRAM
ld a, [s0_ac60]
call CloseSRAM
ret
|