New ROMLDR and INTRTC driver

- Refactored romldr.asm
- Added new periodic timer based RTC driver
This commit is contained in:
Wayne Warthen
2020-04-05 16:01:04 -07:00
parent 2e2d2bebd7
commit d9bed4563e
48 changed files with 1942 additions and 1285 deletions

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_dyno.asm"
;
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_ezz80.asm"
;
CPUOSC .SET 10000000 ; CPU OSC FREQ IN MHZ

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_mk4.asm"
;
Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_n8.asm"
;
Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_rcz180.asm"
;
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_rcz180.asm"
;
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ

View File

@@ -22,7 +22,9 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "RC2014 (KIO)"
#define PLATFORM_NAME "RC2014 (KIO)"
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "Config/RCZ80_std.asm"
;

View File

@@ -22,7 +22,9 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "RC2014 (MT)"
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#define PLATFORM_NAME "RC2014 (MT)"
;
#include "Config/RCZ80_std.asm"
;

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_rcz80.asm"
;
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#DEFINE PLATFORM_NAME "SBC (simh)"
;
#include "cfg_sbc.asm"

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_sbc.asm"
;
CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -22,7 +22,9 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "SC126"
#define PLATFORM_NAME "SC126"
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_scz180.asm"
;

View File

@@ -22,7 +22,9 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "SC130"
#define PLATFORM_NAME "SC130"
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_scz180.asm"
;
@@ -38,6 +40,7 @@ LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
;
DIAGENABLE .SET FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
;
TIMRTCENABLE .SET TRUE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
;
ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)

View File

@@ -22,7 +22,9 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#DEFINE PLATFORM_NAME "SC131"
#define PLATFORM_NAME "SC131"
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_scz180.asm"
;
@@ -38,6 +40,7 @@ LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
;
DIAGENABLE .SET FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
;
TIMRTCENABLE .SET TRUE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
;
ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)

View File

@@ -22,5 +22,6 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#include "cfg_una.asm"
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_una.asm"

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_zeta2.asm"
;
UARTCFG .SET UARTCFG | SER_RTS

View File

@@ -22,6 +22,8 @@
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#define BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON <CR> OR AUTO BOOT
;
#include "cfg_zeta.asm"
;
CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -3,7 +3,7 @@
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR DYNO
;==================================================================================================
;
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
; THIS FILE CONTAINS THE FULL EQU OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM
; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD
; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY
; UNDER THIS DIRECTORY.
@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -63,6 +61,8 @@ CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 10000000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -60,6 +58,8 @@ CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -17,9 +17,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -82,6 +80,8 @@ KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -67,6 +65,8 @@ KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -70,6 +68,8 @@ KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -63,6 +61,8 @@ CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 7372800 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -59,6 +57,8 @@ CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -61,6 +59,8 @@ KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE]
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE]
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -58,6 +56,8 @@ CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -16,9 +16,7 @@
PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO]
BIOS .EQU BIOS_UNA ; HARDWARE BIOS: BIOS_[WBW|UNA]
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2

View File

@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO] IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 20000000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 0 ; INTERRUPT MODE: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -55,6 +53,8 @@ CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -20,9 +20,7 @@ BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD)
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION
;
BOOTTYPE .EQU BT_MENU ; BT_[MENU|AUTO], IF AUTO, BOOT DEFAULT AFTER TIMEOUT
BOOT_TIMEOUT .EQU 20 ; AUTO BOOT TIMEOUT IN SECONDS, 0 FOR IMMEDIATE BOOT
BOOT_DEFAULT .EQU 'Z' ; AUTO BOOT SELECTION TO INVOKE AT TIMEOUT
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
CPUOSC .EQU 20000000 ; CPU OSC FREQ IN MHZ
INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
@@ -60,6 +58,8 @@ CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI]
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
;
TIMRTCENABLE .EQU FALSE ; ENABLE PERIODIC TIMER CLOCK DRIVER (TIMRTC.ASM)
;
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
;

View File

@@ -31,7 +31,7 @@ BUFLEN .EQU 40 ; INPUT LINE LENGTH
JP DSKY_ENTRY
JP UART_ENTRY
;
#DEFINE USEDELAY
;#DEFINE USEDELAY
#INCLUDE "util.asm"
;
;__UART_ENTRY_________________________________________________________________
@@ -125,9 +125,9 @@ INITIALIZE:
LD (9),HL ; STORE AT 0x0009
#ENDIF
#IF (BIOS == BIOS_WBW)
CALL DELAY_INIT
#ENDIF
;#IF (BIOS == BIOS_WBW)
; CALL DELAY_INIT
;#ENDIF
RET
;
@@ -890,7 +890,7 @@ KEYBUF: .FILL BUFLEN,0
;_____________________________________________________________________________
;
TXT_PROMPT .TEXT "\r\n>$"
TXT_READY .TEXT "\r\nMonitor Ready$"
TXT_READY .TEXT "\r\n\r\nMonitor Ready$"
TXT_COMMAND .TEXT "\r\nUnknown Command$"
TXT_ERR .TEXT "\r\nSyntax Error$"
TXT_CKSUMERR .TEXT "\r\nChecksum Error$"

View File

@@ -896,6 +896,21 @@ HB_START:
INC A ; 1 MEANS BAT OK
LD (HBX_LOC - 1),A ; OVERWRITE IF NVC ALLOWS IT
;
; IF APPBOOT, SAVE CURRENT BANKID
;
; THIS IS NOT GOING TO WORK IF THE APP BOOT IMAGE IS LOADED
; USING THE UNA FAT32 LOADER. SHOULD PROBABLY CHECK THAT THERE
; IS A VALID ROMWBW PROXY IN MEMORY BEFORE DOING THIS. HOWEVER,
; THIS USE CASE IS PROBABLY NON-EXISTENT. THE IMG BOOT IMAGE
; SHOULD WORK FINE WITH THE UNA FAT32 LOADER.
;
#IFDEF APPBOOT
LD A,(HB_CURBNK)
DEC SP ; RESERVE A STACK BYTE
LD (HBX_LOC - 2),A ; SAVE BANK
PUSH AF ; ALSO ON STACK
#ENDIF
;
; INSTALL PROXY IN UPPER MEMORY
;
LD DE,HBX_LOC ; AS PER ABOVE
@@ -903,6 +918,13 @@ HB_START:
LD BC,HBX_SIZ
LDIR
;
; IF APPBOOT, RESTORE CURRENT BANK ID
;
#IFDEF APPBOOT
POP AF
LD (HB_CURBNK),A
#ENDIF
;
; IF ALREADY EXECUTING IN RAM, BYPASS RAM BANK INSTALLATION
;
LD A,(HB_RAMFLAG)
@@ -945,6 +967,11 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
; IF APPBOOT, WE NEED TO FIX UP A FEW THINGS IN PAGE ZERO
;
#IFDEF APPBOOT
;
; GET AND SAVE APP BOOT BANK ID
LD A,(HBX_LOC - 2)
LD (HB_APPBNK),A
; MAKE SURE RST 08 VECTOR IS RIGHT
LD A,$C3
LD ($0008),A
@@ -1520,7 +1547,9 @@ INITSYS3:
;CALL HBX_BNKCPY
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
LD D,BID_USR ; D = DEST BANK = USER BANK
LD E,BID_USR ; E = SRC BANK = USER BANK
;LD E,BID_USR ; E = SRC BANK = USER BANK
LD A,(HB_APPBNK) ; GET APP LOAD BANK
LD E,A ; USE AS SOURCE
LD HL,$8000 ; HL = COPY LEN = ENTIRE BANK
RST 08 ; DO IT
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
@@ -1633,6 +1662,9 @@ HB_INITTBL:
#IF (ACIAENABLE)
.DW ACIA_INIT
#ENDIF
#IF (TIMRTCENABLE)
.DW TIMRTC_INIT
#ENDIF
#IF (SIMRTCENABLE)
.DW SIMRTC_INIT
#ENDIF
@@ -2115,6 +2147,9 @@ HB_IOBNK .DB 0 ; CURRENT IO BUFFER BANK ID
; B: FUNCTION
;
RTC_DISPATCH:
#IF (TIMRTCENABLE)
JP TIMRTC_DISPATCH
#ENDIF
#IF (SIMRTCENABLE)
JP SIMRTC_DISPATCH
#ENDIF
@@ -2672,42 +2707,29 @@ HB_IM1PTR .DW HB_IVT ; POINTER FOR NEXT IM1 ENTRY
;
#ENDIF
;
; TIMER INTERRUPT
; TIMER HANDLER VECTORS
; THESE CAN BE HOOKED AS DESIRED BY DRIVERS
;
HB_TIMINT:
VEC_TICK:
JP HB_TICK ; TICK PROCESSING VECTOR
VEC_SECOND:
JP HB_SECOND ; SECOND PROCESSING VECTOR
;
; TIMER HANDLERS
;
HB_TICK:
; INCREMENT TICK COUNTER (32 BIT)
LD HL,HB_TICKS ; POINT TO TICK COUNTER
CALL INC32HL
;
HB_TIMINT1:
;
#IF 0
;
LD HL,TEMPCNT
DEC (HL)
JR NZ,HB_TIMINT2
LD (HL),250
;
LD A,'*'
CALL COUT
JR HB_TIMINT2
;
TEMPCNT .DB 250
;
#ENDIF
;
HB_TIMINT2:
LD HL,HB_SECTCK ; POINT TO SECONDS TICK COUNTER
DEC (HL) ; COUNTDOWN 50 TICKS
JR NZ,HB_TIMINT3 ; NOT ZERO YET, DONE FOR THIS CYCLE
; 50 TICKS HAVE ELAPSED
JR NZ,HB_TICK1 ; NOT DONE, SKIP AHEAD
LD A,TICKSPERSEC ; 50 TICKS PER SECOND
LD (HL),A ; RESET COUNTDOWN REGISTER
; INCREMENT SECONDS COUNTER
LD HL,HB_SECS ; POINT TO SECONDS COUNTER
CALL INC32HL
CALL VEC_SECOND ; DO SECONDS PROCESSING VIA VECTOR
;
HB_TIMINT3:
HB_TICK1:
;
#IF (CPUFAM == CPU_Z180)
; ACK/RESET Z180 TIMER INTERRUPT
@@ -2723,6 +2745,12 @@ HB_TIMINT3:
OR $FF ; NZ SET TO INDICATE INT HANDLED
RET
;
HB_SECOND:
; INCREMENT SECONDS COUNTER
LD HL,HB_SECS ; POINT TO SECONDS COUNTER
JP INC32HL ; INCREMENT AND RETURN
;
; BAD INTERRUPT HANDLER
;
HB_BADINT:
@@ -2899,6 +2927,14 @@ HB_TMPREF .DW 0
; DEVICE DRIVERS
;==================================================================================================
;
#IF (TIMRTCENABLE)
ORG_TIMRTC .EQU $
#INCLUDE "timrtc.asm"
SIZ_TIMRTC .EQU $ - ORG_TIMRTC
.ECHO "TIMRTC occupies "
.ECHO SIZ_TIMRTC
.ECHO " bytes.\n"
#ENDIF
#IF (SIMRTCENABLE)
ORG_SIMRTC .EQU $
#INCLUDE "simrtc.asm"
@@ -4082,6 +4118,8 @@ STR_LOWBAT .DB "\r\n\r\n+++ LOW BATTERY +++$"
MSG_HBVER .DB $BE,$FF,$8A,$FB,$80,$80,$80,$80 ; "HBIO "
#ENDIF
;
HB_APPBNK .DB 0 ; START BANK WHEN RUN IN APP MODE
;
HB_CURSEC .DB 0 ; CURRENT SECOND (TEMP)
;
HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP)

File diff suppressed because it is too large Load Diff

View File

@@ -71,13 +71,7 @@ SIMRTC_GETTIM:
LD HL,SIMRTC_BUF ; SOURCE ADR
POP DE ; DEST ADR
LD BC,SIMRTC_BUFSIZ ; LENGTH
#IF (INTMODE == 1)
DI
#ENDIF
CALL HB_BNKCPY ; COPY THE CLOCK DATA
#IF (INTMODE == 1)
EI
#ENDIF
;
LD DE,60 ; DELAY 60 * 16US = ~1MS
CALL VDELAY ; SLOW DOWN SIMH FOR CLOCK TICKING TEST
@@ -107,13 +101,7 @@ SIMRTC_SETTIM:
LD (HB_DSTBNK),A ; SET IT
LD DE,SIMRTC_BUF ; DEST ADR
LD BC,SIMRTC_BUFSIZ ; LENGTH
#IF (INTMODE == 1)
DI
#ENDIF
CALL HB_BNKCPY ; COPY THE CLOCK DATA
#IF (INTMODE == 1)
EI
#ENDIF
;
LD HL,SIMRTC_BUF ; POINT TO TEMP BUF
LD A,SIMRTC_CLKWRITE ; WRITE CLOCK COMMAND

230
Source/HBIOS/timrtc.asm Normal file
View File

@@ -0,0 +1,230 @@
;
;==================================================================================================
; SYSTEM TIMER BASED CLOCK DRIVER
;==================================================================================================
;
TIMRTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS)
;
; RTC DEVICE INITIALIZATION ENTRY
;
TIMRTC_INIT:
CALL NEWLINE ; FORMATTING
PRTS("TIMRTC: $")
;
; HOOK THE HBIOS SECONDS VECTOR
LD HL,(VEC_SECOND+1) ; GET CUR SECONDS VECTOR
LD (TIMRTC_VEC),HL ; SAVE IT INTERNALLY
LD HL,TIMRTC_INT ; OUR SECONDS INT ENTRY
LD (VEC_SECOND+1),HL ; REPLACE IT
;
; DISPLAY CURRENT TIME
CALL TIMRTC_GETTIM0
LD HL,TIMRTC_BCDBUF ; POINT TO BCD BUF
CALL PRTDT
;
XOR A ; SIGNAL SUCCESS
RET
;
; RTC DEVICE FUNCTION DISPATCH ENTRY
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
; B: FUNCTION (IN)
;
TIMRTC_DISPATCH:
LD A,B ; GET REQUESTED FUNCTION
AND $0F ; ISOLATE SUB-FUNCTION
JP Z,TIMRTC_GETTIM ; GET TIME
DEC A
JP Z,TIMRTC_SETTIM ; SET TIME
DEC A
JP Z,TIMRTC_GETBYT ; GET NVRAM BYTE VALUE
DEC A
JP Z,TIMRTC_SETBYT ; SET NVRAM BYTE VALUE
DEC A
JP Z,TIMRTC_GETBLK ; GET NVRAM DATA BLOCK VALUES
DEC A
JP Z,TIMRTC_SETBLK ; SET NVRAM DATA BLOCK VALUES
CALL PANIC
;
; NVRAM FUNCTIONS ARE NOT AVAILABLE IN SIMULATOR
;
TIMRTC_GETBYT:
TIMRTC_SETBYT:
TIMRTC_GETBLK:
TIMRTC_SETBLK:
CALL PANIC
;
; 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
;
TIMRTC_GETTIM:
; GET THE TIME INTO TEMP BUF
PUSH HL ; SAVE PTR TO CALLERS BUFFER
CALL TIMRTC_GETTIM0 ; GET TIME TO WORK BUFFER
;
; NOW COPY TO REAL DESTINATION (INTERBANK SAFE)
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,TIMRTC_BCDBUF ; SOURCE ADR
POP DE ; DEST ADR
LD BC,TIMRTC_BUFSIZ ; LENGTH
CALL HB_BNKCPY ; COPY THE CLOCK DATA
;
LD DE,60 ; DELAY 60 * 16US = ~1MS
CALL VDELAY ; SLOW DOWN SIMH FOR CLOCK TICKING TEST
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
TIMRTC_GETTIM0:
LD HL,TIMRTC_BINBUF ; FROM BINARY BUFFER
LD DE,TIMRTC_BCDBUF ; TO BCD BUFFER
HB_DI
CALL TIMRTC_BIN2BCD ; COPY AND CONVERT
HB_EI
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
;
TIMRTC_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,TIMRTC_BCDBUF ; DEST ADR
LD BC,TIMRTC_BUFSIZ ; LENGTH
CALL HB_BNKCPY ; COPY THE CLOCK DATA
;
LD HL,TIMRTC_BCDBUF ; FROM BCD BUF
LD DE,TIMRTC_BINBUF ; TO BIN BUF
HB_DI
CALL TIMRTC_BCD2BIN ; COPY AND CONVERT
HB_EI
;
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
; HANDLER FOR TIMER SECONDS INTERRUPT
;
TIMRTC_INT:
LD HL,TIMRTC_BINBUF + TIMRTC_BUFSIZ - 1
INC (HL) ; INC SECONDS
LD A,59 ; MAX VALUE
CP (HL) ; OVERFLOW?
JR NC,TIMRTC_INTX ; NOPE, DONE
LD (HL),0 ; BACK TO ZERO
DEC HL ; POINT TO MINUTES
INC (HL) ; INCREMENT MINUTE
CP (HL) ; OVERFLOW?
JR NC,TIMRTC_INTX ; NOPE, DONE
LD (HL),0 ; BACK TO ZERO
DEC HL ; POINT TO HOURS
INC (HL) ; INCREMENT HOURS
LD A,23 ; MAX VALUE
CP (HL) ; OVERFLOW?
JR NC,TIMRTC_INTX ; NOPE, DONE
LD (HL),0 ; BACK TO ZERO
DEC HL ; POINT TO DATE
LD A,(TIMRTC_MO) ; GET CURRENT MONTH
DEC A ; ZERO OFFSET
LD DE,TIMRTC_MONTBL ; POINT TO DAYS IN MON TBL
ADD A,E ; ADD OFFSET
LD E,A ; BACK TO E
JR NC,TIMRTC_INT1 ; NO CARRY, SKIP
INC D ; HANDLE CARRY
TIMRTC_INT1:
LD A,(DE) ; A := DAYS IN MONTH
LD C,A ; COPY TO C FOR LATER
LD A,(TIMRTC_MO) ; GET CURRENT MONTH
CP 2 ; FEBRUARY?
JR NZ,TIMRTC_INT2 ; IF NOT, NOT LEAY, SKIP
LD A,(TIMRTC_YR) ; GET CURRENT YEAR
AND $03 ; CHECK FOR LEAP
JR NZ,TIMRTC_INT2 ; IF NOT LEAP, SKIP AHEAD
INC C ; BUMP DAYS IN FEB FOR LEAP
TIMRTC_INT2:
INC (HL) ; INCREMENT DATE
LD A,C ; A := TRUE DAYS IN MONTH + 1
CP (HL) ; OVERFLOW?
JR NZ,TIMRTC_INTX ; NOPE, DONE
LD (HL),1 ; BACK TO DAY ONE
DEC HL ; POINT TO MONTH
INC (HL) ; INCREMENT MONTH
LD A,13 ; PAST MAX?
CP (HL) ; OVERFLOW?
JR NZ,TIMRTC_INTX ; NOPE, DONE
LD (HL),1 ; BACK TO MONTH ONE
DEC HL ; POINT TO YEAR
INC (HL) ; INCREMENT YEAR
LD A,100 ; PAST MAX?
CP (HL) ; OVERFLOW?
JR NZ,TIMRTC_INTX ; NOPE, DONE
LD (HL),0 ; BACK TO YEAR ZERO
TIMRTC_INTX:
JP PANIC
TIMRTC_VEC .EQU $-2
;
; CONVERT FROM BINARY BUF (HL) TO BCD BUF (DE)
;
TIMRTC_BIN2BCD:
LD B,TIMRTC_BUFSIZ
TIMRTC_BIN2BCD1:
LD A,(HL)
CALL BYTE2BCD
LD (DE),A
INC HL
INC DE
DJNZ TIMRTC_BIN2BCD1
RET
;
; CONVERT FROM BCD BUF (HL) TO BINARY BUF (DE)
;
TIMRTC_BCD2BIN
LD B,TIMRTC_BUFSIZ
TIMRTC_BCD2BIN1:
LD A,(HL)
CALL BCD2BYTE
LD (DE),A
INC HL
INC DE
DJNZ TIMRTC_BCD2BIN1
RET
;
; WORKING VARIABLES
;
TIMRTC_BINBUF: ; ALL IN BINARY
TIMRTC_YR .DB 20
TIMRTC_MO .DB 01
TIMRTC_DT .DB 01
TIMRTC_HH .DB 00
TIMRTC_MM .DB 00
TIMRTC_SS .DB 00
;
TIMRTC_BCDBUF .FILL TIMRTC_BUFSIZ
;
TIMRTC_MONTBL: ; DAYS IN MONTH + 1
.DB 32 ; JANUARY
.DB 29 ; FEBRUARY (NON-LEAP)
.DB 32 ; MARCH
.DB 31 ; APRIL
.DB 32 ; MAY
.DB 31 ; JUNE
.DB 32 ; JULY
.DB 32 ; AUGUST
.DB 31 ; SEPTEMBER
.DB 32 ; OCTOBER
.DB 31 ; NOVEMBER
.DB 32 ; DECEMBER

View File

@@ -67,8 +67,9 @@ CIN: PUSH BC
POP BC
RET
;
BOOTMSG:.DB "No User ROM Installed."
.DB CR,LF
BOOTMSG:.DB CR,LF,CR,LF
.DB "No User ROM Installed."
.DB CR,LF,CR,LF
.DB "Press a key to return to Boot Loader.$"
;
SLACK .EQU (USR_END - $)

View File

@@ -566,8 +566,6 @@ BYTE2BCD1:
POP BC
RET
#IF (BIOS == BIOS_WBW)
#IFDEF USEDELAY
;
@@ -592,9 +590,11 @@ DELAY: ; 17TS (FROM INVOKING CALL) |
DELAY1: ; |
; --- LOOP = ((CPUSCL * 16) - 5) TS ------------+ |
DEC A ; 4TS | |
#IF (CPUFAM == CPU_Z180) ; | |
#IF (BIOS == BIOS_WBW) ; | |
#IF (CPUFAM == CPU_Z180) ; | |
OR A ; +4TS FOR Z180 | |
#ENDIF ; | |
#ENDIF ; | |
#ENDIF ; | |
JR NZ,DELAY1 ; 12TS (NZ) / 7TS (Z) | |
; ----------------------------------------------+ |
; |
@@ -623,17 +623,21 @@ VDELAY: ; 17TS (FROM INVOKING CALL) |
; | |
VDELAY1: ; | |
; --- INNER LOOP = ((CPUSCL * 16) - 5) TS ------+ | |
#IF (CPUFAM == CPU_Z180) ; | | |
#IF (BIOS == BIOS_WBW) ; | | |
#IF (CPUFAM == CPU_Z180) ; | | |
OR A ; +4TS FOR Z180 | | |
#ENDIF ; | | |
#ENDIF ; | | |
#ENDIF ; | | |
DEC A ; 4TS | | |
JR NZ,VDELAY1 ; 12TS (NZ) / 7TS (Z) | | |
; ----------------------------------------------+ | |
; | |
DEC DE ; 6TS | |
#IF (CPUFAM == CPU_Z180) ; | |
#IF (BIOS == BIOS_WBW) ; | | |
#IF (CPUFAM == CPU_Z180) ; | |
OR A ; +4TS FOR Z180 | |
#ENDIF ; | |
#ENDIF ; | |
#ENDIF ; | |
LD A,D ; 4TS | |
OR E ; 4TS | |
JP NZ,VDELAY ; 10TS | |
@@ -659,7 +663,7 @@ LDELAY:
; CPU SCALER := MAX(1, (PHIMHZ - 2))
;
DELAY_INIT:
#IF (BIOS == BIOS_UNA)
#IF (BIOS == BIOS_UNA)
LD C,$F8 ; UNA BIOS GET PHI FUNCTION
RST 08 ; RETURNS SPEED IN HZ IN DE:HL
LD B,4 ; DIVIDE MHZ IN DE:HL BY 100000H
@@ -669,12 +673,12 @@ DELAY_INIT0:
DJNZ DELAY_INIT0 ; ...RIGHT SHIFT DE BY 4.
INC E ; FIX UP FOR VALUE TRUNCATION
LD A,E ; PUT IN A
#ELSE
#ELSE
LD B,BF_SYSGET ; HBIOS FUNC=GET SYS INFO
LD C,BF_SYSGET_CPUINFO ; HBIOS SUBFUNC=GET CPU INFO
RST 08 ; CALL HBIOS, RST 08 NOT YET INSTALLED
LD A,L ; PUT SPEED IN MHZ IN ACCUM
#ENDIF
#ENDIF
CP 3 ; TEST FOR <= 2 (SPECIAL HANDLING)
JR C,DELAY_INIT1 ; IF <= 2, SPECIAL PROCESSING
SUB 2 ; ADJUST AS REQUIRED BY DELAY FUNCTIONS
@@ -685,13 +689,11 @@ DELAY_INIT2:
LD (CPUSCL),A ; UPDATE CPU SCALER VALUE
RET
#IF (CPUMHZ < 3)
#IF (CPUMHZ < 3)
CPUSCL .DB 1 ; CPU SCALER MUST BE > 0
#ELSE
#ELSE
CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ
#ENDIF
;
#ENDIF
#ENDIF
;
#ENDIF
;
@@ -700,13 +702,15 @@ CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ
; NUMBER OF CALL/RET INVOCATIONS. A SINGLE CALL/RET IS
; 27 T-STATES ON A Z80, 25 T-STATES ON A Z180
;
DLY64: CALL DLY32
DLY32: CALL DLY16
DLY16: CALL DLY8
DLY8: CALL DLY4
DLY4: CALL DLY2
DLY2: CALL DLY1
DLY1: RET
; ; Z80 Z180
; ; ---- ----
DLY64: CALL DLY32 ; 1728 1600
DLY32: CALL DLY16 ; 864 800
DLY16: CALL DLY8 ; 432 400
DLY8: CALL DLY4 ; 216 200
DLY4: CALL DLY2 ; 108 100
DLY2: CALL DLY1 ; 54 50
DLY1: RET ; 27 25
;
; MULTIPLY 8-BIT VALUES
; IN: MULTIPLY H BY E