Browse Source

New ROMLDR and INTRTC driver

- Refactored romldr.asm
- Added new periodic timer based RTC driver
patch
Wayne Warthen 6 years ago
parent
commit
d9bed4563e
  1. 5
      Doc/ChangeLog.txt
  2. BIN
      Doc/RomWBW Applications.pdf
  3. BIN
      Doc/RomWBW Architecture.pdf
  4. BIN
      Doc/RomWBW Getting Started.pdf
  5. 2
      ReadMe.md
  6. 2
      ReadMe.txt
  7. 1
      Source/Apps/RTC.asm
  8. 12
      Source/CBIOS/cbios.asm
  9. 2
      Source/Doc/Common.inc
  10. 3
      Source/Forth/camel80h.azm
  11. 2
      Source/HBIOS/Config/DYNO_std.asm
  12. 2
      Source/HBIOS/Config/EZZ80_std.asm
  13. 2
      Source/HBIOS/Config/MK4_std.asm
  14. 2
      Source/HBIOS/Config/N8_std.asm
  15. 2
      Source/HBIOS/Config/RCZ180_ext.asm
  16. 2
      Source/HBIOS/Config/RCZ180_nat.asm
  17. 4
      Source/HBIOS/Config/RCZ80_kio.asm
  18. 4
      Source/HBIOS/Config/RCZ80_mt.asm
  19. 2
      Source/HBIOS/Config/RCZ80_std.asm
  20. 2
      Source/HBIOS/Config/SBC_simh.asm
  21. 2
      Source/HBIOS/Config/SBC_std.asm
  22. 4
      Source/HBIOS/Config/SCZ180_126.asm
  23. 5
      Source/HBIOS/Config/SCZ180_130.asm
  24. 5
      Source/HBIOS/Config/SCZ180_131.asm
  25. 3
      Source/HBIOS/Config/UNA_std.asm
  26. 2
      Source/HBIOS/Config/ZETA2_std.asm
  27. 2
      Source/HBIOS/Config/ZETA_std.asm
  28. 8
      Source/HBIOS/cfg_dyno.asm
  29. 6
      Source/HBIOS/cfg_ezz80.asm
  30. 6
      Source/HBIOS/cfg_master.asm
  31. 6
      Source/HBIOS/cfg_mk4.asm
  32. 6
      Source/HBIOS/cfg_n8.asm
  33. 6
      Source/HBIOS/cfg_rcz180.asm
  34. 6
      Source/HBIOS/cfg_rcz80.asm
  35. 6
      Source/HBIOS/cfg_sbc.asm
  36. 6
      Source/HBIOS/cfg_scz180.asm
  37. 4
      Source/HBIOS/cfg_una.asm
  38. 6
      Source/HBIOS/cfg_zeta.asm
  39. 6
      Source/HBIOS/cfg_zeta2.asm
  40. 10
      Source/HBIOS/dbgmon.asm
  41. 92
      Source/HBIOS/hbios.asm
  42. 2828
      Source/HBIOS/romldr.asm
  43. 12
      Source/HBIOS/simrtc.asm
  44. 230
      Source/HBIOS/timrtc.asm
  45. 5
      Source/HBIOS/usrrom.asm
  46. 50
      Source/HBIOS/util.asm
  47. 6
      Source/ver.inc
  48. 6
      Source/ver.lib

5
Doc/ChangeLog.txt

@ -1,3 +1,8 @@
Version 3.1
-----------
- WBW: Refactored ROM Loader
- WBW: INTRTC periodic timer based clock
Version 3.0.1
-------------
- WBW: Increase XModem timeout waiting for host to start sending

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Architecture.pdf

Binary file not shown.

BIN
Doc/RomWBW Getting Started.pdf

Binary file not shown.

2
ReadMe.md

@ -2,7 +2,7 @@
## Z80/Z180 System Software
Version 3.0.1
Version 3.1 Pre-release
Monday 30 March 2020
Wayne Warthen <wwarthen@gmail.com>

2
ReadMe.txt

@ -2,7 +2,7 @@ RomWBW
Z80/Z180 System Software
Version 3.0.1
Version 3.1 Pre-release
Monday 30 March 2020
Wayne Warthen wwarthen@gmail.com

1
Source/Apps/RTC.asm

@ -1319,6 +1319,7 @@ DELAY_LOOP: ; LOOP IS 26TS
LD A,H ; 4TS
OR L ; 4TS
JR NZ,DELAY_LOOP ; 12TS
; RESTART SYSTEM FROM ROM BANK 0, ADDRESS $0000
LD A,BID_BOOT ; BOOT BANK
LD HL,0 ; ADDRESS ZERO
CALL HB_BNKCALL ; DOES NOT RETURN

12
Source/CBIOS/cbios.asm

@ -2296,8 +2296,16 @@ DRV_INIT:
; GET BOOT UNIT/SLICE INFO
LD BC,$00FC ; UNA FUNC: GET BOOTSTRAP HISTORY
RST 08 ; CALL UNA
LD D,L ; SAVE L AS UNIT
LD E,0 ; SLICE IS ZERO
LD A,L ; PUT IN ACCUM
AND $0F ; UNIT IN LOW NIBBLE
LD D,A ; UNIT NUM TO D
LD A,L ; GET ORIGINAL VALUE BACK
RLCA ; MOVE SLICE TO LOW NIBBLE
RLCA ; ...
RLCA ; ...
RLCA ; ...
AND $0F ; SLICE NOW IN LOW NIBBLE
LD E,A ; SLICE TO E
LD (BOOTVOL),DE ; D -> UNIT, E -> SLICE
;
; INIT DEFAULT

2
Source/Doc/Common.inc

@ -1,4 +1,4 @@
!def(ver)(3.0.1)
!def(ver)(3.1 Pre-release)
!def(date)(!mdate)
!def(product)(RomWBW)
!def(author)(Wayne Warthen)

3
Source/Forth/camel80h.azm

@ -1020,7 +1020,8 @@ DOTS2: DW EXIT
DW UINIT,U0,NINIT,CMOVE
; DW LIT,80h,COUNT,INTERPRET
DW XSQUOTE
DB 55,'Z80 CamelForth v1.02 25 Jan 1995, ROMWBW 19 Oct 2019'
DB 59,0dh,0ah,0dh,0ah
DB 'Z80 CamelForth v1.02 25 Jan 1995, RomWBW 19 Oct 2019'
DB 0dh,0ah
DW TYPE,ABORT ; ABORT never returns
; DON'T FORGET TO UPDATE THE BYTE COUNT IF YOU CHANGE THE SIZE OF THE BOOT MSG

2
Source/HBIOS/Config/DYNO_std.asm

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

2
Source/HBIOS/Config/EZZ80_std.asm

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

2
Source/HBIOS/Config/MK4_std.asm

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

2
Source/HBIOS/Config/N8_std.asm

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

2
Source/HBIOS/Config/RCZ180_ext.asm

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

2
Source/HBIOS/Config/RCZ180_nat.asm

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

4
Source/HBIOS/Config/RCZ80_kio.asm

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

4
Source/HBIOS/Config/RCZ80_mt.asm

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

2
Source/HBIOS/Config/RCZ80_std.asm

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

2
Source/HBIOS/Config/SBC_simh.asm

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

2
Source/HBIOS/Config/SBC_std.asm

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

4
Source/HBIOS/Config/SCZ180_126.asm

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

5
Source/HBIOS/Config/SCZ180_130.asm

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

5
Source/HBIOS/Config/SCZ180_131.asm

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

3
Source/HBIOS/Config/UNA_std.asm

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

2
Source/HBIOS/Config/ZETA2_std.asm

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

2
Source/HBIOS/Config/ZETA_std.asm

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

8
Source/HBIOS/cfg_dyno.asm

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

6
Source/HBIOS/cfg_ezz80.asm

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

6
Source/HBIOS/cfg_master.asm

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

6
Source/HBIOS/cfg_mk4.asm

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

6
Source/HBIOS/cfg_n8.asm

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

6
Source/HBIOS/cfg_rcz180.asm

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

6
Source/HBIOS/cfg_rcz80.asm

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

6
Source/HBIOS/cfg_sbc.asm

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

6
Source/HBIOS/cfg_scz180.asm

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

4
Source/HBIOS/cfg_una.asm

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

6
Source/HBIOS/cfg_zeta.asm

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

6
Source/HBIOS/cfg_zeta2.asm

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

10
Source/HBIOS/dbgmon.asm

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

92
Source/HBIOS/hbios.asm

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

2828
Source/HBIOS/romldr.asm

File diff suppressed because it is too large

12
Source/HBIOS/simrtc.asm

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

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

5
Source/HBIOS/usrrom.asm

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

50
Source/HBIOS/util.asm

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

6
Source/ver.inc

@ -1,5 +1,5 @@
#DEFINE RMJ 3
#DEFINE RMN 0
#DEFINE RUP 1
#DEFINE RMN 1
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.0.1"
#DEFINE BIOSVER "3.1-pre.0"

6
Source/ver.lib

@ -1,7 +1,7 @@
rmj equ 3
rmn equ 0
rup equ 1
rmn equ 1
rup equ 0
rtp equ 0
biosver macro
db "3.0.1"
db "3.1-pre.0"
endm

Loading…
Cancel
Save