Browse Source

ez80: Added new driver ez80rtc

pull/424/head
Dean Netherton 2 years ago
parent
commit
44d890be59
  1. 17
      Source/Doc/SystemGuide.md
  2. 7
      Source/HBIOS/Config/RCEZ80_std.asm
  3. 2
      Source/HBIOS/cfg_rcez80.asm
  4. 172
      Source/HBIOS/ez80rtc.asm
  5. 11
      Source/HBIOS/hbios.asm
  6. 1
      Source/HBIOS/hbios.inc
  7. 2
      Source/HBIOS/rp5rtc.asm
  8. 2
      Source/RomDsk/Makefile
  9. BIN
      Source/RomDsk/ROM_384KB/WDATE.COM

17
Source/Doc/SystemGuide.md

@ -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

7
Source/HBIOS/Config/RCEZ80_std.asm

@ -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)

2
Source/HBIOS/cfg_rcez80.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

@ -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

11
Source/HBIOS/hbios.asm

@ -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"

1
Source/HBIOS/hbios.inc

@ -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
;

2
Source/HBIOS/rp5rtc.asm

@ -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

2
Source/RomDsk/Makefile

@ -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

Binary file not shown.
Loading…
Cancel
Save