|
|
|
@ -9,29 +9,29 @@ PCRTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS) |
|
|
|
;; Then read from or write to PCRTC_DAT |
|
|
|
|
|
|
|
;; PCRTC_BASE must be set in config files |
|
|
|
PCRTC_REG .EQU PCRTC_BASE |
|
|
|
PCRTC_DAT .EQU PCRTC_BASE + $01 |
|
|
|
|
|
|
|
REG_SEC .EQU $00 |
|
|
|
REG_SEC_ALM .EQU $01 |
|
|
|
REG_MIN .EQU $02 |
|
|
|
REG_MIN_ALM .EQU $03 |
|
|
|
REG_HOUR .EQU $04 |
|
|
|
REG_HOUR_ALM .EQU $05 |
|
|
|
REG_DOW .EQU $06 ; day of week |
|
|
|
REG_DAY .EQU $07 |
|
|
|
REG_MONTH .EQU $08 |
|
|
|
REG_YEAR .EQU $09 |
|
|
|
REG_CTLA .EQU $0A |
|
|
|
REG_CTLB .EQU $0B |
|
|
|
REG_CTLC .EQU $0C |
|
|
|
REG_CTLD .EQU $0D |
|
|
|
|
|
|
|
CTLA_VAL .EQU $2F |
|
|
|
CTLB_VAL .EQU $0A |
|
|
|
|
|
|
|
PCRTC_NVBASE .EQU $10 |
|
|
|
PCRTC_NVSIZE .EQU $30 ; 64 bytes in total is what DS1285 and MC146818 had |
|
|
|
PCRTC_REG .EQU PCRTC_BASE |
|
|
|
PCRTC_DAT .EQU PCRTC_BASE + $01 |
|
|
|
|
|
|
|
PCRTC_REG_SEC .EQU $00 |
|
|
|
PCRTC_REG_SEC_ALM .EQU $01 |
|
|
|
PCRTC_REG_MIN .EQU $02 |
|
|
|
PCRTC_REG_MIN_ALM .EQU $03 |
|
|
|
PCRTC_REG_HOUR .EQU $04 |
|
|
|
PCRTC_REG_HOUR_ALM .EQU $05 |
|
|
|
PCRTC_REG_DOW .EQU $06 ; day of week |
|
|
|
PCRTC_REG_DAY .EQU $07 |
|
|
|
PCRTC_REG_MONTH .EQU $08 |
|
|
|
PCRTC_REG_YEAR .EQU $09 |
|
|
|
PCRTC_REG_CTLA .EQU $0A |
|
|
|
PCRTC_REG_CTLB .EQU $0B |
|
|
|
PCRTC_REG_CTLC .EQU $0C |
|
|
|
PCRTC_REG_CTLD .EQU $0D |
|
|
|
|
|
|
|
PCRTC_CTLA_VAL .EQU $2F |
|
|
|
PCRTC_CTLB_VAL .EQU $0A |
|
|
|
|
|
|
|
PCRTC_NVBASE .EQU $10 |
|
|
|
PCRTC_NVSIZE .EQU $30 ; 64 bytes in total is what DS1285 and MC146818 had |
|
|
|
|
|
|
|
DEVECHO "PCRTC: IO=" |
|
|
|
DEVECHO PCRTC_BASE |
|
|
|
@ -43,7 +43,7 @@ PCRTC_INIT: |
|
|
|
RET NZ ; IF ALREADY ACTIVE, ABORT |
|
|
|
|
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
PRTS("PC RTC: $") |
|
|
|
PRTS("PCRTC: $") |
|
|
|
|
|
|
|
; PRINT RTC REGISTER NR PORT ADDRESS |
|
|
|
PRTS("IO=0x$") ; LABEL FOR IO ADDRESS |
|
|
|
@ -222,66 +222,66 @@ PCRTC_SETTIM: |
|
|
|
LD BC,PCRTC_BUFSIZ ; LENGTH |
|
|
|
CALL HB_BNKCPY ; COPY THE RPC DATA |
|
|
|
; |
|
|
|
LD A, REG_CTLA ; Set Ctl Reg A |
|
|
|
LD A, PCRTC_REG_CTLA ; Set Ctl Reg A |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
LD A, CTLA_VAL |
|
|
|
LD A, PCRTC_CTLA_VAL |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_DAT), A |
|
|
|
|
|
|
|
LD A, REG_CTLB ; Set Ctl Reg B |
|
|
|
LD A, PCRTC_REG_CTLB ; Set Ctl Reg B |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
LD A, CTLB_VAL|0x80 ; Set the SET bit to stop updates |
|
|
|
LD A, PCRTC_CTLB_VAL|0x80 ; Set the SET bit to stop updates |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_DAT), A |
|
|
|
|
|
|
|
LD A, REG_SEC ; Set seconds |
|
|
|
LD A, PCRTC_REG_SEC ; Set seconds |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
LD A, (PCRTC_SS) |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_DAT), A |
|
|
|
|
|
|
|
LD A, REG_MIN ; Set minutes |
|
|
|
LD A, PCRTC_REG_MIN ; Set minutes |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
LD A, (PCRTC_MM) |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_DAT), A |
|
|
|
|
|
|
|
LD A, REG_HOUR ; Set hours |
|
|
|
LD A, PCRTC_REG_HOUR ; Set hours |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
LD A, (PCRTC_HH) |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_DAT), A |
|
|
|
|
|
|
|
LD A, REG_DAY ; Set date |
|
|
|
LD A, PCRTC_REG_DAY ; Set date |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
LD A, (PCRTC_DT) |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_DAT), A |
|
|
|
|
|
|
|
LD A, REG_MONTH ; Set month |
|
|
|
LD A, PCRTC_REG_MONTH ; Set month |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
LD A, (PCRTC_MO) |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_DAT), A |
|
|
|
|
|
|
|
LD A, REG_YEAR ; Set year |
|
|
|
LD A, PCRTC_REG_YEAR ; Set year |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
LD A, (PCRTC_YR) |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_DAT), A |
|
|
|
|
|
|
|
LD A, REG_CTLB ; Set Ctl Reg B |
|
|
|
LD A, PCRTC_REG_CTLB ; Set Ctl Reg B |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
LD A, CTLB_VAL ; Reset the SET bit to start clock |
|
|
|
LD A, PCRTC_CTLB_VAL ; Reset the SET bit to start clock |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_DAT), A |
|
|
|
|
|
|
|
@ -302,50 +302,50 @@ PCRTC_DEVICE: |
|
|
|
; READ OUT THE TIME |
|
|
|
PCRTC_RDTIM: |
|
|
|
;; Need to wait until update-in-progress flag is reset |
|
|
|
LD A, REG_CTLA ; Set Ctl Reg A |
|
|
|
LD A, PCRTC_REG_CTLA ; Set Ctl Reg A |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
EZ80_IO |
|
|
|
IN A, (PCRTC_DAT) |
|
|
|
BIT 7, A |
|
|
|
JP NZ, PCRTC_RDTIM ; Jump back if update in progress. |
|
|
|
JP NZ, PCRTC_RDTIM ; Jump back if update in progress. |
|
|
|
|
|
|
|
LD A, REG_SEC ; Set seconds |
|
|
|
LD A, PCRTC_REG_SEC ; Set seconds |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
EZ80_IO |
|
|
|
IN A, (PCRTC_DAT) |
|
|
|
LD (PCRTC_SS), A |
|
|
|
|
|
|
|
LD A, REG_MIN ; Set minutes |
|
|
|
LD A, PCRTC_REG_MIN ; Set minutes |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
EZ80_IO |
|
|
|
IN A, (PCRTC_DAT) |
|
|
|
LD (PCRTC_MM), A |
|
|
|
|
|
|
|
LD A, REG_HOUR ; Set hours |
|
|
|
LD A, PCRTC_REG_HOUR ; Set hours |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
EZ80_IO |
|
|
|
IN A, (PCRTC_DAT) |
|
|
|
LD (PCRTC_HH), A |
|
|
|
|
|
|
|
LD A, REG_DAY ; Set day |
|
|
|
LD A, PCRTC_REG_DAY ; Set day |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
EZ80_IO |
|
|
|
IN A, (PCRTC_DAT) |
|
|
|
LD (PCRTC_DT), A |
|
|
|
|
|
|
|
LD A, REG_MONTH ; Set month |
|
|
|
LD A, PCRTC_REG_MONTH ; Set month |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
EZ80_IO |
|
|
|
IN A, (PCRTC_DAT) |
|
|
|
LD (PCRTC_MO), A |
|
|
|
|
|
|
|
LD A, REG_YEAR ; Set year |
|
|
|
LD A, PCRTC_REG_YEAR ; Set year |
|
|
|
EZ80_IO |
|
|
|
OUT (PCRTC_REG), A |
|
|
|
EZ80_IO |
|
|
|
|