mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
ez80: Added new driver ez80rtc
This commit is contained in:
@@ -889,14 +889,15 @@ more than one at a time. The RTC unit is assigned a Device Type ID
|
||||
which indicates the specific hardware device driver that handles the
|
||||
unit. The table below enumerates these values.
|
||||
|
||||
| **Device Type** | **ID** | **Description** | **Driver** |
|
||||
|-----------------|-------:|------------------------------------------|------------|
|
||||
| RTCDEV_DS | 0x00 | Maxim DS1302 Real-Time Clock w/ NVRAM | dsrtc.asm |
|
||||
| RTCDEV_BQ | 0x01 | BQ4845P Real Time Clock | bqrtc.asm |
|
||||
| RTCDEV_SIMH | 0x02 | SIMH Simulator Real-Time Clock | simrtc.asm |
|
||||
| RTCDEV_INT | 0x03 | Interrupt-based Real Time Clock | intrtc.asm |
|
||||
| RTCDEV_DS7 | 0x04 | Maxim DS1307 PCF I2C RTC w/ NVRAM | ds7rtc.asm |
|
||||
| RTCDEV_RP5 | 0x05 | Ricoh RPC01A Real-Time Clock w/ NVRAM | rp5rtc.asm |
|
||||
| **Device Type** | **ID** | **Description** | **Driver** |
|
||||
|-----------------|-------:|------------------------------------------|-------------|
|
||||
| RTCDEV_DS | 0x00 | Maxim DS1302 Real-Time Clock w/ NVRAM | dsrtc.asm |
|
||||
| RTCDEV_BQ | 0x01 | BQ4845P Real Time Clock | bqrtc.asm |
|
||||
| RTCDEV_SIMH | 0x02 | SIMH Simulator Real-Time Clock | simrtc.asm |
|
||||
| RTCDEV_INT | 0x03 | Interrupt-based Real Time Clock | intrtc.asm |
|
||||
| RTCDEV_DS7 | 0x04 | Maxim DS1307 PCF I2C RTC w/ NVRAM | ds7rtc.asm |
|
||||
| RTCDEV_RP5 | 0x05 | Ricoh RPC01A Real-Time Clock w/ NVRAM | rp5rtc.asm |
|
||||
| RTCDEV_EZ80 | 0x06 | eZ80 on-chip RTC | ez80rtc.asm |
|
||||
|
||||
The time functions to get and set the time (RTCGTM and RTCSTM) require a
|
||||
6 byte date/time buffer in the following format. Each byte is BCD
|
||||
|
||||
@@ -33,8 +33,7 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
RP5RTCENABLE .SET TRUE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
EZ80RTCENABLE .SET TRUE ; EZ80 ON CHIP RTC
|
||||
;
|
||||
UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
|
||||
@@ -44,8 +43,8 @@ EZ80UARTENABLE .SET TRUE ; EZ80UART: ENABLE EZ80 UART DRIVER (EZ80UART.ASM)
|
||||
;
|
||||
LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET TRUE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
TMSMODE .SET TMSMODE_MSX9958 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO]
|
||||
MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
|
||||
@@ -117,6 +117,8 @@ DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS
|
||||
BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM)
|
||||
BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS
|
||||
;
|
||||
EZ80RTCENABLE .EQU TRUE ; EZ80 ON CHIP RTC
|
||||
;
|
||||
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
;
|
||||
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
|
||||
172
Source/HBIOS/ez80rtc.asm
Normal file
172
Source/HBIOS/ez80rtc.asm
Normal file
@@ -0,0 +1,172 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; EZ80 ON-CHIP CLOCK DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
EZ80RTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS)
|
||||
;
|
||||
; RTC DEVICE INITIALIZATION ENTRY
|
||||
|
||||
DEVECHO "EZ80 RTC:\n"
|
||||
|
||||
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
|
||||
; TODO VERIFY SUCCESS -> A IS ZERO
|
||||
|
||||
; 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
|
||||
@@ -3779,6 +3779,9 @@ HB_INITTBL:
|
||||
#IF (RP5RTCENABLE)
|
||||
.DW RP5RTC_INIT
|
||||
#ENDIF
|
||||
#IF (EZ80RTCENABLE)
|
||||
.DW EZ80RTC_INIT
|
||||
#ENDIF
|
||||
#IF (VDUENABLE)
|
||||
.DW VDU_INIT
|
||||
#ENDIF
|
||||
@@ -8051,6 +8054,14 @@ SIZ_RP5RTC .EQU $ - ORG_RP5RTC
|
||||
MEMECHO SIZ_RP5RTC
|
||||
MEMECHO " bytes.\n"
|
||||
#ENDIF
|
||||
#IF (EZ80RTCENABLE)
|
||||
ORG_EZ80RTC .EQU $
|
||||
#INCLUDE "ez80rtc.asm"
|
||||
SIZ_EZ80RTC .EQU $ - ORG_EZ80RTC
|
||||
MEMECHO "EZ80RTC occupies "
|
||||
MEMECHO SIZ_EZ80RTC
|
||||
MEMECHO " bytes.\n"
|
||||
#ENDIF
|
||||
#IF (ASCIENABLE)
|
||||
ORG_ASCI .EQU $
|
||||
#INCLUDE "asci.asm"
|
||||
|
||||
@@ -359,6 +359,7 @@ RTCDEV_SIMH .EQU $02 ; SIMH
|
||||
RTCDEV_INT .EQU $03 ; PERIODIC INT TIMER
|
||||
RTCDEV_DS7 .EQU $04 ; DS1307 (I2C)
|
||||
RTCDEV_RP5 .EQU $05 ; RP5C01
|
||||
RTCDEV_EZ80 .EQU $06 ; EZ80 ON-CHIP RTC
|
||||
;
|
||||
; DSKY DEVICE IDS
|
||||
;
|
||||
|
||||
@@ -297,7 +297,7 @@ RP5RTC_SETTIM:
|
||||
LD (HB_DSTBNK),A ; SET IT
|
||||
LD DE,RP5RTC_BCDBUF ; DEST ADR
|
||||
LD BC,RP5RTC_BUFSIZ ; LENGTH
|
||||
CALL HB_BNKCPY ; COPY THE CLOCK DATA
|
||||
CALL HB_BNKCPY ; COPY THE RPC DATA
|
||||
;
|
||||
LD B, MODE_TIMEST
|
||||
CALL RP5RTC_SETMD
|
||||
|
||||
@@ -6,7 +6,7 @@ include $(TOOLS)/Makefile.inc
|
||||
|
||||
.SHELLFLAGS = -ce
|
||||
|
||||
ROMAPPS1 := assign mode rtc syscopy xm
|
||||
ROMAPPS1 := assign mode rtc syscopy xm ../../Source/Images/Common/All/WDATE
|
||||
ROMAPPS2 := fdu format survey sysgen talk timer cpuspd
|
||||
|
||||
rom128_%.dat: DISKDEF=wbw_rom128
|
||||
|
||||
BIN
Source/RomDsk/ROM_384KB/WDATE.COM
Normal file
BIN
Source/RomDsk/ROM_384KB/WDATE.COM
Normal file
Binary file not shown.
Reference in New Issue
Block a user