forked from MirrorRepos/RomWBW
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
4.0 KiB
176 lines
4.0 KiB
;
|
|
;==================================================================================================
|
|
; EZ80 ON-CHIP CLOCK DRIVER
|
|
;==================================================================================================
|
|
;
|
|
EZ80RTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS)
|
|
;
|
|
; RTC DEVICE INITIALIZATION ENTRY
|
|
|
|
EZ80RTC_INIT:
|
|
; display driver install message
|
|
; delegate init function to firmware
|
|
; install dispatcher
|
|
; dispatch local routine that delgates to firmware routines
|
|
|
|
LD A, (RTC_DISPACT) ; RTC DISPATCHER ALREADY SET?
|
|
OR A ; SET FLAGS
|
|
RET NZ ; IF ALREADY ACTIVE, ABORT
|
|
|
|
CALL NEWLINE ; FORMATTING
|
|
PRTS("EZ80 RTC: ON-CHIP $")
|
|
|
|
LD A, 1 ; RTC FIRMWARE FUNCTION GROUP
|
|
LD B, 0 ; RTC INIT FUNCTION
|
|
EZ80_FN
|
|
JR Z, RTC_POWERED
|
|
|
|
PUSH AF
|
|
PRTS("NOT POWERED$")
|
|
POP AF
|
|
RET
|
|
|
|
RTC_POWERED:
|
|
; DISPLAY CURRENT TIME
|
|
LD HL, EZ80RTC_BCDBUF_EXT ; POINT TO BCD BUF EXTENDED
|
|
LD A, 1 ; RTC FIRMWARE FUNCTION GROUP
|
|
LD B, 1 ; READ DATE-TIME INTO (HL)
|
|
EZ80_FN
|
|
|
|
LD HL, EZ80RTC_BCDBUF ; POINT TO BCD BUF
|
|
CALL PRTDT ; DISPLAY THIS TIME
|
|
;
|
|
LD BC, EZ80RTC_DISPATCH
|
|
CALL RTC_SETDISP
|
|
;
|
|
XOR A ; SIGNAL SUCCESS
|
|
RET
|
|
|
|
;
|
|
; RTC DEVICE FUNCTION DISPATCH ENTRY
|
|
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
|
|
; B: FUNCTION (IN)
|
|
;
|
|
EZ80RTC_DISPATCH:
|
|
LD A,B ; GET REQUESTED FUNCTION
|
|
AND $0F ; ISOLATE SUB-FUNCTION
|
|
JP Z,EZ80RTC_GETTIM ; GET TIME
|
|
DEC A
|
|
JP Z,EZ80RTC_SETTIM ; SET TIME
|
|
DEC A
|
|
JP Z,EZ80RTC_GETBYT ; GET NVRAM BYTE VALUE
|
|
DEC A
|
|
JP Z,EZ80RTC_SETBYT ; SET NVRAM BYTE VALUE
|
|
DEC A
|
|
JP Z,EZ80RTC_GETBLK ; GET NVRAM DATA BLOCK VALUES
|
|
DEC A
|
|
JP Z,EZ80RTC_SETBLK ; SET NVRAM DATA BLOCK VALUES
|
|
DEC A
|
|
JP Z,EZ80RTC_GETALM ; GET ALARM
|
|
DEC A
|
|
JP Z,EZ80RTC_SETALM ; SET ALARM
|
|
DEC A
|
|
JP Z,EZ80RTC_DEVICE ; REPORT RTC DEVICE INFO
|
|
SYSCHKERR(ERR_NOFUNC)
|
|
RET
|
|
;
|
|
; RTC GET TIME
|
|
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
|
|
; HL: DATE/TIME BUFFER (OUT)
|
|
; BUFFER FORMAT IS BCD: YYMMDDHHMMSS
|
|
; 24 HOUR TIME FORMAT IS ASSUMED
|
|
;
|
|
EZ80RTC_GETTIM:
|
|
PUSH HL
|
|
LD HL, EZ80RTC_BCDBUF_EXT ; POINT TO BCD BUF EXTENDED
|
|
LD A, 1 ; RTC FIRMWARE FUNCTION GROUP
|
|
LD B, 1 ; READ DATE-TIME INTO (HL)
|
|
EZ80_FN
|
|
|
|
LD A, BID_BIOS ; COPY FROM BIOS BANK
|
|
LD (HB_SRCBNK), A ; SET IT
|
|
LD A, (HB_INVBNK) ; COPY TO CURRENT USER BANK
|
|
LD (HB_DSTBNK), A ; SET IT
|
|
LD HL, EZ80RTC_BCDBUF ; SOURCE ADR
|
|
POP DE ; DEST ADR
|
|
LD BC, EZ80RTC_BUFSIZ ; LENGTH
|
|
CALL HB_BNKCPY ; COPY THE CLOCK DATA
|
|
|
|
XOR A ; SIGNAL SUCCESS
|
|
RET
|
|
;
|
|
;
|
|
; RTC SET TIME
|
|
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
|
|
; HL: DATE/TIME BUFFER (IN)
|
|
; BUFFER FORMAT IS BCD: YYMMDDHHMMSSWW
|
|
; 24 HOUR TIME FORMAT IS ASSUMED
|
|
;
|
|
EZ80RTC_SETTIM:
|
|
; COPY TO BCD BUF
|
|
LD A,(HB_INVBNK) ; COPY FROM CURRENT USER BANK
|
|
LD (HB_SRCBNK),A ; SET IT
|
|
LD A,BID_BIOS ; COPY TO BIOS BANK
|
|
LD (HB_DSTBNK),A ; SET IT
|
|
LD DE,EZ80RTC_BCDBUF ; DEST ADR
|
|
LD BC,EZ80RTC_BUFSIZ ; LENGTH
|
|
CALL HB_BNKCPY ; COPY THE RPC DATA
|
|
|
|
LD HL, EZ80RTC_BCDBUF_EXT ; POINT TO BCD BUF EXTENDED
|
|
LD (HL), $20 ; CENTURY NOT SUPPORT BY HBIOS
|
|
LD A, 1 ; RTC FIRMWARE FUNCTION GROUP
|
|
LD B, 2 ; WRITE DATE-TIME FROM (HL)
|
|
EZ80_FN
|
|
|
|
XOR A ; SIGNAL SUCCESS
|
|
RET
|
|
;
|
|
; RTC GET NVRAM BYTE
|
|
; C: INDEX
|
|
; E: VALUE (OUTPUT)
|
|
; A:0 IF OK, ERR_RANGE IF OUT OF RANGE
|
|
;
|
|
EZ80RTC_GETBYT:
|
|
SYSCHKERR(ERR_NOTIMPL)
|
|
; XOR A ; SIGNAL SUCCESS
|
|
RET ; AND RETURN
|
|
|
|
|
|
; RTC SET NVRAM BYTE
|
|
; C: INDEX
|
|
; E: VALUE
|
|
; A:0 IF OK, ERR_RANGE IF OUT OF RANGE
|
|
;
|
|
EZ80RTC_SETBYT:
|
|
SYSCHKERR(ERR_NOTIMPL)
|
|
; XOR A ; SIGNAL SUCCESS
|
|
RET
|
|
|
|
EZ80RTC_GETBLK:
|
|
EZ80RTC_SETBLK:
|
|
EZ80RTC_GETALM:
|
|
EZ80RTC_SETALM:
|
|
SYSCHKERR(ERR_NOTIMPL)
|
|
RET
|
|
;
|
|
; REPORT RTC DEVICE INFO
|
|
;
|
|
EZ80RTC_DEVICE:
|
|
LD D, RTCDEV_EZ80 ; D := DEVICE TYPE
|
|
LD E, 0 ; E := PHYSICAL DEVICE NUMBER
|
|
LD HL, 00 ; H := 0, DRIVER HAS NO MODES, L := 0, NO I/O ADDRESS
|
|
XOR A ; SIGNAL SUCCESS
|
|
RET
|
|
|
|
|
|
; REGISTER EXTRACTED VALUES
|
|
;
|
|
EZ80RTC_BCDBUF_EXT:
|
|
EZ80RTC_CN .DB 20 ; CENTURY
|
|
EZ80RTC_BCDBUF:
|
|
EZ80RTC_YR .DB 24
|
|
EZ80RTC_MO .DB 01
|
|
EZ80RTC_DT .DB 01
|
|
EZ80RTC_HH .DB 00
|
|
EZ80RTC_MM .DB 00
|
|
EZ80RTC_SS .DB 00
|
|
|