Skip to content

Commit 605ac58

Browse files
committed
More RTC Cleanup
1 parent b9a251b commit 605ac58

File tree

4 files changed

+69
-52
lines changed

4 files changed

+69
-52
lines changed

Source/HBIOS/cfg_MASTER.asm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ PCRTC_BASE .EQU $C0 ; Default port for PCRTC, like DSRTC.
210210
MMRTCENABLE .EQU FALSE ; MMRTC: ENABLE NS MM58167B RTC DRIVER (MMRTC.ASM)
211211
;
212212
DS12RTCENABLE .EQU FALSE ; DS12RTC: ENABLE DS1288X RTC DRIVER (DS12RTC.ASM)
213+
DS12RTC_BASE .EQU $70 ; DS12RTC: I/O BASE ADDRESS
213214
;
214215
M6242RTCENABLE .EQU TRUE ; M6242RTC: ENABLE M6242 CLOCK DRIVER (M6242.ASM)
215216
M6242RTC_BASE .EQU $A0 ; M6242RTC: I/O BASE ADDRESS

Source/HBIOS/cfg_SZ80.asm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ PCRTCENABLE .SET FALSE ; PCRTC: DISABLE DS12885 etc. RTC
163163
MMRTCENABLE .SET FALSE ; MMRTC: ENABLE NS MM58167B RTC DRIVER (MMRTC.ASM)
164164
;
165165
DS12RTCENABLE .SET FALSE ; DS12RTC: ENABLE DS1288X RTC DRIVER (DS12RTC.ASM)
166+
DS12RTC_BASE .SET $70 ; DS12RTC: I/O BASE ADDRESS
166167
;
167168
M6242RTCENABLE .SET FALSE ; M6242RTC: ENABLE M6242 CLOCK DRIVER (M6242.ASM)
168169
;

Source/HBIOS/ds12rtc.asm

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,16 @@
4848
; CONFLICT BY OFFSETTING OUR REGISTER INDEXES BY $60. THIS MEANS WE
4949
; MAP REQUESTS FOR $00-$1F TO NVRAM REGISTERS $60-$7F.
5050
;
51-
DS12RTC_IO .EQU $70
52-
DS12RTC_SEL .EQU DS12RTC_IO + 0
53-
DS12RTC_DATA .EQU DS12RTC_IO + 1
51+
DS12RTC_SEL .EQU DS12RTC_BASE + 0
52+
DS12RTC_DATA .EQU DS12RTC_BASE + 1
53+
;
54+
DS12RTC_NVBASE .EQU $10
55+
DS12RTC_NVSIZE .EQU $30
5456
;
5557
DEVECHO "DS12RTC:"
5658
;
5759
DEVECHO " IO="
58-
DEVECHO DS12RTC_IO
60+
DEVECHO DS12RTC_BASE
5961
DEVECHO "\n"
6062
;
6163
; RTC DEVICE PRE-INITIALIZATION ENTRY
@@ -72,7 +74,7 @@ DS12RTC_INIT:
7274
;
7375
; PRINT RTC PORT ADDRESS
7476
PRTS(" IO=0x$") ; LABEL FOR IO ADDRESS
75-
LD A,DS12RTC_IO ; GET IO ADDRESS
77+
LD A,DS12RTC_BASE ; GET IO ADDRESS
7678
CALL PRTHEXBYTE ; PRINT IT
7779
;
7880
CALL DS12RTC_DETECT ; HARDWARE DETECTION
@@ -202,7 +204,10 @@ DS12RTC_SETTIM:
202204
;
203205
DS12RTC_GETBYT:
204206
LD A,C ; INDEX TO ACCUM
205-
ADD A,$60 ; WE USE NVRAM STARTING AT $60
207+
CP DS12RTC_NVSIZE ; COMPARE TO MAX
208+
JR NC,DS12RTC_BADIDX ; HANDLE RANGE ERROR
209+
;
210+
ADD A,DS12RTC_NVBASE ; OFFSET TO START OF NVRAM
206211
LD C,A ; INDEX BACK TO C
207212
CALL DS12RTC_RDREG ; GET THE VALUE
208213
LD E,A ; PUT IN E TO RETURN
@@ -215,20 +220,30 @@ DS12RTC_GETBYT:
215220
;
216221
DS12RTC_SETBYT:
217222
LD A,C ; INDEX TO ACCUM
218-
ADD A,$60 ; WE USE NVRAM STARTING AT $60
223+
CP DS12RTC_NVSIZE ; COMPARE TO MAX
224+
JR NC,DS12RTC_BADIDX ; HANDLE RANGE ERROR
225+
;
226+
ADD A,DS12RTC_NVBASE ; OFFSET TO START OF NVRAM
219227
LD C,A ; INDEX BACK TO C
220228
LD A,E ; PUT VALUE IN A
221229
CALL DS12RTC_WRREG ; WRITE IT
222230
XOR A ; SIGNAL SUCCESS
223231
RET ; DONE
224232
;
233+
; HANDLE RANGE ERROR
234+
;
235+
DS12RTC_BADIDX:
236+
LD A,ERR_RANGE
237+
OR A
238+
RET
239+
;
225240
; REPORT RTC DEVICE INFO
226241
;
227242
DS12RTC_DEVICE:
228243
LD D,RTCDEV_DS12 ; D := DEVICE TYPE
229244
LD E,0 ; E := PHYSICAL DEVICE NUMBER
230245
LD H,0 ; H := MODE
231-
LD L,DS12RTC_IO ; L := BASE I/O ADDRESS
246+
LD L,DS12RTC_BASE ; L := BASE I/O ADDRESS
232247
XOR A ; SIGNAL SUCCESS
233248
RET
234249
;

Source/HBIOS/pcrtc.asm

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,29 @@ PCRTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS)
99
;; Then read from or write to PCRTC_DAT
1010

1111
;; PCRTC_BASE must be set in config files
12-
PCRTC_REG .EQU PCRTC_BASE
13-
PCRTC_DAT .EQU PCRTC_BASE + $01
14-
15-
REG_SEC .EQU $00
16-
REG_SEC_ALM .EQU $01
17-
REG_MIN .EQU $02
18-
REG_MIN_ALM .EQU $03
19-
REG_HOUR .EQU $04
20-
REG_HOUR_ALM .EQU $05
21-
REG_DOW .EQU $06 ; day of week
22-
REG_DAY .EQU $07
23-
REG_MONTH .EQU $08
24-
REG_YEAR .EQU $09
25-
REG_CTLA .EQU $0A
26-
REG_CTLB .EQU $0B
27-
REG_CTLC .EQU $0C
28-
REG_CTLD .EQU $0D
29-
30-
CTLA_VAL .EQU $2F
31-
CTLB_VAL .EQU $0A
32-
33-
PCRTC_NVBASE .EQU $10
34-
PCRTC_NVSIZE .EQU $30 ; 64 bytes in total is what DS1285 and MC146818 had
12+
PCRTC_REG .EQU PCRTC_BASE
13+
PCRTC_DAT .EQU PCRTC_BASE + $01
14+
15+
PCRTC_REG_SEC .EQU $00
16+
PCRTC_REG_SEC_ALM .EQU $01
17+
PCRTC_REG_MIN .EQU $02
18+
PCRTC_REG_MIN_ALM .EQU $03
19+
PCRTC_REG_HOUR .EQU $04
20+
PCRTC_REG_HOUR_ALM .EQU $05
21+
PCRTC_REG_DOW .EQU $06 ; day of week
22+
PCRTC_REG_DAY .EQU $07
23+
PCRTC_REG_MONTH .EQU $08
24+
PCRTC_REG_YEAR .EQU $09
25+
PCRTC_REG_CTLA .EQU $0A
26+
PCRTC_REG_CTLB .EQU $0B
27+
PCRTC_REG_CTLC .EQU $0C
28+
PCRTC_REG_CTLD .EQU $0D
29+
30+
PCRTC_CTLA_VAL .EQU $2F
31+
PCRTC_CTLB_VAL .EQU $0A
32+
33+
PCRTC_NVBASE .EQU $10
34+
PCRTC_NVSIZE .EQU $30 ; 64 bytes in total is what DS1285 and MC146818 had
3535

3636
DEVECHO "PCRTC: IO="
3737
DEVECHO PCRTC_BASE
@@ -43,7 +43,7 @@ PCRTC_INIT:
4343
RET NZ ; IF ALREADY ACTIVE, ABORT
4444

4545
CALL NEWLINE ; FORMATTING
46-
PRTS("PC RTC: $")
46+
PRTS("PCRTC: $")
4747

4848
; PRINT RTC REGISTER NR PORT ADDRESS
4949
PRTS("IO=0x$") ; LABEL FOR IO ADDRESS
@@ -222,66 +222,66 @@ PCRTC_SETTIM:
222222
LD BC,PCRTC_BUFSIZ ; LENGTH
223223
CALL HB_BNKCPY ; COPY THE RPC DATA
224224
;
225-
LD A, REG_CTLA ; Set Ctl Reg A
225+
LD A, PCRTC_REG_CTLA ; Set Ctl Reg A
226226
EZ80_IO
227227
OUT (PCRTC_REG), A
228-
LD A, CTLA_VAL
228+
LD A, PCRTC_CTLA_VAL
229229
EZ80_IO
230230
OUT (PCRTC_DAT), A
231231

232-
LD A, REG_CTLB ; Set Ctl Reg B
232+
LD A, PCRTC_REG_CTLB ; Set Ctl Reg B
233233
EZ80_IO
234234
OUT (PCRTC_REG), A
235-
LD A, CTLB_VAL|0x80 ; Set the SET bit to stop updates
235+
LD A, PCRTC_CTLB_VAL|0x80 ; Set the SET bit to stop updates
236236
EZ80_IO
237237
OUT (PCRTC_DAT), A
238238

239-
LD A, REG_SEC ; Set seconds
239+
LD A, PCRTC_REG_SEC ; Set seconds
240240
EZ80_IO
241241
OUT (PCRTC_REG), A
242242
LD A, (PCRTC_SS)
243243
EZ80_IO
244244
OUT (PCRTC_DAT), A
245245

246-
LD A, REG_MIN ; Set minutes
246+
LD A, PCRTC_REG_MIN ; Set minutes
247247
EZ80_IO
248248
OUT (PCRTC_REG), A
249249
LD A, (PCRTC_MM)
250250
EZ80_IO
251251
OUT (PCRTC_DAT), A
252252

253-
LD A, REG_HOUR ; Set hours
253+
LD A, PCRTC_REG_HOUR ; Set hours
254254
EZ80_IO
255255
OUT (PCRTC_REG), A
256256
LD A, (PCRTC_HH)
257257
EZ80_IO
258258
OUT (PCRTC_DAT), A
259259

260-
LD A, REG_DAY ; Set date
260+
LD A, PCRTC_REG_DAY ; Set date
261261
EZ80_IO
262262
OUT (PCRTC_REG), A
263263
LD A, (PCRTC_DT)
264264
EZ80_IO
265265
OUT (PCRTC_DAT), A
266266
267-
LD A, REG_MONTH ; Set month
267+
LD A, PCRTC_REG_MONTH ; Set month
268268
EZ80_IO
269269
OUT (PCRTC_REG), A
270270
LD A, (PCRTC_MO)
271271
EZ80_IO
272272
OUT (PCRTC_DAT), A
273273

274-
LD A, REG_YEAR ; Set year
274+
LD A, PCRTC_REG_YEAR ; Set year
275275
EZ80_IO
276276
OUT (PCRTC_REG), A
277277
LD A, (PCRTC_YR)
278278
EZ80_IO
279279
OUT (PCRTC_DAT), A
280280

281-
LD A, REG_CTLB ; Set Ctl Reg B
281+
LD A, PCRTC_REG_CTLB ; Set Ctl Reg B
282282
EZ80_IO
283283
OUT (PCRTC_REG), A
284-
LD A, CTLB_VAL ; Reset the SET bit to start clock
284+
LD A, PCRTC_CTLB_VAL ; Reset the SET bit to start clock
285285
EZ80_IO
286286
OUT (PCRTC_DAT), A
287287

@@ -302,50 +302,50 @@ PCRTC_DEVICE:
302302
; READ OUT THE TIME
303303
PCRTC_RDTIM:
304304
;; Need to wait until update-in-progress flag is reset
305-
LD A, REG_CTLA ; Set Ctl Reg A
305+
LD A, PCRTC_REG_CTLA ; Set Ctl Reg A
306306
EZ80_IO
307307
OUT (PCRTC_REG), A
308308
EZ80_IO
309309
IN A, (PCRTC_DAT)
310310
BIT 7, A
311-
JP NZ, PCRTC_RDTIM ; Jump back if update in progress.
311+
JP NZ, PCRTC_RDTIM ; Jump back if update in progress.
312312

313-
LD A, REG_SEC ; Set seconds
313+
LD A, PCRTC_REG_SEC ; Set seconds
314314
EZ80_IO
315315
OUT (PCRTC_REG), A
316316
EZ80_IO
317317
IN A, (PCRTC_DAT)
318318
LD (PCRTC_SS), A
319319

320-
LD A, REG_MIN ; Set minutes
320+
LD A, PCRTC_REG_MIN ; Set minutes
321321
EZ80_IO
322322
OUT (PCRTC_REG), A
323323
EZ80_IO
324324
IN A, (PCRTC_DAT)
325325
LD (PCRTC_MM), A
326326

327-
LD A, REG_HOUR ; Set hours
327+
LD A, PCRTC_REG_HOUR ; Set hours
328328
EZ80_IO
329329
OUT (PCRTC_REG), A
330330
EZ80_IO
331331
IN A, (PCRTC_DAT)
332332
LD (PCRTC_HH), A
333333

334-
LD A, REG_DAY ; Set day
334+
LD A, PCRTC_REG_DAY ; Set day
335335
EZ80_IO
336336
OUT (PCRTC_REG), A
337337
EZ80_IO
338338
IN A, (PCRTC_DAT)
339339
LD (PCRTC_DT), A
340340

341-
LD A, REG_MONTH ; Set month
341+
LD A, PCRTC_REG_MONTH ; Set month
342342
EZ80_IO
343343
OUT (PCRTC_REG), A
344344
EZ80_IO
345345
IN A, (PCRTC_DAT)
346346
LD (PCRTC_MO), A
347347

348-
LD A, REG_YEAR ; Set year
348+
LD A, PCRTC_REG_YEAR ; Set year
349349
EZ80_IO
350350
OUT (PCRTC_REG), A
351351
EZ80_IO

0 commit comments

Comments
 (0)