From 48532231c9781ba485ba7c397a9d012edd8d9c61 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 28 Nov 2021 07:44:10 +0800 Subject: [PATCH 1/4] Update VGMPLAY.ASM Cosmetic cleanup --- Source/Apps/VGM/VGMPLAY.ASM | 345 ++++++++++++++++++++---------------- 1 file changed, 196 insertions(+), 149 deletions(-) diff --git a/Source/Apps/VGM/VGMPLAY.ASM b/Source/Apps/VGM/VGMPLAY.ASM index 9c7b747d..61638c72 100644 --- a/Source/Apps/VGM/VGMPLAY.ASM +++ b/Source/Apps/VGM/VGMPLAY.ASM @@ -1,4 +1,6 @@ +;------------------------------------------------------------------------------ ; SN76489 + AY-3-8910 + YM2162 VGM player for CP/M +;------------------------------------------------------------------------------ ; ; Based on VGM player by J.B. Langston ; https://github.com/jblang/SN76489 @@ -8,10 +10,14 @@ ; YM2162/YM3484, GD3 support, VGM Chip identification, ; default file type, basic file size checking added by Phil Summers ; -; Compile with: +; Assemble with: ; ; TASM -80 -b VGMPLAY.ASM VGMPLAY.COM - +; +;------------------------------------------------------------------------------ +; Device and system specific definitions +;------------------------------------------------------------------------------ +; P8X180 .EQU 0 ; System configuration RC2014 .EQU 0 SBCECB .EQU 1 @@ -67,6 +73,10 @@ RTCIO .EQU 070H D50 .EQU 500 ; 900 ;735 D60 .EQU 600 ; 1000 ;882 +;------------------------------------------------------------------------------ +; VGM Codes +;------------------------------------------------------------------------------ + VGM_GG_W .EQU 04FH ; GAME GEAR PSG STEREO. WRITE DD TO PORT 0X06 VGM_PSG_W .EQU 050H ; PSG (SN76489/SN76496) WRITE VALUE DD VGM_YM2612_W .EQU 052H ; YM2612 WRITE VALUE DD @@ -75,6 +85,10 @@ VGM_W735 .EQU 062H ; WAIT 735 SAMPLES (1/60TH SECOND) VGM_W882 .EQU 063H ; WAIT 882 SAMPLES (1/50TH SECOND) VGM_ESD .EQU 066H ; END OF SOUND DATA +;------------------------------------------------------------------------------ +; Generic CP/M definitions +;------------------------------------------------------------------------------ + BOOT .EQU 0000H ; boot location BDOS .EQU 0005H ; bdos entry point FCB .EQU 005CH ; file control block @@ -91,6 +105,10 @@ CR .EQU 0DH ; carriage return LF .EQU 0AH ; line feed EOS .EQU '$' ; end of string marker +;------------------------------------------------------------------------------ +; Program Start +;------------------------------------------------------------------------------ + .ORG 100H LD (OLDSTACK),SP ; save old stack pointer @@ -99,9 +117,64 @@ EOS .EQU '$' ; end of string marker LD DE,MSG_WELC ; Welcome Message CALL PRTSTR - LD A,(FCB+1) ; Get first char of filename + CALL READVGM ; Read in the VGM file + + CALL VGMINFO ; Check and display VGM Information + + LD HL, (VGMDATA + 34H) ; Determine start of VGM + LD A, H ; data. + OR L + JR NZ, _S1 + LD HL, 000CH ; Default location (40H - 34H) +_S1 LD DE, VGMDATA + 34H + ADD HL, DE + LD (VGMPOS), HL + + LD HL,D60 ; VGM delay (60hz) + LD (VGMDLY), HL + +MAINLOOP CALL PLAY ; Play one frame + + LD C,6 ; Check for keypress + LD E,0FFH + CALL BDOS + OR A + JR NZ,EXIT + + LD HL,(VGMDLY) ; Frame delay +L1 LD B,FRAME_DLY + DJNZ $ + DEC HL + LD A,H + OR L + JR NZ,L1 + + JR MAINLOOP +; +;------------------------------------------------------------------------------ +; Program Exit +;------------------------------------------------------------------------------ +; +EXIT +#IFDEF SBCV2004 + CALL FASTIO +#ENDIF + CALL VGMDEVICES ; Display devices used + CALL VGMMUTE ; Mute Devices + + LD DE,MSG_EXIT +EXIT_ERR: CALL PRTSTR ; Generic message or error + LD SP, (OLDSTACK) ; Exit to CP/M + RST 00H +; +;------------------------------------------------------------------------------ +; Read VGM file into memory +;------------------------------------------------------------------------------ +; +READVGM: LD A,(FCB+1) ; Get first char of filename CP ' ' ; Compare to blank - JP Z,ERR ; If so, missing filename + LD DE,MSG_NOFILE ; If blank, missing filename + JP Z,EXIT_ERR ; so exit LD A,(FCB+9) ; If the filetype CP ' ' ; is blanks JR NZ,HASEXT ; then assume @@ -116,7 +189,8 @@ HASEXT: LD C,OPENF ; Open File LD DE,FCB CALL BDOS INC A - JP Z,ERR + LD DE,MSG_NOFILE + JP Z,EXIT_ERR XOR A ; Read VGM file into memory LD (FCBCR), A @@ -144,8 +218,13 @@ RLOOP RDONE LD C, CLOSEF ; Close the file LD DE, FCB CALL BDOS - - LD DE,MSG_BADF ; Check valid file + RET +; +;------------------------------------------------------------------------------ +; Display VGM information. +;------------------------------------------------------------------------------ +; +VGMINFO: LD DE,MSG_BADF ; Check valid file LD HL,VGMDATA LD A,(HL) CP 'V' @@ -229,144 +308,8 @@ GD3_NXT2: LD A,(HL) ; Print English Title JR GD3_NXT2 GD3_NXT3: CALL CRLF - -SKIP_GD3: LD HL, (VGMDATA + 34H) ; Determine start of VGM - LD A, H ; data. - OR L - JR NZ, _S1 - LD HL, 000CH ; Default location (40H - 34H) -_S1 LD DE, VGMDATA + 34H - ADD HL, DE - LD (VGMPOS), HL - - LD HL,D60 ; VGM delay (60hz) - LD (VGMDLY), HL - -MAINLOOP CALL PLAY ; Play one frame - - LD C,6 ; Check for keypress - LD E,0FFH - CALL BDOS - OR A - JR NZ,EXIT - - LD HL,(VGMDLY) ; Frame delay -L1 LD B,FRAME_DLY - DJNZ $ - DEC HL - LD A,H - OR L - JR NZ,L1 - - JR MAINLOOP - -EXIT -#IFDEF SBCV2004 - CALL FASTIO -#ENDIF - - LD DE,MSG_PO - CALL PRTSTR - - LD A,(IX+0) - PUSH AF - AND %00000011 - srl a - ADC A,'0' - CP '0' - JR Z,NOSN - CALL PRTCHR - LD DE,MSG_SN - CALL PRTSTR - -NOSN: POP AF - srl a - srl a - PUSH AF - - AND %00000011 - srl a - ADC A,'0' - CP '0' - JR Z,NOAY - CALL PRTCHR - LD DE,MSG_AY - CALL PRTSTR - -NOAY: POP AF - srl a - srl a - PUSH AF - - AND %00000011 - srl a - ADC A,'0' - CP '0' - JR Z,NOYM - CALL PRTCHR - LD DE,MSG_YM - CALL PRTSTR - -NOYM: LD A, 9FH ; Mute all channels on psg - OUT (PSGREG), A - OUT (PSG2REG), A - LD A, 0BFH - OUT (PSGREG), A - OUT (PSG2REG), A - LD A, 0DFH - OUT (PSGREG), A - OUT (PSG2REG), A - LD A, 0FFH - OUT (PSGREG), A - OUT (PSG2REG), A - - LD A, 8 ; Mute all channels on ay - OUT (RSEL), A - OUT (RSEL2), A - XOR A - OUT (RDAT), A - OUT (RDAT2), A - LD A, 9 - OUT (RSEL), A - OUT (RSEL2), A - XOR A - OUT (RDAT), A - OUT (RDAT2), A - LD A, 10 - OUT (RSEL), A - OUT (RSEL2), A - XOR A - OUT (RDAT), A - OUT (RDAT2), A - CALL FASTIO - - setreg($22,$00) ; lfo off - setreg($27,$00) ; note off ch 0 - setreg($28,$01) ; note off ch 1 - setreg($28,$02) ; note off ch 2 - setreg($28,$03) ; note off ch 3 - setreg($28,$04) ; note off ch 4 - setreg($28,$05) ; note off ch 5 - setreg($28,$06) ; note off ch 6 - setreg($28,$01) ; note off ch 1 - setreg($2b,$00) ; dac off - setreg($28,$00) ; key off - - LD DE,MSG_EXIT -EXIT_ERR: CALL PRTSTR - - LD SP, (OLDSTACK) - RST 00H - -ERR LD C, PRINTF - LD DE, NOFILE - CALL BDOS - RST 00H - -NOFILE .DB "File not found", CR, LF, EOS -MSG_MEM .DB "File to big", CR, LF, EOS -MSG_EXIT .DB "FINISHED.",CR,LF,0 - +SKIP_GD3: RET +; ;------------------------------------------------------------------------------ ; VGM Player. ;------------------------------------------------------------------------------ @@ -505,7 +448,109 @@ WAIT1 CP 70H ; WAIT 0-15 SAMPLES UNK: CALL PRTDOT CALL PRTHEX JP NEXT +; +;------------------------------------------------------------------------------ +; Display VGM Devices detected during playback. +;------------------------------------------------------------------------------ +; +VGMDEVICES: LD DE,MSG_PO + CALL PRTSTR +; + LD A,(IX+0) + PUSH AF + AND %00000011 + SRL A + ADC A,'0' + CP '0' + JR Z,NOSN + CALL PRTCHR + LD DE,MSG_SN + CALL PRTSTR +; +NOSN: POP AF + SRL A + SRL A + PUSH AF +; + AND %00000011 + SRL A + ADC A,'0' + CP '0' + JR Z,NOAY + CALL PRTCHR + LD DE,MSG_AY + CALL PRTSTR +; +NOAY: POP AF + SRL A + SRL A +; PUSH AF +; + AND %00000011 + SRL A + ADC A,'0' + CP '0' + JR Z,NOYM + CALL PRTCHR + LD DE,MSG_YM + CALL PRTSTR +NOYM: RET +; +;------------------------------------------------------------------------------ +; Mute Devices. +;------------------------------------------------------------------------------ +; +VGMMUTE: LD A, 9FH ; Mute all channels on psg + OUT (PSGREG), A + OUT (PSG2REG), A + LD A, 0BFH + OUT (PSGREG), A + OUT (PSG2REG), A + LD A, 0DFH + OUT (PSGREG), A + OUT (PSG2REG), A + LD A, 0FFH + OUT (PSGREG), A + OUT (PSG2REG), A + + LD A, 8 ; Mute all channels on ay + OUT (RSEL), A + OUT (RSEL2), A + XOR A + OUT (RDAT), A + OUT (RDAT2), A + LD A, 9 + OUT (RSEL), A + OUT (RSEL2), A + XOR A + OUT (RDAT), A + OUT (RDAT2), A + LD A, 10 + OUT (RSEL), A + OUT (RSEL2), A + XOR A + OUT (RDAT), A + OUT (RDAT2), A + CALL FASTIO + setreg($22,$00) ; lfo off + setreg($27,$00) ; note off ch 0 + setreg($28,$01) ; note off ch 1 + setreg($28,$02) ; note off ch 2 + setreg($28,$03) ; note off ch 3 + setreg($28,$04) ; note off ch 4 + setreg($28,$05) ; note off ch 5 + setreg($28,$06) ; note off ch 6 + setreg($28,$01) ; note off ch 1 + setreg($2b,$00) ; dac off + setreg($28,$00) ; key off +; + RET +; +;------------------------------------------------------------------------------ +; Hardware specific routines. +;------------------------------------------------------------------------------ +; SLOWIO: #IFDEF SBCV2004 PUSH AF @@ -515,7 +560,7 @@ SLOWIO: POP AF #ENDIF RET - +; FASTIO: #IFDEF SBCV2004 LD A,(HB_RTCVAL) @@ -534,11 +579,14 @@ MSG_PO .DB "Played on : ",0 MSG_YM: .DB "xYM-2612 ",0 MSG_SN: .DB "xSN76489 ",0 MSG_AY: .DB "xAY-3-8910 ",0 - +MSG_EXIT: .DB "FINISHED.",CR,LF,0 +MSG_NOFILE: .DB "File not found", CR, LF, 0 +MSG_MEM: .DB "File to big", CR, LF, 0 +; ;------------------------------------------------------------------------------ ; Variables ;------------------------------------------------------------------------------ - +; VGMPOS .DW 0 VGMDLY .DW 0 @@ -552,5 +600,4 @@ STACK ; top of stack ;------------------------------------------------------------------------------ VGMDATA - .END From 8a54b391f3c191d08b10fdd9a73843051954a3a3 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 28 Nov 2021 10:18:13 +0800 Subject: [PATCH 2/4] Update VGMPLAY.ASM optimization --- Source/Apps/VGM/VGMPLAY.ASM | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/Source/Apps/VGM/VGMPLAY.ASM b/Source/Apps/VGM/VGMPLAY.ASM index 61638c72..c0c1ddd7 100644 --- a/Source/Apps/VGM/VGMPLAY.ASM +++ b/Source/Apps/VGM/VGMPLAY.ASM @@ -458,43 +458,33 @@ VGMDEVICES: LD DE,MSG_PO ; LD A,(IX+0) PUSH AF - AND %00000011 - SRL A - ADC A,'0' - CP '0' - JR Z,NOSN - CALL PRTCHR + LD DE,MSG_SN - CALL PRTSTR + CALL CHKDEV ; -NOSN: POP AF + POP AF SRL A SRL A PUSH AF ; - AND %00000011 - SRL A - ADC A,'0' - CP '0' - JR Z,NOAY - CALL PRTCHR LD DE,MSG_AY - CALL PRTSTR + CALL CHKDEV ; -NOAY: POP AF + POP AF SRL A SRL A ; PUSH AF + + LD DE,MSG_YM ; - AND %00000011 +CHKDEV: AND %00000011 SRL A ADC A,'0' CP '0' - JR Z,NOYM + RET Z CALL PRTCHR - LD DE,MSG_YM CALL PRTSTR -NOYM: RET + RET ; ;------------------------------------------------------------------------------ ; Mute Devices. From 8f1b6bb40286dc9416ccdd58e21381c55d288df9 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 28 Nov 2021 10:41:23 +0800 Subject: [PATCH 3/4] Update VGMPLAY.ASM Add unknow device message --- Source/Apps/VGM/VGMPLAY.ASM | 85 +++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 32 deletions(-) diff --git a/Source/Apps/VGM/VGMPLAY.ASM b/Source/Apps/VGM/VGMPLAY.ASM index c0c1ddd7..b308ca88 100644 --- a/Source/Apps/VGM/VGMPLAY.ASM +++ b/Source/Apps/VGM/VGMPLAY.ASM @@ -317,7 +317,7 @@ PLAY #IFDEF SBCV2004 CALL SLOWIO #ENDIF - LD IX,DEV_FLAG + LD IX,VGM_DEV LD HL, (VGMPOS) ; Start processing VGM commands NEXT LD A, (HL) INC HL @@ -335,6 +335,8 @@ NEXT LD A, (HL) NEXT1 CP VGM_GG_W ; Game Gear SN76489 stereo. Ignored JR NZ, PSG + LD IX,VGM_DEV + SET 6,(IX+0) INC HL JR NEXT @@ -343,7 +345,7 @@ PSG CP VGM_PSG_W ; Write byte to SN76489. LD A, (HL) INC HL OUT (PSGREG), A - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 0,(IX+0) JR NEXT @@ -352,7 +354,7 @@ PSG2 CP 30H ; Write byte to second SN76489. LD A, (HL) INC HL OUT (PSG2REG), A - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 1,(IX+0) JR NEXT @@ -369,14 +371,14 @@ AY CP 0A0H LD A, (HL) INC HL OUT (RDAT2), A - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 2,(IX+0) JR NEXT AY1 OUT (RSEL), A LD A, (HL) INC HL OUT (RDAT), A - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 3,(IX+0) JR NEXT @@ -391,12 +393,12 @@ YM: CP 052H LD A,(HL) OUT (YMDAT),A INC HL - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 4,(IX+0) JP NEXT - +; YM2: CP 053H - JR NZ, PCM + JR NZ,WAITNN LD A,(HL) OUT (YM2SEL),A @@ -404,12 +406,11 @@ YM2: CP 053H LD A,(HL) OUT (YM2DAT),A INC HL - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 4,(IX+0) JP NEXT - -PCM: -WAITNN CP 61H ; Wait nn samples +; +WAITNN: CP 61H ; Wait nn samples JR NZ, WAIT60 LD A, (HL) INC HL @@ -420,21 +421,21 @@ WAITNN CP 61H ; Wait nn samples LD H, D LD (VGMDLY), HL RET - +; WAIT60 CP VGM_W735 ; Wait 735 samples (60Hz) JR NZ, WAIT50 LD (VGMPOS), HL LD HL, D50 LD (VGMDLY), HL RET - +; WAIT50 CP VGM_W882 ; Wait 882 samples (50Hz) JR NZ, WAIT1 LD (VGMPOS), HL LD HL, D60 LD (VGMDLY), HL RET - +; WAIT1 CP 70H ; WAIT 0-15 SAMPLES JR C, UNK ; CODES 70-7FH CP 80H @@ -444,22 +445,23 @@ WAIT1 CP 70H ; WAIT 0-15 SAMPLES LD H, 0 LD (VGMDLY), HL RET - -UNK: CALL PRTDOT - CALL PRTHEX +; +UNK: LD IX,VGM_DEV ; Set flag for + SET 6,(IX+0) ; unknown device + INC HL ; Try and skip JP NEXT ; ;------------------------------------------------------------------------------ ; Display VGM Devices detected during playback. ;------------------------------------------------------------------------------ ; -VGMDEVICES: LD DE,MSG_PO +VGMDEVICES: LD DE,MSG_PO ; Played on ... CALL PRTSTR ; LD A,(IX+0) PUSH AF - - LD DE,MSG_SN +; + LD DE,MSG_SN ; SN76489 Devices CALL CHKDEV ; POP AF @@ -467,22 +469,31 @@ VGMDEVICES: LD DE,MSG_PO SRL A PUSH AF ; - LD DE,MSG_AY + LD DE,MSG_AY ; AY-3-8910 Devices CALL CHKDEV ; POP AF SRL A SRL A -; PUSH AF - - LD DE,MSG_YM + PUSH AF +; + LD DE,MSG_YM ; YM-2612 Devices + CALL CHKDEV ; -CHKDEV: AND %00000011 + POP AF + SRL A SRL A - ADC A,'0' +; PUSH AF +; + LD DE,MSG_UNK ; Unknown Device Code detected +; CALL CHKDEV +; +CHKDEV: AND %00000011 ; Display + SRL A ; number of + ADC A,'0' ; devices CP '0' - RET Z - CALL PRTCHR + RET Z ; Skip if not + CALL PRTCHR ; used. CALL PRTSTR RET ; @@ -558,9 +569,17 @@ FASTIO: OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF RET - +; +;------------------------------------------------------------------------------ +; External routines. +;------------------------------------------------------------------------------ +; #INCLUDE "printing.inc" - +; +;------------------------------------------------------------------------------ +; Strings and constants. +;------------------------------------------------------------------------------ +; MSG_WELC: .DB "VGM Player for RomWBW v0.2, 27-Nov-2021",CR,LF ; .DB "J.B. Langston/Marco Maccaferri/Phil Summers",CR,LF .DB 0 @@ -569,6 +588,7 @@ MSG_PO .DB "Played on : ",0 MSG_YM: .DB "xYM-2612 ",0 MSG_SN: .DB "xSN76489 ",0 MSG_AY: .DB "xAY-3-8910 ",0 +MSG_UNK .DB "xUnsupported device encountered", CR, LF, 0 MSG_EXIT: .DB "FINISHED.",CR,LF,0 MSG_NOFILE: .DB "File not found", CR, LF, 0 MSG_MEM: .DB "File to big", CR, LF, 0 @@ -579,8 +599,9 @@ MSG_MEM: .DB "File to big", CR, LF, 0 ; VGMPOS .DW 0 VGMDLY .DW 0 +VGMUNK_F .DB 0 ; Flag for unknown device +VGM_DEV .DB %00000000 ; 000YAASS -DEV_FLAG .DB %00000000 ; 000YAASS OLDSTACK .DW 0 ; original stack pointer .DS 40H ; space for stack STACK ; top of stack From ca30732f311ec90833b0662d45290f351b89c7b7 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 28 Nov 2021 22:08:09 +0800 Subject: [PATCH 4/4] Update VGMPLAY.ASM Only mute devices we have accessed --- Source/Apps/VGM/VGMPLAY.ASM | 55 ++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/Source/Apps/VGM/VGMPLAY.ASM b/Source/Apps/VGM/VGMPLAY.ASM index b308ca88..e7ed560a 100644 --- a/Source/Apps/VGM/VGMPLAY.ASM +++ b/Source/Apps/VGM/VGMPLAY.ASM @@ -10,6 +10,8 @@ ; YM2162/YM3484, GD3 support, VGM Chip identification, ; default file type, basic file size checking added by Phil Summers ; +; Bugs: YM2612 Mute not working. +; ; Assemble with: ; ; TASM -80 -b VGMPLAY.ASM VGMPLAY.COM @@ -69,6 +71,18 @@ RTCIO .EQU 070H #DEFCONT \ nop #DEFCONT \ ld a,val #DEFCONT \ out (YMDAT),a +#DEFCONT \ nop +#DEFCONT \ nop + +#DEFINE setreg2(reg,val) \ +#DEFCONT \ ld a,reg +#DEFCONT \ out (YM2SEL),a +#DEFCONT \ nop +#DEFCONT \ nop +#DEFCONT \ ld a,val +#DEFCONT \ out (YM2DAT),a +#DEFCONT \ nop +#DEFCONT \ nop D50 .EQU 500 ; 900 ;735 D60 .EQU 600 ; 1000 ;882 @@ -103,7 +117,6 @@ READF .EQU 20 ; BDOS sequential read function CR .EQU 0DH ; carriage return LF .EQU 0AH ; line feed -EOS .EQU '$' ; end of string marker ;------------------------------------------------------------------------------ ; Program Start @@ -386,7 +399,6 @@ AY1 OUT (RSEL), A YM: CP 052H JR NZ, YM2 - LD A,(HL) OUT (YMSEL),A INC HL @@ -501,7 +513,11 @@ CHKDEV: AND %00000011 ; Display ; Mute Devices. ;------------------------------------------------------------------------------ ; -VGMMUTE: LD A, 9FH ; Mute all channels on psg +VGMMUTE: LD A,(IX+0) ; Only mute devices used. + AND %00000011 + JR Z,SKIP1 + + LD A, 9FH ; Mute all channels on psg OUT (PSGREG), A OUT (PSG2REG), A LD A, 0BFH @@ -514,7 +530,11 @@ VGMMUTE: LD A, 9FH ; Mute all channels on psg OUT (PSGREG), A OUT (PSG2REG), A - LD A, 8 ; Mute all channels on ay +SKIP1: LD A,(IX+0) + AND %00001100 + JR Z,SKIP2 + + LD A, 8 ; Mute all channels on ay OUT (RSEL), A OUT (RSEL2), A XOR A @@ -534,19 +554,28 @@ VGMMUTE: LD A, 9FH ; Mute all channels on psg OUT (RDAT2), A CALL FASTIO +SKIP2: LD A,(IX+0) + AND %00110000 + JP Z,SKIP3 + setreg($22,$00) ; lfo off - setreg($27,$00) ; note off ch 0 - setreg($28,$01) ; note off ch 1 - setreg($28,$02) ; note off ch 2 - setreg($28,$03) ; note off ch 3 + setreg($27,$00) ; Disable independant Channel 3 + setreg($28,$00) ; note off ch 1 + setreg($28,$01) ; note off ch 2 + setreg($28,$02) ; note off ch 3 setreg($28,$04) ; note off ch 4 setreg($28,$05) ; note off ch 5 setreg($28,$06) ; note off ch 6 - setreg($28,$01) ; note off ch 1 setreg($2b,$00) ; dac off - setreg($28,$00) ; key off -; - RET + + setreg($b4,$00) ; sound off ch 1-3 + setreg($b5,$00) + setreg($b6,$00) + setreg2($b4,$00) ; sound off ch 4-6 + setreg2($b5,$00) + setreg2($b6,$00) + +SKIP3: RET ; ;------------------------------------------------------------------------------ ; Hardware specific routines. @@ -600,7 +629,7 @@ MSG_MEM: .DB "File to big", CR, LF, 0 VGMPOS .DW 0 VGMDLY .DW 0 VGMUNK_F .DB 0 ; Flag for unknown device -VGM_DEV .DB %00000000 ; 000YAASS +VGM_DEV .DB %00000000 ; UUYYAASS OLDSTACK .DW 0 ; original stack pointer .DS 40H ; space for stack