diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 1d48213c..3b10f0a5 100644 --- a/Doc/ChangeLog.txt +++ b/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 diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 4fdbaee4..4e1c4b27 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index 3987650c..f4da7db2 100644 Binary files a/Doc/RomWBW Architecture.pdf and b/Doc/RomWBW Architecture.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf new file mode 100644 index 00000000..72d259f0 Binary files /dev/null and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 2329e301..e25d7453 100644 Binary files a/Doc/RomWBW Getting Started.pdf and b/Doc/RomWBW Getting Started.pdf differ diff --git a/ReadMe.md b/ReadMe.md index 030e20e5..bbd5b46e 100644 --- a/ReadMe.md +++ b/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 @@ -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. diff --git a/ReadMe.txt b/ReadMe.txt index e0241d40..27ad0aa6 100644 --- a/ReadMe.txt +++ b/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. diff --git a/Source/Apps/Tune/Build.cmd b/Source/Apps/Tune/Build.cmd index 568f73dc..82fa4c33 100644 --- a/Source/Apps/Tune/Build.cmd +++ b/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\ \ No newline at end of file diff --git a/Source/Apps/Tune/Makefile b/Source/Apps/Tune/Makefile index 3aa5c338..cbca69a5 100644 --- a/Source/Apps/Tune/Makefile +++ b/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 diff --git a/Source/Apps/Tune/Tune.asm b/Source/Apps/Tune/Tune.asm index 046b83ac..aa28cb95 100644 --- a/Source/Apps/Tune/Tune.asm +++ b/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 ; - CALL PRTCHR ; print it - LD A,10 ; - 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 .[PT2|PT3|MYM]",0 + .DB "Usage: TUNE .[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 ;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 diff --git a/Source/Apps/Tune/cli.inc b/Source/Apps/Tune/cli.inc new file mode 100644 index 00000000..c8ac9b8c --- /dev/null +++ b/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 \ No newline at end of file diff --git a/Source/Apps/Tune/cpm.inc b/Source/Apps/Tune/cpm.inc new file mode 100644 index 00000000..a3c84af9 --- /dev/null +++ b/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 diff --git a/Source/Apps/Tune/hbios.inc b/Source/Apps/Tune/hbios.inc new file mode 100644 index 00000000..874a9699 --- /dev/null +++ b/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 diff --git a/Source/Apps/Tune/printing.inc b/Source/Apps/Tune/printing.inc new file mode 100644 index 00000000..8a6b4e9a --- /dev/null +++ b/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 ; + CALL PRTCHR ; print it + LD A,10 ; + CALL PRTCHR ; print it + POP AF ; restore AF + RET diff --git a/Source/Apps/Tune/strings.inc b/Source/Apps/Tune/strings.inc new file mode 100644 index 00000000..5df10276 --- /dev/null +++ b/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 diff --git a/Source/Apps/Tune/timing.inc b/Source/Apps/Tune/timing.inc new file mode 100644 index 00000000..857e4d2c --- /dev/null +++ b/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 diff --git a/Source/Apps/Tune/tune.inc b/Source/Apps/Tune/tune.inc new file mode 100644 index 00000000..3db0e0e9 --- /dev/null +++ b/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 diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index 47c2ca47..f861e737 100644 --- a/Source/CBIOS/cbios.asm +++ b/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 diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index 90d531ba..94c9a85d 100644 --- a/Source/Doc/Architecture.md +++ b/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) diff --git a/Source/Doc/Catalog.md b/Source/Doc/Catalog.md new file mode 100644 index 00000000..eabf792f --- /dev/null +++ b/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 | \ No newline at end of file diff --git a/Source/Doc/GettingStarted.md b/Source/Doc/GettingStarted.md index a92b189a..dada3943 100644 --- a/Source/Doc/GettingStarted.md +++ b/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). \ No newline at end of file diff --git a/Source/HBIOS/Config/RCZ80_std.asm b/Source/HBIOS/Config/RCZ80_std.asm index da88345f..5766331e 100644 --- a/Source/HBIOS/Config/RCZ80_std.asm +++ b/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 diff --git a/Source/HBIOS/audio.inc b/Source/HBIOS/audio.inc new file mode 100644 index 00000000..e1a9fbe4 --- /dev/null +++ b/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 diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index 13714081..1322676b 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/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 diff --git a/Source/HBIOS/cfg_ezz80.asm b/Source/HBIOS/cfg_ezz80.asm index 9784be32..99e94ced 100644 --- a/Source/HBIOS/cfg_ezz80.asm +++ b/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 diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 52bd69d2..c5ad1178 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/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 diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 6cfd61bc..0b247c57 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/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 diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 26ff3331..20f54fb2 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/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 diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index f099c2cf..6a2b259d 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/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 diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index f0b21fa2..f69bdbaf 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/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 diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 0c7e2170..0e751225 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/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 diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 41af5fb4..24abe9f0 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/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 diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index ca9dfb7e..865f2506 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/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 diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 1192d8d5..0109f702 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/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 diff --git a/Source/HBIOS/ctc.asm b/Source/HBIOS/ctc.asm index 0f056946..a9d80441 100644 --- a/Source/HBIOS/ctc.asm +++ b/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. diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index 4b51dfa2..1ceb847d 100644 --- a/Source/HBIOS/cvdu.asm +++ b/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: diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index c586badc..6814f6fb 100644 --- a/Source/HBIOS/hbios.asm +++ b/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 diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 6c36b826..6c2ad088 100644 --- a/Source/HBIOS/hbios.inc +++ b/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 diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 9cf31c0c..884c5cce 100644 --- a/Source/HBIOS/romldr.asm +++ b/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 [.]: 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 - Set Console Interface" +#endif + .db "\r\n [.] - 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 diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm new file mode 100644 index 00000000..3c12acb6 --- /dev/null +++ b/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" diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 1ba9f27f..cbd8f0a3 100644 --- a/Source/HBIOS/std.asm +++ b/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") diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 832e99e0..fb594f93 100644 --- a/Source/HBIOS/tms.asm +++ b/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 diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index f647a5a4..a1ca84ff 100644 --- a/Source/HBIOS/util.asm +++ b/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: diff --git a/Source/HBIOS/vdu.asm b/Source/HBIOS/vdu.asm index 1c2a2ca1..2c057ca2 100644 --- a/Source/HBIOS/vdu.asm +++ b/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: diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index dde15dae..30bb2b4e 100644 --- a/Source/HBIOS/vga.asm +++ b/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: diff --git a/Source/Images/d_zsdos/u0/KERMIT.COM b/Source/Images/d_cpm22/u0/KERCPM22.COM similarity index 95% rename from Source/Images/d_zsdos/u0/KERMIT.COM rename to Source/Images/d_cpm22/u0/KERCPM22.COM index b24df273..a3a9f3c2 100644 Binary files a/Source/Images/d_zsdos/u0/KERMIT.COM and b/Source/Images/d_cpm22/u0/KERCPM22.COM differ diff --git a/Source/Images/d_cpm22/u0/KERMIT.COM b/Source/Images/d_cpm3/u0/KERCPM3.COM similarity index 96% rename from Source/Images/d_cpm22/u0/KERMIT.COM rename to Source/Images/d_cpm3/u0/KERCPM3.COM index b24df273..4882ea50 100644 Binary files a/Source/Images/d_cpm22/u0/KERMIT.COM and b/Source/Images/d_cpm3/u0/KERCPM3.COM differ diff --git a/Source/Images/d_nzcom/u0/KERMIT.COM b/Source/Images/d_nzcom/u0/KERCPM22.COM similarity index 95% rename from Source/Images/d_nzcom/u0/KERMIT.COM rename to Source/Images/d_nzcom/u0/KERCPM22.COM index b24df273..a3a9f3c2 100644 Binary files a/Source/Images/d_nzcom/u0/KERMIT.COM and b/Source/Images/d_nzcom/u0/KERCPM22.COM differ diff --git a/Source/Images/d_cpm3/u0/KERMIT.COM b/Source/Images/d_zpm3/u15/kercpm3.com similarity index 96% rename from Source/Images/d_cpm3/u0/KERMIT.COM rename to Source/Images/d_zpm3/u15/kercpm3.com index 16dc2308..4882ea50 100644 Binary files a/Source/Images/d_cpm3/u0/KERMIT.COM and b/Source/Images/d_zpm3/u15/kercpm3.com differ diff --git a/Source/Images/d_zpm3/u15/kermit.com b/Source/Images/d_zsdos/u0/KERCPM22.COM similarity index 95% rename from Source/Images/d_zpm3/u15/kermit.com rename to Source/Images/d_zsdos/u0/KERCPM22.COM index 16dc2308..a3a9f3c2 100644 Binary files a/Source/Images/d_zpm3/u15/kermit.com and b/Source/Images/d_zsdos/u0/KERCPM22.COM differ diff --git a/Source/Makefile b/Source/Makefile index 166bb4c1..63c4204f 100644 --- a/Source/Makefile +++ b/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 diff --git a/Source/ver.inc b/Source/ver.inc index c6cdf73b..311c55f8 100644 --- a/Source/ver.inc +++ b/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" diff --git a/Source/ver.lib b/Source/ver.lib index 1524ad08..f5cc5c1c 100644 --- a/Source/ver.lib +++ b/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 diff --git a/Tools/Makefile.inc b/Tools/Makefile.inc index 0de5bc5e..bccb2e26 100644 --- a/Tools/Makefile.inc +++ b/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