From 7cbb9d081b2738223377ec0e58533112f95e1185 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Wed, 6 May 2020 19:02:05 +0800 Subject: [PATCH] sound and tune optimizations sn76489 not tested --- Source/Apps/Tune/Tune.asm | 105 ++++++++++++++++---------------------- Source/HBIOS/ay38910.asm | 14 ++--- Source/HBIOS/sn76489.asm | 5 +- 3 files changed, 54 insertions(+), 70 deletions(-) diff --git a/Source/Apps/Tune/Tune.asm b/Source/Apps/Tune/Tune.asm index fc41b087..085bf662 100644 --- a/Source/Apps/Tune/Tune.asm +++ b/Source/Apps/Tune/Tune.asm @@ -2006,84 +2006,69 @@ PLAYVIAHBIOS: ; ; CHANNEL 0 (LEFT) ; - LD B, BF_SNDVOL ; SET VOLUME - LD C, 0 ; DEVICE 0 -; LD H, 0 - LD A, (AYREGS + AmplA) ; GET 4-BIT - AND $0F ; VOLUME 0-15 - RLCA ; AND CONVERT - RLCA ; TO HBIOS - RLCA ; RANGE 0-255 - RLCA - LD L, A + LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME + LD A, (AYREGS + AmplA) ; DEVICE 0 + ADD A,A ; GET 4-BIT + ADD A,A ; VOLUME 0-15 + ADD A,A ; AND CONVERT + ADD A,A ; TO HBIOS + LD L, A ; RANGE 0-255 RST 08 ; - LD B, BF_SNDPRD ; SET PERIOD - LD C, 0 ; DEVICE 0 - LD HL, (AYREGS+TonA) ; GET 12-BIT TONE PERIOD - ld A, H ; MASK OFF HIGH - AND $0F ; NIBBLE - LD H, A + LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD + LD HL, (AYREGS+TonA) ; DEVICE 0 + ld A, H ; GET 12-BIT ONE PERIOD + AND $0F ; MASK OFF HIGH + LD H, A ; NIBBLE RST 08 ; - LD B, BF_SNDPLAY ; PLAY - LD C, 0 ; DEVICE 0 - LD D, 0 ; CHANNEL 0 - RST 08 + LD BC, (BF_SNDPLAY*256)+0 ; PLAY + LD D, 0 ; DEVICE 0 + RST 08 ; CHANNEL 0 ; ; CHANNEL 1 (MIDDLE) ; - LD B, BF_SNDVOL ; SET VOLUME - LD C, 0 ; DEVICE 0 -; LD H, 0 - LD A, (AYREGS + AmplB) ; GET 4-BIT - AND $0F ; VOLUME 0-15 - RLCA ; AND CONVERT - RLCA ; TO HBIOS - RLCA ; RANGE 0-255 - RLCA - LD L, A + LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME + LD A, (AYREGS + AmplB) ; DEVICE 0 + ADD A,A ; GET 4-BIT + ADD A,A ; VOLUME 0-15 + ADD A,A ; AND CONVERT + ADD A,A ; TO HBIOS + LD L, A ; RANGE 0-255 RST 08 ; - LD B, BF_SNDPRD ; SET PERIOD - LD C, 0 ; DEVICE 0 - LD HL, (AYREGS+TonB) ; GET 12-BIT ONE PERIOD - ld a, h ; MASK OFF HIGH - AND $0F ; NIBBLE - LD H, A + LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD + LD HL, (AYREGS+TonB) ; DEVICE 0 + ld A, H ; GET 12-BIT ONE PERIOD + AND $0F ; MASK OFF HIGH + LD H, A ; NIBBLE RST 08 ; - LD B, BF_SNDPLAY ; PLAY - LD C, 0 ; DEVICE 0 - LD D, 1 ; CHANNEL 1 - RST 08 + LD BC, (BF_SNDPLAY*256)+0 ; PLAY + LD D, 1 ; DEVICE 0 + RST 08 ; CHANNEL 0 ; ; CHANNEL 2 (RIGHT) ; - LD B, BF_SNDVOL ; SET VOLUME - LD C, 0 ; DEVICE 0 -; LD H, 0 - LD A, (AYREGS + AmplC) ; GET 4-BIT - AND $0F ; VOLUME 0-15 - RLCA ; AND CONVERT - RLCA ; TO HBIOS - RLCA ; RANGE 0-255 - RLCA - LD L, A + LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME + LD A, (AYREGS + AmplC) ; DEVICE 0 + ADD A,A ; GET 4-BIT + ADD A,A ; VOLUME 0-15 + ADD A,A ; AND CONVERT + ADD A,A ; TO HBIOS + LD L, A ; RANGE 0-255 RST 08 ; - LD B, BF_SNDPRD ; SET PERIOD - LD C, 0 ; DEVICE 0 - LD HL, (AYREGS+TonC) ; GET 12-BIT ONE PERIOD - ld A, H ; MASK OFF HIGH - AND $0F ; NIBBLE - LD H, A + LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD + LD HL, (AYREGS+TonC) ; DEVICE 0 + ld A, H ; GET 12-BIT ONE PERIOD + AND $0F ; MASK OFF HIGH + LD H, A ; NIBBLE RST 08 ; - LD B, BF_SNDPLAY ; PLAY - LD C, 0 ; DEVICE 0 - LD D, 2 ; CHANNEL 2 - RST 08 ; HBIOS CALL + LD BC, (BF_SNDPLAY*256)+0 ; PLAY + LD D, 2 ; DEVICE 0 + RST 08 ; CHANNEL 0 RET #ENDIF diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index 624bb82f..64b6e648 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -16,7 +16,7 @@ AY_RDAT .EQU $9D AY_ACR .EQU N8_DEFACR #ENDIF ; -#IF (AYMODE == AYMODE_RCZ80) +#IF (AYMODE == AYMODE_RCZ80) AY_RSEL .EQU $D8 AY_RDAT .EQU $D0 #ENDIF @@ -63,9 +63,11 @@ SBCV2004 .EQU 0 ; USE SBC-V2-004 HALF CLOCK DIVIDER AY_TONECNT .EQU 3 ; COUNT NUMBER OF TONE CHANNELS AY_NOISECNT .EQU 1 ; COUNT NUMBER OF NOISE CHANNELS ; -AY_PHICLK .EQU 3579500 -AY_CLKDIV .EQU 2 -AY_CLK .EQU AY_PHICLK / AY_CLKDIV +;AY_PHICLK .EQU 3579500 ; MSX NTSC COLOUR BURST FREQ = 315/88 +;AY_PHICLK .EQU 3500000 ; ZX SPECTRUM 3.5MHZ +;AY_PHICLK .EQU 4000000 ; RETROBREW SCB-SCG +;AY_CLKDIV .EQU 2 +;AY_CLK .EQU AY_PHICLK / AY_CLKDIV ; #INCLUDE "audio.inc" ; @@ -221,8 +223,6 @@ AY_NOTE: JR NC, AY_NOTE1 ; INCOMING HL DOES NOT MAP INTO AY3NOTETBL ; ADD HL, DE ; RESTORE HL -; EX DE,HL -; LD HL, AY3NOTETBL ; HL = AY3NOTETBL + HL LD DE, AY3NOTETBL ; HL = AY3NOTETBL + HL ADD HL, DE ; @@ -416,7 +416,7 @@ AYT_REGWR .DB "\r\nOUT AY-3-8910 $" ; FREQUENCY TONE TABLE (SEMITONE CURRENTLY) ;====================================================================== ; -; PERIOD OCTAVE NOTE MIDI# +; MSX TABLE PERIOD OCTAVE NOTE MIDI# ; AY3NOTETBL: ; .DW 6842 ;0 12 diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index 0d7a2936..524b253d 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -119,6 +119,7 @@ SN7_NOTE: AUDTRACE_L AUDTRACE_CR + LD H,0 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 @@ -127,9 +128,7 @@ SN7_NOTE: 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 + LD DE, SN7NOTETBL ADD HL, DE LD A, (HL) ; RETRIEVE PERIOD COUNT FROM SN7NOTETBL