Browse Source

Duodyne Voice I/O Support

- Adds support for SN76489 on Voice I/O Board
- Updated SOUND.COM utility
pull/393/head v3.5.0-dev.19
Wayne Warthen 2 years ago
parent
commit
c3c541d150
  1. 1
      Source/Apps/Test/Build.cmd
  2. 1
      Source/Apps/Test/Clean.cmd
  3. 2
      Source/Apps/Test/Makefile
  4. 12
      Source/Apps/Test/sound/Build.cmd
  5. 6
      Source/Apps/Test/sound/Clean.cmd
  6. 7
      Source/Apps/Test/sound/Makefile
  7. 329
      Source/Apps/Test/sound/Scales.asm
  8. 177
      Source/Apps/Test/sound/printing.inc
  9. 460
      Source/Apps/Test/sound/sound.asm
  10. 4
      Source/HBIOS/cfg_duo.asm
  11. 6
      Source/HBIOS/sn76489.asm
  12. 1
      Source/HBIOS/std.asm
  13. 2
      Source/ver.inc
  14. 2
      Source/ver.lib

1
Source/Apps/Test/Build.cmd

@ -24,6 +24,7 @@ pushd 2piotst && call Build || exit /b & popd
pushd piomon && call Build || exit /b & popd
pushd banktest && call Build || exit /b & popd
pushd portscan && call Build || exit /b & popd
pushd sound && call Build || exit /b & popd
goto :eof

1
Source/Apps/Test/Clean.cmd

@ -21,3 +21,4 @@ pushd 2piotst && call Clean || exit /b 1 & popd
pushd piomon && call Clean || exit /b 1 & popd
pushd banktest && call Clean || exit /b 1 & popd
pushd portscan && call Clean || exit /b 1 & popd
pushd sound && call Clean || exit /b 1 & popd

2
Source/Apps/Test/Makefile

@ -1,5 +1,5 @@
OBJECTS =
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon banktest portscan
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon banktest portscan sound
DEST = ../../../Binary/Apps/Test
TOOLS =../../../Tools

12
Source/Apps/Test/sound/Build.cmd

@ -0,0 +1,12 @@
@echo off
setlocal
set TOOLS=../../../../Tools
set PATH=%TOOLS%\tasm32;%PATH%
set TASMTABS=%TOOLS%\tasm32
tasm -t80 -g3 -fFF sound.asm sound.com sound.lst || exit /b
tasm -t80 -g3 -fFF ay-test.asm ay-test.com ay-test.lst || exit /b
copy /Y sound.com ..\..\..\..\Binary\Apps\Test\ || exit /b
copy /Y ay-test.com ..\..\..\..\Binary\Apps\Test\ || exit /b

6
Source/Apps/Test/sound/Clean.cmd

@ -0,0 +1,6 @@
@echo off
setlocal
if exist *.com del *.com
if exist *.lst del *.lst
if exist *.bin del *.bin

7
Source/Apps/Test/sound/Makefile

@ -0,0 +1,7 @@
OBJECTS = ay-test.com sound.com
DEST = ../../../../Binary/Apps/Test
TOOLS =../../../../Tools
USETASM=1
include $(TOOLS)/Makefile.inc

329
Source/Apps/Test/sound/Scales.asm

@ -1,329 +0,0 @@
;
;------------------------------------------------------------------------------
; PLAY SCALES USING HBIOS
;------------------------------------------------------------------------------
;
FCB .EQU $5C ; Location of default FCB
BDOS .EQU $0005
;
.ORG $0100
;
LD (OLDSTACK),SP ; save old stack pointer
LD SP,STACK ; set new stack pointer
;
;------------------------------------------------------------------------------
; GET DEVICE # FROM COMMAND LINE
;------------------------------------------------------------------------------
;
LD A,(FCB+1) ; GET FIRST CHAR
SUB ' '
JR Z,NO_ARG
SUB '0'-' '
JP C,EXIT
;
;------------------------------------------------------------------------------
; DISPLAY DEVICE AND NUMBER OF CHANNELS
;------------------------------------------------------------------------------
;
NO_ARG: LD (DEVICE),A ;
LD DE,TXT_DEV ; DEVICE:
CALL PRTSTR
CALL PRTDECB
LD C,A ; GET DEVICE ID
LD A,':'
CALL PRTCHR
LD B,$55
PUSH BC
LD E,4
RST 08
LD DE,TXT_NAME
LD A,B
RRCA \ RRCA \ RRCA \ RRCA
CALL PRTIDXDEA ; SHOW NAME
LD DE,TXT_CH
CALL PRTSTR
;
POP BC ; GET & DISPLAY # CHANNELS
LD E,1
RST 08
LD A,B
CALL PRTDECB
CALL CRLF ; NUMBER OF CHANNELS IS IN B
;
;------------------------------------------------------------------------------
; LOOP THROUGH EACH CHANNEL
;------------------------------------------------------------------------------
CH__TONE: LD A,(DEVICE) ; C CONTAINS DEVICE
LD C,A ; THROUGH THIS LOOP
;
PUSH BC
LD B,50H ; RESET DEVICE
RST 08
POP BC
;
PUSH BC
LD B,51H ; VOLUME FULL
LD L,0FFH
RST 08
POP BC
;
LD A,B
TST_TONE_LP: DEC A
LD (CHANNEL),A ; SAVE CURRENT CHANNEL
CALL TST_SCALES ; SCALES TEST
; CALL TST_VOLUME ; VOLUME TEST
CALL CRLF
DJNZ TST_TONE_LP
;
PUSH BC
LD B,50H ; RESET DEVICE
RST 08
POP BC
;
;------------------------------------------------------------------------------
; RESTORE STACK & EXIT
;------------------------------------------------------------------------------
;
EXIT: LD SP, (OLDSTACK) ; Exit to CP/M
RST 00H
DI
HALT
;
;------------------------------------------------------------------------------
; PLAY SCALES FROM HIGHEST HBIOS NOTE TO LOWEST
;------------------------------------------------------------------------------
;
TST_SCALES: PUSH BC
PUSH AF
;
LD HL,380 ; START NOTE
LD (NOTE),HL ; Top of Octave 7 is 343
LD B,51H ; VOLUME HIGH
LD L,0FFH
PUSH BC
RST 08
POP BC
;
NEXT0: PUSH BC
;
LD DE,TXT_TSTCH ; DISPLAY CHANNEL
CALL PRTSTR
LD A,(CHANNEL)
CALL PRTDECB
;
LD DE,TXT_NOTE ; DISPLAY NOTE
CALL PRTSTR
LD HL,(NOTE)
CALL PRTDECW
POP BC
;
LD B,53H ; SET NOTE
LD HL,(NOTE)
PUSH BC
RST 08
POP BC
OR A ; DID DRIVER FAIL
JR Z,NEXT4 ; THIS NOTE ?
LD DE,TXT_BAD_N
CALL FAILMSG
JR SKIP
;
NEXT4: LD B,57H ; DURATION
LD HL,1000
PUSH BC
RST 08
POP BC
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
;
OR A ; DID DRIVER FAIL
JR Z,NEXT2 ; TO PLAY ?
LD DE,TXT_BAD_N
CALL FAILMSG
JR SKIP
;
NEXT2: CALL DELAY
CALL CRLF
;
SKIP: LD HL,(NOTE)
DEC HL
LD (NOTE),HL
INC HL
LD A,H
OR L
DEC HL
JR NZ,NEXT0
;
LD B,51H ; VOLUME
LD L,00H ; OFF
PUSH BC
RST 08
POP BC
;
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
PUSH BC
LD C, 6 ; check for keypress
LD E,0FFH
CALL BDOS
POP BC
OR A
JP NZ,EXIT
POP AF
POP BC
;
RET
;
FAILMSG: PUSH AF
PUSH BC
CALL PRTSTR
CALL CRLF
POP BC
POP AF
RET
;
;------------------------------------------------------------------------------
; CONSTANT TONE ON ALL CHANNELS, SCALE VOLUME
;------------------------------------------------------------------------------
;
TST_VOLUME:
LD HL,332+48 ; TONE
LD (NOTE),HL
;
LD B,3
NEXTCH1 LD A,B
DEC A
LD (CHANNEL),A
PUSH BC ; ACROSS
CALL TONE ; ALL
LD C, 6 ; KEYPRESS
LD E, 0FFH
CALL BDOS
POP BC ; CHANNELS
OR A
JP NZ,EXIT
DJNZ NEXTCH1
RET
TONE: LD A,(DEVICE)
LD C,A
LD B,50H ; RESET
PUSH BC
RST 08
POP BC
;
NEXT1: LD B,51H ; VOLUME
LD A,(VOLUME)
LD L,A
PUSH BC
RST 08
POP BC
;
LD B,53H ; NOTE
LD HL,(NOTE)
PUSH BC
RST 08
POP BC
;
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
;
CALL DELAY
;
LD A,(VOLUME)
DEC A
LD (VOLUME),A
JR NZ,NEXT1
;
LD B,51H ; VOLUME
LD L,00H
PUSH BC
RST 08
POP BC
;
LD B,54H ; PLAY
PUSH BC
LD A,(CHANNEL)
LD D,A
POP BC
RST 08
;
RET
;;
;------------------------------------------------------------------------------
; LONG DELAY
;------------------------------------------------------------------------------
;
DELAY: LD HL,-1
DELAY1: DEC HL
LD A,H
OR L
JR NZ,DELAY1
RET
;
;------------------------------------------------------------------------------
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY 0
; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS
; TO THE START OF THE STRING LIST.
;------------------------------------------------------------------------------
;
PRTIDXDEA: LD C,A
OR A
PRTIDXDEA1: JR Z,PRTIDXDEA3 ; FOUND TARGET SO EXIT
PRTIDXDEA2: LD A,(DE) ; LOOP UNIT
INC DE ; WE REACH
OR A ; END OF STRING
JR NZ,PRTIDXDEA2
DEC C ; AT STRING END. SO GO
JR PRTIDXDEA1 ; CHECK FOR INDEX MATCH
PRTIDXDEA3: CALL PRTSTR ; DISPLAY THE STRING
RET
;
#INCLUDE "printing.inc"
;
TXT_CH .DB "CHANNELS: ",0
TXT_TSTCH .DB "CHANNEL: ",0
TXT_BAD_N .DB " BAD NOTE",0
TXT_BAD_P .DB " PLAY ERROR",0
TXT_NOTE .DB " NOTE: ",0
TXT_DEV .DB "DEVICE: ",0
TXT_NAME .DB "SN76489 ",0
.DB "AY-3-8910 ",0
.DB "I/O PORT ",0
.DB "YM2612 ",0
MODE .DB 0 ; scales mode or volume mode
DEVICE .DB 0
NOTE .DW 128
VOLUME .DB 0
CHANNEL .DB 0
OLDSTACK .DW 0 ; original stack pointer
.DS 40H ; space for stack
STACK ; top of stack
;
.END

177
Source/Apps/Test/sound/printing.inc

@ -0,0 +1,177 @@
;
; 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 carriage return 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 AF
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
POP AF
RET
;
; Print the value in A in hex without destroying any registers
;
PRTHEX:
PUSH AF ; save AF
PUSH DE ; save DE
CALL HEXASCII ; convert value in A to hex chars in DE
LD A,D ; get the high order hex char
CALL PRTCHR ; print it
LD A,E ; get the low order hex char
CALL PRTCHR ; print it
POP DE ; restore DE
POP AF ; restore AF
RET ; done
;
; print the hex word value in bc
;
PRTHEXWORD:
PUSH AF
LD A,B
CALL PRTHEX
LD A,C
CALL PRTHEX
POP AF
RET
;
; print the hex dword value in de:hl
;
PRTHEX32:
PUSH BC
PUSH DE
POP BC
CALL PRTHEXWORD
PUSH HL
POP BC
CALL PRTHEXWORD
POP BC
RET
;
; Convert binary value in A to ascii hex characters in DE
;
HEXASCII:
LD D,A ; save A in D
CALL HEXCONV ; convert low nibble of A to hex
LD E,A ; save it in E
LD A,D ; get original value back
RLCA ; rotate high order nibble to low bits
RLCA
RLCA
RLCA
CALL HEXCONV ; convert nibble
LD D,A ; save it in D
RET ; done
;
; Convert low nibble of A to ascii hex
;
HEXCONV:
AND $0F ; low nibble only
ADD A,$90
DAA
ADC A,$40
DAA
RET
;
; Print value of A or HL in decimal with leading zero suppression
; Use prtdecb for A or prtdecw for HL
;
PRTDECB:
PUSH HL
LD H,0
LD L,A
CALL PRTDECW ; print it
POP HL
RET
;
PRTDECW:
PUSH AF
PUSH BC
PUSH DE
PUSH HL
CALL PRTDEC0
POP HL
POP DE
POP BC
POP AF
RET
;
PRTDEC0:
LD E,'0'
LD BC,-10000
CALL PRTDEC1
LD BC,-1000
CALL PRTDEC1
LD BC,-100
CALL PRTDEC1
LD C,-10
CALL PRTDEC1
LD E,0
LD C,-1
PRTDEC1:
LD A,'0' - 1
PRTDEC2:
INC A
ADD HL,BC
JR C,PRTDEC2
SBC HL,BC
CP E
RET Z
LD E,0
CALL PRTCHR
RET
;
; Start a new line
;
CRLF2:
CALL CRLF ; two of them
CRLF:
PUSH AF ; preserve AF
LD A,13 ; <CR>
CALL PRTCHR ; print it
LD A,10 ; <LF>
CALL PRTCHR ; print it
POP AF ; restore AF
RET

460
Source/Apps/Test/sound/sound.asm

@ -0,0 +1,460 @@
;
;=======================================================================
; RomWBW HBIOS Sound Device Test Tool (SOUND)
;=======================================================================
;
; Simple utility that can exercise a sound device in RomWBW. It can
; play a single tone, sliding scale, or sliding volume.
;
; I'm not actually sure who wrote the original version of this, but I
; suspect it was Phil Summers.
;
; WBW 2024-03-21: Control test function by command line
; Add (T)one function
;
;=======================================================================
;
;------------------------------------------------------------------------------
; PLAY SCALES USING HBIOS
;------------------------------------------------------------------------------
;
FCB .EQU $5C ; Location of default FCB
BDOS .EQU $0005
;
.ORG $0100
;
LD (OLDSTACK),SP ; save old stack pointer
LD SP,STACK ; set new stack pointer
;
LD DE,TXT_BANNER
CALL PRTSTR
;
;------------------------------------------------------------------------------
; PARSE COMMAND LINE
;------------------------------------------------------------------------------
;
LD HL,FCB+1 ; POINT TO FCB CHARS
LD B,8 ; PARSE 8 CHARS
PARSE:
PUSH BC
LD A,(HL) ; GET NEXT CHAR
;
; IF NUMBER, SET DEVICE ID
CP '0'
JR C,PARSE1 ; IF < 0, SKIP
CP '9'+ 1
JR NC,PARSE1 ; IF > 9, SKIP
SUB '0' ; MAKE BINARY
LD (DEVICE),A ; SAVE DEVIE NUM
JR PARSE2 ; CONTINUE LOOP
PARSE1:
; IF LETTER, SET RUN OPTION
CP 'A'
JR C,PARSE2 ; IF < A, SKIP
CP 'Z'+ 1
JR NC,PARSE1 ; IF > Z, SKIP
LD (OPTION),A ; SAVE RUN OPTION
JR PARSE2 ; CONTINUE LOOP
;
PARSE2:
INC HL ; BUMP PTR
DJNZ PARSE
;
LD A,(OPTION) ; GET OPTION
CP ' ' ; HAVE OPTION?
JR NZ,RUN ; IF SO, RUN
LD DE,TXT_USAGE ; ELSE GET USAGE
CALL PRTSTR ; AND DISPLAY IT
JP EXIT ; AND GET OUT
;
;------------------------------------------------------------------------------
; DISPLAY DEVICE AND NUMBER OF CHANNELS
;------------------------------------------------------------------------------
;
RUN:
LD DE,TXT_DEV ; DEVICE:
CALL PRTSTR
LD A,(DEVICE)
CALL PRTDECB
LD C,A ; GET DEVICE ID
LD A,':'
CALL PRTCHR
;
LD B,$55 ; HBIOS SND QUERY
LD A,(DEVICE)
LD C,A
;
PUSH BC ; SAVE FUNC AND ID
LD E,4 ; HBIOS SNDQ DEV
RST 08
LD A,B
;RRCA \ RRCA \ RRCA \ RRCA
LD DE,TXT_NAME
CALL PRTIDXDEA ; SHOW NAME
;
LD DE,TXT_CH
CALL PRTSTR
POP BC ; RESTORE FUNC AND ID
LD E,1 ; HBIOS SNDQ_CHCNT
RST 08
LD A,B ; NUMBER OF CHANNELS IS IN B
LD (CHANNELS),A ; SAVE IT
CALL PRTDECB ; PRINT IT
CALL CRLF
;
;------------------------------------------------------------------------------
; LOOP THROUGH EACH CHANNEL
;------------------------------------------------------------------------------
;
LD A,(DEVICE) ; GET DEVICE
LD C,A ; INTO C
PUSH BC ; SAVE IT
LD B,$50 ; RESET SND DEVICE
RST 08 ; DO IT
POP BC ; RECOVER DEVICE
LD B,$51 ; SET VOLUME
LD L,$FF ; TO MAX
RST 08 ; DO IT
;
LD A,(CHANNELS)
LD B,A ; B IS LOOP COUNTER
LD C,0 ; C IS CHANNEL INDEX
;
CH_LOOP:
PUSH BC ; SAVE LOOP CTL
LD A,C ; CHANNEL
LD (CHANNEL),A ; TO STORAGE
CALL CH_RUN ; DO CHANNEL
PUSH AF
LD A,(DEVICE)
LD C,A
LD B,50H ; RESET
RST 08
POP AF
POP BC ; RECOVER LOOP CTL
JR NZ,EXIT ; HANDLE ERROR/ABORT
INC C ; NEXT CHANNEL
DJNZ CH_LOOP ; LOOP AS NEEDED
;
LD A,(DEVICE) ; GET DEVICE
LD C,A ; TO C
LD B,50H ; RESET DEVICE
RST 08 ; DO IT
JR EXIT ; DONE
;
CH_RUN:
LD A,(OPTION) ; RUN OPTION
CP 'S' ; SCALES?
JP Z,TST_SCALES ; IF SO, DO SCALES
CP 'V' ; VOLUME?
JP Z,TST_VOLUME ; IF SO, DO VOLUME
CP 'T' ; TONE
JP Z,TST_TONE ; IF SO, DO TONE
RET
;
;------------------------------------------------------------------------------
; RESTORE STACK & EXIT
;------------------------------------------------------------------------------
;
EXIT: LD SP, (OLDSTACK) ; Exit to CP/M
RST 00H
DI
HALT
;
;------------------------------------------------------------------------------
; PLAY SCALES FROM HIGHEST HBIOS NOTE TO LOWEST
;------------------------------------------------------------------------------
;
TST_SCALES: LD A,(DEVICE) ; SETUP DEVICE FOR BELOW
LD C,A
;
LD HL,380 ; START NOTE
LD (NOTE),HL ; Top of Octave 7 is 343
LD B,51H ; VOLUME HIGH
LD L,0FFH ; MAX
PUSH BC
RST 08
POP BC
;
NEXT0: PUSH BC
;
LD DE,TXT_TSTCH ; DISPLAY CHANNEL
CALL PRTSTR
LD A,(CHANNEL)
CALL PRTDECB
;
LD DE,TXT_NOTE ; DISPLAY NOTE
CALL PRTSTR
LD HL,(NOTE)
CALL PRTDECW
POP BC
;
LD B,53H ; SET NOTE
LD HL,(NOTE)
PUSH BC
RST 08
POP BC
OR A ; DID DRIVER FAIL
JR Z,NEXT4 ; THIS NOTE ?
LD DE,TXT_BAD_N
CALL FAILMSG
JR SKIP
;
NEXT4: LD B,57H ; DURATION
LD HL,1000
PUSH BC
RST 08
POP BC
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
;
OR A ; DID DRIVER FAIL
JR Z,NEXT2 ; TO PLAY ?
LD DE,TXT_BAD_N
CALL FAILMSG
JR SKIP
;
NEXT2: CALL DELAY
CALL CRLF
;
SKIP:
PUSH BC
LD C, 6 ; CHECK FOR KEYPRESS
LD E,0FFH
CALL BDOS
POP BC
OR A ; SET RESULT
RET NZ ; RETURN IF ABORT
LD HL,(NOTE)
DEC HL
LD (NOTE),HL
INC HL
LD A,H
OR L
DEC HL
JR NZ,NEXT0
;
LD B,51H ; VOLUME
LD L,00H ; OFF
PUSH BC
RST 08
POP BC
;
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
;
XOR A ; SET RESULT
RET
;
FAILMSG: PUSH BC
CALL PRTSTR
CALL CRLF
POP BC
RET
;
;------------------------------------------------------------------------------
; CONSTANT TONE ON ALL CHANNELS, SCALE VOLUME
;------------------------------------------------------------------------------
;
TST_VOLUME:
; LD HL,332+48 ; TONE
LD HL,244 ; ~1000 HZ
LD (NOTE),HL
;
LD DE,TXT_TSTCH ; DISPLAY CHANNEL
CALL PRTSTR
LD A,(CHANNEL)
CALL PRTDECB
LD A,(DEVICE)
LD C,A
LD B,50H ; RESET
PUSH BC
RST 08
POP BC
;
NEXT1:
LD B,51H ; VOLUME
LD A,(VOLUME)
LD L,A
PUSH BC
RST 08
POP BC
;
LD B,53H ; NOTE
LD HL,(NOTE)
PUSH BC
RST 08
POP BC
;
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
;
CALL DELAY
PUSH BC
LD C, 6 ; KEYPRESS
LD E, 0FFH
CALL BDOS
POP BC ; RECOVER LOOP CTRL
OR A ; KEY PRESSED?
RET NZ ; BAIL OUT IF SO
;
LD A,(VOLUME)
DEC A
LD (VOLUME),A
JR NZ,NEXT1
;
CALL CRLF
;
RET
;
;------------------------------------------------------------------------------
; 1 KHZ TONE ON CHANNEL, PLAY TILL KEYPRESS
;------------------------------------------------------------------------------
;
TST_TONE:
LD HL,244 ; ~1000 HZ
LD (NOTE),HL
;
LD DE,TXT_TSTCH ; DISPLAY CHANNEL
CALL PRTSTR
LD A,(CHANNEL)
CALL PRTDECB
;
LD A,(DEVICE)
LD C,A
;
LD B,50H ; RESET
PUSH BC
RST 08
POP BC
;
LD B,51H ; VOLUME
LD A,$FF ; MAX
LD L,A
PUSH BC
RST 08
POP BC
;
LD B,53H ; NOTE
LD HL,(NOTE)
PUSH BC
RST 08
POP BC
;
TST_TONE1:
;
LD B,54H ; PLAY
LD A,(CHANNEL)
LD D,A
PUSH BC
RST 08
POP BC
;
;CALL DELAY
;
PUSH BC
LD C, 6 ; KEYPRESS
LD E, 0FFH
CALL BDOS
OR A ; KEY PRESSED?
POP BC
JR Z,TST_TONE1
CALL CRLF
XOR A
RET ; RETURN ON KEYPRESS
;
;------------------------------------------------------------------------------
; LONG DELAY
;------------------------------------------------------------------------------
;
;DELAY: LD HL,-1
DELAY: LD HL,1000
DELAY1: DEC HL
LD A,H
OR L
JR NZ,DELAY1
RET
;
;------------------------------------------------------------------------------
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY 0
; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS
; TO THE START OF THE STRING LIST.
;------------------------------------------------------------------------------
;
PRTIDXDEA: LD C,A
OR A
PRTIDXDEA1: JR Z,PRTIDXDEA3 ; FOUND TARGET SO EXIT
PRTIDXDEA2: LD A,(DE) ; LOOP UNIT
INC DE ; WE REACH
OR A ; END OF STRING
JR NZ,PRTIDXDEA2
DEC C ; AT STRING END. SO GO
JR PRTIDXDEA1 ; CHECK FOR INDEX MATCH
PRTIDXDEA3: CALL PRTSTR ; DISPLAY THE STRING
RET
;
#INCLUDE "printing.inc"
;
TXT_BANNER .DB 13,10,"RomWBW HBIOS Sound Tool v1.0, 21-Mar-2024",13,10,13,10,0
TXT_USAGE .DB "Usage:",13,10
.DB "SOUND <d><o>",13,10
.DB "",13,10
.DB " <d> is number of sound device",13,10
.DB " <o> is option to run:",13,10
.DB " 'T': play a 1 KHz tone on each channel until keypress",13,10
.DB " 'S': play a scale of notes on each channel",13,10
.DB " 'V': play a 1 KHz tone at all volumes on each channel",13,10
.DB "",13,10
.DB "Examples:",13,10
.DB "SOUND 1T - play a tone on all channels of sound device unit #1",13,10
.DB "SOUND 0S - play a scale on all channels of sound device unit #0",13,10,0
TXT_CH .DB "CHANNELS=",0
TXT_TSTCH .DB "CHANNEL: ",0
TXT_BAD_N .DB " BAD NOTE",0
TXT_BAD_P .DB " PLAY ERROR",0
TXT_NOTE .DB " NOTE: ",0
TXT_VOL .DB " VOLUME: ",0
TXT_DEV .DB "DEVICE: ",0
TXT_NAME .DB "SN76489 ",0
.DB "AY-3-8910 ",0
.DB "I/O PORT ",0
.DB "YM2612 ",0
MODE .DB 0 ; scales mode or volume mode
DEVICE .DB 0
OPTION .DB ' ' ; run scales
NOTE .DW 128
VOLUME .DB 0
CHANNEL .DB 0
CHANNELS .DB 0
OLDSTACK .DW 0 ; original stack pointer
.DS 40H ; space for stack
STACK ; top of stack
;
.END

4
Source/HBIOS/cfg_duo.asm

@ -305,10 +305,10 @@ PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM)
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR
;
SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER
SN76489ENABLE .EQU TRUE ; SN: ENABLE SN76489 SOUND DRIVER
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER
SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD
SNMODE .EQU SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM]
SNMODE .EQU SNMODE_DUO ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO]
;
AY38910ENABLE .EQU TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER
AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD

6
Source/HBIOS/sn76489.asm

@ -30,6 +30,12 @@ SN76489_PORT_LEFT .EQU $FF ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT)
SN76489_PORT_RIGHT .EQU $FB ; PORTS FOR ACCESSING THE SN76489 CHIP (RIGHT)
.ECHO "RC"
#ENDIF
;
#IF (SNMODE == SNMODE_DUO)
SN76489_PORT_LEFT .EQU $BE ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT)
SN76489_PORT_RIGHT .EQU $BF ; PORTS FOR ACCESSING THE SN76489 CHIP (RIGHT)
.ECHO "RC"
#ENDIF
;
.ECHO ", IO_LEFT="
.ECHO SN76489_PORT_LEFT

1
Source/HBIOS/std.asm

@ -221,6 +221,7 @@ AYMODE_DUO .EQU 8 ; MBC SOUND BOARD
SNMODE_NONE .EQU 0
SNMODE_RC .EQU 1 ; RCBUS SOUND MODULE
SNMODE_VGM .EQU 2 ; VGM ECB BOARD
SNMODE_DUO .EQU 3 ; DUODYNE MEDIA-IO BOARD
;
; TMS VIDEO MODE SELECTIONS
;

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 5
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.5.0-dev.18"
#DEFINE BIOSVER "3.5.0-dev.19"
#define rmj RMJ
#define rmn RMN
#define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 5
rup equ 0
rtp equ 0
biosver macro
db "3.5.0-dev.18"
db "3.5.0-dev.19"
endm

Loading…
Cancel
Save