Browse Source

sound and tune optimizations

sn76489 not tested
patch
b1ackmai1er 6 years ago
parent
commit
7cbb9d081b
  1. 105
      Source/Apps/Tune/Tune.asm
  2. 14
      Source/HBIOS/ay38910.asm
  3. 5
      Source/HBIOS/sn76489.asm

105
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

14
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

5
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

Loading…
Cancel
Save