From 890f9262e01297b404dba6d8e0ff5904e044d3db Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Wed, 22 Apr 2020 21:12:41 +1000 Subject: [PATCH] HBIOS: Added support for sound drivers New sound driver support with initial support for the SN76489 chip New build configuration entry: * SN76489ENABLE Ports are currently locked in with: * SN76489_PORT_LEFT .EQU $FC ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT) * SN76489_PORT_RIGHT .EQU $F8 ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT) --- Source/Doc/Architecture.md | 83 +++++ Source/HBIOS/Config/RCZ80_std.asm | 2 + Source/HBIOS/audio.inc | 26 ++ Source/HBIOS/cfg_dyno.asm | 3 + Source/HBIOS/cfg_ezz80.asm | 3 + Source/HBIOS/cfg_master.asm | 3 + Source/HBIOS/cfg_mk4.asm | 3 + Source/HBIOS/cfg_n8.asm | 3 + Source/HBIOS/cfg_rcz180.asm | 3 + Source/HBIOS/cfg_rcz80.asm | 3 + Source/HBIOS/cfg_sbc.asm | 3 + Source/HBIOS/cfg_scz180.asm | 3 + Source/HBIOS/cfg_zeta.asm | 3 + Source/HBIOS/cfg_zeta2.asm | 3 + Source/HBIOS/hbios.asm | 72 +++- Source/HBIOS/hbios.inc | 16 + Source/HBIOS/sn76489.asm | 588 ++++++++++++++++++++++++++++++ Source/HBIOS/std.asm | 89 ++--- Source/Makefile | 2 +- 19 files changed, 865 insertions(+), 46 deletions(-) create mode 100644 Source/HBIOS/audio.inc create mode 100644 Source/HBIOS/sn76489.asm diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index 90d531ba..eb962567 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -1292,6 +1292,81 @@ codes as described at the start of this section. `\clearpage`{=latex} +Sound (SND) +------------ + +### Function 0x50 -- Sound Reset (SNDRESET) + +| _Entry Parameters_ +| B: 0x50 +| C: The audio device unit number + +| _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: The audio device unit number +| L: The volume to be applied (00=Silence, FF=Maximum) + +| _Exit Results_ +| A: Status (0=OK, else error) + +This function set the volume configuration command. The volume will +be applied when the SNDPLAY function is invoked. + +### Function 0x52 -- Sound Volume (SNDPIT) + +| _Entry Parameters_ +| B: 0x52 +| C: The audio device unit number +| HL: The pitch to be applied (0000=lowest note, FFFF=highest note) + +This function set the pitch configuration command. The pitch will +be applied when the SNDPLAY function is invoked. + +### Function 0x53 -- Sound Volume (SNDNOTE) + +| _Entry Parameters_ +| B: 0x52 +| C: The audio device unit number +| L: A number from 0 to 255 selecting quarter notes + +This function will apply a pitch value to the sound chip. + +The value correspond to standard musical notes. The value allows for selection +of a quarter of a semitone by giving a value between 0 and upto 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: 0x53 +| C: The audio device unit number +| D: The channel to play the previously configured tone + +This function set the pitch and volume previously configured with the SNDPIT +and SNDVOL functions. + +For example, to play a specific note, on the first installed driver, 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) ------------ @@ -1573,6 +1648,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/HBIOS/Config/RCZ80_std.asm b/Source/HBIOS/Config/RCZ80_std.asm index da88345f..5b120cb7 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..e171eb41 --- /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..01c0f32b 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -154,3 +154,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 \ No newline at end of file diff --git a/Source/HBIOS/cfg_ezz80.asm b/Source/HBIOS/cfg_ezz80.asm index 9784be32..385ca6d7 100644 --- a/Source/HBIOS/cfg_ezz80.asm +++ b/Source/HBIOS/cfg_ezz80.asm @@ -179,3 +179,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 \ No newline at end of file diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 52bd69d2..a4cf63d5 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -234,3 +234,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 \ No newline at end of file diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 6cfd61bc..191128bd 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -188,3 +188,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 \ No newline at end of file diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 26ff3331..48362ebf 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -188,3 +188,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 \ No newline at end of file diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index f099c2cf..18037ad3 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -188,3 +188,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 \ No newline at end of file diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index f94c1694..02a35956 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -194,3 +194,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..60b8675d 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -190,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 \ No newline at end of file diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 41af5fb4..e16892a0 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -183,3 +183,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 \ No newline at end of file diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index ca9dfb7e..6a3982a7 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -134,3 +134,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 \ No newline at end of file diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 1192d8d5..e5422759 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -144,3 +144,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 \ No newline at end of file diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 55ed757e..81404dcf 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1647,6 +1647,9 @@ HB_PCINITTBLLEN .EQU (($ - HB_PCINITTBL) / 2) ;================================================================================================== ; HB_INITTBL: +#IF (SN76489ENABLE) + .DW SN76489_INIT +#ENDIF #IF (CTCENABLE) .DW CTC_INIT #ENDIF @@ -1731,6 +1734,7 @@ HB_INITTBL: #IF (UFENABLE) .DW UF_INIT #ENDIF + ; HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) ; @@ -1794,6 +1798,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 @@ -2154,7 +2162,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 ; @@ -2219,6 +2227,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 @@ -2359,6 +2412,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 @@ -2477,6 +2532,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 @@ -3250,6 +3312,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" diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 6c166307..477fcdfe 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -51,6 +51,21 @@ BF_VDASCR .EQU BF_VDA + 11 ; SCROLL 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 +SND_STATUS .EQU 0 +SND_CHCNT .EQU SND_STATUS + 1 ; RETURN COUNT OF CHANNELS +SND_SVOLUME .EQU SND_STATUS + 2 ; 8 BIT NUMBER +SND_SPITCH .EQU SND_STATUS + 3 ; 16 BIT NUMBER + ; BF_SYS .EQU $F0 BF_SYSRESET .EQU BF_SYS + 0 ; SOFT RESET HBIOS @@ -70,6 +85,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/sn76489.asm b/Source/HBIOS/sn76489.asm new file mode 100644 index 00000000..68928dfb --- /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 (LEFT) +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_NODE .EQU 209300 ; C7 + +A1S .equ SN7RATIO / SN7_FIRST_NOTE +C7 .EQU SN7RATIO / SN7_LAST_NODE + + .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 + +; BITS MAPING +; 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 SND_CHCNT + JR Z, SN7_QUERY_CHCNT + + CP SND_SPITCH + JR Z, SN7_QUERY_PITCH + + CP SND_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" + FAIL +#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..93015bd8 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; @@ -207,7 +207,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 +217,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 +254,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. @@ -304,7 +304,7 @@ 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 @@ -430,7 +430,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 @@ -462,7 +462,7 @@ 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 @@ -477,7 +477,7 @@ 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 +488,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/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