Browse Source

Merge remote-tracking branch 'upstream/dev' into duart

pull/133/head
Chris Odorjan 6 years ago
parent
commit
dce4496393
  1. 17
      Doc/ChangeLog.txt
  2. BIN
      Doc/RomWBW Applications.pdf
  3. BIN
      Doc/RomWBW Architecture.pdf
  4. BIN
      Doc/RomWBW Disk Catalog.pdf
  5. BIN
      Doc/RomWBW Getting Started.pdf
  6. 9
      ReadMe.md
  7. 9
      ReadMe.txt
  8. 6
      Source/Apps/Tune/Build.cmd
  9. 14
      Source/Apps/Tune/Makefile
  10. 584
      Source/Apps/Tune/Tune.asm
  11. 33
      Source/Apps/Tune/cli.inc
  12. 4
      Source/Apps/Tune/cpm.inc
  13. 15
      Source/Apps/Tune/hbios.inc
  14. 175
      Source/Apps/Tune/printing.inc
  15. 39
      Source/Apps/Tune/strings.inc
  16. 60
      Source/Apps/Tune/timing.inc
  17. 4
      Source/Apps/Tune/tune.inc
  18. 42
      Source/CBIOS/cbios.asm
  19. 101
      Source/Doc/Architecture.md
  20. 828
      Source/Doc/Catalog.md
  21. 10
      Source/Doc/GettingStarted.md
  22. 2
      Source/HBIOS/Config/RCZ80_std.asm
  23. 26
      Source/HBIOS/audio.inc
  24. 5
      Source/HBIOS/cfg_dyno.asm
  25. 5
      Source/HBIOS/cfg_ezz80.asm
  26. 5
      Source/HBIOS/cfg_master.asm
  27. 5
      Source/HBIOS/cfg_mk4.asm
  28. 5
      Source/HBIOS/cfg_n8.asm
  29. 5
      Source/HBIOS/cfg_rcz180.asm
  30. 5
      Source/HBIOS/cfg_rcz80.asm
  31. 5
      Source/HBIOS/cfg_sbc.asm
  32. 5
      Source/HBIOS/cfg_scz180.asm
  33. 5
      Source/HBIOS/cfg_zeta.asm
  34. 5
      Source/HBIOS/cfg_zeta2.asm
  35. 13
      Source/HBIOS/ctc.asm
  36. 2
      Source/HBIOS/cvdu.asm
  37. 112
      Source/HBIOS/hbios.asm
  38. 15
      Source/HBIOS/hbios.inc
  39. 173
      Source/HBIOS/romldr.asm
  40. 588
      Source/HBIOS/sn76489.asm
  41. 114
      Source/HBIOS/std.asm
  42. 88
      Source/HBIOS/tms.asm
  43. 11
      Source/HBIOS/util.asm
  44. 2
      Source/HBIOS/vdu.asm
  45. 2
      Source/HBIOS/vga.asm
  46. BIN
      Source/Images/d_cpm22/u0/KERCPM22.COM
  47. BIN
      Source/Images/d_cpm3/u0/KERCPM3.COM
  48. BIN
      Source/Images/d_nzcom/u0/KERCPM22.COM
  49. BIN
      Source/Images/d_zpm3/u15/kercpm3.com
  50. BIN
      Source/Images/d_zsdos/u0/KERCPM22.COM
  51. 2
      Source/Makefile
  52. 2
      Source/ver.inc
  53. 2
      Source/ver.lib
  54. 20
      Tools/Makefile.inc

17
Doc/ChangeLog.txt

@ -9,6 +9,11 @@ Version 3.1
- WBW: Support use of CTC for SIO baud rate divisors
- WBW: Updated IDE and PPIDE drivers to improve old CF Card compatibility
- WBW: Support TIMER mode in CTC driver
- DEN: Added sound driver support
- DEN: Added SN76489 sound chip driver
- M?O: RomWBW Disk Catalog document
- DEN: Updated TMS to optionally trigger SYSTIMER interrupt (TMSTIMENABLE)
- J?M: Updated KERMIT applications with VT100 terminal support
Version 3.0.1
-------------
@ -280,7 +285,7 @@ Version 2.0
- DWG: Entire new suite of Apps written in Aztec C
- DWG: BANKER.COM - displays bank identification and version information
- DWG: CPMNAME.COM - displays CBIOS header data and SYSCFG data, names and vaues
- DWG: CHARS.COM - displays ascii map as reference
- DWG: CHARS.COM - displays ascii map as reference
- DWG: CLS.COM - clears screen
- DWG: LABEL.COM - displays and changes drive labels for drives with reserved tracks
- DWG: MAP.COM - like old map command, displays drives and logical unit labels and changes LU values
@ -312,7 +317,7 @@ Version 1.5.1
- WBW: Added ZSDOS clock drivers (see Support\Clock)
- WBW: Overhaul of ZSystem ROM Disk (see Doc\ZSystem.txt)
- WBW: Update PropIO ANSI emulation for compatiblity with ASSIGN
- DWG: Added version tags to all applications, and IDENT program to
- DWG: Added version tags to all applications, and IDENT program to
check version of utilities.
- DWG: Added MULTIFMT program which prepares new media for use by
initializing the metadata and clearing the directory sectors of
@ -322,8 +327,8 @@ Version 1.5.1
- DWG: ANALYSE and HELLO programs removed from ROM due space concerns
- DWG: Additional macro librarties added supporting program identification
(IDENTITY.LIB/ASM) and access to drive metadata (METADATA.LIB/ASM),
and realtime selection of logical units from within new application
programs (LOGICALS.LIB/ASM).
and realtime selection of logical units from within new application
programs (LOGICALS.LIB/ASM).
- DWG: Added TERM_VT52 for VDU compatbility, all apps now compliant
- DGG: Contributed Linux build (see Doc\BuildLinux.txt)
@ -351,7 +356,7 @@ Version 1.4
- DWG: Add various .SUB files used for application maintenance
- DWG: Enhanced utility building .SUB files to only contain libs utilitized
- DWG: Add BUILD.SUB to build all applications and DEVFILES.LBR
- DWG: Add/update RMAC macro libraries used in Apps -
- DWG: Add/update RMAC macro libraries used in Apps -
- DWG: BIOSHDR, STDLIB, STRCPY, STRLEN, CPMBIOS, CPMBDOS, TERMINAL, HARDWARE,
- DWG: CPMAPPL, GLOBALS, ATOI, LUBIND, APPLVERS, MEMORY(memcpy,memset), PORTAB
- DWG: Add/Repair BIOS support for Boot Drive login during CP/M Coldstart
@ -370,7 +375,7 @@ Version 1.4
- DWG: Add LABEL utility to insert label into drive/slice metadata
- DWG: Add 16 char label field to metadata
- DWG: ASSIGN utility displays and manipulates DPH/DPB & logical unit parameters
- DWG/WBW: Collaborated on design of Logical Unit DPH enhancemnt
- DWG/WBW: Collaborated on design of Logical Unit DPH enhancemnt
- WBW: Proposed MAP utility functionality
- WBW: Implement slice selection API for DSK devices
- WBW: Record boot drive in config memory at load time

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Architecture.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Getting Started.pdf

Binary file not shown.

9
ReadMe.md

@ -3,7 +3,7 @@
## Z80/Z180 System Software
Version 3.1 Pre-release
Wednesday 15 April 2020
Thursday 23 April 2020
Wayne Warthen <wwarthen@gmail.com>
@ -1141,8 +1141,13 @@ applications are no longer provided.
list of general code enhancements.
- Phillip Stevens contributed support for FreeRTOS.
- Curt Mayer contributed the Linux / MacOS build process.
- UNA BIOS and FDISK80 is a product of John Coffman.
- UNA BIOS and FDISK80 are the products of John Coffman.
- FLASH4 is a product of Will Sowerbutts.
- CLRDIR is a product of Max Scane.
- Tasty Basic is a product of Dimitri Theulings.
- Dean Netherton contributed the sound driver interface and the
SN76489 sound driver.
- The RomWBW Disk Catalog document was produced by Mykl Orders.
Contributions of all kinds to RomWBW are very welcome.

9
ReadMe.txt

@ -3,7 +3,7 @@ RomWBW
Z80/Z180 System Software
Version 3.1 Pre-release
Wednesday 15 April 2020
Thursday 23 April 2020
Wayne Warthen wwarthen@gmail.com
@ -1173,8 +1173,13 @@ applications are no longer provided.
list of general code enhancements.
- Phillip Stevens contributed support for FreeRTOS.
- Curt Mayer contributed the Linux / MacOS build process.
- UNA BIOS and FDISK80 is a product of John Coffman.
- UNA BIOS and FDISK80 are the products of John Coffman.
- FLASH4 is a product of Will Sowerbutts.
- CLRDIR is a product of Max Scane.
- Tasty Basic is a product of Dimitri Theulings.
- Dean Netherton contributed the sound driver interface and the
SN76489 sound driver.
- The RomWBW Disk Catalog document was produced by Mykl Orders.
Contributions of all kinds to RomWBW are very welcome.

6
Source/Apps/Tune/Build.cmd

@ -5,9 +5,11 @@ set TOOLS=../../../Tools
set PATH=%TOOLS%\tasm32;%PATH%
set TASMTABS=%TOOLS%\tasm32
tasm -t180 -g3 -fFF Tune.asm Tune.com Tune.lst
tasm -t180 -g3 -fFF -dWBW Tune.asm Tune.com Tune.lst
tasm -t180 -g3 -fFF -dZX Tune.asm Tunezx.com Tunezx.lst
tasm -t180 -g3 -fFF -dMSX Tune.asm Tunemsx.com Tunemsx.lst
if errorlevel 1 goto :eof
copy /Y Tune.com ..\..\..\Binary\Apps\
copy /Y Tune*.com ..\..\..\Binary\Apps\
copy /Y Tunes\*.* ..\..\..\Binary\Apps\Tunes\

14
Source/Apps/Tune/Makefile

@ -1,11 +1,19 @@
OBJECTS = Tune.com
OBJECTS = Tune.com Tunezx.com Tunemsx.com
DEST = ../../../Binary/Apps
TOOLS = ../../../Tools
include $(TOOLS)/Makefile.inc
Tune.com: Tune.asm
$(TASM) Tune.asm Tune.com
DEPS := Tune.asm $(shell find . -name '*.inc')
Tune.com: $(DEPS)
$(TASM) -dWBW Tune.asm Tune.com
Tunezx.com: $(DEPS)
$(TASM) -dZX Tune.asm Tunezx.com
Tunemsx.com: $(DEPS)
$(TASM) -dMSX Tune.asm Tunemsx.com
all::
mkdir -p $(DEST)/Tunes

584
Source/Apps/Tune/Tune.asm

@ -39,6 +39,7 @@
; 2019-11-21 [WBW] Added table-driven configuration
; 2020-02-11 [WBW] Made hardware config & detection more flexible
; 2020-03-29 [WBW] Fix error in Z180 I/O W/S bracketing
; 2020-04-25 [DEN] Added support to use HBIOS Sound driver
;_______________________________________________________________________________
;
; ToDo:
@ -49,43 +50,63 @@
; Main program
;===============================================================================
;
RESTART .EQU $0000 ; CP/M restart vector
BDOS .EQU $0005 ; BDOS invocation vector
;
IDENT .EQU $FFFE ; loc of RomWBW HBIOS ident ptr
;
RMJ .EQU 3 ; intended CBIOS version - major
RMN .EQU 1 ; intended CBIOS version - minor
;
BF_SYSVER .EQU $F1 ; BIOS: VER function
BF_SYSGET .EQU $F8 ; HBIOS: SYSGET function
;
FCB .EQU $5C ; Location of default FCB
;
#include "hbios.inc"
#include "cpm.inc"
#include "tune.inc"
HEAPEND .EQU $C000 ; End of heap storage
;
TYPPT2 .EQU 1 ; FILTYP value for PT2 sound file
TYPPT3 .EQU 2 ; FILTYP value for PT3 sound file
TYPMYM .EQU 3 ; FILTYP value for MYM sound file
;
;
;
;Conditional assembly - use -D switch on TASM or uz80as assembler to control
_ZX .EQU 0 ; 1) Version of ROUT (ZX or MSX standards)
_MSX .EQU 0
_WBW .EQU 0
HBIOS .EQU 0
#IFDEF ZX
_ZX .SET 1
#ELSE
#IFDEF MSX
_MSX .SET 1
#ELSE
_WBW .SET 1
#ENDIF
#ENDIF
CurPosCounter .EQU 0 ; 2) Current position counter at (START+11)
ACBBAC .EQU 0 ; 3) Allow channels allocation bits at (START+10)
LoopChecker .EQU 1 ; 4) Allow loop checking and disabling
Id .EQU 1 ; 5) Insert official identificator
#DEFINE Release "1" ; Release number
.ORG $0100
;
CALL CRLF
LD DE,MSGBAN ; Point to banner message
CALL PRTSTR ; Print message
;
; Check BIOS and version
PRTCRLF
PRTSTRDE(MSGBAN) ; Print to banner message
CALL CLI_ABRT_IF_OPT_FIRST
CALL CLI_HAVE_HBIOS_SWITCH
JP CONTINUE
CONTINUE:
; Check BIOS and version
CALL IDBIO ; Identify hardware BIOS
CP 1 ; RomWBW HBIOS?
JP NZ,ERRBIO ; If not, handle BIOS error
LD A,RMJ << 4 | RMN ; Expected HBIOS ver
JP NZ, ERRBIO ; If not, handle BIOS error
LD A, RMJ << 4 | RMN ; Expected HBIOS ver
CP D ; Compare with result above
JP NZ,ERRBIO ; Handle BIOS error
LD A,L ; Platform id to A
JP NZ, ERRBIO ; Handle BIOS error
LD A, L ; Platform id to A
LD (CURPLT),A ; Save as current platform id
;
LD A, (HBIOSMD)
OR A
JR NZ, TSTTIMER ; skip hardware check if using hbios
LD HL,CFGTBL ; Point to start of config table
CFGSEL:
LD A,$FF ; End of table marker
@ -111,7 +132,7 @@ CFGSEL:
LD C,A ; Put in C for I/O
LD A,$FF ; Value to activate card
OUT (C),A ; Write value to ACR
;
;
PROBE:
; Test for hardware (sound chip detection)
LD DE,(PORTS) ; D := RDAT, E := RSEL
@ -137,21 +158,9 @@ MAT:
LD DE,(DESC) ; Load hardware description pointer
CALL PRTSTR ; Print description
;
; Test for timer running to determine if it can be used for delay
LD B,BF_SYSGET ; HBIOS: GET function
LD C,$D0 ; TIMER subfunction
RST 08 ; DE:HL := current tick count
LD A,L ; DE:HL == 0?
OR H
OR E
OR D
LD A,0 ; Assume no timer
LD DE,MSGDLY ; Delay mode msg
JR Z,SETDLY ; If tick count is zero, no timer active
LD A,$FF ; Value for timer active
LD DE,MSGTIM ; Timer mode msg
SETDLY:
LD (WMOD),A ; Save wait mode
TSTTIMER:
CALL PROBETIMER
CALL PRTSTR ; Print it
;
; Get CPU speed & type from RomWBW HBIOS and compute quark delay factor
@ -170,7 +179,7 @@ SETDLY:
LD DE,HEAP+1 ; Set dest to next byte
LD BC,HEAPEND-HEAP-1 ; Size of heap except first byte
LDIR ; Propagate zero to rest of heap
;
;
; Check sound filename (must be *.PT2, *.PT3, or *.MYM)
LD A,(FCB+1) ; Get first char of filename
CP ' ' ; Compare to blank
@ -179,7 +188,7 @@ SETDLY:
CP ' ' ; is blanks
JR NZ,HASEXT ; then assume
LD A,'P' ; type PT3.
LD (FCB+9),A
LD (FCB+9),A
LD A,'T' ; Fill in
LD (FCB+10),A ; the file
LD A,'3' ; extension
@ -214,13 +223,15 @@ CHKMYM LD A,(FCB+9) ; Extension char 1
_SET LD A,C ; Get file type value
LD (FILTYP),A ; Save file type value
;
CALL CLI_ABRT_UNSUPPFILTYP
; Load sound file
_LD0 LD C,15 ; CPM Open File function
LD DE,FCB ; FCB
CALL BDOS ; Do it
INC A ; Test for error $FF
JP Z,ERRFIL ; Handle file error
;
;
LD A,(FILTYP) ; Get file type
LD HL,MDLADDR ; Assume load address
LD (DMA),HL ; ... for PTx files
@ -240,19 +251,19 @@ _LD LD HL,(DMA) ; Get load address
POP DE ; Restore current DMA to DE
LD C,26 ; CPM Set DMA function
CALL BDOS ; Read next 128 bytes
;
;
LD C,20 ; CPM Read Sequential function
LD DE,FCB ; FCB
CALL BDOS ; Read next 128 bytes
OR A ; Set flags to check EOF
JR NZ,_LDX ; Non-zero is EOF
JR Z,_LD ; Load loop
;
;
_LDX LD C,16 ; CPM Close File function
LD DE,FCB ; FCB
CALL BDOS ; Do it
;
; Play loop
;
; Play loop
CALL CRLF2 ; Formatting
LD DE,MSGPLY ; Playing message
CALL PRTSTR ; Print message
@ -319,7 +330,7 @@ waitvb call WAITQ
ld (played),a
;call PRTDOT
jr mymlp
;
;
EXIT CALL START+8 ; Mute audio
;CALL NORMCPU
;CALL CRLF2 ; Formatting
@ -327,43 +338,12 @@ EXIT CALL START+8 ; Mute audio
CALL PRTSTR ; Print message
CALL CRLF ; Formatting
JP 0 ; Exit the easy way
;
; Wait for quark play time. Can use hardware timer if
; supported by hardware or simple delay loop otherwise.
; Delay loop requires QDLY to be pre-set to to achieve
; optimal 20ms wait time.
;
WAITQ LD A,(WMOD) ; Get delay mode
OR A ; Set flags
JR Z,DLY ; Delay mode
;
; Timer loop
CALL TIM2 ; Read timer LSB into A
LD C,A ; Init prev value
TIM1 PUSH BC ; Save prev value
CALL TIM2 ; Read timer LSB into A
POP BC ; Recover prev value
CP C ; Compare to prev
RET NZ ; Done if changed
JR TIM1 ; Else, loop
;
TIM2 LD B,$F8 ; BIOS SYSGET function
LD C,$D0 ; TIMER sub-function
RST 08 ; Call BIOS
LD A,L ; MSB to A
RET ; Return to loop
;
; Delay spin loop (40 tstates per loop)
DLY LD BC,(QDLY) ; Load quark delay factor
DLY1 DEC BC ; [6]
NOP ; [4]
NOP ; [4]
NOP ; [4]
NOP ; [4]
LD A,B ; [4]
OR C ; [4]
JP NZ,DLY1 ; [10]
RET
#include "timing.inc"
#include "strings.inc"
#include "cli.inc"
#include "printing.inc"
;
; Get a keystroke from CPM
;
@ -410,7 +390,7 @@ IDBIO1:
LD B,BF_SYSVER ; HBIOS: VER function
LD C,0 ; required reserved value
RST 08 ; DE := version, L := platform id
;
;
LD A,1 ; HBIOS BIOS id = 1
RET ; and done
;
@ -482,190 +462,7 @@ NORMIO:
LD A,(DCSAV) ; Get saved DCNTL value
OUT (C),A ; And restore it
RET
;
; Print character in A without destroying any registers
;
PRTCHR:
PUSH BC ; save registers
PUSH DE
PUSH HL
LD E,A ; character to print in E
LD C,$02 ; BDOS function to output a character
CALL BDOS ; do it
POP HL ; restore registers
POP DE
POP BC
RET
;
PRTDOT:
;
; shortcut to print a dot preserving all regs
PUSH AF ; save af
LD A,'.' ; load dot char
CALL PRTCHR ; print it
POP AF ; restore af
RET ; done
;
PRTCR:
;
; shortcut to print a dot preserving all regs
PUSH AF ; save af
LD A,13 ; load CR value
CALL PRTCHR ; print it
POP AF ; restore af
RET ; done
;
; Print a zero terminated string at (DE) without destroying any registers
;
PRTSTR:
PUSH DE
;
PRTSTR1:
LD A,(DE) ; get next char
OR A
JR Z,PRTSTR2
CALL PRTCHR
INC DE
JR PRTSTR1
;
PRTSTR2:
POP DE ; restore registers
RET
;
; Print the value in A in hex without destroying any registers
;
PRTHEX:
PUSH AF ; save AF
PUSH DE ; save DE
CALL HEXASCII ; convert value in A to hex chars in DE
LD A,D ; get the high order hex char
CALL PRTCHR ; print it
LD A,E ; get the low order hex char
CALL PRTCHR ; print it
POP DE ; restore DE
POP AF ; restore AF
RET ; done
;
; print the hex word value in bc
;
PRTHEXWORD:
PUSH AF
LD A,B
CALL PRTHEX
LD A,C
CALL PRTHEX
POP AF
RET
;
; print the hex dword value in de:hl
;
PRTHEX32:
PUSH BC
PUSH DE
POP BC
CALL PRTHEXWORD
PUSH HL
POP BC
CALL PRTHEXWORD
POP BC
RET
;
; Convert binary value in A to ascii hex characters in DE
;
HEXASCII:
LD D,A ; save A in D
CALL HEXCONV ; convert low nibble of A to hex
LD E,A ; save it in E
LD A,D ; get original value back
RLCA ; rotate high order nibble to low bits
RLCA
RLCA
RLCA
CALL HEXCONV ; convert nibble
LD D,A ; save it in D
RET ; done
;
; Convert low nibble of A to ascii hex
;
HEXCONV:
AND $0F ; low nibble only
ADD A,$90
DAA
ADC A,$40
DAA
RET
;
; Print value of A or HL in decimal with leading zero suppression
; Use prtdecb for A or prtdecw for HL
;
PRTDECB:
PUSH HL
LD H,0
LD L,A
CALL PRTDECW ; print it
POP HL
RET
;
PRTDECW:
PUSH AF
PUSH BC
PUSH DE
PUSH HL
CALL PRTDEC0
POP HL
POP DE
POP BC
POP AF
RET
;
PRTDEC0:
LD E,'0'
LD BC,-10000
CALL PRTDEC1
LD BC,-1000
CALL PRTDEC1
LD BC,-100
CALL PRTDEC1
LD C,-10
CALL PRTDEC1
LD E,0
LD C,-1
PRTDEC1:
LD A,'0' - 1
PRTDEC2:
INC A
ADD HL,BC
JR C,PRTDEC2
SBC HL,BC
CP E
RET Z
LD E,0
CALL PRTCHR
RET
;
; Start a new line
;
CRLF2:
CALL CRLF ; two of them
CRLF:
PUSH AF ; preserve AF
LD A,13 ; <CR>
CALL PRTCHR ; print it
LD A,10 ; <LF>
CALL PRTCHR ; print it
POP AF ; restore AF
RET
;
; ADD HL,A
;
; A REGISTER IS DESTROYED!
;
ADDHLA:
ADD A,L
LD L,A
RET NC
INC H
RET
;
ERRBIO: ; Invalid BIOS or version
LD DE,MSGBIO
@ -712,28 +509,28 @@ CFGSIZ .EQU 8
CFGTBL: ; PLT RSEL RDAT RIN Z180 ACR
; DESC
.DB $01, $9A, $9B, $9A, $FF, $9C ; SBC W/ SCG
.DW HWSTR_SCG
;
.DW HWSTR_SCG
;
.DB $04, $9C, $9D, $9C, $40, $FF ; N8 W/ ONBOARD PSG
.DW HWSTR_N8
;
.DW HWSTR_N8
;
.DB $05, $9A, $9B, $9A, $40, $9C ; MK4 W/ SCG
.DW HWSTR_SCG
;
.DW HWSTR_SCG
;
.DB $07, $D8, $D0, $D8, $FF, $FF ; RCZ80 W/ RC SOUND MODULE (EB)
.DW HWSTR_RCEB
;
.DW HWSTR_RCEB
;
.DB $07, $D1, $D0, $D0, $FF, $FF ; RCZ80 W/ RC SOUND MODULE (MF)
.DW HWSTR_RCMF
;
;
.DB $08, $68, $60, $68, $C0, $FF ; RCZ180 W/ RC SOUND MODULE (EB)
.DW HWSTR_RCEB
;
.DW HWSTR_RCEB
;
.DB $08, $61, $60, $60, $C0, $FF ; RCZ180 W/ RC SOUND MODULE (MF)
.DW HWSTR_RCMF
;
.DB $09, $D8, $D0, $D8, $FF, $FF ; EZZ80 W/ RC SOUND MODULE (EB)
.DW HWSTR_RCEB
.DW HWSTR_RCEB
;
.DB $09, $D1, $D0, $D0, $FF, $FF ; EZZ80 W/ RC SOUND MODULE (EB)
.DW HWSTR_RCMF
@ -765,15 +562,17 @@ CMRSAV .DB 0 ; for saving original Z180 CMR value
;
DMA .DW 0 ; Working DMA
FILTYP .DB 0 ; Sound file type (TYPPT2, TYPPT3, TYPMYM)
;
TMP .DB 0 ; work around use of undocumented Z80
;
MSGBAN .DB "Tune Player for RomWBW v2.5, 29-Mar-2020",0
TMP .DB 0 ; work around use of undocumented Z80
HBIOSOPT: .DB "--HBIOS", 0
HBIOSMD .DB 0 ; NON-ZERO IF USING HBIOS SOUND DRIVER, ZERO OTHERWISE
MSGBAN .DB "Tune Player for RomWBW v3.1, 25-Apr-2020",0
MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10
.DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10
.DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10
.DB "Usage: TUNE <filename>.[PT2|PT3|MYM]",0
.DB "Usage: TUNE <filename>.[PT2|PT3|MYM] [--hbios]",0
MSGBIO .DB "Incompatible BIOS or version, "
.DB "HBIOS v", '0' + RMJ, ".", '0' + RMN, " required",0
MSGPLT .DB "Hardware error, system not supported!",0
@ -785,11 +584,14 @@ MSGTIM .DB ", timer mode",0
MSGDLY .DB ", delay mode",0
MSGPLY .DB "Playing...",0
MSGEND .DB " Done",0
MSGERR .DB "App Error", 0
;
HWSTR_SCG .DB "SCG ECB Board",0
HWSTR_N8 .DB "N8 Onboard Sound",0
HWSTR_RCEB .DB "RC2014 Sound Module (EB)",0
HWSTR_RCMF .DB "RC2014 Sound Module (MF)",0
MSGUNSUP .db "MYM FILES NOT SUPPORTED YET\r\n", 0
;
;===============================================================================
; PTx Player Routines
@ -799,23 +601,6 @@ HWSTR_RCMF .DB "RC2014 Sound Module (MF)",0
;(c)2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>
;http://bulba.untergrund.net (http://bulba.at.kz)
;Release number
;Release .EQU "1"
#DEFINE Release "1"
;Conditional assembly
;1) Version of ROUT (ZX or MSX standards)
ZX .EQU 0
MSX .EQU 0
WBW .EQU 1
;2) Current position counter at (START+11)
CurPosCounter .EQU 0
;3) Allow channels allocation bits at (START+10)
ACBBAC .EQU 0
;4) Allow loop checking and disabling
LoopChecker .EQU 1
;5) Insert official identificator
Id .EQU 1
;Features
;--------
@ -843,7 +628,7 @@ Id .EQU 1
;into RAM or INIT subprogram was not called before.
;Call MUTE or INIT one more time to mute sound after stopping
;playing
;playing
;ORG $C000
;Test codes (commented)
@ -1128,7 +913,7 @@ TP_2 LD A,H
#IF CurPosCounter
LD (CurPos),A
#ENDIF
#ENDIF
LD HL,VARS
@ -1441,7 +1226,7 @@ PD_VOL RRCA
RRCA
LD (IX-12+Volume),A
JR PD_LP2
PD_EOff LD (IX-12+Env_En),A
LD (IX-12+PsInOr),A
JR PD_LP2
@ -1660,7 +1445,7 @@ C_DELAY LD A,(BC)
INC BC
LD (Delay),A
RET
SETENV LD (IX-12+Env_En),E
LD (AYREGS+EnvTp),A
LD A,(BC)
@ -1783,7 +1568,7 @@ CH_SMPS LD (IX+PsInSm),A
;Convert PT2 sample to PT3
;PT2 PT3
SamCnv POP HL ;BIT 2,C JR e_
POP HL
POP HL
LD H,B
JR NZ,$+8
EX DE,HL
@ -2130,14 +1915,14 @@ RxCA2 OR E
ABC
#ENDIF
#IF ZX
#IF _ZX
XOR A
LD DE,$FFBF
LD BC,$FFFD
LD HL,AYREGS
LOUT OUT (C),A
LD B,E
OUTI
OUTI
LD B,D
INC A
CP 13
@ -2151,14 +1936,14 @@ LOUT OUT (C),A
RET
#ENDIF
#IF MSX
#IF _MSX
;MSX version of ROUT (c)Dioniso
XOR A
LD C,$A0
LD HL,AYREGS
LOUT OUT (C),A
INC C
OUTI
OUTI
DEC C
INC A
CP 13
@ -2172,32 +1957,113 @@ LOUT OUT (C),A
RET
#ENDIF
#IF WBW
#IF _WBW
ISHBIOS
JR NZ, PLAYVIAHBIOS
DI
CALL SLOWIO
LD DE,(PORTS) ; D := RDAT, E := RSEL
XOR A ; start with reg 0
LD C,E ; point to address port
LD HL,AYREGS ; start of value list
LOUT OUT (C),A ; select register
LD C,D ; point to data port
OUTI ; write (HL) to data port, bump HL
LD C,E ; point to address port
INC A ; next register
CP 13 ; reg 13?
JR NZ,LOUT ; if not, loop
OUT (C),A ; select register 13
LD A,(HL) ; get value for register 13
AND A ; set flags
JP M,LOUT2 ; if bit 7 set, return w/o writing value
LD C,D ; select data port
OUT (C),A ; write value to register 13
CALL SLOWIO
LD DE, (PORTS) ; D := RDAT, E := RSEL
XOR A ; START WITH REG 0
LD C, E ; POINT TO ADDRESS PORT
LD HL, AYREGS ; START OF VALUE LIST
LOUT OUT (C), A ; SELECT REGISTER
LD C, D ; POINT TO DATA PORT
OUTI ; WRITE (HL) TO DATA PORT, BUMP HL
LD C, E ; POINT TO ADDRESS PORT
INC A ; NEXT REGISTER
CP 13 ; REG 13?
JR NZ, LOUT ; IF NOT, LOOP
OUT (C), A ; SELECT REGISTER 13
LD A, (HL) ; GET VALUE FOR REGISTER 13
AND A ; SET FLAGS
JP M, LOUT2 ; IF BIT 7 SET, RETURN W/O WRITING VALUE
LD C, D ; SELECT DATA PORT
OUT (C), A ; WRITE VALUE TO REGISTER 13
LOUT2
CALL NORMIO
CALL NORMIO
EI
RET ; And done
RET ; AND DONE
PLAYVIAHBIOS:
LD B, BF_SNDVOL
LD C, 0
LD H, 0
LD A, (AYREGS + AmplA)
AND $0F
rlca
rlca
rlca
rlca
LD L, A
RST 08
LD B, BF_SNDPIT
LD C, 0
LD HL, (AYREGS+TonA)
ld a, h
AND $3F
LD H, A
RST 08
LD B, BF_SNDPLAY
LD C, 0
LD D, 0
RST 08
LD B, BF_SNDVOL
LD C, 0
LD H, 0
LD A, (AYREGS + AmplB)
AND $0F
rlca
rlca
rlca
rlca
LD L, A
RST 08
LD B, BF_SNDPIT
LD C, 0
LD HL, (AYREGS+TonB)
ld a, h
AND $3F
LD H, A
RST 08
LD B, BF_SNDPLAY
LD C, 0
LD D, 1
RST 08
LD B, BF_SNDVOL
LD C, 0
LD H, 0
LD A, (AYREGS + AmplC)
AND $0F
rlca
rlca
rlca
rlca
LD L, A
RST 08
LD B, BF_SNDPIT
LD C, 0
LD HL, (AYREGS+TonC)
ld a, h
AND $3F
LD H, A
RST 08
LD B, BF_SNDPLAY
LD C, 0
LD D, 2
RST 08
RET
#ENDIF
#IF ACBBAC
CHTABLE .EQU $-4
.DB 4,5,15,%001001,0,7,7,%100100
@ -2518,7 +2384,7 @@ endext: ld (dest1),ix
ld bc,(rows)
or a
sbc hl,bc
; jr c,noend ; If rows>played rows then exit
; exx ; Otherwise restart
; ld e,1
@ -2553,9 +2419,16 @@ zero: djnz onebit
ret
; *** Update PSG registers
upsg: ld a,(WMOD) ; if WMOD = 1, CPU is z180
upsg:
ISHBIOS
JR Z, upsg0
ERRWITHMSG(MSGERR)
upsg0:
ld a,(WMOD) ; if WMOD = 1, CPU is z180
or a ; set flags
jr z,upsg1 ; skip z180 stuff
di
call SLOWIO
@ -2563,29 +2436,29 @@ upsg1: ld hl,(psource)
ld de,(PORTS) ; E := RSEL, D := RDAT
xor a
psglp: ld c,e ; C := RSEL
out (c),a ; Select register
ld c,d ; C := RDAT
psglp: ld c, e ; C := RSEL
out (c), a ; Select register
ld c, d ; C := RDAT
outi ; Set register value
inc a ; Next register
ld bc,(3*FRAG)-1 ; Bytes to skip before next reg-1
add hl,bc ; Update HL
cp REGS-1 ; Check for next to last register?
jr nz,psglp ; If not, loop
inc a ; Next register
ld bc, (3 * FRAG) - 1 ; Bytes to skip before next reg-1
add hl, bc ; Update HL
cp REGS-1 ; Check for next to last register?
jr nz,psglp ; If not, loop
ld a,$FF ; Prepare to check for $FF value
ld a, $FF ; Prepare to check for $FF value
cp (hl) ; If last reg (13) is $FF
jr z,notrig ; ... then don't output
ld a,13 ; Register 13
ld c,e ; C := RSEL
out (c),a ; Select register
ld c,d ; C := RDAT
jr z, notrig ; ... then don't output
ld a, 13 ; Register 13
ld c, e ; C := RSEL
out (c), a ; Select register
ld c, d ; C := RDAT
outi ; Set register value
notrig: ld hl,(psource)
notrig: ld hl,(psource)
inc hl
ld (psource),hl
ld a,(played)
or a
jr z,endint
@ -2593,9 +2466,10 @@ notrig: ld hl,(psource)
ld (played),a
endint: call NORMIO
ei
ei
ret ; And done
;
; *** Program data
played .db 0 ; VBI counter
dest1 .dw 0 ; Uncompress destination 1

33
Source/Apps/Tune/cli.inc

@ -0,0 +1,33 @@
CLI_ABRT_IF_OPT_FIRST:
LD A, (FCB+1)
CP '-' ; OPTION FIRST OR - MISSING FILENAME?
JP Z, ERRCMD ; SHOW USAGE
RET
CLI_HAVE_HBIOS_SWITCH:
LD HL, CLIARGS ; TEST FOR --HBIOS ON COMNMAND LINE
LD DE, HBIOSOPT
CALL STRINDEX
JR NZ, CLI_HAVE_HBIOS_SWITCH1
OR $FF ; IS NOT HBIOS
LD (HBIOSMD), A
RET
CLI_HAVE_HBIOS_SWITCH1:
AND 0 ; IS HBIOS
LD (HBIOSMD), A
RET
CLI_ABRT_UNSUPPFILTYP:
PUSH AF
ISHBIOS
JR Z, CLI_ABRT_UNSUPPFILTYP1
POP AF
CP TYPMYM
RET NZ
ERRWITHMSG(MSGUNSUP) ; EXIT WITH UNSUPPORTED FILE TYPE MESSAGE
CLI_ABRT_UNSUPPFILTYP1:
POP AF
RET

4
Source/Apps/Tune/cpm.inc

@ -0,0 +1,4 @@
CLIARGS .EQU $81
RESTART .EQU $0000 ; CP/M restart vector
BDOS .EQU $0005 ; BDOS invocation vector
FCB .EQU $5C ; Location of default FCB

15
Source/Apps/Tune/hbios.inc

@ -0,0 +1,15 @@
IDENT .EQU $FFFE ; loc of RomWBW HBIOS ident ptr
;
RMJ .EQU 3 ; intended CBIOS version - major
RMN .EQU 1 ; intended CBIOS version - minor
;
BF_SYSVER .EQU $F1 ; BIOS: VER function
BF_SYSGET .EQU $F8 ; HBIOS: SYSGET function
;
BF_SND .EQU $50
BF_SNDRESET .EQU BF_SND + 0 ; RESET SOUND SYSTEM
BF_SNDVOL .EQU BF_SND + 1 ; REQUEST SOUND VOL - D IS CHANNEL, E CONTAINS VOLUME (255 MAX, 0 SILENT) - SCALED AS REQUIRED BY DRIVER (EG: MAPS TO JUST 4 BIT RESOLUTION FOR SN76489)
BF_SNDPIT .EQU BF_SND + 2 ; REQUEST SOUND PITCH - D IS CHANNEL, HL CONTAINS PITCH (0 LOWEST NOTE, FFFF HIGHEST NOTE) - SCALED BY DRIVER (EG: MAPS TO JUST 10 BITS FOR SN76489 )
BF_SNDPLAY .EQU BF_SND + 4 ; INITIATE THE REQUESTED SOUND COMMAND
BF_SNDQUERY .EQU BF_SND + 5 ; D IS CHANNEL, E IS SUBCOMMAND

175
Source/Apps/Tune/printing.inc

@ -0,0 +1,175 @@
;
; Print character in A without destroying any registers
;
PRTCHR:
PUSH BC ; save registers
PUSH DE
PUSH HL
LD E,A ; character to print in E
LD C,$02 ; BDOS function to output a character
CALL BDOS ; do it
POP HL ; restore registers
POP DE
POP BC
RET
;
PRTDOT:
;
; shortcut to print a dot preserving all regs
PUSH AF ; save af
LD A,'.' ; load dot char
CALL PRTCHR ; print it
POP AF ; restore af
RET ; done
;
PRTCR:
;
; shortcut to print a dot preserving all regs
PUSH AF ; save af
LD A,13 ; load CR value
CALL PRTCHR ; print it
POP AF ; restore af
RET ; done
;
; Print a zero terminated string at (DE) without destroying any registers
;
PRTSTR:
PUSH DE
;
PRTSTR1:
LD A,(DE) ; get next char
OR A
JR Z,PRTSTR2
CALL PRTCHR
INC DE
JR PRTSTR1
;
PRTSTR2:
POP DE ; restore registers
RET
;
; Print the value in A in hex without destroying any registers
;
PRTHEX:
PUSH AF ; save AF
PUSH DE ; save DE
CALL HEXASCII ; convert value in A to hex chars in DE
LD A,D ; get the high order hex char
CALL PRTCHR ; print it
LD A,E ; get the low order hex char
CALL PRTCHR ; print it
POP DE ; restore DE
POP AF ; restore AF
RET ; done
;
; print the hex word value in bc
;
PRTHEXWORD:
PUSH AF
LD A,B
CALL PRTHEX
LD A,C
CALL PRTHEX
POP AF
RET
;
; print the hex dword value in de:hl
;
PRTHEX32:
PUSH BC
PUSH DE
POP BC
CALL PRTHEXWORD
PUSH HL
POP BC
CALL PRTHEXWORD
POP BC
RET
;
; Convert binary value in A to ascii hex characters in DE
;
HEXASCII:
LD D,A ; save A in D
CALL HEXCONV ; convert low nibble of A to hex
LD E,A ; save it in E
LD A,D ; get original value back
RLCA ; rotate high order nibble to low bits
RLCA
RLCA
RLCA
CALL HEXCONV ; convert nibble
LD D,A ; save it in D
RET ; done
;
; Convert low nibble of A to ascii hex
;
HEXCONV:
AND $0F ; low nibble only
ADD A,$90
DAA
ADC A,$40
DAA
RET
;
; Print value of A or HL in decimal with leading zero suppression
; Use prtdecb for A or prtdecw for HL
;
PRTDECB:
PUSH HL
LD H,0
LD L,A
CALL PRTDECW ; print it
POP HL
RET
;
PRTDECW:
PUSH AF
PUSH BC
PUSH DE
PUSH HL
CALL PRTDEC0
POP HL
POP DE
POP BC
POP AF
RET
;
PRTDEC0:
LD E,'0'
LD BC,-10000
CALL PRTDEC1
LD BC,-1000
CALL PRTDEC1
LD BC,-100
CALL PRTDEC1
LD C,-10
CALL PRTDEC1
LD E,0
LD C,-1
PRTDEC1:
LD A,'0' - 1
PRTDEC2:
INC A
ADD HL,BC
JR C,PRTDEC2
SBC HL,BC
CP E
RET Z
LD E,0
CALL PRTCHR
RET
;
; Start a new line
;
CRLF2:
CALL CRLF ; two of them
CRLF:
PUSH AF ; preserve AF
LD A,13 ; <CR>
CALL PRTCHR ; print it
LD A,10 ; <LF>
CALL PRTCHR ; print it
POP AF ; restore AF
RET

39
Source/Apps/Tune/strings.inc

@ -0,0 +1,39 @@
STRINDEX: ; SEARCH FOR STRING AT DE WITHIN STRING AT HL
LD B, 0
LD C, 0
TRYNEXT:
PUSH HL
PUSH DE
CALL STRCMP
POP DE
POP HL
RET Z
INC HL
INC BC
LD A, (HL)
OR A
JR NZ, TRYNEXT
OR $FF ; RETURN NZ
RET
STRCMP: ; COMPARE STRING AT HL WITH DE - RETURN Z IF LIKE
LD A, (DE)
OR A
RET Z
LD B, A
LD A, (HL)
OR A
JR NZ, STRCMP1
OR $FF ; END OF STRING HL - SO NOT FOUND
RET
STRCMP1
CP B
RET NZ
INC HL
INC DE
JR STRCMP

60
Source/Apps/Tune/timing.inc

@ -0,0 +1,60 @@
;
; Wait for quark play time. Can use hardware timer if
; supported by hardware or simple delay loop otherwise.
; Delay loop requires QDLY to be pre-set to to achieve
; optimal 20ms wait time.
;
WAITQ LD A,(WMOD) ; Get delay mode
OR A ; Set flags
JR Z,DLY ; Delay mode
;
; Timer loop
CALL TIM2 ; Read timer LSB into A
LD C,A ; Init prev value
TIM1 PUSH BC ; Save prev value
CALL TIM2 ; Read timer LSB into A
POP BC ; Recover prev value
CP C ; Compare to prev
RET NZ ; Done if changed
JR TIM1 ; Else, loop
;
TIM2 LD B,$F8 ; BIOS SYSGET function
LD C,$D0 ; TIMER sub-function
RST 08 ; Call BIOS
LD A,L ; MSB to A
RET ; Return to loop
;
; Delay spin loop (40 tstates per loop)
DLY LD BC,(QDLY) ; Load quark delay factor
DLY1 DEC BC ; [6]
NOP ; [4]
NOP ; [4]
NOP ; [4]
NOP ; [4]
LD A,B ; [4]
OR C ; [4]
JP NZ,DLY1 ; [10]
RET
;
; Test for timer running to determine if it can be used for delay
; Return string message in DE
; Assigned (WMOD) with 0 if no hardware time, 1 if hardware timer found
;
PROBETIMER:
LD B,BF_SYSGET ; HBIOS: GET function
LD C,$D0 ; TIMER subfunction
RST 08 ; DE:HL := current tick count
LD A,L ; DE:HL == 0?
OR H
OR E
OR D
LD A,0 ; Assume no timer
LD DE,MSGDLY ; Delay mode msg
JR Z,SETDLY ; If tick count is zero, no timer active
LD A,$FF ; Value for timer active
LD DE,MSGTIM ; Timer mode msg
SETDLY:
LD (WMOD),A ; Save wait mode
RET

4
Source/Apps/Tune/tune.inc

@ -0,0 +1,4 @@
#DEFINE ISHBIOS LD A, (HBIOSMD) \ OR A
#DEFINE PRTSTRDE(X) LD DE, X \ CALL PRTSTR
#DEFINE PRTCRLF CALL CRLF
#DEFINE ERRWITHMSG(X) LD DE, X \ JP ERR

42
Source/CBIOS/cbios.asm

@ -2045,7 +2045,7 @@ DEV_INIT:
; PATCH IN CRT: DEVICE
LD A,(HCB + HCB_CRTDEV) ; GET CONSOLE DEVICE
CP $FF ; NUL MEANS NO CRT DEVICE
JR Z,DEV_INIT00 ; IF SO, LEAVE IT ALONE
JR Z,DEV_INIT000 ; IF SO, LEAVE IT ALONE
LD (DEVMAP + 1),A ; CONSOLE CRT
LD (DEVMAP + 13),A ; LIST CRT
;
@ -2054,31 +2054,43 @@ DEV_INIT:
LD B,A ; SAVE IN B
LD A,(HCB + HCB_CONDEV) ; GET CONSOLE DEVICE
CP B ; COMPARE
JR NZ,DEV_INIT00 ; IF DIFFERENT (CRT NOT ACTIVE), LEAVE IOBYTE ALONE
JR NZ,DEV_INIT000 ; IF DIFFERENT (CRT NOT ACTIVE), LEAVE IOBYTE ALONE
LD A,1 ; IF SAME (CRT ACTIVE), SET IOBYTE FOR CON: = CRT:
LD (IOBYTE),A ; STORE IN IOBYTE
LD HL,DEV_INIT1 ; INIT FIRST DEV ASSIGN ADR
JR DEV_INIT00 ; SKIP AHEAD
;
DEV_INIT000:
; CONSOLE IS NOT THE CRT, SO
; ASSIGN CURRENT CONSOLE AS TTY
LD A,(HCB + HCB_CONDEV) ; GET CONSOLE DEVICE
CALL DEV_INIT1 ; ASSIGN AS TTY
;
DEV_INIT00:
; LOOP THRU DEVICES ADDING NON-CRT DEVICES TO DEVMAP
; LOOP THRU DEVICES ADDING DEVICES TO DEVMAP
; CONSOLE DEVICE WAS ALREADY DONE, SO IT IS SKIPPED HERE
LD B,BF_SYSGET ; HBIOS FUNC: GET SYS INFO
LD C,BF_SYSGET_CIOCNT ; SUBFUNC: GET CIO UNIT COUNT
RST 08 ; E := SERIAL UNIT COUNT
LD B,E ; COUNT TO B
LD C,0 ; UNIT INDEX
LD HL,DEV_INIT1 ; POINTER FOR FIRST ENTRY FOUND
DEV_INIT0:
PUSH BC ; SAVE LOOP CONTROL
PUSH HL ; SAVE TARGET
LD B,BF_CIODEVICE ; HBIOS FUNC: GET DEVICE INFO
RST 08 ; D := DEVICE TYPE, E := PHYSICAL UNIT NUMBER
POP HL ; RESTORE TARGET
LD A,D ; DEVICE TYPE TO A
; FIX: BELOW SHOULD TEST THE "TERMINAL" BIT INSTEAD OF CHECKING DEVICE NUMBER
CP CIODEV_TERM ; COMPARE TO FIRST VIDEO DEVICE
POP BC ; RESTORE LOOP CONTROL
;PUSH BC ; SAVE LOOP CONTROL
;PUSH HL ; SAVE TARGET
;LD B,BF_CIODEVICE ; HBIOS FUNC: GET DEVICE INFO
;RST 08 ; D := DEVICE TYPE, E := PHYSICAL UNIT NUMBER
;POP HL ; RESTORE TARGET
;LD A,D ; DEVICE TYPE TO A
;; FIX: BELOW SHOULD TEST THE "TERMINAL" BIT INSTEAD OF CHECKING DEVICE NUMBER
;CP CIODEV_TERM ; COMPARE TO FIRST VIDEO DEVICE
;POP BC ; RESTORE LOOP CONTROL
;LD A,C ; UNIT INDEX TO ACCUM
;;CALL C,JPHL ; DO IT IF DEVICE TYPE < VDU
LD A,(HCB + HCB_CONDEV) ; CURRENT CONSOLE UNIT
CP C ; IS CURRENT CONSOLE?
LD A,C ; UNIT INDEX TO ACCUM
;CALL C,JPHL ; DO IT IF DEVICE TYPE < VDU
CALL JPHL ; DO FOR ANY CHARACTER DEVICE TYPE
CALL NZ,JPHL ; DO IF NOT CURRENT CONSOLE
INC C ; NEXT UNIT
DJNZ DEV_INIT0 ; LOOP TILL DONE
RET ; ALL DONE

101
Source/Doc/Architecture.md

@ -1292,6 +1292,90 @@ codes as described at the start of this section.
`\clearpage`{=latex}
Sound (SND)
------------
### Function 0x50 -- Sound Reset (SNDRESET)
| _Entry Parameters_
| B: 0x50
| C: Audio Device Unit ID
| _Exit Results_
| A: Status (0=OK, else error)
Reset the sound chip. Turn off all sounds and set volume on all
channels to silence.
### Function 0x51 -- Sound Volume (SNDVOL)
| _Entry Parameters_
| B: 0x51
| C: Audio Device Unit ID
| L: Volume (00=Silence, FF=Maximum)
| _Exit Results_
| A: Status (0=OK, else error)
This function sets the sound chip volume parameter. The volume will
be applied when the next SNDPLAY function is invoked.
Note that not all sounds chips implement 256 volume levels. The
driver will scale the volume to the closest possible level the
chip provides.
### Function 0x52 -- Sound Pitch (SNDPIT)
| _Entry Parameters_
| B: 0x52
| C: Audio Device Unit ID
| HL: Pitch (0000=lowest note, FFFF=highest note)
This function sets the sound chip pitch parameter. The pitch will
be applied when the next SNDPLAY function is invoked.
The pitch value is a driver specific value. To play standardized
notes, use the SNDNOTE function.
### Function 0x53 -- Sound Note (SNDNOTE)
| _Entry Parameters_
| B: 0x53
| C: Audio Device Unit ID
| L: Note (0 to 255 quarter notes)
This function sets the sound chip pitch parameter according to
standardized notes.
The value corresponds to standard musical notes. The value allows
for selection of a quarter of a semitone by giving a value between 0
and up to the drivers maximum supported value. The lowest note is (0).
For the SN76490 chip, 0 corresponds to note A1# and the value 249 is
the maximum supported value, and it corresponds to note C7.
### Function 0x54 -- Sound Play (SNDPLAY)
| _Entry Parameters_
| B: 0x54
| C: Audio Device Unit ID
| D: Channel
This function applies the previously specified volume and pitch by
programming the sound chip with the appropriate values. The values
are applied to the specified channel of the chip.
For example, to play a specific note on Audio Device UNit 0,
the following HBIOS calls would need to be made:
```
HBIOS B=51 C=00 L=80 ; Set volume to half level
HBIOS B=53 C=00 L=69 ; Select Middle C (C4) assuming SN76489
HBIOS B=54 C=00 D=01 ; Play note on Channel 1
```
`\clearpage`{=latex}
System (SYS)
------------
@ -1480,6 +1564,15 @@ available along with the registers/information returned.
| A: Status (0=OK, else error)
| E: Count of Video Device Units
#### SYSGET Subfunction 0x50 -- Get Sound Device Unit Count (SNDCNT)
| _Entry Parameters_
| BC: 0xF850
| _Returned Values_
| A: Status (0=OK, else error)
| E: Count of Sound Device Units
#### SYSGET Subfunction 0xD0 -- Get Timer Tick Count (TIMER)
| _Entry Parameters_
@ -1573,6 +1666,14 @@ available along with the registers/information used as input.
| _Returned Values_
| A: Status (0=OK, else error)
#### SYSSET Subfunction 0xD2 -- Inc Timer (TIMER)
| _Entry Parameters_
| BC: 0xF9D2
| _Returned Values_
| A: Status (0=OK, else error)
#### SYSSET Subfunction 0xE0 -- Set Boot Information (BOOTINFO)

828
Source/Doc/Catalog.md

@ -0,0 +1,828 @@
!include(Common.inc)
!def(document)(Disk Catalog)
!def(author)(Mykl Orders)
---
title: |
| !product
| Version !ver
|
| !document
author: !author (mailto:!authmail)
date: !date
institution: !orgname
documentclass: article
classoption:
- oneside
toc: true
papersize: letter
geometry:
- top=1.5in
- bottom=1.5in
- left=1.0in
- right=1.0in
# - showframe
linestretch: 1.25
colorlinks: true
fontfamily: helvet
fontsize: 12pt
header-includes:
- |
```{=latex}
\usepackage{fancyhdr}
\usepackage{xhfill}
\renewcommand*{\familydefault}{\sfdefault}
\setstretch{1.25} % for TOC
```
---
```{=latex}
\clearpage
\pagestyle{fancyplain}
\fancyhf{}
\pagenumbering{arabic}
\lhead{\fancyplain{}{\nouppercase{\footnotesize \bfseries \leftmark \hfill !product !document}}}
\lfoot{\small RetroBrew Computing Group ~~ {\xrfill[3pt]{1pt}[cyan]} ~~ \thepage}
```
`\clearpage`{=latex}
# RomWBW Distribution File Catalog
This document is a reference to the files found on the disk media
distributed with RomWBW. Specifically, RomWBW provides a set
of floppy and hard disk images in the Binary directory of the
distribution. The contents of these images is listed here.
The files on the disk images were sourced from a variety of locations.
The primary sources of these files are listed below. Note that the
primary documentation for each of these sources is listed. You are
strongly encouraged to refer to this documentation for more information
on using the applications and files listed.
## Sources
- **RomWBW**: RomWBW Custom Applications
Documentation: RomWBW Applications.pdf*
These files are custom applications built exclusively to enhance the
functionality of RomWBW. In some cases they are built from scratch
while others are customized versions of well known CP/M tools.
- **CPM22**: Digital Research CP/M-80 2.2 Distribution Files
Documentation: CPM Manual.pdf
These files are from the official Digital Research distribution
of CP/M 2.2. Applications have been patched according to the
DRI patch list.
- **ZSDOS**: ZSDOS 1.1 Disk Operating System Distribution Files
Documentation: *ZSDOS Manual.pdf*
These files are from the official ZSDOS 1.1 distribution. Some of
the files are redistributions of applications from other sources.
- **ZCPR**: ZCPR 1.0 Command Processor Distribution Files
Documentation: *ZCPR Manual.pdf*
These files are from the ZCPR 1.0 distribution.
- **NZCOM**: NZCOM Automatic Z-System Distribution Files
Documentation: *NZCOM Users Manual.pdf*
These files are from the last official release of NZCOM.
- **CPM3**: Digital Research CP/M 3 Distribution Files
Documentation: *CPM3 Users Guide.pdf*, *CPM3 System Guide.pdf*,
*CPM3 Programmers Guide.pdf*, *CPM3 Command Summary.pdf*
These files are from the official Digital Research distribution of
CP/M 3. Applications have been patched according to the DRI
patch list.
- **ZPM3**: Digital Research CP/M-80 2.2 Distribution Files
Documentation: *CPM Manual.pdf*
These files are from Simeon Cran's ZPM3 operating system distribution.
`\clearpage`{=latex}
# CPM 2.2 Boot Disk
| Floppy Disk Image: **fd_cpm22.img**
| Hard Disk Image: **hd_cpm22.img**
| Combo Disk Image: **Slice 0**
| **User 0** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ASM.COM` | CPM22 | DRI 8080 Assembler |
| `CR.COM` | -- | Crunch archiver |
| `DDT.COM` | CPM22 | DRI Dynamic Debugger |
| `DDTZ.DOC` | -- | Z80 replacement for DDT |
| `DIRX.COM` | -- | Directory lister with file sizes |
| `DUMP.COM` | CPM22 | DRI type contents of disk file in hex |
| `ED.COM` | CPM22 | DRI context editor |
| `KERMIT.COM` | -- | Generic CP/M 2.2 Kermit communication application |
| `LBREXT.COM` | -- | Extract library files |
| `LIB.COM` | -- | DRI Library manager |
| `LINK.COM` | -- | DRI CPM relocatable linker |
| `LOAD.COM` | -- | DRI hex file loader into memory |
| `MAC.COM` | -- | DRI CPM macro assembler |
| `MBASIC.COM` | -- | Microsoft Basic |
| `PIP.COM` | CPM22 | DRI Periperal Interchange Program |
| `PMARC.COM` | -- | LHA file compressor |
| `PMEXT.COM` | -- | Extractor for PMARC archives |
| `RMAC.COM` | -- | DRI Relocatable Macro Assembler |
| `STAT.COM` | CPM22 | DRI statistices about file storage and device assignment |
| `SUBMIT.COM` | CPM22 | DRI batch processor |
| `UNCR.COM` | -- | NZCOM Uncrunch decompression |
| `UNZIP.COM` | -- | Extractor for ZIP archives |
| `XSUB.COM` | CPM22 | DRI eXtended submit |
| `ZSID.COM` | -- | DRI Z80 symbolic instruction debugger |
| `ASSIGN.COM` | RomWBW | RomWBW Drive/Slice mapper |
| `FAT.COM` | RomWBW | RomWBW FAT filesystem access |
| `FDU.COM` | RomWBW | RomWBW Floppy Disk Utility |
| `FORMAT.COM` | RomWBW | RomWBW media formatter (placeholder) |
| `INTTEST.COM` | RomWBW | RomWBW Interrupt test |
| `MODE.COM` | RomWBW | RomWBW Modify serial port characteristics |
| `RTC.COM` | RomWBW | RomWBW Display and set RTC |
| `SURVEY.COM` | RomWBW | System survey |
| `SYSCOPY.COM` | RomWBW | RomWBW Read/write system boot image |
| `SYSGEN.COM` | RomWBW | DRI CPM SYSGEN to put CPM onto a new drive |
| `TALK.COM` | RomWBW | RomWBW Direct console I/O to a serial port |
| `TIMER.COM` | RomWBW | RomWBW Display timer tick counter |
| `TUNE.COM` | RomWBW | RomWBW Play PT or MYM sound files |
| `XM.COM` | RomWBW | RomWBW XMODEM file transfer |
| `CPM.SYS` | RomWBW | CPM2.2 system image |
| `CLRDIR.COM` | -- | Max Scane's disk directory cleaner |
| `COMPARE.COM` | -- | FoxHollow compare two files |
| `DDTZ.COM` | -- | Z80 replacement for DDT |
| `FDISK80.COM` | -- | John Coffman's Partition editor for FAT filesystem |
| `FLASH.COM` | -- | Will Sowerbutts' in-situ EEPROM programmer |
| `NULU.COM` | -- | NZCOM new library utility |
| `UNARC.COM` | -- | Extractor for ARC archives |
| `ZAP.COM` | -- | Disk editor/patcher |
| `ZDE.COM` | -- | Z-system display editor |
| `ZDENST.COM` | -- | ZDE Installer |
| **User 1** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `SAMPKEY.DOC` | -- | ZDE Distribution File |
| `SAMPKEY.ZDK` | -- | ZDE Distribution File |
| `SAMPKEY.ZDT` | -- | ZDE Distribution File |
| `ZDE10.DOC` | -- | ZDE Distribution File |
| `ZDE10.FOR` | -- | ZDE Distribution File |
| `ZDE10.NEW` | -- | ZDE Distribution File |
| `ZDE10.QRF` | -- | ZDE Distribution File |
| `ZDE10.TOC` | -- | ZDE Distribution File |
| `ZDE13.FOR` | -- | ZDE Distribution File |
| `ZDE13.NEW` | -- | ZDE Distribution File |
| `ZDE16.COM` | -- | ZDE Distribution File |
| `ZDE16.DIR` | -- | ZDE Distribution File |
| `ZDE16.FIX` | -- | ZDE Distribution File |
| `ZDE16.FOR` | -- | ZDE Distribution File |
| `ZDE16.NEW` | -- | ZDE Distribution File |
| `ZDE16A.COM` | -- | ZDE Distribution File |
| `ZDE16A.PAT` | -- | ZDE Distribution File |
| `ZDENST16.COM` | -- | ZDE Distribution File |
| `ZDEPROP.DOC` | -- | ZDE Distribution File |
| `ZDEPROP.Z80` | -- | ZDE Distribution File |
| `ZDKCOM13.COM` | -- | ZDE Distribution File |
| `ZDKCOM13.DOC` | -- | ZDE Distribution File |
| **User 3** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ATTACK.PT3` | -- | Sound File |
| `BACKUP.PT3` | -- | Sound File |
| `BADMICE.PT3` | -- | Sound File |
| `DEMO.MYM` | -- | Sound File |
| `DEMO1.MYM` | -- | Sound File |
| `DEMO3.MYM` | -- | Sound File |
| `DEMO3MIX.MYM` | -- | Sound File |
| `DEMO4.MYM` | -- | Sound File |
| `HOWRU.PT3` | -- | Sound File |
| `ITERATN.PT3` | -- | Sound File |
| `LOOKBACK.PT3` | -- | Sound File |
| `LOUBOUTN.PT3` | -- | Sound File |
| `NAMIDA.PT3` | -- | Sound File |
| `RECOLL.PT3` | -- | Sound File |
| `SANXION.PT3` | -- | Sound File |
| `SYNCH.PT3` | -- | Sound File |
| `TOSTAR.PT3` | -- | Sound File |
| `VICTORY.PT3` | -- | Sound File |
| `WICKED.PT3` | -- | Sound File |
| `YEOLDE.PT3` | -- | Sound File |
| `YEOVIL.PT3` | -- | Sound File |
`\clearpage`{=latex}
# ZSDOS 1.1 Boot Disk
| Floppy Disk Image: **fd_zsdos.img**
| Hard Disk Image: **hd_zsdos.img**
| Combo Disk Image: **Slice 1**
| **User 0** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ASM.COM` | CPM22 | DRI 8080 Assembler |
| `CLOCKS.DAT` | ZSDOS | ZSDOS Library of clock drivers |
| `COPY.CFG` | ZSDOS | ZSDOS Configuration file for COPY.COM |
| `COPY.COM` | ZSDOS | ZSDOS File copier with file dates and archiving |
| `COPY.UPD` | ZSDOS | ZSDOS ??? |
| `CR.COM` | -- | Crunch archiver |
| `DATSWEEP.COM` | ZSDOS | ZSDOS Comprehensive file management utility |
| `DDT.COM` | CPM22 | DRI Dynamic Debugger |
| `DDTZ.DOC` | -- | Z80 replacement for DDT |
| `DIRX.COM` | -- | Directory lister with file sizes |
| `DSCONFIG.COM` | ZSDOS | ZSDOS DATSWEEP configuration tool |
| `DUMP.COM` | CPM22 | DRI type contents of disk file in hex |
| `ED.COM` | CPM22 | DRI context editor |
| `FA16.CFG` | ZSDOS | ZSDOS FILEATTR.COM v1.6 configuration file |
| `FA16.DOC` | ZSDOS | ZSDOS FILEATTR.COM v1.6 documentation |
| `FA16A.FOR` | ZSDOS | ZSDOS FILEATTR.COM v1.6a information |
| `FA16CFG.TXT` | ZSDOS | ZSDOS FILEATTR.COM v1.6 configuration instructions |
| `FILEATTR.COM` | ZSDOS | ZSDOS Modify file attributes |
| `FILEDATE.CFG` | ZSDOS | ZSDOS Configuration file for FILEDATE.COM |
| `FILEDATE.COM` | ZSDOS | ZSDOS Disk directory that allows sorting and selecting by date and name |
| `FILEDATE.COM` | ZSDOS | ZSDOS Disk directory that allows sorting and selecting by date and name |
| `INITDIR.CFG` | ZSDOS | ZSDOS Configuration file for INITDIR.COM |
| `INITDIR.COM` | ZSDOS | ZSDOS Prepare disks for P2DOS Stamps |
| `KERMIT.COM` | -- | Generic CP/M 2.2 Kermit communication application |
| `LBREXT.COM` | -- | Extract library files |
| `LDDS.COM` | ZSDOS | Clock driver |
| `LDNZT.COM` | ZSDOS | Clock driver |
| `LDP2D.COM` | ZSDOS | Clock driver |
| `LIB.COM` | -- | DRI Library manager |
| `LINK.COM` | -- | DRI CPM relocatable linker |
| `LOAD.COM` | -- | DRI hex file loader into memory |
| `MAC.COM` | -- | DRI CPM macro assembler |
| `MBASIC.COM` | -- | Microsoft Basic |
| `PIP.COM` | CPM22 | DRI Periperal Interchange Program |
| `PMARC.COM` | -- | LHA file compressor |
| `PMEXT.COM` | -- | Extractor for PMARC archives |
| `PUTBG.COM` | ZSDOS | ZSDOS Prepare disk for backgrounder |
| `PUTDS.COM` | ZSDOS | ZSDOS Prepare disk for datestamper |
| `RELOG.COM` | ZSDOS | ZSDOS relog disks after program that bypasses BDOS |
| `RMAC.COM` | -- | DRI Relocatable Macro Assembler |
| `SETTERM.COM` | ZSDOS | ZSDOS Installs terminal control codes into DateSamper utilities |
| `SETUPZST.COM` | ZSDOS | ZSDOS Select clock driver |
| `STAMPS.DAT` | ZSDOS | ZSDOS Library of stamping routines |
| `STAT.COM` | CPM22 | DRI statistices about file storage and device assignment |
| `SUBMIT.COM` | CPM22 | DRI batch processor |
| `SUPERSUB.COM` | ZSDOS | |
| `TD.CFG` | ZSDOS | ZSDOS Configuration file for TD.COM |
| `TD.COM` | ZSDOS | ZSDOS Time/Date utility |
| `TERMBASE.DAT` | ZSDOS | ZSDOS Terminal information library for SETTERM |
| `TESTCLOK.COM` | ZSDOS | ZSDOS Test various clock drivers |
| `UNCR.COM` | -- | NZCOM Uncrunch decompression |
| `UNZIP.COM` | -- | Extractor for ZIP archives |
| `XSUB.COM` | CPM22 | DRI eXtended submit |
| `ZCAL.COM` | ZSDOS | ZSDOS Show month calendar |
| `ZCNFG.COM` | ZSDOS | ZSDOS Configure various utilities |
| `ZCNFG24.CFG` | ZSDOS | ZSDOS Configuration file for ZCNFG.COM |
| `ZPATH.COM` | ZSDOS | ZSDOS Set BDOS and/or ZCPR command path |
| `ZSCONFIG.COM` | ZSDOS | ZSDOS Dynamically regulate many of ZSDOS features |
| `ZSID.COM` | -- | DRI Z80 symbolic instruction debugger |
| `ZSVSTAMP.COM` | ZSDOS | ZSDOS Save/restore file timestamp |
| `ZSVSTAMP.DOC` | ZSDOS | ZSDOS ZSVSTAMP.COM documentation |
| `ZXD.CFG` | ZSDOS | ZSDOS Configuration file for ZXD.COM |
| `ZXD.COM` | ZSDOS | ZSDOS Extended directory utility |
| `ASSIGN.COM` | RomWBW | RomWBW Drive/Slice mapper |
| `FAT.COM` | RomWBW | RomWBW FAT filesystem access |
| `FDU.COM` | RomWBW | RomWBW Floppy Disk Utility |
| `FORMAT.COM` | RomWBW | RomWBW media formatter (placeholder) |
| `INTTEST.COM` | RomWBW | RomWBW Interrupt test |
| `MODE.COM` | RomWBW | RomWBW Modify serial port characteristics |
| `RTC.COM` | RomWBW | RomWBW Display and set RTC |
| `SURVEY.COM` | RomWBW | System survey |
| `SYSCOPY.COM` | RomWBW | RomWBW Read/write system boot image |
| `SYSGEN.COM` | RomWBW | DRI CPM SYSGEN to put CPM onto a new drive |
| `TALK.COM` | RomWBW | RomWBW Direct console I/O to a serial port |
| `TIMER.COM` | RomWBW | RomWBW Display timer tick counter |
| `TUNE.COM` | RomWBW | RomWBW Play PT or MYM sound files |
| `XM.COM` | RomWBW | RomWBW XMODEM file transfer |
| `ZSYS.SYS` | RomWBW | ZSDOS system image |
| `CLRDIR.COM` | -- | Max Scane's disk directory cleaner |
| `COMPARE.COM` | -- | FoxHollow compare two files |
| `DDTZ.COM` | -- | Z80 replacement for DDT |
| `FDISK80.COM` | -- | John Coffman's Partition editor for FAT filesystem |
| `FLASH.COM` | -- | Will Sowerbutts' in-situ EEPROM programmer |
| `NULU.COM` | -- | NZCOM new library utility |
| `UNARC.COM` | -- | Extractor for ARC archives |
| `ZAP.COM` | -- | Disk editor/patcher |
| `ZDE.COM` | -- | Z-system display editor |
| `ZDENST.COM` | -- | ZDE Installer |
| **User 1** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `SAMPKEY.DOC` | -- | ZDE Distribution File |
| `SAMPKEY.ZDK` | -- | ZDE Distribution File |
| `SAMPKEY.ZDT` | -- | ZDE Distribution File |
| `ZDE10.DOC` | -- | ZDE Distribution File |
| `ZDE10.FOR` | -- | ZDE Distribution File |
| `ZDE10.NEW` | -- | ZDE Distribution File |
| `ZDE10.QRF` | -- | ZDE Distribution File |
| `ZDE10.TOC` | -- | ZDE Distribution File |
| `ZDE13.FOR` | -- | ZDE Distribution File |
| `ZDE13.NEW` | -- | ZDE Distribution File |
| `ZDE16.COM` | -- | ZDE Distribution File |
| `ZDE16.DIR` | -- | ZDE Distribution File |
| `ZDE16.FIX` | -- | ZDE Distribution File |
| `ZDE16.FOR` | -- | ZDE Distribution File |
| `ZDE16.NEW` | -- | ZDE Distribution File |
| `ZDE16A.COM` | -- | ZDE Distribution File |
| `ZDE16A.PAT` | -- | ZDE Distribution File |
| `ZDENST16.COM` | -- | ZDE Distribution File |
| `ZDEPROP.DOC` | -- | ZDE Distribution File |
| `ZDEPROP.Z80` | -- | ZDE Distribution File |
| `ZDKCOM13.COM` | -- | ZDE Distribution File |
| `ZDKCOM13.DOC` | -- | ZDE Distribution File |
| **User 3** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ATTACK.PT3` | -- | Sound File |
| `BACKUP.PT3` | -- | Sound File |
| `BADMICE.PT3` | -- | Sound File |
| `DEMO.MYM` | -- | Sound File |
| `DEMO1.MYM` | -- | Sound File |
| `DEMO3.MYM` | -- | Sound File |
| `DEMO3MIX.MYM` | -- | Sound File |
| `DEMO4.MYM` | -- | Sound File |
| `HOWRU.PT3` | -- | Sound File |
| `ITERATN.PT3` | -- | Sound File |
| `LOOKBACK.PT3` | -- | Sound File |
| `LOUBOUTN.PT3` | -- | Sound File |
| `NAMIDA.PT3` | -- | Sound File |
| `RECOLL.PT3` | -- | Sound File |
| `SANXION.PT3` | -- | Sound File |
| `SYNCH.PT3` | -- | Sound File |
| `TOSTAR.PT3` | -- | Sound File |
| `VICTORY.PT3` | -- | Sound File |
| `WICKED.PT3` | -- | Sound File |
| `YEOLDE.PT3` | -- | Sound File |
| `YEOVIL.PT3` | -- | Sound File |
`\clearpage`{=latex}
# NZCOM Boot Disk
| Floppy Disk Image: **fd_nzcom.img**
| Hard Disk Image: **hd_nzcom.img**
| Combo Disk Image: **Slice 2**
| **User 0** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `!(C)1988` | NZCOM | |
| `!NZ-COM` | NZCOM | |
| `!VERS--1.2H` | NZCOM | |
| `ALIAS.CMD` | NZCOM | NZCOM Aliases file for ARUNZ.COM |
| `ARUNZ.COM` | NZCOM | NZCOM Invoke an alias in ALIAS.CMD |
| `BGZRDS19.LBR` | NZCOM | |
| `CLEDINST.COM` | NZCOM | Command line editing and history shell installer |
| `CLEDSAVE.COM` | NZCOM | Write command line history to disk |
| `CONFIG.LBR` | NZCOM | |
| `COPY.COM` | NZCOM | ZSDOS File copier with file dates and archiving |
| `CPSET.COM` | NZCOM | NZCOM Create multiple definitions for CRT and PRT |
| `CRUNCH.COM` | NZCOM | NZCOM Text compression |
| `DOCFILES.LBR` | NZCOM | |
| `EDITNDR.COM` | NZCOM | NZCOM Associate names with directories |
| `FCP.LBR` | NZCOM | NZCOM ??? Flow control |
| `FF.COM` | NZCOM | NZCOM File finder |
| `HELP.COM` | NZCOM | DRI CPM+ |
| `HLPFILES.LBR` | NZCOM | |
| `IF.COM` | NZCOM | NZCOM Flow condition tester for FCP |
| `JETLDR.COM` | NZCOM | NZCOM General-purpose module loader |
| `KERMIT.COM` | -- | Generic CP/M 2.2 Kermit communication application |
| `LBREXT.COM` | NZCOM | Extract library files |
| `LBRHELP.COM` | NZCOM | |
| `LDIR.COM` | NZCOM | NZCOM Display the directory of a library |
| `LPUT.COM` | NZCOM | NZCOM Put files into a library |
| `LSH-HELP.COM` | NZCOM | |
| `LSH.COM` | NZCOM | |
| `LSH.WZ` | NZCOM | |
| `LSHINST.COM` | NZCOM | |
| `LX.COM` | NZCOM | NZCOM Extract and execute a memeber of a library |
| `MKZCM.COM` | NZCOM | NZCOM NZCOM system defining utility |
| `NAME.COM` | NZCOM | NZCOM Name a drive/user |
| `NZ-DBASE.INF` | NZCOM | NZCOM Dbase information |
| `NZBLITZ.COM` | NZCOM | |
| `NZBLTZ14.CFG` | NZCOM | |
| `NZBLTZ14.HZP` | NZCOM | |
| `NZCOM.COM` | NZCOM | NZCOM system loader from CP/M |
| `NZCOM.LBR` | NZCOM | NZCOM Library of NZCOM system modules |
| `NZCPR.LBR` | NZCOM | NZCOM Default command processor |
| `PATH.COM` | NZCOM | NZCOM Set/display command search path |
| `PUBLIC.COM` | NZCOM | |
| `PWD.COM` | NZCOM | |
| `RCP.LBR` | NZCOM | NZCOM Resident command package |
| `RELEASE.NOT` | NZCOM | |
| `SAINST.COM` | NZCOM | |
| `SALIAS.COM` | NZCOM | NZCOM Screen alias |
| `SAVENDR.COM` | NZCOM | NZCOM Save named directory assignments to a file |
| `SDZ.COM` | NZCOM | NZCOM Super directory |
| `SHOW.COM` | NZCOM | NZCOM Show resident commands |
| `SUB.COM` | NZCOM | |
| `SUBMIT.COM` | -- | DRI batch processor |
| `TCAP.LBR` | NZCOM | NZCOM Terminal capability descriptor library |
| `TCJ.INF` | NZCOM | |
| `TCJ25.WZ` | NZCOM | |
| `TCJ26.WZ` | NZCOM | |
| `TCJ27.WZ` | NZCOM | |
| `TCJ28.WZ` | NZCOM | |
| `TCJ29.WZ` | NZCOM | |
| `TCJ30.WZ` | NZCOM | |
| `TCJ31UPD.WZ` | NZCOM | |
| `TCJ32.WZ` | NZCOM | |
| `TCJ33UPD.WZ` | NZCOM | |
| `TCSELECT.COM` | NZCOM | NZCOM Create terminal capability file |
| `TY3ERA.COM` | NZCOM | NZCOM Type-3 transient program to erase a file |
| `TY3REN.COM` | NZCOM | NZCOM Type-3 transient program to rename a file |
| `TY4ERA.COM` | NZCOM | NZCOM Type-4 transient program to erase a file |
| `TY4REN.COM` | NZCOM | NZCOM Type-4 transient program to rename a file |
| `TY4SAVE.COM` | NZCOM | NZCOM Type-4 transient program to save memory to a file |
| `TY4SP.COM` | NZCOM | NZCOM Type-4 transient program ti display disk space |
| `UNCRUNCH.COM` | NZCOM | NZCOM Text decompressor |
| `VIEW.COM` | NZCOM | |
| `XTCAP.COM` | NZCOM | |
| `Z3LOC.COM` | NZCOM | NZCOM Display the addresses of the ZCPR3 CCP, BDOS, and BIOS |
| `Z3TCAP.TCP` | NZCOM | NZCOM Database of terminal descriptors |
| `ZCNFG.COM` | NZCOM | ZSDOS Configure various utilities |
| `ZERR.COM` | NZCOM | |
| `ZEX.COM` | NZCOM | NZCOM Memory-based batch processor |
| `ZF-DIM.COM` | NZCOM | NZCOM ZFILER shell for dim-video terminals |
| `ZF-REV.COM` | NZCOM | NZCOM ZFILER shell for reverse-video terminals |
| `ZFILEB38.LZT` | NZCOM | |
| `ZFILER.CMD` | NZCOM | NZCOM Macro script file for ZFILER |
| `ZHELPERS.LZT` | NZCOM | |
| `ZLT.COM` | NZCOM | |
| `ZNODES66.LZT` | NZCOM | |
| `ZSDOS.ZRL` | NZCOM | |
| `ZSYSTEM.IZF` | NZCOM | |
| `ASSIGN.COM` | RomWBW | RomWBW Drive/Slice mapper |
| `FAT.COM` | RomWBW | RomWBW FAT filesystem access |
| `FDU.COM` | RomWBW | RomWBW Floppy Disk Utility |
| `FORMAT.COM` | RomWBW | RomWBW media formatter (placeholder) |
| `INTTEST.COM` | RomWBW | RomWBW Interrupt test |
| `MODE.COM` | RomWBW | RomWBW Modify serial port characteristics |
| `RTC.COM` | RomWBW | RomWBW Display and set RTC |
| `SURVEY.COM` | RomWBW | System survey |
| `SYSCOPY.COM` | RomWBW | RomWBW Read/write system boot image |
| `SYSGEN.COM` | RomWBW | DRI CPM SYSGEN to put CPM onto a new drive |
| `TALK.COM` | RomWBW | RomWBW Direct console I/O to a serial port |
| `TIMER.COM` | RomWBW | RomWBW Display timer tick counter |
| `TUNE.COM` | RomWBW | RomWBW Play PT or MYM sound files |
| `XM.COM` | RomWBW | RomWBW XMODEM file transfer |
| `CPM.SYS` | RomWBW | |
| `ZSYS.SYS` | RomWBW | |
| `CLRDIR.COM` | -- | Max Scane's disk directory cleaner |
| `COMPARE.COM` | -- | FoxHollow compare two files |
| `DDTZ.COM` | -- | Z80 replacement for DDT |
| `FDISK80.COM` | -- | John Coffman's Partition editor for FAT filesystem |
| `FLASH.COM` | -- | Will Sowerbutts' in-situ EEPROM programmer |
| `NULU.COM` | -- | NZCOM new library utility |
| `UNARC.COM` | -- | Extractor for ARC archives |
| `ZAP.COM` | -- | Disk editor/patcher |
| `ZDE.COM` | -- | Z-system display editor |
| `ZDENST.COM` | -- | ZDE Installer |
| **User 3** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ATTACK.PT3` | -- | Sound File |
| `BACKUP.PT3` | -- | Sound File |
| `BADMICE.PT3` | -- | Sound File |
| `DEMO.MYM` | -- | Sound File |
| `DEMO1.MYM` | -- | Sound File |
| `DEMO3.MYM` | -- | Sound File |
| `DEMO3MIX.MYM` | -- | Sound File |
| `DEMO4.MYM` | -- | Sound File |
| `HOWRU.PT3` | -- | Sound File |
| `ITERATN.PT3` | -- | Sound File |
| `LOOKBACK.PT3` | -- | Sound File |
| `LOUBOUTN.PT3` | -- | Sound File |
| `NAMIDA.PT3` | -- | Sound File |
| `RECOLL.PT3` | -- | Sound File |
| `SANXION.PT3` | -- | Sound File |
| `SYNCH.PT3` | -- | Sound File |
| `TOSTAR.PT3` | -- | Sound File |
| `VICTORY.PT3` | -- | Sound File |
| `WICKED.PT3` | -- | Sound File |
| `YEOLDE.PT3` | -- | Sound File |
| `YEOVIL.PT3` | -- | Sound File |
`\clearpage`{=latex}
# CP/M 3 Boot Disk
| Floppy Disk Image: **fd_cpm3.img**
| Hard Disk Image: **hd_cpm3.img**
| Combo Disk Image: **Slice 3**
| **User 0** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `DATE.COM` | CPM3 | DRI CPM+ Set or display the date and time |
| `DEVICE.COM` | CPM3 | DRI CPM+ Assign logical devices with one or more physical devices |
| `DIR.COM` | CPM3 | DRI CPM+ DIR with options |
| `DUMP.COM` | CPM3 | DRI type contents of disk file in hex |
| `ED.COM` | CPM3 | DRI context editor |
| `ERASE.COM` | CPM3 | DRI file deletion |
| `GENCOM.COM` | CPM3 | DRI CPM+ Generate special COM file with attached RSX files |
| `GET.COM` | CPM3 | DRI CPM+ Temporarily get console input form a disk file |
| `HELP.COM` | CPM3 | DRI CPM+ Display information on how to use commands |
| `HELP.HLP` | CPM3 | DRI CPM+ Databse of help information for HELP.COM |
| `HEXCOM.CPM` | CPM3 | DRI CPM+ Create a COM file from a nex file output by MAC |
| `INITDIR.COM` | CPM3 | DRI CPM+ Initializes a disk to allow time and date stamping |
| `KERMIT.COM` | -- | Generic CP/M 3 Kermit communication application |
| `PATCH.COM` | CPM3 | DRI CPM+ Display or install patch to the CPM+ system or command files |
| `PIP.COM` | CPM3 | DRI Periperal Interchange Program |
| `PUT.COM` | CPM3 | DIR CPM+ Temporarily redirect printer or console output to a disk file |
| `RENAME.COM` | CPM3 | DRI CPM+ Rename a file |
| `ROMWBW.TXT` | RomWBW | |
| `SAVE.COM` | CPM3 | DRI CPM+ Copy the contents of memory to a file |
| `SET.COM` | CPM3 | DIR CPM+ Set file options |
| `SETDEF.COM` | CPM3 | DIR CPM+ Set system options including the drive search chain |
| `SHOW.COM` | CPM3 | DIR CPM+ Display disk and drive statistics |
| `SUBMIT.COM` | CPM3 | DRI batch processor |
| `TYPE.COM` | CPM3 | DIR CPM+ Display the contents of an ASCII character file |
| `ZSID.COM` | CPM3 | DRI Z80 symbolic instruction debugger |
| `CPMLDR.COM` | RomWBW | DRI CPM 3.0 loader |
| `CPMLDR.SYS` | RomWBW | DRI CPM 3.0 loader |
| `CCP.COM` | CPM3 | DRI CPM+ Console Command Processor |
| `GENCPM.COM` | CPM3 | DRI CPM+ Create a memory image of CPM3.SYS |
| `GENRES.DAT` | RomWBW | |
| `GENBNK.DAT` | RomWBW | |
| `BIOS3.SPR` | RomWBW | DRI CPM+ GENCPM input file for non-banked BIOS |
| `BNKBIOS3.SPR` | RomWBW | DRI CPM+ GENCPM input file for banked BIOS |
| `BDOS3.SPR` | CPM3 | DRI CPM+ GENCPM input file for the non-banked BDOS |
| `BNKBDOS3.SPR` | CPM3 | DRI CPM+ GENCPM input file for banked BDOS |
| `RESBDOS3.SPR` | CPM3 | DRI CPM+ GENCPM input file for resident BDOS |
| `CPM3RES.SYS` | RomWBW | DRI CPM+ (non-banked) memory image |
| `CPM3BNK.SYS` | RomWBW | DRI CPM+ (banked) memory image |
| `GENCPM.DAT` | RomWBW | DRI CPM+ System generation tool data file |
| `CPM3.SYS` | RomWBW | DRI CPM+ (non-banked) memory image |
| `README.1ST` | CPM3 | |
| `CPM3FIX.PAT` | CPM3 | |
| `ASSIGN.COM` | RomWBW | RomWBW Drive/Slice mapper |
| `FAT.COM` | RomWBW | RomWBW FAT filesystem access |
| `FDU.COM` | RomWBW | RomWBW Floppy Disk Utility |
| `FORMAT.COM` | RomWBW | RomWBW media formatter (placeholder) |
| `INTTEST.COM` | RomWBW | RomWBW Interrupt test |
| `MODE.COM` | RomWBW | RomWBW Modify serial port characteristics |
| `RTC.COM` | RomWBW | RomWBW Display and set RTC |
| `SURVEY.COM` | RomWBW | System survey |
| `SYSCOPY.COM` | RomWBW | RomWBW Read/write system boot image |
| `SYSGEN.COM` | RomWBW | DRI CPM SYSGEN to put CPM onto a new drive |
| `TALK.COM` | RomWBW | RomWBW Direct console I/O to a serial port |
| `TIMER.COM` | RomWBW | RomWBW Display timer tick counter |
| `TUNE.COM` | RomWBW | RomWBW Play PT or MYM sound files |
| `XM.COM` | RomWBW | RomWBW XMODEM file transfer |
| `CLRDIR.COM` | -- | Max Scane's disk directory cleaner |
| `COMPARE.COM` | -- | FoxHollow compare two files |
| `DDTZ.COM` | -- | Z80 replacement for DDT |
| `FDISK80.COM` | -- | John Coffman's Partition editor for FAT filesystem |
| `FLASH.COM` | -- | Will Sowerbutts' in-situ EEPROM programmer |
| `NULU.COM` | -- | NZCOM new library utility |
| `UNARC.COM` | -- | Extractor for ARC archives |
| `ZAP.COM` | -- | Disk editor/patcher |
| `ZDE.COM` | -- | Z-system display editor |
| `ZDENST.COM` | -- | ZDE Installer |
| **User 3** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ATTACK.PT3` | -- | Sound File |
| `BACKUP.PT3` | -- | Sound File |
| `BADMICE.PT3` | -- | Sound File |
| `DEMO.MYM` | -- | Sound File |
| `DEMO1.MYM` | -- | Sound File |
| `DEMO3.MYM` | -- | Sound File |
| `DEMO3MIX.MYM` | -- | Sound File |
| `DEMO4.MYM` | -- | Sound File |
| `HOWRU.PT3` | -- | Sound File |
| `ITERATN.PT3` | -- | Sound File |
| `LOOKBACK.PT3` | -- | Sound File |
| `LOUBOUTN.PT3` | -- | Sound File |
| `NAMIDA.PT3` | -- | Sound File |
| `RECOLL.PT3` | -- | Sound File |
| `SANXION.PT3` | -- | Sound File |
| `SYNCH.PT3` | -- | Sound File |
| `TOSTAR.PT3` | -- | Sound File |
| `VICTORY.PT3` | -- | Sound File |
| `WICKED.PT3` | -- | Sound File |
| `YEOLDE.PT3` | -- | Sound File |
| `YEOVIL.PT3` | -- | Sound File |
`\clearpage`{=latex}
# ZPM3 Boot Disk
| Floppy Disk Image: **fd_zpm3.img**
| Hard Disk Image: **hd_zpm3.img**
| Combo Disk Image: **Slice 4**
| **User 0** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `HELP.HLP` | ZPM3 | |
| `ROMWBW.TXT` | RomWBW | |
| `ZPMLDR.COM` | RomWBW | |
| `ZPMLDR.SYS` | RomWBW | |
| `CPMLDR.COM` | RomWBW | |
| `CPMLDR.SYS` | RomWBW | |
| `CPM3.SYS` | RomWBW | |
| `ZCCP.COM` | ZPM3 | |
| `ZINSTAL.ZPM` | ZPM3 | |
| `STARTZPM.COM` | ZPM3 | |
| `MAKEDOS.COM` | ZPM3 | |
| `GENCPM.DAT` | RomWBW | |
| `BNKBIOS3.SPR` | RomWBW | |
| `BNKBDOS3.SPR` | ZPM3 | |
| `RESBDOS3.SPR` | ZPM3 | |
| **User 3** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ATTACK.PT3` | -- | Sound File |
| `BACKUP.PT3` | -- | Sound File |
| `BADMICE.PT3` | -- | Sound File |
| `DEMO.MYM` | -- | Sound File |
| `DEMO1.MYM` | -- | Sound File |
| `DEMO3.MYM` | -- | Sound File |
| `DEMO3MIX.MYM` | -- | Sound File |
| `DEMO4.MYM` | -- | Sound File |
| `HOWRU.PT3` | -- | Sound File |
| `ITERATN.PT3` | -- | Sound File |
| `LOOKBACK.PT3` | -- | Sound File |
| `LOUBOUTN.PT3` | -- | Sound File |
| `NAMIDA.PT3` | -- | Sound File |
| `RECOLL.PT3` | -- | Sound File |
| `SANXION.PT3` | -- | Sound File |
| `SYNCH.PT3` | -- | Sound File |
| `TOSTAR.PT3` | -- | Sound File |
| `VICTORY.PT3` | -- | Sound File |
| `WICKED.PT3` | -- | Sound File |
| `YEOLDE.PT3` | -- | Sound File |
| `YEOVIL.PT3` | -- | Sound File |
| **User 10** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ALIAS.HLP` | -- | |
| `HP-RPN.HLP` | -- | |
| `HP-ZP.HLP` | -- | |
| `IF.HLP` | -- | |
| `MENU.HLP` | -- | |
| `VLU.HLP` | -- | |
| `ZFHIST.HLP` | -- | |
| `ZFILER.HLP` | -- | |
| `ZFMACRO.HLP` | -- | |
| `ZP.HLP` | -- | |
| **User 14** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `COPY.CFG` | -- | |
| `ERASE.CFG` | -- | |
| `HELPC15.CFG` | -- | |
| `ZCNFG24.CFG` | -- | |
| `ZEX.CFG` | -- | |
| `ZF11.CFG` | -- | |
| `ZP17.CFG` | -- | |
| **User 15** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ALIAS.COM` | -- | |
| `ARUNZ.COM` | -- | |
| `COPY.COM` | -- | |
| `DATE.COM` | CPM3 | |
| `DEV.COM` | -- | |
| `DEVICE.COM` | CPM3 | |
| `DIR.COM` | CPM3 | |
| `DISKINFO.COM` | -- | |
| `DU.COM` | -- | |
| `DUMP.COM` | CPM3 | |
| `ED.COM` | CPM3 | |
| `ERASE.COM` | CPM3 | |
| `GENCOM.COM` | CPM3 | |
| `GENCPM.COM` | CPM3 | |
| `GET.COM` | CPM3 | |
| `GOTO.COM` | -- | |
| `HELP.COM` | CPM3 | |
| `HEXCOM.COM` | CPM3 | |
| `IF.COM` | -- | |
| `INITDIR.COM` | CPM3 | |
| `KERMIT.COM` | CPM3 | |
| `LBREXT.COM` | -- | |
| `LIB.COM` | -- | |
| `LINK.COM` | -- | |
| `LOADSEG.COM` | -- | |
| `MAC.COM` | -- | |
| `MBASIC.COM` | -- | |
| `NAMES.NDR` | -- | |
| `PATCH.COM` | CPM3 | |
| `PIP.COM` | CPM3 | |
| `PUT.COM` | CPM3 | |
| `REMOVE.COM` | -- | |
| `RENAME.COM` | CPM3 | |
| `RMAC.COM` | -- | |
| `RSXDIR.COM` | -- | |
| `SAINST.COM` | -- | |
| `SALIAS.COM` | -- | |
| `SAVE.COM` | CPM3 | |
| `SET.COM` | CPM3 | |
| `SETDEF.COM` | CPM3 | |
| `SETPATH.COM` | -- | |
| `SHOW.COM` | CPM3 | |
| `SUBMIT.COM` | CPM3 | |
| `TCAP.Z3T` | -- | |
| `TYPE.COM` | CPM3 | |
| `VERROR.COM` | -- | |
| `VLU.COM` | -- | |
| `XREF.COM` | -- | |
| `ZCNFG.COM` | -- | |
| `ZERASE.COM` | -- | |
| `ZEX.COM` | -- | |
| `ZFILER.COM` | -- | |
| `ZHELP.COM` | -- | |
| `ZP.COM` | -- | |
| `ZSHOW.COM` | -- | |
| `ZSID.COM` | -- | |
| `ZXD.COM` | -- | |
| `AUTOTOG.COM` | ZPM3 | |
| `CLRHIST.COM` | ZPM3 | |
| `SETZ3.COM` | ZPM3 | |
| `ASSIGN.COM` | RomWBW | |
| `FAT.COM` | RomWBW | |
| `FDU.COM` | RomWBW | |
| `FORMAT.COM` | RomWBW | |
| `INTTEST.COM` | RomWBW | |
| `MODE.COM` | RomWBW | |
| `RTC.COM` | RomWBW | |
| `SURVEY.COM` | RomWBW | |
| `SYSCOPY.COM` | RomWBW | |
| `SYSGEN.COM` | RomWBW | |
| `TALK.COM` | RomWBW | |
| `TIMER.COM` | RomWBW | |
| `TUNE.COM` | RomWBW | |
| `XM.COM` | RomWBW | |
| `CLRDIR.COM` | -- | |
| `COMP.COM` | -- | |
| `DDTZ.COM` | -- | |
| `FDISK80.COM` | -- | |
| `FLASH.COM` | -- | |
| `NULU.COM` | -- | |
| `UNARC.COM` | -- | |
| `ZAP.COM` | -- | |
| `ZDE.COM` | -- | |
| `ZDENST.COM` | -- | |
`\clearpage`{=latex}
# WordStar 4 Application Disk
| Floppy Disk Image: **fd_ws4.img**
| Hard Disk Image: **hd_ws4.img**
| Combo Disk Image: **Slice 5**
| **User 0** | **Source** | **Description** |
| -------------- | ---------- | ------------------------------------------------------------ |
| `ANAGRAM.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `CHAPTER1.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `CHAPTER2.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `CHAPTER3.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `DIARY.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `DICTSORT.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `FIND.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `HOMONYMS.TXT` | WS4 | MicroPro WordStar 4 Distribution File |
| `HYEXCEPT.TXT` | WS4 | MicroPro WordStar 4 Distribution File |
| `HYPHEN.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `LOOKUP.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `MAINDICT.CMP` | WS4 | MicroPro WordStar 4 Distribution File |
| `MARKFIX.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `MOVEPRN.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `PATCH.LST` | WS4 | MicroPro WordStar 4 Distribution File |
| `PRINT.TST` | WS4 | MicroPro WordStar 4 Distribution File |
| `READ.ME` | WS4 | MicroPro WordStar 4 Distribution File |
| `README.` | WS4 | MicroPro WordStar 4 Distribution File |
| `REVIEW.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `RULER.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `SAMPLE1.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `SAMPLE2.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `SAMPLE3.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `SPELL.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `TABLE.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `TEXT.DOC` | WS4 | MicroPro WordStar 4 Distribution File |
| `TW.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `WC.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `WINSTALL.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `WORDFREQ.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `WS.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `WS.OVR` | WS4 | MicroPro WordStar 4 Distribution File |
| `WSCHANGE.COM` | WS4 | MicroPro WordStar 4 Distribution File |
| `WSCHANGE.OVR` | WS4 | MicroPro WordStar 4 Distribution File |
| `WSCHHELP.OVR` | WS4 | MicroPro WordStar 4 Distribution File |
| `WSHELP.OVR` | WS4 | MicroPro WordStar 4 Distribution File |
| `WSINDEX.XCL` | WS4 | MicroPro WordStar 4 Distribution File |
| `WSMSGS.OVR` | WS4 | MicroPro WordStar 4 Distribution File |
| `WSPRINT.OVR` | WS4 | MicroPro WordStar 4 Distribution File |
| `WSSHORT.OVR` | WS4 | MicroPro WordStar 4 Distribution File |

10
Source/Doc/GettingStarted.md

@ -1194,8 +1194,13 @@ platform.
list of general code enhancements.
* Phillip Stevens contributed support for FreeRTOS.
* Curt Mayer contributed the Linux / MacOS build process.
* UNA BIOS and FDISK80 is a product of John Coffman.
* UNA BIOS and FDISK80 are the products of John Coffman.
* FLASH4 is a product of Will Sowerbutts.
* CLRDIR is a product of Max Scane.
* Tasty Basic is a product of Dimitri Theulings.
* Dean Netherton contributed the sound driver interface and
the SN76489 sound driver.
* The RomWBW Disk Catalog document was produced by Mykl Orders.
Contributions of all kinds to RomWBW are very welcome.
@ -1208,6 +1213,7 @@ RetroBrew Computers projects is via the community forums:
* [RC2014 Google Group](https://groups.google.com/forum/#!forum/rc2014-z80)
* [retro-comp Google Group](https://groups.google.com/forum/#!forum/retro-comp)
Submission of issues and bugs are welcome at the [RomWBW GitHub Repository](https://github.com/wwarthen/RomWBW).
Submission of issues and bugs are welcome at the
[RomWBW GitHub Repository](https://github.com/wwarthen/RomWBW).
Also feel free to email !author at [!authmail](mailto:!authmail).

2
Source/HBIOS/Config/RCZ80_std.asm

@ -38,3 +38,5 @@ FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|DIDE|N8|DIO3]
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
;
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
;
SN76489ENABLE .SET FALSE ; SN76489 SOUND DRIVER

26
Source/HBIOS/audio.inc

@ -0,0 +1,26 @@
#IF AUDIOTRACE
#DEFINE AUDTRACE(STR) PUSH DE \ LD DE, STR \ CALL WRITESTR \ POP DE
#DEFINE AUDTRACE_A CALL PRTHEXBYTE
#DEFINE AUDTRACE_B PUSH AF \ LD A, B \ CALL PRTHEXBYTE \ POP AF
#DEFINE AUDTRACE_D PUSH AF \ LD A, D \ CALL PRTHEXBYTE \ POP AF
#DEFINE AUDTRACE_E PUSH AF \ LD A, E \ CALL PRTHEXBYTE \ POP AF
#DEFINE AUDTRACE_L PUSH AF \ LD A, L \ CALL PRTHEXBYTE \ POP AF
#DEFINE AUDTRACE_HL CALL PRTHEXWORDHL
#DEFINE AUDTRACE_DE PUSH DE \ PUSH DE \ POP HL \ CALL PRTHEXWORDHL \ POP DE
#DEFINE AUDTRACE_IY PUSH HL \ PUSH IY \ POP HL \ CALL PRTHEXWORDHL \ POP HL
#DEFINE AUDDEBUG(S) CALL PRTSTRD \ .TEXT S \ .TEXT "$" ; $$$$$$ PRINT STRING S TO CONSOLE - PRTD("HELLO") - NO TRAILING $ REQUIRED
#ELSE
#DEFINE AUDTRACE(S)
#DEFINE AUDTRACE_A
#DEFINE AUDTRACE_B
#DEFINE AUDTRACE_D
#DEFINE AUDTRACE_E
#DEFINE AUDTRACE_L
#DEFINE AUDTRACE_HL
#DEFINE AUDTRACE_DE
#DEFINE AUDTRACE_IY
#DEFINE AUDDEBUG(STR)
#ENDIF

5
Source/HBIOS/cfg_dyno.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -89,6 +90,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
@ -154,3 +156,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_ezz80.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -114,6 +115,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
@ -179,3 +181,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_master.asm

@ -16,6 +16,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -151,6 +152,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG/N8]
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
;
@ -234,3 +236,6 @@ PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_mk4.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -106,6 +107,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG/N8]
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
;
@ -188,3 +190,6 @@ PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_n8.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -109,6 +110,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG/N8]
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
;
@ -188,3 +190,6 @@ PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
FIFO_BASE .EQU $0C ; UF: REGISTERS BASE ADR
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_rcz180.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -117,6 +118,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
@ -188,3 +190,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_rcz80.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -135,6 +136,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
@ -206,3 +208,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_sbc.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -110,6 +111,7 @@ CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG/N8]
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43]
;
@ -190,3 +192,6 @@ PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_scz180.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -112,6 +113,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
@ -183,3 +185,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_zeta.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; BIOS_[WBW|UNA]: HARDWARE BIOS
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -87,6 +88,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
@ -134,3 +136,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

5
Source/HBIOS/cfg_zeta2.asm

@ -19,6 +19,7 @@ BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA]
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
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ)
;
BOOT_TIMEOUT .EQU 0 ; AUTO BOOT TIMEOUT IN SECONDS, 0 TO DISABLE
;
@ -97,6 +98,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM)
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSTIMENABLE .EQU FALSE ; TMS: INTERRUPTS NOT ENABLED
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
;
SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
@ -144,3 +146,6 @@ PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS
PPI_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP
;
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER

13
Source/HBIOS/ctc.asm

@ -21,19 +21,24 @@ CTC_PREIO .EQU CTCBASE + CTCPRECH
CTC_SCLIO .EQU CTCBASE + CTCTIMCH
;
#IF (CTCMODE == CTCMODE_CTR)
CTC_DIV .EQU CTCOSC / 50
CTC_DIV .EQU CTCOSC / TICKFREQ
#ENDIF
#IF (CTCMODE == CTCMODE_TIM16)
CTC_DIV .EQU CTCOSC / 16 / 50
CTC_DIV .EQU CTCOSC / 16 / TICKFREQ
#ENDIF
#IF (CTCMODE == CTCMODE_TIM256)
CTC_DIV .EQU CTCOSC / 256 / 50
CTC_DIV .EQU CTCOSC / 256 / TICKFREQ
#ENDIF
;
.ECHO "CTC DIVISOR: "
.ECHO CTC_DIV
.ECHO "\n"
;
#IF ((CTC_DIV == 0) | (CTC_DIV > $FFFF))
.ECHO "COMPUTED CTC DIVISOR IS UNUSABLE!\n"
!!!
#ENDIF
;
CTC_DIVHI .EQU ((CTC_DIV >> 8) & $FF)
CTC_DIVLO .EQU (CTC_DIV & $FF)
;
@ -91,7 +96,7 @@ CTC_PREINIT1:
OUT (CTCBASE),A ; SETUP CTC BASE INT VECTOR
;
; IN ORDER TO DIVIDE THE CTC INPUT CLOCK DOWN TO THE
; DESIRED 50 HZ PERIODIC INTERRUPT, WE NEED TO CONFIGURE ONE
; DESIRED PERIODIC INTERRUPT, WE NEED TO CONFIGURE ONE
; CTC CHANNEL AS A PRESCALER AND ANOTHER AS THE ACTUAL
; TIMER INTERRUPT. THE PRESCALE CHANNEL OUTPUT MUST BE WIRED
; TO THE TIMER CHANNEL TRIGGER INPUT VIA HARDWARE.

2
Source/HBIOS/cvdu.asm

@ -96,7 +96,7 @@ CVDU_FNTBL:
.DW KBD_READ
#IF (($ - CVDU_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID CVDU FUNCTION TABLE ***\n"
FAIL
!!!!!
#ENDIF
CVDU_VDAINI:

112
Source/HBIOS/hbios.asm

@ -1030,7 +1030,7 @@ SAVE_REC_M:
LD (HB_BOOT_REC),A ; SAVE FOR LATER
#ENDIF
#IF (BT_REC_TYPE == BT_REC_SBCRI)
IN A,($68 + 6) ; UART_MSR MODEM
IN A,($68 + 6) ; UART_MSR MODEM
BIT 6,A ; STATUS REGISTER
LD A,0 ; BIT 6
JR Z,SAVE_REC_M ; IS RECOVERY MODE
@ -1098,17 +1098,17 @@ SAVE_REC_M:
INC L ; FLAG Z80180 OR BETTER
;
; TEST FOR OLDER S-CLASS (REV K)
IN0 A,(Z180_CCR) ; SUPPOSEDLY ONLY ON S-CLASS
INC A ; FF -> 0
IN0 A,(Z180_CCR) ; SUPPOSEDLY ONLY ON S-CLASS
INC A ; FF -> 0
JR Z,HB_CPU1
INC L ; FLAG Z8S180 REV K (SL1960) OR BETTER
;
; TEST FOR NEWER S-CLASS (REV N)
; ON OLDER S-CLASS, ASCI TIME CONSTANT REG DOES NOT EXIST
; AND WILL ALWYAS READ BACK AS $FF
OUT0 (Z180_ASTC1L),D ; D = 0 AT THIS POINT
IN0 A,(Z180_ASTC1L) ; ASCI TIME CONSTANT REG
INC A ; FF -> 0
OUT0 (Z180_ASTC1L),D ; D = 0 AT THIS POINT
IN0 A,(Z180_ASTC1L) ; ASCI TIME CONSTANT REG
INC A ; FF -> 0
JR Z,HB_CPU1
INC L ; FLAG Z8S180 REV N W/ ASCI BRG
;
@ -1228,6 +1228,20 @@ HB_CPU2:
LD (IVT(INT_TIM0)),HL ; Z180 TIMER 0
; SETUP PERIODIC TIMER INTERRUPT ON TIMER 0
; *** THIS ASSUMES A TICKFREQ OF 50HZ!!! ***
;
#IF (TICKFREQ != 50)
.ECHO "TICKFREQ *MUST* BE 50 FOR Z180 TIMER\n"
!!!
#ENDIF
;
; Z180 PRESCALES THE COUNTER BY 20 SO,
; RLDR = CPU CLK / 20 / TICKFREQ
; IF WE ASSUME TICKFREQ = 50, WE CAN SIMPIFY TO
; RLDR = CPU CLK / 1000
; NOW IF DIVIDE BOTH SIDES BY 1000, WE CAN USE
; CPUKHZ VALUE AND SIMPLIFY TO
; RLDR = CPUKHZ
LD HL,(CB_CPUKHZ) ; 50HZ = 18432000 / 20 / 50 / X, SO X = CPU KHZ
OUT0 (Z180_TMDR0L),L ; INITIALIZE TIMER 0 DATA REGISTER
OUT0 (Z180_TMDR0H),H
@ -1241,6 +1255,7 @@ HB_CPU2:
;
#ENDIF
;
;
; INITIALIZE HEAP STORAGE
;
; INITIALIZE POINTERS
@ -1643,6 +1658,9 @@ HB_PCINITTBL:
#IF (UFENABLE)
.DW UF_PREINIT
#ENDIF
#IF (TMSENABLE)
.DW TMS_PREINIT
#ENDIF
HB_PCINITTBLLEN .EQU (($ - HB_PCINITTBL) / 2)
;==================================================================================================
@ -1659,6 +1677,9 @@ HB_INITTBL:
#IF (AYENABLE)
.DW AY_INIT ; AUDIBLE INDICATOR OF BOOT START
#ENDIF
#IF (SN76489ENABLE)
.DW SN76489_INIT
#ENDIF
#IF (ASCIENABLE)
.DW ASCI_INIT
#ENDIF
@ -1737,6 +1758,7 @@ HB_INITTBL:
#IF (UFENABLE)
.DW UF_INIT
#ENDIF
;
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
;
@ -1800,6 +1822,10 @@ HB_DISPCALL:
CALL C,PANIC ; OBSOLETE!
CP BF_VDA + $10 ; $40-$4F: VIDEO DISPLAY ADAPTER
JP C,VDA_DISPATCH
CP BF_SND + $08 ; $50-$58: SOUND DRIVERS
JP C,SND_DISPATCH
CP BF_SYS ; SKIP TO BF_SYS VALUE AT $F0
CALL C,PANIC ; PANIC IF LESS THAN BF_SYS
JP SYS_DISPATCH ; OTHERWISE SYS CALL
@ -2160,7 +2186,7 @@ HB_IOBNK .DB 0 ; CURRENT IO BUFFER BANK ID
;
RTC_DISPATCH:
PUSH HL ; SAVE INCOMING HL
LD HL,(RTC_DISPADR) ;
LD HL,(RTC_DISPADR) ;
EX (SP),HL
RET
;
@ -2225,6 +2251,51 @@ VDA_SIZ .EQU VDA_MAX * 4 ; EACH ENTRY IS 4 BYTES
.DB VDA_MAX ; MAX ENTRY COUNT TABLE PREFIX
VDA_CNT .DB 0 ; ENTRY COUNT PREFIX
VDA_TBL .FILL VDA_SIZ,0 ; SPACE FOR ENTRIES
;
;
;==================================================================================================
; SOUND ADAPTER DEVICE DISPATCHER
;==================================================================================================
;
; ROUTE CALL TO SPECIFIED SOUND DEVICE DRIVER
; B: FUNCTION
; C: UNIT NUMBER
;
SND_DISPATCH:
PUSH IY ; SAVE INCOMING IY
LD IY, SND_TBL ; POINT IY TO START OF DIO TABLE
CALL HB_DISPCALL ; GO TO GENERIC API CALL CODE
POP IY ; RESTORE IY
RET ; AND DONE
;
; ADD AN ENTRY TO THE SND UNIT TABLE (SEE HB_ADDENT FOR DETAILS)
;
SND_ADDENT:
LD HL, SND_TBL ; POINT TO SND TABLE
JP HB_ADDENT ; ... AND GO TO COMMON CODE
;
; HBIOS VIDEO DEVICE UNIT TABLE
;
; TABLE IS BUILT DYNAMICALLY BY EACH DRIVER DURING INITIALIZATION.
; THE TABLE IS PREFIXED BY TWO BYTES. TABLE - 1 CONTAINS THE CURRENT
; NUMBER OF ENTRIES. TABLE - 2 CONTAINS THE MAXIMUM NUMBER OF ENTRIES.
; TABLE - 3 CONTAINS THE NUMBER OF SND FUNCTION IDS
; EACH ENTRY IS DEFINED AS:
;
; WORD DRIVER FUNCTION TABLE ADDRESS
; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS)
;
SND_FNCNT .EQU 6 ; NUMBER OF SND FUNCS (FOR RANGE CHECK)
SND_MAX .EQU 2 ; UP TO 2 UNITS
SND_SIZ .EQU SND_MAX * 4 ; EACH ENTRY IS 4 BYTES
;
.DB SND_FNCNT ; SND FUNCTION COUNT (FOR RANGE CHECK)
.DB SND_MAX ; MAX ENTRY COUNT TABLE PREFIX
SND_CNT .DB 0 ; ENTRY COUNT PREFIX
SND_TBL .FILL SND_SIZ,0 ; SPACE FOR ENTRIES
;
;==================================================================================================
; SYSTEM FUNCTION DISPATCHER
@ -2365,6 +2436,8 @@ SYS_GET:
JR Z,SYS_GETDIOCNT
CP BF_SYSGET_VDACNT
JR Z,SYS_GETVDACNT
CP BF_SYSGET_SNDCNT
JR Z, SYS_GETSNDCNT
CP BF_SYSGET_TIMER
JR Z,SYS_GETTIMER
CP BF_SYSGET_SECS
@ -2404,7 +2477,7 @@ SYS_GETSECS:
LD A,(HB_SECTCK)
HB_EI
NEG ; CONVERT DOWNCOUNTER TO UPCOUNTER
ADD A,TICKSPERSEC
ADD A,TICKFREQ
LD C,A
XOR A
RET
@ -2483,6 +2556,13 @@ SYS_GETVDACNT:
LD E,A ; PUT IT IN E
XOR A ; SIGNALS SUCCESS
RET
SYS_GETSNDCNT:
LD A,(SND_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
LD E,A ; PUT IT IN E
XOR A ; SIGNALS SUCCESS
RET
;
; SET SYSTEM PARAMETERS
; PARAMETER(S) TO SET INDICATED IN C
@ -2743,9 +2823,9 @@ HB_TICK:
LD HL,HB_TICKS ; POINT TO TICK COUNTER
CALL INC32HL
LD HL,HB_SECTCK ; POINT TO SECONDS TICK COUNTER
DEC (HL) ; COUNTDOWN 50 TICKS
DEC (HL) ; COUNTDOWN ONE SECOND OF TICKS
JR NZ,HB_TICK1 ; NOT DONE, SKIP AHEAD
LD A,TICKSPERSEC ; 50 TICKS PER SECOND
LD A,TICKFREQ ; TICKS PER SECOND
LD (HL),A ; RESET COUNTDOWN REGISTER
CALL VEC_SECOND ; DO SECONDS PROCESSING VIA VECTOR
;
@ -3265,6 +3345,14 @@ SIZ_CTC .EQU $ - ORG_CTC
.ECHO SIZ_CTC
.ECHO " bytes.\n"
#ENDIF
#IF (SN76489ENABLE)
ORG_SN76489 .EQU $
#INCLUDE "sn76489.asm"
SIZ_SN76489 .EQU $ - ORG_SN76489
.ECHO "SN76489 occupies "
.ECHO SIZ_SN76489
.ECHO " bytes.\n"
#ENDIF
;
#DEFINE USEDELAY
#INCLUDE "util.asm"
@ -3904,7 +3992,7 @@ PS_FLP_FSTR: .TEXT "8\",$" ; PS_FLP8
PS_FLP_SSTR: .TEXT "SS/$" ; PS_FLPSS
.TEXT "DS/$" ; PS_FLPDS
;
PS_FLP_DSTR: .TEXT "SD$" ; PS_FLPSD
PS_FLP_DSTR: .TEXT "SD$" ; PS_FLPSD
.TEXT "DD$" ; PS_FLPDD
.TEXT "HD$" ; PS_FLPHD
.TEXT "ED$" ; PS_FLPED
@ -4125,7 +4213,7 @@ IDLECOUNT .DB 0
HEAPCURB .DW 0 ; MARK HEAP ADDRESS AFTER INITIALIZATION
;
HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER
HB_SECTCK .DB TICKSPERSEC ; TICK COUNTER FOR FRACTIONAL SECONDS
HB_SECTCK .DB TICKFREQ ; TICK COUNTER FOR FRACTIONAL SECONDS
HB_SECS .FILL 4,0 ; 32 BIT SECONDS COUNTER
;
HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG

15
Source/HBIOS/hbios.inc

@ -52,6 +52,20 @@ BF_VDAKST .EQU BF_VDA + 12 ; GET KEYBOARD STATUS
BF_VDAKFL .EQU BF_VDA + 13 ; FLUSH KEYBOARD BUFFER
BF_VDAKRD .EQU BF_VDA + 14 ; READ KEYBOARD
;
BF_SND .EQU $50
BF_SNDRESET .EQU BF_SND + 0 ; RESET SOUND SYSTEM
BF_SNDVOL .EQU BF_SND + 1 ; REQUEST SOUND VOL - L CONTAINS VOLUME (255 MAX, 0 SILENT) - SCALED AS REQUIRED BY DRIVER (EG: MAPS TO JUST 4 BIT RESOLUTION FOR SN76489)
BF_SNDPIT .EQU BF_SND + 2 ; REQUEST SOUND PITCH - HL CONTAINS PITCH DRIVER SPECIFIC VALUE
BF_SNDNOTE .EQU BF_SND + 3 ; REQUEST NOTE - L CONTAINS NOTE - EACH VALUE IS QUARTER NOTE
BF_SNDPLAY .EQU BF_SND + 4 ; INITIATE THE REQUESTED SOUND COMMAND
BF_SNDQUERY .EQU BF_SND + 5 ; D IS CHANNEL, E IS SUBCOMMAND
;
; BF_SNDQUERY SUBCOMMANDS
BF_SNDQ_STATUS .EQU 0
BF_SNDQ_CHCNT .EQU BF_SNDQ_STATUS + 1 ; RETURN COUNT OF CHANNELS
BF_SNDQ_SVOLUME .EQU BF_SNDQ_STATUS + 2 ; 8 BIT NUMBER
BF_SNDQ_SPITCH .EQU BF_SNDQ_STATUS + 3 ; 16 BIT NUMBER
;
BF_SYS .EQU $F0
BF_SYSRESET .EQU BF_SYS + 0 ; SOFT RESET HBIOS
BF_SYSVER .EQU BF_SYS + 1 ; GET HBIOS VERSION
@ -70,6 +84,7 @@ BF_SYSINT .EQU BF_SYS + 12 ; MANAGE INTERRUPT VECTORS
BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT
BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT
BF_SYSGET_VDACNT .EQU $40 ; GET VDA UNIT COUNT
BF_SYSGET_SNDCNT .EQU $50 ; GET VDA UNIT COUNT
BF_SYSGET_TIMER .EQU $D0 ; GET CURRENT TIMER VALUE
BF_SYSGET_SECS .EQU $D1 ; GET CURRENT SECONDS VALUE
BF_SYSGET_BOOTINFO .EQU $E0 ; GET BOOT INFORMATION

173
Source/HBIOS/romldr.asm

@ -146,7 +146,7 @@ start1:
;
ld hl,$8000 ; page zero was copied here
ld de,0 ; put it in user page zero
ld bc,$100 ; full page
ld bc,$100 ; full page
ldir ; do it
;
; Page zero in user bank is ready for interrupts now.
@ -281,6 +281,10 @@ runcmd:
jp z,devlst ; if so, do it
cp 'R' ; R = reboot system
jp z,reboot ; if so, do it
#if (BIOS == BIOS_WBW)
cp 'I' ; C = set console interface
jp z,setcon ; if so, do it
#endif
;
; Attempt ROM application launch
ld ix,(ra_tbl_loc) ; point to start of ROM app tbl
@ -334,7 +338,7 @@ runcmd2:
dskycmd:
call clrled ; clear LEDs
;
call DSKY_GETKEY ; get DSKY key
call DSKY_GETKEY ; get DSKY key
cp $FF ; check for error
ret z ; abort if so
;
@ -422,6 +426,52 @@ devlst:
call pstr ; display it
jp prtall ; do it
;
; Set console interface unit
;
#if (BIOS == BIOS_WBW)
;
setcon:
; On entry DE is expected to be pointing to start
; of command
call findws ; skip command
call skipws ; and skip it
call isnum ; do we have a number?
jp nz,err_invcmd ; if not, invalid
call getnum ; parse number into A
jp c,err_nocon ; handle overflow error
;
; Check against max char unit
push af ; save requested unit
ld b,BF_SYSGET ; HBIOS func: SYS GET
ld c,BF_SYSGET_CIOCNT ; HBIOS subfunc: CIO unit count
rst 08 ; E := unit count
pop af ; restore requested unit
cp e ; compare
jp nc,err_nocon ; handle invalid unit
;
; Notify user, we're outta here....
push af ; save new console unit
ld hl,str_newcon ; new console msg
call pstr ; print string on cur console
pop af ; restore new console unit
call PRTDECB ; print unit num
;
; Set console unit
ld b,BF_SYSPOKE ; HBIOS func: POKE
ld d,BID_BIOS ; BIOS bank
ld e,a ; Char unit value
ld hl,HCB_LOC + HCB_CONDEV ; Con unit num in HCB
rst 08 ; do it
;
; Display loader prompt on new console
call nl2 ; formatting
ld hl,str_banner ; display boot banner
call pstr ; do it
;
ret ; done
;
#endif
;
; Restart system
;
reboot:
@ -433,7 +483,7 @@ reboot:
;
#if (DSKYENABLE)
ld hl,msg_boot ; point to boot message
call DSKY_SHOWSEG ; display message
call DSKY_SHOWSEG ; display message
#endif
;
; switch to rom bank 0 and jump to address 0
@ -465,7 +515,7 @@ romload:
;
#if (DSKYENABLE)
ld hl,msg_load ; point to load message
call DSKY_SHOWSEG ; display message
call DSKY_SHOWSEG ; display message
#endif
;
#if (BIOS == BIOS_WBW)
@ -509,9 +559,9 @@ romload1:
#if (BIOS == BIOS_UNA)
;
; Note: UNA has no interbank memory copy, so we can only load
; images from the current bank. We switch to the original bank
; images from the current bank. We switch to the original bank
; use a simple ldir to relocate the image, then switch back to the
; user bank to launch. This will only work if the images are in
; user bank to launch. This will only work if the images are in
; the lower 32K and the relocation adr is in the upper 32K.
;
; Switch to original bank
@ -549,7 +599,7 @@ romload1:
;
#if (DSKYENABLE)
ld hl,msg_go ; point to go message
call DSKY_SHOWSEG ; display message
call DSKY_SHOWSEG ; display message
#endif
;
ld l,(ix+ra_ent) ; HL := app entry address
@ -574,7 +624,7 @@ diskboot:
;
#if (DSKYENABLE)
ld hl,msg_load ; point to load message
call DSKY_SHOWSEG ; display message
call DSKY_SHOWSEG ; display message
#endif
;
#if (BIOS == BIOS_WBW)
@ -616,7 +666,7 @@ diskboot1:
ld h,65 ; 65 tracks per slice
call MULT8 ; hl := h * e
ld de,$0002 ; head 0, sector 2
ld b,BF_DIOSEEK ; HBIOS func: seek
ld b,BF_DIOSEEK ; HBIOS func: seek
ld a,(bootunit) ; get boot disk unit
ld c,a ; put in C
rst 08 ; do it
@ -627,7 +677,7 @@ diskboot1:
ld b,BF_DIOREAD ; HBIOS func: disk read
ld a,(bootunit) ; get boot disk unit
ld c,a ; put in C for func call
ld hl,bl_infosec ; read into info sec buffer
ld hl,bl_infosec ; read into info sec buffer
ld d,BID_USR ; user bank
ld e,1 ; transfer one sector
rst 08 ; do it
@ -752,7 +802,7 @@ diskboot5:
ld b,BF_DIOREAD ; HBIOS func: read sectors
ld a,(bootunit) ; get boot disk unit
ld c,a ; put in C
ld hl,(bb_cpmloc) ; load address
ld hl,(bb_cpmloc) ; load address
ld d,BID_USR ; user bank
ld a,(loadcnt) ; get sectors to read
ld e,a ; number of sectors to load
@ -827,7 +877,7 @@ diskboot6:
;
#if (DSKYENABLE)
ld hl,msg_go ; point to go message
call DSKY_SHOWSEG ; display message
call DSKY_SHOWSEG ; display message
#endif
;
; Jump to entry vector
@ -947,6 +997,16 @@ rdln_cr:
ld (de),a ; store terminator
ret ; and return
;
; Find next whitespace character at buffer adr in DE, returns with first
; whitespace character in A.
;
findws:
ld a,(de) ; get next char
cp ' ' ; blank?
ret z ; nope, done
inc de ; bump buffer pointer
jr findws ; and loop
;
; Skip whitespace at buffer adr in DE, returns with first
; non-whitespace character in A.
;
@ -956,7 +1016,6 @@ skipws:
ret nz ; nope, done
inc de ; bump buffer pointer
jr skipws ; and loop
;
; Uppercase character in A
;
@ -1186,7 +1245,7 @@ prtall1:
push bc ; save loop control
ld b,BF_DIODEVICE ; HBIOS func: report device info
rst 08 ; call HBIOS
call prtdrv ; print it
call prtdrv ; print it
pop bc ; restore loop control
inc c ; bump index
djnz prtall1 ; loop as needed
@ -1349,6 +1408,10 @@ err_noslice:
ld hl,str_err_noslice
jr err
;
err_nocon:
ld hl,str_err_nocon
jr err
;
err_diskio:
ld hl,str_err_diskio
jr err
@ -1377,6 +1440,7 @@ str_err_prefix .db bel,"\r\n\r\n*** ",0
str_err_invcmd .db "Invalid command",0
str_err_nodisk .db "Disk unit not available",0
str_err_noslice .db "Disk unit does not support slices",0
str_err_nocon .db "Invalid character unit",0
str_err_diskio .db "Disk I/O failure",0
str_err_sig .db "No system image on disk",0
str_err_api .db "Unexpected hardware BIOS API failure",0
@ -1408,12 +1472,12 @@ acmd_to .dw BOOT_TIMEOUT ; auto cmd timeout
;=======================================================================
;
str_banner .db PLATFORM_NAME," Boot Loader",0
;str_prompt .db "Boot [(H)elp]: ",0
str_prompt .db "Boot [H=Help]: ",0
str_bs .db bs,' ',bs,0
str_reboot .db "\r\n\r\nRestarting System...",0
str_newcon .db "\r\n\r\n Console on Unit #",0
str_applst .db "\r\n\r\nROM Applications:",0
str_devlst .db "\r\n\r\nDevices:",0
str_devlst .db "\r\n\r\nDisk Devices:",0
str_invcmd .db "\r\n\r\n*** Invalid Command ***",bel,0
str_load .db "\r\n\r\nLoading ",0
str_disk .db "\r\n Disk Unit ",0
@ -1427,10 +1491,13 @@ str_binfo4 .db ", entry @ 0x",0
str_binfo5 .db "]",0
;
str_help .db "\r\n"
.db "\r\n L: List ROM Applications"
.db "\r\n D: Device Inventory"
.db "\r\n R: Reboot System"
.db "\r\n <u>[.<s>]: Boot Disk Unit/Slice"
.db "\r\n L - List ROM Applications"
.db "\r\n D - Disk Device Inventory"
.db "\r\n R - Reboot System"
#if (BIOS == BIOS_WBW)
.db "\r\n I <u> - Set Console Interface"
#endif
.db "\r\n <u>[.<s>] - Boot Disk Unit/Slice"
.db 0
;
#if (DSKYENABLE)
@ -1448,34 +1515,34 @@ msg_go .db $db,$9d,$00,$00,$00,$80,$80,$80 ; "go... "
;
; WBW UNA
; p1: Application name string adr word (+0) word (+0)
; p2: Console keyboard selection key byte (+2) byte (+2)
; p3: DSKY selection key byte (+3) byte (+3)
; p4: Application image bank byte (+4) word (+4)
; p5: Application image source address word (+5) word (+6)
; p6: Application image dest load address word (+7) word (+8)
; p7: Application image size word (+9) word (+10)
; p8: Application entry address word (+11) word (+12)
; p2: Console keyboard selection key byte (+2) byte (+2)
; p3: DSKY selection key byte (+3) byte (+3)
; p4: Application image bank byte (+4) word (+4)
; p5: Application image source address word (+5) word (+6)
; p6: Application image dest load address word (+7) word (+8)
; p7: Application image size word (+9) word (+10)
; p8: Application entry address word (+11) word (+12)
;
#if (BIOS == BIOS_WBW)
ra_name .equ 0
ra_conkey .equ 2
ra_dskykey .equ 3
ra_bnk .equ 4
ra_src .equ 5
ra_dest .equ 7
ra_siz .equ 9
ra_ent .equ 11
ra_dskykey .equ 3
ra_bnk .equ 4
ra_src .equ 5
ra_dest .equ 7
ra_siz .equ 9
ra_ent .equ 11
#endif
;
#if (BIOS == BIOS_UNA)
ra_name .equ 0
ra_conkey .equ 2
ra_dskykey .equ 3
ra_bnk .equ 4
ra_src .equ 6
ra_dest .equ 8
ra_siz .equ 10
ra_ent .equ 12
ra_dskykey .equ 3
ra_bnk .equ 4
ra_src .equ 6
ra_dest .equ 8
ra_siz .equ 10
ra_ent .equ 12
#endif
;
#define ra_ent(p1,p2,p3,p4,p5,p6,p7,p8) \
@ -1516,35 +1583,35 @@ ra_ent .equ 12
;
ra_tbl:
;
; Name Key Dsky Bank Src Dest Size Entry
; Name Key Dsky Bank Src Dest Size Entry
; --------- ------- ----- -------- ----- ------- ------- ----------
ra_ent(str_mon, 'M', KY_CL, BID_IMG0, $1000, MON_LOC, MON_SIZ, MON_SERIAL)
ra_ent(str_mon, 'M', KY_CL, BID_IMG0, $1000, MON_LOC, MON_SIZ, MON_SERIAL)
ra_entsiz .equ $ - ra_tbl
ra_ent(str_cpm22, 'C', KY_BK, BID_IMG0, $2000, CPM_LOC, CPM_SIZ, CPM_ENT)
ra_ent(str_zsys, 'Z', KY_FW, BID_IMG0, $5000, CPM_LOC, CPM_SIZ, CPM_ENT)
ra_ent(str_cpm22, 'C', KY_BK, BID_IMG0, $2000, CPM_LOC, CPM_SIZ, CPM_ENT)
ra_ent(str_zsys, 'Z', KY_FW, BID_IMG0, $5000, CPM_LOC, CPM_SIZ, CPM_ENT)
#if (BIOS == BIOS_WBW)
ra_ent(str_fth, 'F', KY_EX, BID_IMG1, $0000, FTH_LOC, FTH_SIZ, FTH_LOC)
ra_ent(str_bas, 'B', KY_DE, BID_IMG1, $1700, BAS_LOC, BAS_SIZ, BAS_LOC)
ra_ent(str_tbas, 'T', KY_EN, BID_IMG1, $3700, TBC_LOC, TBC_SIZ, TBC_LOC)
ra_ent(str_play, 'P', $FF, BID_IMG1, $4000, GAM_LOC, GAM_SIZ, GAM_LOC)
ra_ent(str_user, 'U', $FF, BID_IMG1, $7000, USR_LOC, USR_SIZ, USR_LOC)
ra_ent(str_fth, 'F', KY_EX, BID_IMG1, $0000, FTH_LOC, FTH_SIZ, FTH_LOC)
ra_ent(str_bas, 'B', KY_DE, BID_IMG1, $1700, BAS_LOC, BAS_SIZ, BAS_LOC)
ra_ent(str_tbas, 'T', KY_EN, BID_IMG1, $3700, TBC_LOC, TBC_SIZ, TBC_LOC)
ra_ent(str_play, 'P', $FF, BID_IMG1, $4000, GAM_LOC, GAM_SIZ, GAM_LOC)
ra_ent(str_user, 'U', $FF, BID_IMG1, $7000, USR_LOC, USR_SIZ, USR_LOC)
#endif
#if (DSKYENABLE)
ra_ent(str_dsky, 'Y'+$80, KY_GO, bid_cur, $1000, MON_LOC, MON_SIZ, MON_DSKY)
#endif
ra_ent(str_egg, 'E'+$80, $FF , bid_cur, $0E00, EGG_LOC, EGG_SIZ, EGG_LOC)
ra_ent(str_egg, 'E'+$80, $FF , bid_cur, $0E00, EGG_LOC, EGG_SIZ, EGG_LOC)
.dw 0 ; table terminator
;
ra_tbl_app:
;
; Name Key Dsky Bank Src Dest Size Entry
; Name Key Dsky Bank Src Dest Size Entry
; --------- ------- ----- -------- ----- ------- ------- ----------
ra_ent(str_mon, 'M', KY_CL, bid_cur, $1000, MON_LOC, MON_SIZ, MON_SERIAL)
ra_ent(str_zsys, 'Z', KY_FW, bid_cur, $2000, CPM_LOC, CPM_SIZ, CPM_ENT)
ra_ent(str_mon, 'M', KY_CL, bid_cur, $1000, MON_LOC, MON_SIZ, MON_SERIAL)
ra_ent(str_zsys, 'Z', KY_FW, bid_cur, $2000, CPM_LOC, CPM_SIZ, CPM_ENT)
#if (DSKYENABLE)
ra_ent(str_dsky, 'Y'+$80, KY_GO, bid_cur, $1000, MON_LOC, MON_SIZ, MON_DSKY)
#endif
ra_ent(str_egg, 'E'+$80, $FF , bid_cur, $0E00, EGG_LOC, EGG_SIZ, EGG_LOC)
ra_ent(str_egg, 'E'+$80, $FF , bid_cur, $0E00, EGG_LOC, EGG_SIZ, EGG_LOC)
.dw 0 ; table terminator
;
str_mon .db "Monitor",0

588
Source/HBIOS/sn76489.asm

@ -0,0 +1,588 @@
;======================================================================
; SN76489 sound driver
;
; WRITTEN BY: DEAN NETHERTON
;======================================================================
;
; TODO:
;
;======================================================================
; CONSTANTS
;======================================================================
;
SN76489_PORT_LEFT .EQU $FC ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT)
SN76489_PORT_RIGHT .EQU $F8 ; PORTS FOR ACCESSING THE SN76489 CHIP (RIGHT)
SN7_IDAT .EQU 0
SN7_TONECNT .EQU 3 ; COUNT NUMBER OF TONE CHANNELS
SN7_NOISECNT .EQU 1 ; COUNT NUMBER OF NOISE CHANNELS
SN7_CHCNT .EQU SN7_TONECNT + SN7_NOISECNT
CHANNEL_0_SILENT .EQU $9F
CHANNEL_1_SILENT .EQU $BF
CHANNEL_2_SILENT .EQU $DF
CHANNEL_3_SILENT .EQU $FF
SN7CLKDIVIDER .EQU 4
SN7CLK .EQU CPUOSC / SN7CLKDIVIDER
SN7RATIO .EQU SN7CLK * 100 / 32
SN7_FIRST_NOTE .EQU 5827 ; A1#
SN7_LAST_NOTE .EQU 209300 ; C7
A1S .EQU SN7RATIO / SN7_FIRST_NOTE
C7 .EQU SN7RATIO / SN7_LAST_NOTE
.ECHO "SN76489: range of A1# (pitch: "
.ECHO A1S
.ECHO ") to C7 (pitch: "
.ECHO C7
.ECHO ")\n"
#INCLUDE "audio.inc"
SN76489_INIT:
LD IY, SN7_IDAT ; POINTER TO INSTANCE DATA
LD DE,STR_MESSAGELT
CALL WRITESTR
LD A, SN76489_PORT_LEFT
CALL PRTHEXBYTE
LD DE,STR_MESSAGERT
CALL WRITESTR
LD A, SN76489_PORT_RIGHT
CALL PRTHEXBYTE
;
SN7_INIT1:
LD BC, SN7_FNTBL ; BC := FUNCTION TABLE ADDRESS
LD DE, SN7_IDAT ; DE := SN7 INSTANCE DATA PTR
CALL SND_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
CALL SN7_VOLUME_OFF
XOR A ; SIGNAL SUCCESS
RET
;======================================================================
; SN76489 DRIVER - SOUND ADAPTER (SND) FUNCTIONS
;======================================================================
;
SN7_RESET:
AUDTRACE(TRACE_INIT)
CALL SN7_VOLUME_OFF
XOR A ; SIGNAL SUCCESS
RET
SN7_VOLUME_OFF:
AUDTRACE(TRACE_VOLUME_OFF)
LD A, CHANNEL_0_SILENT
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
LD A, CHANNEL_1_SILENT
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
LD A, CHANNEL_2_SILENT
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
LD A, CHANNEL_3_SILENT
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
RET
; BIT MAPPING
; SET TONE:
; 1 CC 0 PPPP (LOW)
; 0 0 PPPPPP (HIGH)
; 1 CC 1 VVVV
SN7_VOLUME:
AUDDEBUG("SN7VOL ")
AUDTRACE_L
AUDDEBUG("\r\n")
LD A, L
LD (PENDING_VOLUME), A
XOR A ; SIGNAL SUCCESS
RET
SN7_NOTE:
AUDDEBUG("SN7NOT ")
AUDTRACE_L
AUDDEBUG("\r\n")
ADD HL, HL ; SHIFT RIGHT (MULT 2) -INDEX INTO SN7NOTETBL TABLE OF WORDS
; TEST IF HL IS LARGER THAN SN7NOTETBL SIZE
OR A ; CLEAR CARRY FLAG
LD DE, SIZ_SN7NOTETBL
SBC HL, DE
JR NC, SN7_NOTE1 ; INCOMING HL DOES NOT MAP INTO SN7NOTETBL
ADD HL, DE ; RESTORE HL
LD E, L ; HL = SN7NOTETBL + HL
LD D, H
LD HL, SN7NOTETBL
ADD HL, DE
LD A, (HL) ; RETRIEVE PITCH COUNT FROM SN7NOTETBL
INC HL
LD H, (HL)
LD L, A
JR SN7_PITCH ; APPLY PITCH
SN7_NOTE1:
OR $FF ; NOT IMPLEMENTED YET
RET
SN7_PITCH:
AUDDEBUG("SN7PIT ")
AUDTRACE_HL
AUDDEBUG("\r\n")
LD (PENDING_PITCH), HL
XOR A ; SIGNAL SUCCESS
RET
SN7_PLAY:
AUDDEBUG("SN7PLY ")
AUDTRACE_D
AUDDEBUG("\r\n")
CALL SN7_APPLY_VOL
CALL SN7_APPLY_PIT
XOR A ; SIGNAL SUCCESS
RET
SN7_QUERY:
LD A, E
CP BF_SNDQ_CHCNT
JR Z, SN7_QUERY_CHCNT
CP BF_SNDQ_SPITCH
JR Z, SN7_QUERY_PITCH
CP BF_SNDQ_SVOLUME
JR Z, SN7_QUERY_VOLUME
OR $FF ; SIGNAL FAILURE
RET
SN7_QUERY_CHCNT:
LD B, SN7_TONECNT
LD C, SN7_NOISECNT
XOR A
RET
SN7_QUERY_PITCH:
LD HL, (PENDING_PITCH)
XOR A
RET
SN7_QUERY_VOLUME:
LD A, (PENDING_VOLUME)
LD L, A
LD H, 0
XOR A
RET
;
; UTIL FUNCTIONS
;
SN7_APPLY_VOL: ; APPLY VOLUME TO BOTH LEFT AND RIGHT CHANNELS
PUSH BC ; D CONTAINS THE CHANNEL NUMBER
PUSH AF
LD A, D
AND $3
RLCA
RLCA
RLCA
RLCA
RLCA
OR $90
LD B, A
LD A, (PENDING_VOLUME)
RRCA
RRCA
RRCA
RRCA
AND $0F
LD C, A
LD A, $0F
SUB C
AND $0F
OR B ; A CONTAINS COMMAND TO SET VOLUME FOR CHANNEL
AUDTRACE(TRACE_PORT_WR)
AUDTRACE_A
AUDTRACE(TRACE_NEWLINE)
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
POP AF
POP BC
RET
SN7_APPLY_PIT:
PUSH DE
PUSH BC
PUSH AF
LD HL, (PENDING_PITCH)
LD A, D
AND $3
RLCA
RLCA
RLCA
RLCA
RLCA
OR $80
LD B, A ; PITCH COMMAND 1 - CONTAINS CHANNEL ONLY
LD A, L ; GET LOWER 4 BITS FOR COMMAND 1
AND $F
OR B ; A NOW CONATINS FIRST PITCH COMMAND
AUDTRACE(TRACE_PORT_WR)
AUDTRACE_A
AUDTRACE(TRACE_NEWLINE)
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
LD A, L ; RIGHT SHIFT OUT THE LOWER 4 BITS
RRCA
RRCA
RRCA
RRCA
AND $F
LD B, A
LD A, H
AND $3
RLCA
RLCA
RLCA
RLCA ; AND PLACE IN BITS 5 AND 6
OR B ; OR THE TWO SETS OF BITS TO MAKE 2ND PITCH COMMAND
AUDTRACE(TRACE_PORT_WR)
AUDTRACE_A
AUDTRACE(TRACE_NEWLINE)
OUT (SN76489_PORT_LEFT), A
OUT (SN76489_PORT_RIGHT), A
POP AF
POP BC
POP DE
RET
SN7_FNTBL:
.DW SN7_RESET
.DW SN7_VOLUME
.DW SN7_PITCH
.DW SN7_NOTE
.DW SN7_PLAY
.DW SN7_QUERY
#IF (($ - SN7_FNTBL) != (SND_FNCNT * 2))
.ECHO "*** INVALID SND FUNCTION TABLE ***\n"
!!!!!
#ENDIF
PENDING_PITCH
.DW 0 ; PENDING PITCH (10 BITS)
PENDING_VOLUME
.DB 0 ; PENDING VOL (8 BITS -> DOWNOVERTED TO 4 BITS AND INVERTED)
STR_MESSAGELT .DB "\r\nSN76489: LEFT IO=0x$"
STR_MESSAGERT .DB ", RIGHT IO=0x$"
#IF AUDIOTRACE
TRACE_INIT .DB "\r\nSN7_INIT CALLED\r\n$"
TRACE_VOLUME_OFF .DB "\r\nSN7_VOLUME_OFF\r\n$"
TRACE_VOLUME_SET .DB "\r\nSN7_VOLUME_SET CH: $"
TRACE_PLAY .DB "\r\nPLAY\r\n$"
TRACE_VOLUME .DB ", VOL: $"
TRACE_PORT_WR .DB "\r\nOUT SN76489, $"
TRACE_PITCH_SET .DB "\r\nSN7_PITCH_SET CH: $"
TRACE_PITCH .DB ", PITCH: $"
TRACE_NEWLINE .DB "\r\n$"
#ENDIF
; THE FREQUENCY BY QUATER TONE STARTING AT A1#
SN7NOTETBL:
.DW A1S
.DW SN7RATIO / 5912
.DW SN7RATIO / 5998
.DW SN7RATIO / 6085
.DW SN7RATIO / 6174
.DW SN7RATIO / 6264
.DW SN7RATIO / 6355
.DW SN7RATIO / 6447
.DW SN7RATIO / 6541
.DW SN7RATIO / 6636
.DW SN7RATIO / 6733
.DW SN7RATIO / 6831
.DW SN7RATIO / 6930
.DW SN7RATIO / 7031
.DW SN7RATIO / 7133
.DW SN7RATIO / 7237
.DW SN7RATIO / 7342
.DW SN7RATIO / 7449
.DW SN7RATIO / 7557
.DW SN7RATIO / 7667
.DW SN7RATIO / 7778
.DW SN7RATIO / 7891
.DW SN7RATIO / 8006
.DW SN7RATIO / 8122
.DW SN7RATIO / 8241
.DW SN7RATIO / 8361
.DW SN7RATIO / 8482
.DW SN7RATIO / 8606
.DW SN7RATIO / 8731
.DW SN7RATIO / 8858
.DW SN7RATIO / 8987
.DW SN7RATIO / 9118
.DW SN7RATIO / 9250
.DW SN7RATIO / 9385
.DW SN7RATIO / 9521
.DW SN7RATIO / 9660
.DW SN7RATIO / 9800
.DW SN7RATIO / 9943
.DW SN7RATIO / 10087
.DW SN7RATIO / 10234
.DW SN7RATIO / 10383
.DW SN7RATIO / 10534
.DW SN7RATIO / 10687
.DW SN7RATIO / 10843
.DW SN7RATIO / 11000
.DW SN7RATIO / 11160
.DW SN7RATIO / 11322
.DW SN7RATIO / 11487
.DW SN7RATIO / 11654
.DW SN7RATIO / 11824
.DW SN7RATIO / 11995
.DW SN7RATIO / 12170
.DW SN7RATIO / 12347
.DW SN7RATIO / 12527
.DW SN7RATIO / 12709
.DW SN7RATIO / 12894
.DW SN7RATIO / 13081
.DW SN7RATIO / 13271
.DW SN7RATIO / 13464
.DW SN7RATIO / 13660
.DW SN7RATIO / 13859
.DW SN7RATIO / 14061
.DW SN7RATIO / 14265
.DW SN7RATIO / 14473
.DW SN7RATIO / 14683
.DW SN7RATIO / 14897
.DW SN7RATIO / 15113
.DW SN7RATIO / 15333
.DW SN7RATIO / 15556
.DW SN7RATIO / 15782
.DW SN7RATIO / 16012
.DW SN7RATIO / 16245
.DW SN7RATIO / 16481
.DW SN7RATIO / 16721
.DW SN7RATIO / 16964
.DW SN7RATIO / 17211
.DW SN7RATIO / 17461
.DW SN7RATIO / 17715
.DW SN7RATIO / 17973
.DW SN7RATIO / 18234
.DW SN7RATIO / 18500
.DW SN7RATIO / 18769
.DW SN7RATIO / 19042
.DW SN7RATIO / 19319
.DW SN7RATIO / 19600
.DW SN7RATIO / 19885
.DW SN7RATIO / 20174
.DW SN7RATIO / 20468
.DW SN7RATIO / 20765
.DW SN7RATIO / 21067
.DW SN7RATIO / 21373
.DW SN7RATIO / 21684
.DW SN7RATIO / 22000
.DW SN7RATIO / 22320
.DW SN7RATIO / 22645
.DW SN7RATIO / 22974
.DW SN7RATIO / 23308
.DW SN7RATIO / 23647
.DW SN7RATIO / 23991
.DW SN7RATIO / 24340
.DW SN7RATIO / 24694
.DW SN7RATIO / 25053
.DW SN7RATIO / 25418
.DW SN7RATIO / 25787
.DW SN7RATIO / 26163
.DW SN7RATIO / 26544
.DW SN7RATIO / 26930
.DW SN7RATIO / 27321
.DW SN7RATIO / 27718
.DW SN7RATIO / 28121
.DW SN7RATIO / 28530
.DW SN7RATIO / 28945
.DW SN7RATIO / 29366
.DW SN7RATIO / 29793
.DW SN7RATIO / 30226
.DW SN7RATIO / 30666
.DW SN7RATIO / 31113
.DW SN7RATIO / 31566
.DW SN7RATIO / 32025
.DW SN7RATIO / 32490
.DW SN7RATIO / 32963
.DW SN7RATIO / 33442
.DW SN7RATIO / 33929
.DW SN7RATIO / 34422
.DW SN7RATIO / 34923
.DW SN7RATIO / 35431
.DW SN7RATIO / 35946
.DW SN7RATIO / 36469
.DW SN7RATIO / 36999
.DW SN7RATIO / 37537
.DW SN7RATIO / 38083
.DW SN7RATIO / 38637
.DW SN7RATIO / 39200
.DW SN7RATIO / 39770
.DW SN7RATIO / 40349
.DW SN7RATIO / 40936
.DW SN7RATIO / 41530
.DW SN7RATIO / 42134
.DW SN7RATIO / 42747
.DW SN7RATIO / 43369
.DW SN7RATIO / 44000
.DW SN7RATIO / 44640
.DW SN7RATIO / 45289
.DW SN7RATIO / 45948
.DW SN7RATIO / 46616
.DW SN7RATIO / 47294
.DW SN7RATIO / 47982
.DW SN7RATIO / 48680
.DW SN7RATIO / 49388
.DW SN7RATIO / 50106
.DW SN7RATIO / 50835
.DW SN7RATIO / 51575
.DW SN7RATIO / 52325
.DW SN7RATIO / 53086
.DW SN7RATIO / 53858
.DW SN7RATIO / 54642
.DW SN7RATIO / 55437
.DW SN7RATIO / 56243
.DW SN7RATIO / 57061
.DW SN7RATIO / 57891
.DW SN7RATIO / 58733
.DW SN7RATIO / 59587
.DW SN7RATIO / 60454
.DW SN7RATIO / 61333
.DW SN7RATIO / 62225
.DW SN7RATIO / 63130
.DW SN7RATIO / 64048
.DW SN7RATIO / 64980
.DW SN7RATIO / 65925
.DW SN7RATIO / 66884
.DW SN7RATIO / 67857
.DW SN7RATIO / 68844
.DW SN7RATIO / 69846
.DW SN7RATIO / 70862
.DW SN7RATIO / 71893
.DW SN7RATIO / 72938
.DW SN7RATIO / 73999
.DW SN7RATIO / 75075
.DW SN7RATIO / 76167
.DW SN7RATIO / 77275
.DW SN7RATIO / 78399
.DW SN7RATIO / 79539
.DW SN7RATIO / 80696
.DW SN7RATIO / 81870
.DW SN7RATIO / 83061
.DW SN7RATIO / 84269
.DW SN7RATIO / 85495
.DW SN7RATIO / 86738
.DW SN7RATIO / 88000
.DW SN7RATIO / 89280
.DW SN7RATIO / 90579
.DW SN7RATIO / 91896
.DW SN7RATIO / 93233
.DW SN7RATIO / 94589
.DW SN7RATIO / 95965
.DW SN7RATIO / 97361
.DW SN7RATIO / 98777
.DW SN7RATIO / 100214
.DW SN7RATIO / 101671
.DW SN7RATIO / 103150
.DW SN7RATIO / 104650
.DW SN7RATIO / 106172
.DW SN7RATIO / 107716
.DW SN7RATIO / 109283
.DW SN7RATIO / 110873
.DW SN7RATIO / 112486
.DW SN7RATIO / 114122
.DW SN7RATIO / 115782
.DW SN7RATIO / 117466
.DW SN7RATIO / 119175
.DW SN7RATIO / 120908
.DW SN7RATIO / 122667
.DW SN7RATIO / 124451
.DW SN7RATIO / 126261
.DW SN7RATIO / 128098
.DW SN7RATIO / 129961
.DW SN7RATIO / 131851
.DW SN7RATIO / 133769
.DW SN7RATIO / 135715
.DW SN7RATIO / 137689
.DW SN7RATIO / 139691
.DW SN7RATIO / 141723
.DW SN7RATIO / 143784
.DW SN7RATIO / 145876
.DW SN7RATIO / 147998
.DW SN7RATIO / 150151
.DW SN7RATIO / 152335
.DW SN7RATIO / 154550
.DW SN7RATIO / 156798
.DW SN7RATIO / 159079
.DW SN7RATIO / 161393
.DW SN7RATIO / 163740
.DW SN7RATIO / 166122
.DW SN7RATIO / 168538
.DW SN7RATIO / 170990
.DW SN7RATIO / 173477
.DW SN7RATIO / 176000
.DW SN7RATIO / 178560
.DW SN7RATIO / 181157
.DW SN7RATIO / 183792
.DW SN7RATIO / 186466
.DW SN7RATIO / 189178
.DW SN7RATIO / 191930
.DW SN7RATIO / 194722
.DW SN7RATIO / 197553
.DW SN7RATIO / 200426
.DW SN7RATIO / 203342
.DW SN7RATIO / 206299
.DW C7
SIZ_SN7NOTETBL .EQU $ - SN7NOTETBL
.ECHO "SN76489 approx "
.ECHO SIZ_SN7NOTETBL / 2 / 4 /12
.ECHO " Octaves. Last note index supported: "
.ECHO SIZ_SN7NOTETBL / 2
.ECHO "\n"

114
Source/HBIOS/std.asm

@ -2,7 +2,7 @@
; the requested build configuraton file to bring in platform specifics.
; There are several hardware platforms supported by SBC.
; 1. SBC Z80 SBC (v1 or v2) w/ ECB interface
; 1. SBC Z80 SBC (v1 or v2) w/ ECB interface
; 2. ZETA Standalone Z80 SBC w/ SBC compatibility
; 3. ZETA2 Second version of ZETA with enhanced memory bank switching
; 4. N8 MSX-ish Z180 SBC w/ onboard video and sound
@ -12,7 +12,7 @@
; 8. RCZ180 RC2014 based system with Z180 CPU
; 9. EZZ80 Easy Z80, Z80 SBC w/ RC2014 bus and CTC
; 10. SCZ180 Steve Cousins Z180 based system
; 11. DYNO Steve Garcia's Dyno Micro-ATX Motherboard
; 11. DYNO Steve Garcia's Dyno Micro-ATX Motherboard
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
@ -20,8 +20,8 @@
;
#INCLUDE "../ver.inc" ; ADD BIOSVER
;
FALSE .EQU 0
TRUE .EQU ~FALSE
FALSE .EQU 0
TRUE .EQU ~FALSE
;
; DEBUGGING OPTIONS
;
@ -186,6 +186,7 @@ AYMODE_RCZ180 .EQU 4 ; RC2014 SOUND MODULE BY ED BRINDLEY ON Z180
TMSMODE_NONE .EQU 0
TMSMODE_SCG .EQU 1 ; SCG ECB BOARD
TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO
TMSMODE_RC .EQU 3 ; RC2014 BUILT-IN VIDEO
;
; SERIAL DEVICE CONFIGURATION CONSTANTS
;
@ -207,7 +208,7 @@ SER_STOP2 .EQU 1 << 2
; AND STORED AS 5 BITS: YXXXX
;
SER_BAUD75 .EQU $00 << 8
SER_BAUD150 .EQU $01 << 8
SER_BAUD150 .EQU $01 << 8
SER_BAUD300 .EQU $02 << 8
SER_BAUD600 .EQU $03 << 8
SER_BAUD1200 .EQU $04 << 8
@ -217,34 +218,34 @@ SER_BAUD9600 .EQU $07 << 8
SER_BAUD19200 .EQU $08 << 8
SER_BAUD38400 .EQU $09 << 8
SER_BAUD76800 .EQU $0A << 8
SER_BAUD153600 .EQU $0B << 8
SER_BAUD307200 .EQU $0C << 8
SER_BAUD614400 .EQU $0D << 8
SER_BAUD1228800 .EQU $0E << 8
SER_BAUD2457600 .EQU $0F << 8
SER_BAUD225 .EQU $10 << 8
SER_BAUD450 .EQU $11 << 8
SER_BAUD900 .EQU $12 << 8
SER_BAUD1800 .EQU $13 << 8
SER_BAUD3600 .EQU $14 << 8
SER_BAUD7200 .EQU $15 << 8
SER_BAUD14400 .EQU $16 << 8
SER_BAUD28800 .EQU $17 << 8
SER_BAUD57600 .EQU $18 << 8
SER_BAUD153600 .EQU $0B << 8
SER_BAUD307200 .EQU $0C << 8
SER_BAUD614400 .EQU $0D << 8
SER_BAUD1228800 .EQU $0E << 8
SER_BAUD2457600 .EQU $0F << 8
SER_BAUD225 .EQU $10 << 8
SER_BAUD450 .EQU $11 << 8
SER_BAUD900 .EQU $12 << 8
SER_BAUD1800 .EQU $13 << 8
SER_BAUD3600 .EQU $14 << 8
SER_BAUD7200 .EQU $15 << 8
SER_BAUD14400 .EQU $16 << 8
SER_BAUD28800 .EQU $17 << 8
SER_BAUD57600 .EQU $18 << 8
SER_BAUD115200 .EQU $19 << 8
SER_BAUD230400 .EQU $1A << 8
SER_BAUD460800 .EQU $1B << 8
SER_BAUD921600 .EQU $1C << 8
SER_BAUD1843200 .EQU $1D << 8
SER_BAUD3686400 .EQU $1E << 8
SER_BAUD7372800 .EQU $1F << 8
SER_BAUD921600 .EQU $1C << 8
SER_BAUD1843200 .EQU $1D << 8
SER_BAUD3686400 .EQU $1E << 8
SER_BAUD7372800 .EQU $1F << 8
;
SER_XON .EQU 1 << 6
SER_DTR .EQU 1 << 7
SER_RTS .EQU 1 << 13
;
SER_75_8N1 .EQU SER_BAUD75 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_150_8N1 .EQU SER_BAUD150 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_75_8N1 .EQU SER_BAUD75 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_150_8N1 .EQU SER_BAUD150 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_300_8N1 .EQU SER_BAUD300 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_600_8N1 .EQU SER_BAUD600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1200_8N1 .EQU SER_BAUD1200 | SER_DATA8 | SER_PARNONE | SER_STOP1
@ -254,27 +255,27 @@ SER_9600_8N1 .EQU SER_BAUD9600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_19200_8N1 .EQU SER_BAUD19200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_38400_8N1 .EQU SER_BAUD38400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_76800_8N1 .EQU SER_BAUD76800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_153600_8N1 .EQU SER_BAUD153600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_307200_8N1 .EQU SER_BAUD307200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_614400_8N1 .EQU SER_BAUD614400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1228800_8N1 .EQU SER_BAUD1228800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_2457600_8N1 .EQU SER_BAUD2457600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_225_8N1 .EQU SER_BAUD225 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_450_8N1 .EQU SER_BAUD450 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_900_8N1 .EQU SER_BAUD900 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1800_8N1 .EQU SER_BAUD1800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_3600_8N1 .EQU SER_BAUD3600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_7200_8N1 .EQU SER_BAUD7200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_14400_8N1 .EQU SER_BAUD14400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_28800_8N1 .EQU SER_BAUD28800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_57600_8N1 .EQU SER_BAUD57600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_153600_8N1 .EQU SER_BAUD153600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_307200_8N1 .EQU SER_BAUD307200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_614400_8N1 .EQU SER_BAUD614400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1228800_8N1 .EQU SER_BAUD1228800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_2457600_8N1 .EQU SER_BAUD2457600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_225_8N1 .EQU SER_BAUD225 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_450_8N1 .EQU SER_BAUD450 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_900_8N1 .EQU SER_BAUD900 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1800_8N1 .EQU SER_BAUD1800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_3600_8N1 .EQU SER_BAUD3600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_7200_8N1 .EQU SER_BAUD7200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_14400_8N1 .EQU SER_BAUD14400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_28800_8N1 .EQU SER_BAUD28800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_57600_8N1 .EQU SER_BAUD57600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_115200_8N1 .EQU SER_BAUD115200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_230400_8N1 .EQU SER_BAUD230400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_460800_8N1 .EQU SER_BAUD460800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_921600_8N1 .EQU SER_BAUD921600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1843200_8N1 .EQU SER_BAUD1843200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_3686400_8N1 .EQU SER_BAUD3686400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_7372800_8N1 .EQU SER_BAUD7372800 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_921600_8N1 .EQU SER_BAUD921600 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_1843200_8N1 .EQU SER_BAUD1843200 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_3686400_8N1 .EQU SER_BAUD3686400 | SER_DATA8 | SER_PARNONE | SER_STOP1
SER_7372800_8N1 .EQU SER_BAUD7372800 | SER_DATA8 | SER_PARNONE | SER_STOP1
;
; TERMENABLE CONTROLS INCLUSION OF TERMINAL PSEUDO-DEVICE DRIVER
; IT IS SET TO TRUE BY THE INCLUSION OF ANY VDA DRIVER.
@ -298,13 +299,13 @@ KBD_DE .EQU 1 ; GERMAN
;
; EMULATION TYPES
;
EMUTYP_NONE .EQU 0 ; NONE
EMUTYP_TTY .EQU 1 ; TTY
EMUTYP_ANSI .EQU 2 ; ANSI
EMUTYP_NONE .EQU 0 ; NONE
EMUTYP_TTY .EQU 1 ; TTY
EMUTYP_ANSI .EQU 2 ; ANSI
;
; DEVICE DRIVER TO BE INITIALIZED FIRST. FIRST CIO DRIVER, UNIT 0 INITIALIZED BECOMES PRIMARY CONSOLE.
; IS AN INDEX INTO THE ENABLED INITIALIZATION DRIVER LIST i.e. ASCI, UART, SIO, ACIA, PIO, UF ETC.
; EXAMPLE: IF ONLY UART, SIO AND PIO ARE ENABLE AND THE SIO IS DESIRED AS THE PRIMARY CONSOLE,
; EXAMPLE: IF ONLY UART, SIO AND PIO ARE ENABLE AND THE SIO IS DESIRED AS THE PRIMARY CONSOLE,
; SET FORCECON TO 2 IN YOUR CUSTOM CONFIGURATION FILE i.e. "FORCECON: .SET 2"
;
FORCECON .EQU 0 ; DEFAULT IS TO FOLLOW NORMAL SEQUENCE
@ -345,8 +346,6 @@ CPUKHZ .SET CPUKHZ * 2 ; ADJUST FOR DOUBLE SPEED OPERATION
;
CPUMHZ .EQU CPUKHZ / 1000 ; CPU FREQ IN MHZ
;
TICKSPERSEC .EQU 50
;
; MEMORY BANK CONFIGURATION
;
#IF (BIOS == BIOS_UNA)
@ -430,7 +429,7 @@ GAM_LOC .EQU $0200 ; GAME 2048
GAM_SIZ .EQU $0900
GAM_END .EQU GAM_LOC + GAM_SIZ
USR_LOC .EQU $0200 ; USER
USR_LOC .EQU $0200 ; USER
USR_SIZ .EQU $1000
USR_END .EQU USR_LOC + USR_SIZ
@ -457,12 +456,12 @@ INT_SER1 .EQU 8 ; Z180 SERIAL 0
INT_PIO0A .EQU 9 ; ZILOG PIO 0, CHANNEL A
INT_PIO0B .EQU 10 ; ZILOG PIO 0, CHANNEL B
INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A
INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
INT_SIO0 .EQU 13 ; ZILOG SIO 0, CHANNEL A & B
INT_SIO1 .EQU 14 ; ZILOG SIO 1, CHANNEL A & B
#ELSE
; Z80-BASED SYSTEMS
INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A
@ -470,14 +469,14 @@ INT_CTC0B .EQU 1 ; ZILOG CTC 0, CHANNEL B
INT_CTC0C .EQU 2 ; ZILOG CTC 0, CHANNEL C
INT_CTC0D .EQU 3 ; ZILOG CTC 0, CHANNEL D
INT_SIO0 .EQU 7 ; ZILOG SIO 0, CHANNEL A & B
INT_SIO1 .EQU 8 ; ZILOG SIO 1, CHANNEL A & B
INT_SIO1 .EQU 8 ; ZILOG SIO 1, CHANNEL A & B
INT_PIO0A .EQU 9 ; ZILOG PIO 0, CHANNEL A
INT_PIO0B .EQU 10 ; ZILOG PIO 0, CHANNEL B
INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A
INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
INT_PIO0B .EQU 10 ; ZILOG PIO 0, CHANNEL B
INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A
INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
#ENDIF
#DEFINE IVT(INTX) HB_IVT+(INTX * 4)+1
#DEFINE VEC(INTX) INTX*2
@ -488,6 +487,7 @@ INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B
#DEFINE PRTC(C) CALL PRTCH \ .DB C ; PRINT CHARACTER C TO CONSOLE - PRTC('X')
#DEFINE PRTS(S) CALL PRTSTRD \ .TEXT S ; PRINT STRING S TO CONSOLE - PRTD("HELLO")
#DEFINE PRTX(X) CALL PRTSTRI \ .DW X ; PRINT STRING AT ADDRESS X TO CONSOLE - PRTI(STR_HELLO)
#DEFINE DEBUG(S) CALL PRTSTRD \ .TEXT S \ .TEXT "$" ; $$$$$$ PRINT STRING S TO CONSOLE - PRTD("HELLO") - NO TRAILING $ REQUIRED
;
#DEFINE XIO_PRTC(C) CALL XIO_PRTCH \ .DB C ; PRINT CHARACTER C TO CONSOLE - PRTC('X')
#DEFINE XIO_PRTS(S) CALL XIO_PRTSTRD \ .DB S ; PRINT STRING S TO CONSOLE - PRTD("HELLO")

88
Source/HBIOS/tms.asm

@ -14,6 +14,24 @@
; TMS DRIVER - CONSTANTS
;======================================================================
;
TMSCTRL1: .EQU 1 ; CONTROL BITS
TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT
#IF TMSTIMENABLE
.ECHO "TMS INTERRUPTS ENABLED"
#ENDIF
#IF (TMSMODE == TMSMODE_RC)
TMS_DATREG .EQU $BE ; READ/WRITE DATA
TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL
TMS_PPIA .EQU 0 ; PPI PORT A
TMS_PPIB .EQU 0 ; PPI PORT B
TMS_PPIC .EQU 0 ; PPI PORT C
TMS_PPIX .EQU 0 ; PPI CONTROL PORT
#ENDIF
#IF (TMSMODE == TMSMODE_N8)
TMS_DATREG .EQU $98 ; READ/WRITE DATA
@ -62,6 +80,14 @@ TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
; TMS DRIVER - INITIALIZATION
;======================================================================
;
TMS_PREINIT:
; DISABLE INTERRUPT GENERATION
LD A, (TMS_INIT9918_REG_1)
RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT
LD (TMS_INIT9918_REG_1), A
LD C, TMSCTRL1
JP TMS_SET
;
TMS_INIT:
#IF (CPUFAM == CPU_Z180)
CALL TMS_Z180IO
@ -93,6 +119,17 @@ TMS_INIT1:
#IF (TMSMODE == TMSMODE_N8)
CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER
#ENDIF
#IF (INTMODE == 1 & TMSTIMENABLE)
; ADD IM1 INT CALL LIST ENTRY
LD HL, TMS_TSTINT ; GET INT VECTOR
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
LD A, (TMS_INIT9918_REG_1)
SET TMSINTEN, A ; SET INTERRUPT ENABLE BIT
LD (TMS_INIT9918_REG_1), A
LD C, TMSCTRL1
CALL TMS_SET
#ENDIF
;
; ADD OURSELVES TO VDA DISPATCH TABLE
LD BC,TMS_FNTBL ; BC := FUNCTION TABLE ADDRESS
@ -107,7 +144,13 @@ TMS_INIT1:
;
XOR A ; SIGNAL SUCCESS
RET
;
#IF TMSTIMENABLE
; DISABLE INTERRUPT
TMS_INT_DIS:
#ENDIF
;
;======================================================================
; TMS DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS
;======================================================================
@ -136,7 +179,7 @@ TMS_FNTBL:
#ENDIF
#IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID TMS FUNCTION TABLE ***\n"
FAIL
!!!!!
#ENDIF
TMS_VDAINI:
@ -170,19 +213,19 @@ TMS_VDARES1: ; ENTRY POINT TO AVOID TMS_Z180IO RECURSION
DEC A
LD (TMS_CURSAV),A
CALL TMS_SETCUR ; SET CURSOR
XOR A ; SIGNAL SUCCESS
RET
TMS_VDADEV:
LD D,VDADEV_TMS ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
XOR A ; SIGNAL SUCCESS
RET
TMS_VDASCS:
CALL PANIC ; NOT IMPLEMENTED (YET)
TMS_VDASCP:
#IF (CPUFAM == CPU_Z180)
CALL TMS_Z180IO
@ -192,15 +235,15 @@ TMS_VDASCP:
CALL TMS_SETCUR
XOR A ; SIGNAL SUCCESS
RET
TMS_VDASAT:
XOR A ; NOT POSSIBLE, JUST SIGNAL SUCCESS
RET
TMS_VDASCO:
XOR A ; NOT POSSIBLE, JUST SIGNAL SUCCESS
RET
TMS_VDAWRC:
#IF (CPUFAM == CPU_Z180)
CALL TMS_Z180IO
@ -211,7 +254,7 @@ TMS_VDAWRC:
CALL TMS_SETCUR
XOR A ; SIGNAL SUCCESS
RET
TMS_VDAFIL:
#IF (CPUFAM == CPU_Z180)
CALL TMS_Z180IO
@ -239,7 +282,7 @@ TMS_VDACPY:
CALL TMS_SETCUR
XOR A
RET
TMS_VDASCR:
#IF (CPUFAM == CPU_Z180)
CALL TMS_Z180IO
@ -294,7 +337,7 @@ TMS_SET:
OUT (TMS_CMDREG),A ; WRITE IT
TMS_IODELAY
LD A,C ; GET THE DESIRED REGISTER
OR $80 ; SET BIT 7
OR $80 ; SET BIT 7
OUT (TMS_CMDREG),A ; SELECT THE DESIRED REGISTER
TMS_IODELAY
RET
@ -398,7 +441,7 @@ TMS_LOADFONT:
LD (TMS_STACK),SP ; SAVE STACK
LD HL,(TMS_STACK) ; AND SHIFT IT
LD DE,$2000 ; DOWN 4KB TO
CCF ; CREATE A
CCF ; CREATE A
SBC HL,DE ; DECOMPRESSION BUFFER
LD SP,HL ; HL POINTS TO BUFFER
EX DE,HL ; START OF STACK BUFFER
@ -597,7 +640,7 @@ TMS_SCROLL1:
INC DE
DJNZ TMS_SCROLL1
POP HL ; RECOVER THE DESTINATION
;
;
; WRITE THE BUFFERED LINE TO CURRENT DESTINATION
CALL TMS_WR ; SET UP TO WRITE
LD DE,TMS_BUF
@ -733,7 +776,7 @@ TMS_Z180IO:
OUT0 (Z180_DCNTL),A ; IMPLEMENT IT
POP AF ; RESTORE AF
; BACK TO CALLER
TMS_Z180IOR .EQU $+1
TMS_Z180IOR .EQU $+1
JP $0000 ; BACK TO CALLER
;
TMS_Z180IOX:
@ -745,6 +788,20 @@ TMS_Z180IOX:
RET ; DONE
;
#ENDIF
#IF (INTMODE == 1 & TMSTIMENABLE)
TMS_TSTINT:
IN A, (TMS_CMDREG) ; TEST FOR INT FLAG
AND $80
JR NZ, TMS_INTHNDL
AND $00 ; RETURN Z - NOT HANDLED
RET
TMS_INTHNDL:
CALL HB_TIMINT ; RETURN NZ - HANDLED
OR $FF
RET
#ENDIF
;
;==================================================================================================
; TMS DRIVER - DATA
@ -798,6 +855,7 @@ TMS_BUF .FILL 256,0 ; COPY BUFFER
;
TMS_INIT9918:
.DB $00 ; REG 0 - NO EXTERNAL VID
TMS_INIT9918_REG_1:
.DB $50 ; REG 1 - ENABLE SCREEN, SET MODE 1
.DB $00 ; REG 2 - PATTERN NAME TABLE := 0
.DB $00 ; REG 3 - NO COLOR TABLE

11
Source/HBIOS/util.asm

@ -183,6 +183,17 @@ PRTHEXWORD:
POP AF
RET
;
; PRINT THE HEX WORD VALUE IN HL
;
PRTHEXWORDHL:
PUSH AF
LD A,D
CALL PRTHEXBYTE
LD A,E
CALL PRTHEXBYTE
POP AF
RET
;
; PRINT THE HEX DWORD VALUE IN DE:HL
;
PRTHEX32:

2
Source/HBIOS/vdu.asm

@ -150,7 +150,7 @@ VDU_FNTBL:
.DW PPK_READ
#IF (($ - VDU_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID VDU FUNCTION TABLE ***\n"
FAIL
!!!!!
#ENDIF
VDU_VDAINI:

2
Source/HBIOS/vga.asm

@ -163,7 +163,7 @@ VGA_FNTBL:
.DW KBD_READ
#IF (($ - VGA_FNTBL) != (VDA_FNCNT * 2))
.ECHO "*** INVALID VGA FUNCTION TABLE ***\n"
FAIL
!!!!!
#ENDIF
VGA_VDAINI:

BIN
Source/Images/d_zsdos/u0/KERMIT.COM → Source/Images/d_cpm22/u0/KERCPM22.COM

Binary file not shown.

BIN
Source/Images/d_cpm22/u0/KERMIT.COM → Source/Images/d_cpm3/u0/KERCPM3.COM

Binary file not shown.

BIN
Source/Images/d_nzcom/u0/KERMIT.COM → Source/Images/d_nzcom/u0/KERCPM22.COM

Binary file not shown.

BIN
Source/Images/d_cpm3/u0/KERMIT.COM → Source/Images/d_zpm3/u15/kercpm3.com

Binary file not shown.

BIN
Source/Images/d_zpm3/u15/kermit.com → Source/Images/d_zsdos/u0/KERCPM22.COM

Binary file not shown.

2
Source/Makefile

@ -2,7 +2,7 @@
# order is actually important, because of build dependencies
#
SUBDIRS = Prop
SUBDIRS += Apps
SUBDIRS += Apps
SUBDIRS += CBIOS
SUBDIRS += Forth
SUBDIRS += Fonts

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.1-pre.9"
#DEFINE BIOSVER "3.1-pre.12"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 0
rtp equ 0
biosver macro
db "3.1-pre.9"
db "3.1-pre.12"
endm

20
Tools/Makefile.inc

@ -24,7 +24,7 @@ RELPATH := $(subst $(TREEROOT),,$(HERE))
#
# where's a copy of this tree for windows so we can diff binaries
#
WINROOT = $(TREEROOT)/../RomWBW.windows
WINROOT = $(TREEROOT)/../RomWBW.windows
DIFFTO := $(shell if [ -d $(WINROOT) ] ; then cd $(WINROOT); pwd; fi)
DIFFPATH := $(DIFFTO)/$(RELPATH)
@ -57,7 +57,7 @@ CPM=$(TOOLS)/cpm/bin
%.hex: %.asm
$(ZXCC) $(CPM)/MAC -$< -$$PO ; \
%.bin: %.ASM
$(ZXCC) $(CPM)/MAC -$< -$$PO
$(ZXCC) $(CPM)/MLOAD25 -tmp.bin=$*.hex
@ -67,7 +67,7 @@ CPM=$(TOOLS)/cpm/bin
%.com: %.z80
$(ZXCC) $(CPM)/Z80ASM -$(basename $<)/F ; \
mv $$($(CASEFN) $@) tmp.com ; mv tmp.com $@
%.bin: %.asm
$(TASM) $< $@
@ -77,10 +77,10 @@ CPM=$(TOOLS)/cpm/bin
%.rel: %.z80
$(ZXCC) $(CPM)/Z80ASM -$(basename $<)/MF
%.hex: %.180
%.hex: %.180
$(ZXCC) $(CPM)/SLR180 -$(basename $<)/HF
%.rel: %.azm
%.rel: %.azm
$(ZXCC) $(CPM)/ZSM =$<
%.bin: %.rel
@ -143,7 +143,7 @@ clobber:: clean
# the same objects
#
diff::
ifneq ($(DIFFTO),)
ifneq ($(DIFFTO),)
@for dir in $(SUBDIRS) ; do \
( echo "diff in $(HERE)/$$dir" ; cd "$$dir" ; make diff ) ; \
done
@ -166,8 +166,8 @@ ifneq ($(DIFFTO),)
if [ ! -f "$$df" ] ; then echo $(DIFFPATH)/$$i missing ; fi ; \
fi ; \
done
endif
vdiff:
make VERBOSEDIFF=2 diff
endif
vdiff:
make VERBOSEDIFF=2 diff

Loading…
Cancel
Save