From d14cf27acfec0f14803d873505486e826bbbf6d5 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Wed, 22 Apr 2020 11:26:32 -0700 Subject: [PATCH] Miscellaneous Cleanup No functional changes. --- Doc/ChangeLog.txt | 2 + Doc/RomWBW Applications.pdf | Bin 140215 -> 140215 bytes Doc/RomWBW Architecture.pdf | Bin 371105 -> 396943 bytes Doc/RomWBW Getting Started.pdf | Bin 166096 -> 166220 bytes ReadMe.md | 7 +- ReadMe.txt | 7 +- Source/Doc/Architecture.md | 72 ++-- Source/Doc/GettingStarted.md | 5 +- Source/HBIOS/Config/RCZ80_std.asm | 2 +- Source/HBIOS/audio.inc | 52 +-- Source/HBIOS/cfg_dyno.asm | 4 +- Source/HBIOS/cfg_ezz80.asm | 4 +- Source/HBIOS/cfg_master.asm | 4 +- Source/HBIOS/cfg_mk4.asm | 4 +- Source/HBIOS/cfg_n8.asm | 4 +- Source/HBIOS/cfg_rcz180.asm | 4 +- Source/HBIOS/cfg_sbc.asm | 4 +- Source/HBIOS/cfg_scz180.asm | 4 +- Source/HBIOS/cfg_zeta.asm | 4 +- Source/HBIOS/cfg_zeta2.asm | 4 +- Source/HBIOS/hbios.asm | 20 +- Source/HBIOS/hbios.inc | 13 +- Source/HBIOS/sn76489.asm | 552 +++++++++++++++--------------- Source/HBIOS/std.asm | 24 +- Source/HBIOS/util.asm | 11 + Source/ver.inc | 2 +- Source/ver.lib | 2 +- 27 files changed, 425 insertions(+), 386 deletions(-) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 1d48213c..50f5f407 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -9,6 +9,8 @@ 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 +- D?N: Added sound driver support +- D?N: Added SN76489 sound chip driver Version 3.0.1 ------------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 4fdbaee45f2fef4c43fd928b2e3d648a992e9479..8bc1135e2ed68689ef93bf92ab3df4f12e39df52 100644 GIT binary patch delta 113 zcmdmfoMZcOj)pCa>c2RQj0_D8O-u}?>;GbuhV!-u{bFR*bT%|Hbu}^pLPujKBPUlg fQ$sUHR~J)9V>e?XQ%4skI|Um;N~X_JW|9Q}87CcE delta 113 zcmdmfoMZcOj)pCa>c2P)O${tf3=9pY>;GbuhV!-u{bFR*bT+qibaXXyG&C?acCs*b gGIlX=wJ>%zH?(lHa5Z)@H?UK%A*5vbEM+EH042vAZvX%Q diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index 3987650cb0c1a45e1c25ec5c58535bb99b65496d..9c90a8d0e791023bd75a7ca534350613db0c9138 100644 GIT binary patch delta 70567 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

`JJc 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 delta 48158 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 diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 2329e301f157737df240a3d604a963483c960098..99f132330355482b09020140ded9efafc6749e35 100644 GIT binary patch delta 10568 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 delta 10485 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 diff --git a/ReadMe.md b/ReadMe.md index 030e20e5..0ef34b7f 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ ## Z80/Z180 System Software Version 3.1 Pre-release -Wednesday 15 April 2020 +Wednesday 22 April 2020 Wayne Warthen @@ -1141,8 +1141,11 @@ 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. + - Dean Netherton contributed the sound driver interface and the + SN76489 sound driver. Contributions of all kinds to RomWBW are very welcome. diff --git a/ReadMe.txt b/ReadMe.txt index e0241d40..4337d2cb 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 +Wednesday 22 April 2020 Wayne Warthen wwarthen@gmail.com @@ -1173,8 +1173,11 @@ 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. +- Dean Netherton contributed the sound driver interface and the + SN76489 sound driver. Contributions of all kinds to RomWBW are very welcome. diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index eb962567..94c9a85d 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -1299,7 +1299,7 @@ Sound (SND) | _Entry Parameters_ | B: 0x50 -| C: The audio device unit number +| C: Audio Device Unit ID | _Exit Results_ | A: Status (0=OK, else error) @@ -1311,53 +1311,62 @@ channels to silence. | _Entry Parameters_ | B: 0x51 -| C: The audio device unit number -| L: The volume to be applied (00=Silence, FF=Maximum) +| C: Audio Device Unit ID +| L: Volume (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. +This function sets the sound chip volume parameter. The volume will +be applied when the next SNDPLAY function is invoked. -### Function 0x52 -- Sound Volume (SNDPIT) +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: The audio device unit number -| HL: The pitch to be applied (0000=lowest note, FFFF=highest note) +| 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. -This function set the pitch configuration command. The pitch will -be applied when the SNDPLAY function is invoked. +The pitch value is a driver specific value. To play standardized +notes, use the SNDNOTE function. -### Function 0x53 -- Sound Volume (SNDNOTE) +### Function 0x53 -- Sound Note (SNDNOTE) | _Entry Parameters_ -| B: 0x52 -| C: The audio device unit number -| L: A number from 0 to 255 selecting quarter notes +| B: 0x53 +| C: Audio Device Unit ID +| L: Note (0 to 255 quarter notes) -This function will apply a pitch value to the sound chip. +This function sets the sound chip pitch parameter according to +standardized notes. -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). +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. +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 +| B: 0x54 +| C: Audio Device Unit ID +| D: Channel -This function set the pitch and volume previously configured with the SNDPIT -and SNDVOL functions. +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 the first installed driver, the following -HBIOS calls would need to be made +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 @@ -1555,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_ diff --git a/Source/Doc/GettingStarted.md b/Source/Doc/GettingStarted.md index a92b189a..4148a245 100644 --- a/Source/Doc/GettingStarted.md +++ b/Source/Doc/GettingStarted.md @@ -1194,8 +1194,11 @@ 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. +* Dean Netherton contributed the sound driver interface and +the SN76489 sound driver. Contributions of all kinds to RomWBW are very welcome. diff --git a/Source/HBIOS/Config/RCZ80_std.asm b/Source/HBIOS/Config/RCZ80_std.asm index 5b120cb7..5766331e 100644 --- a/Source/HBIOS/Config/RCZ80_std.asm +++ b/Source/HBIOS/Config/RCZ80_std.asm @@ -38,5 +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 index e171eb41..e1a9fbe4 100644 --- a/Source/HBIOS/audio.inc +++ b/Source/HBIOS/audio.inc @@ -1,26 +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 +#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 01c0f32b..8226482d 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -155,5 +155,5 @@ 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 +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 385ca6d7..990d2e1d 100644 --- a/Source/HBIOS/cfg_ezz80.asm +++ b/Source/HBIOS/cfg_ezz80.asm @@ -180,5 +180,5 @@ 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 +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 a4cf63d5..faafae4e 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -235,5 +235,5 @@ 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 +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 191128bd..8e23bf25 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -189,5 +189,5 @@ 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 +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 48362ebf..7cb9a714 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -189,5 +189,5 @@ 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 +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 18037ad3..fcdf9d72 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -189,5 +189,5 @@ 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 +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 60b8675d..e682bc01 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -191,5 +191,5 @@ 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 +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 e16892a0..07d679ce 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -184,5 +184,5 @@ 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 +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 6a3982a7..93dcb107 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -135,5 +135,5 @@ 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 +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 e5422759..e42d0503 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -145,5 +145,5 @@ 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 +SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER +AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 81404dcf..3af09e56 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 ; @@ -1647,9 +1647,6 @@ HB_PCINITTBLLEN .EQU (($ - HB_PCINITTBL) / 2) ;================================================================================================== ; HB_INITTBL: -#IF (SN76489ENABLE) - .DW SN76489_INIT -#ENDIF #IF (CTCENABLE) .DW CTC_INIT #ENDIF @@ -1659,6 +1656,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 @@ -3959,7 +3959,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 diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 477fcdfe..17a9ae23 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -51,7 +51,7 @@ 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) @@ -59,13 +59,12 @@ BF_SNDPIT .EQU BF_SND + 2 ; REQUEST SOUND PITCH - HL CONTAINS PITCH DRIVER SPECI 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_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 diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index 68928dfb..18f7f649 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -11,9 +11,9 @@ ;====================================================================== ; -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 +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 @@ -23,33 +23,33 @@ CHANNEL_2_SILENT .EQU $DF CHANNEL_3_SILENT .EQU $FF SN7CLKDIVIDER .EQU 4 -SN7CLK .EQU CPUOSC / SN7CLKDIVIDER +SN7CLK .EQU CPUOSC / SN7CLKDIVIDER SN7RATIO .EQU SN7CLK * 100 / 32 SN7_FIRST_NOTE .EQU 5827 ; A1# -SN7_LAST_NODE .EQU 209300 ; C7 +SN7_LAST_NOTE .EQU 209300 ; C7 -A1S .equ SN7RATIO / SN7_FIRST_NOTE -C7 .EQU SN7RATIO / SN7_LAST_NODE +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" + .ECHO "SN76489: range of A1# (pitch: " + .ECHO A1S + .ECHO ") to C7 (pitch: " + .ECHO C7 + .ECHO ")\n" -#include "audio.inc" +#INCLUDE "audio.inc" SN76489_INIT: LD IY, SN7_IDAT ; POINTER TO INSTANCE DATA - LD DE,STR_MESSAGELT + LD DE,STR_MESSAGELT CALL WRITESTR LD A, SN76489_PORT_LEFT CALL PRTHEXBYTE - LD DE,STR_MESSAGERT + LD DE,STR_MESSAGERT CALL WRITESTR LD A, SN76489_PORT_RIGHT CALL PRTHEXBYTE @@ -95,7 +95,7 @@ SN7_VOLUME_OFF: RET -; BITS MAPING +; BIT MAPPING ; SET TONE: ; 1 CC 0 PPPP (LOW) ; 0 0 PPPPPP (HIGH) @@ -121,10 +121,10 @@ SN7_NOTE: 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 + OR A ; CLEAR CARRY FLAG LD DE, SIZ_SN7NOTETBL - SBC HL, DE - JR NC, SN7_NOTE1 ; INCOMING HL DOES NOT MAP INTO 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 @@ -140,7 +140,7 @@ SN7_NOTE: JR SN7_PITCH ; APPLY PITCH SN7_NOTE1: - OR $FF ; not implemented yet + OR $FF ; NOT IMPLEMENTED YET RET SN7_PITCH: @@ -165,13 +165,13 @@ SN7_PLAY: SN7_QUERY: LD A, E - CP SND_CHCNT + CP BF_SNDQ_CHCNT JR Z, SN7_QUERY_CHCNT - CP SND_SPITCH + CP BF_SNDQ_SPITCH JR Z, SN7_QUERY_PITCH - CP SND_SVOLUME + CP BF_SNDQ_SVOLUME JR Z, SN7_QUERY_VOLUME OR $FF ; SIGNAL FAILURE @@ -310,7 +310,7 @@ SN7_FNTBL: PENDING_PITCH .DW 0 ; PENDING PITCH (10 BITS) PENDING_VOLUME - .DB 0 ; PENDING VOL (8 BITS -> downoverted to 4 BITS and inverted) + .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$" @@ -324,265 +324,265 @@ 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$" +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 + .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" + .ECHO SIZ_SN7NOTETBL / 2 + .ECHO "\n" diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 93015bd8..3c2f8af0 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 @@ -20,8 +20,8 @@ ; #INCLUDE "../ver.inc" ; ADD BIOSVER ; -FALSE .EQU 0 -TRUE .EQU ~FALSE +FALSE .EQU 0 +TRUE .EQU ~FALSE ; ; DEBUGGING OPTIONS ; @@ -298,9 +298,9 @@ 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. @@ -457,7 +457,7 @@ 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 @@ -470,11 +470,11 @@ 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 @@ -488,7 +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 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/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/ver.inc b/Source/ver.inc index c6cdf73b..f20047e5 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.10" diff --git a/Source/ver.lib b/Source/ver.lib index 1524ad08..821e6368 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.10" endm