diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index 8f90e360..182cc6a5 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -5,6 +5,9 @@ ;====================================================================== ; ; TODO: +; 1. PROVIDE SUPPORT FOR NOISE CHANNEL +; 2. FOR PERIOD SET, MAP 400 TO 0 AND RETURN ERROR FOR 000 +; 3. DOES THIS WORK FOR FASTER CPUS? ONLY BEEN TEST ON A Z80 7MHZ UNIT ; ;====================================================================== ; CONSTANTS @@ -104,13 +107,10 @@ SN7_NOTE: AUDTRACE_HL AUDTRACE_CR - LD B, H - LD C, L LD DE, 48 - - CALL _DIV16 + CALL DIV16 ; BC IS OCTAVE COUNT - ; HL is NOTE WITIN ACTAVE + ; HL is NOTE WITIN OCTAVE ADD HL, HL LD DE, SN7NOTETBL ADD HL, DE @@ -129,55 +129,21 @@ SN7_NOTE1: JR SN7_NOTE1 SN7_NOTE2: - LD A, L + LD A, L ; IF WE GENERATE ZERO - RETURN ERROR OR H - JR NZ, SN7_PERIOD + JR NZ, SN7_PERIOD ; OTHERWISE APPLY THE CALCULATED PERIOD LD H, $FF LD L, $FF JR SN7_PERIOD -; Divide 16-bit values (with 16-bit result) -; In: Divide BC by divider DE -; Out: BC = result, HL = rest -; -_DIV16: - LD HL, 0 - LD A, B - LD B, 8 -DIV16_LOOP1: - RLA - ADC HL, HL - SBC HL, DE - JR NC, DIV16_NOADD1 - ADD HL, DE -DIV16_NOADD1: - DJNZ DIV16_LOOP1 - RLA - CPL - LD B, A - LD A, C - LD C, B - LD B, 8 -DIV16_LOOP2: - RLA - ADC HL, HL - SBC HL, DE - JR NC, DIV16_NOADD2 - ADD HL, DE -DIV16_NOADD2: - DJNZ DIV16_LOOP2 - RLA - CPL - LD B, C - LD C, A - RET - SN7_PERIOD: AUDTRACE(SNT_PERIOD) AUDTRACE_HL AUDTRACE_CR + ; TODO: MAKE ZERO BE AN INVALID VALUE (USE 400) TO INDICATE LOWEST NOTE + ; NEED TO UPDATE TUNE.ASM TO SUPPORT THIS? ; LD A, H ; IF ZERO - ERROR ; OR L ; JR Z, SN7_QUERY_PERIOD1 @@ -398,10 +364,11 @@ SNT_PLAY .DB "\r\nSN7_PLAY CH: $" SNT_REGWR .DB "\r\nOUT SN76489, $" #ENDIF -; THE FREQUENCY BY QUARTER TONE STARTING AT A0# -; OCATVE 0 - not suported by this driver -; FIRST PLAYABLE NOTE WILL BE $2E - 2 quater tones below a1# -; A1# is $30 +; THE FREQUENCY BY QUARTER TONE STARTING AT A0# OCATVE 0 +; USED TO MAP EACH OCTAVE (DIV BY 2 TO JUMP AN OCTAVE UP) +; FIRST PLAYABLE NOTE WILL BE $2E +; ASSUMING A CLOCK OF 1843200 THIS MAPS TO +; 2 QUATER TONES BELOW A1#, WITH A1# AT $30 SN7NOTETBL: .DW SN7RATIO / 2913 @@ -454,9 +421,3 @@ SN7NOTETBL: .DW SN7RATIO / 5743 SIZ_SN7NOTETBL .EQU $ - SN7NOTETBL - .ECHO "SN76489 approx " - .ECHO SIZ_SN7NOTETBL / 2 / 4 /12 - .ECHO " Octaves. Last note index supported: " - - .ECHO SIZ_SN7NOTETBL / 2 - .ECHO "\n"