diff --git a/Source/HBIOS/audio.inc b/Source/HBIOS/audio.inc index e02e7af4..b6365494 100644 --- a/Source/HBIOS/audio.inc +++ b/Source/HBIOS/audio.inc @@ -34,4 +34,42 @@ #IFNDEF AUDIOUTILS #DEFINE AUDIOUTILS + +AUD_NOTE: + AUDDEBUG("AUDNOTE ") + AUDTRACE_HL + AUDTRACE_CR + AUDTRACE_DE + AUDTRACE_CR + + push de + LD DE, 48 + CALL DIV16 + ; BC IS OCTAVE COUNT + ; HL is NOTE WITIN OCTAVE + ADD HL, HL + pop de + ADD HL, DE + + LD A, (HL) ; RETRIEVE PERIOD COUNT FROM SN7NOTETBL + INC HL + LD H, (HL) + LD L, A + + INC C +AUD_NOTE1: + DEC C + JR Z, AUD_NOTE2 + SRL H + RR L + JR AUD_NOTE1 + +AUD_NOTE2: + LD A, L ; IF NOT ZERO + OR H + RET NZ ; RETURN THE CALCULATED PERIOD + + LD H, $FF ; OTHERWISE RETURN -1 PERIOD (ERROR) + LD L, $FF + RET #ENDIF diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index f0315f77..debe3e08 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -7,8 +7,6 @@ ; @3.579545 OCTAVE RANGE IS 2 - 7 (Bb2/A#2 .. A7) ; @4.000000 OCTAVE RANGE IS 2 - 7 (B2 .. A7) ; -;#include "cfg_state.inc" -; AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE ; #IF (AYMODE == AYMODE_SCG) @@ -70,8 +68,6 @@ AY_IDAT .EQU 0 ; NO INSTANCE DATA ASSOCIATED WITH THIS DEVICE ; ; DEVICE CAPABILITIES AND CONFIGURATION ; -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 ; @@ -459,7 +455,7 @@ AY_EI: ; AY_WRTPSG: CALL AY_DI -#IF (SBCV2004) +#IFDEF SBCV2004 LD A,8 ; SBC-V2-004 CHANGE OUT (112),A ; TO HALF CLOCK SPEED #ENDIF @@ -477,7 +473,7 @@ AY_WRTPSG: POP AF ; GET SAVED DCNTL VALUE OUT0 (Z180_DCNTL),A ; AND RESTORE IT #ENDIF -#IF (SBCV2004) +#IFDEF SBCV2004 LD A,0 ; SBC-V2-004 CHANGE TO OUT (112),A ; NORMAL CLOCK SPEED #ENDIF @@ -489,7 +485,7 @@ AY_WRTPSG: ; AY_RDPSG: CALL AY_DI -#IF (SBCV2004) +#IFDEF SBCV2004 LD A,8 ; SBC-V2-004 CHANGE OUT (112),A ; TO HALF CLOCK SPEED #ENDIF @@ -507,7 +503,7 @@ AY_RDPSG: POP AF ; GET SAVED DCNTL VALUE OUT0 (Z180_DCNTL),A ; AND RESTORE IT #ENDIF -#IF (SBCV2004) +#IFDEF SBCV2004 LD A,0 ; SBC-V2-004 CHANGE TO OUT (112),A ; NORMAL CLOCK SPEED #ENDIF diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index d1b784cc..220e07e3 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -24,8 +24,7 @@ CHANNEL_1_SILENT .EQU $BF CHANNEL_2_SILENT .EQU $DF CHANNEL_3_SILENT .EQU $FF -SN7_SCALE .EQU 4 -SN7RATIO .EQU (SN7CLK * 100) / (32 >> SN7_SCALE) +SN7RATIO .EQU SN7CLK * 100 / 32 .ECHO "SN76489 CLOCK: " .ECHO SN7CLK @@ -105,42 +104,9 @@ SN7_VOLUME: RET SN7_NOTE: - -; CALL PRTHEXWORDHL -; CALL PC_COLON - - AUDDEBUG("AUDNOTE ") - AUDTRACE_HL - AUDTRACE_CR - AUDTRACE_DE - AUDTRACE_CR - LD DE, SN7NOTETBL - PUSH DE ; ON ENTRY HL IS THE NOTE TO PLAY - LD DE, 48 ; AND DE IS THE START OF NOTE TABLE - CALL DIV16 ; LOAD DE WITH NOTE TABLE SIZE - ; AND CALCULATE OCTAVE COUNT IN BC - - ADD HL, HL ; HL IS THE REMAINDER FROM ABOVE DIVISION (0-47) AND THE NOTE - POP DE ; TO PLAY IN THE OCTAVE. ADD IT TO THE START OF THE NOTE TABLE - ADD HL, DE ; TO POINT TO THE PERIOD FOR THE NOTE WE WANT TO PLAY. - - LD A, (HL) ; HL POINT TO CURRENT PERIOD COUNT WE WANT TO PLAY - INC HL ; SO LOAD PERIOD COUNT FROM NOTE TABLE INTO HL - LD H, (HL) ; SO WE CAN UPDATE IT FOR THE REQUIRED OCTAVE - LD L, A - - LD A,SN7_SCALE ; THE NOTE TABLE PERIOD DATA HAS BEEN - ADD A,C ; PRESCALED TO MAINTAIN RANGE SO ALLOW - LD B,A ; FOR THIS WHEN CHANGING OCTAVE -SN7_NOTE1: - SRL H ; ADJUST THE PERIOD DATA - RR L ; FOR THE DESIRED OCTAVE - DJNZ SN7_NOTE1 ; FALL THROUGH TO SET PERIOD AND RANGE CHECK - -; CALL PRTHEXWORDHL -; CALL NEWLINE - + CALL AUD_NOTE ; RETURNS PERIOD IN HL, FALL THRU + ; TO SET THIS PERIOD SN7_PERIOD: AUDTRACE(SNT_PERIOD) AUDTRACE_HL