Browse Source

ez80: Added new driver ez80rtc

master
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 which indicates the specific hardware device driver that handles the
unit. The table below enumerates these values. 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 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 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 FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES 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) UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.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) 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] 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) MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER)
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) 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) BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM)
BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS 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) INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
; ;
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.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) #IF (RP5RTCENABLE)
.DW RP5RTC_INIT .DW RP5RTC_INIT
#ENDIF #ENDIF
#IF (EZ80RTCENABLE)
.DW EZ80RTC_INIT
#ENDIF
#IF (VDUENABLE) #IF (VDUENABLE)
.DW VDU_INIT .DW VDU_INIT
#ENDIF #ENDIF
@ -8051,6 +8054,14 @@ SIZ_RP5RTC .EQU $ - ORG_RP5RTC
MEMECHO SIZ_RP5RTC MEMECHO SIZ_RP5RTC
MEMECHO " bytes.\n" MEMECHO " bytes.\n"
#ENDIF #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) #IF (ASCIENABLE)
ORG_ASCI .EQU $ ORG_ASCI .EQU $
#INCLUDE "asci.asm" #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_INT .EQU $03 ; PERIODIC INT TIMER
RTCDEV_DS7 .EQU $04 ; DS1307 (I2C) RTCDEV_DS7 .EQU $04 ; DS1307 (I2C)
RTCDEV_RP5 .EQU $05 ; RP5C01 RTCDEV_RP5 .EQU $05 ; RP5C01
RTCDEV_EZ80 .EQU $06 ; EZ80 ON-CHIP RTC
; ;
; DSKY DEVICE IDS ; DSKY DEVICE IDS
; ;

2
Source/HBIOS/rp5rtc.asm

@ -297,7 +297,7 @@ RP5RTC_SETTIM:
LD (HB_DSTBNK),A ; SET IT LD (HB_DSTBNK),A ; SET IT
LD DE,RP5RTC_BCDBUF ; DEST ADR LD DE,RP5RTC_BCDBUF ; DEST ADR
LD BC,RP5RTC_BUFSIZ ; LENGTH LD BC,RP5RTC_BUFSIZ ; LENGTH
CALL HB_BNKCPY ; COPY THE CLOCK DATA
CALL HB_BNKCPY ; COPY THE RPC DATA
; ;
LD B, MODE_TIMEST LD B, MODE_TIMEST
CALL RP5RTC_SETMD CALL RP5RTC_SETMD

2
Source/RomDsk/Makefile

@ -6,7 +6,7 @@ include $(TOOLS)/Makefile.inc
.SHELLFLAGS = -ce .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 ROMAPPS2 := fdu format survey sysgen talk timer cpuspd
rom128_%.dat: DISKDEF=wbw_rom128 rom128_%.dat: DISKDEF=wbw_rom128

BIN
Source/RomDsk/ROM_384KB/WDATE.COM

Binary file not shown.
Loading…
Cancel
Save