diff --git a/Source/Doc/Architecture.md b/Source/Doc/Architecture.md index aeff3143..1d430e74 100644 --- a/Source/Doc/Architecture.md +++ b/Source/Doc/Architecture.md @@ -1404,7 +1404,7 @@ The value corresponds to standard musical notes. The value allows for selection of a quarter of a semitone by giving a value between 0 and up to the drivers maximum supported value. The lowest note is (0). -For the SN76490 chip, 0 corresponds to note A1# and the value 249 is +For the SN76489 chip, 0 corresponds to note A1# and the value 249 is the maximum supported value, and it corresponds to note C7. ### Function 0x54 -- Sound Play (SNDPLAY) diff --git a/Source/HBIOS/ay.asm b/Source/HBIOS/ay.asm index 7deabcf0..6c03d2eb 100644 --- a/Source/HBIOS/ay.asm +++ b/Source/HBIOS/ay.asm @@ -57,10 +57,10 @@ AY_INIT1: CALL AY_BEEP AY_INIT2: LD D,AY_R7ENAB ; SET MIXER CONTROL / IO ENABLE - LD E,$FF ; $FF - 11 111 111 - CALL AY_WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A DISABLE + LD E,$F8 ; $FF - 11 111 111 + CALL AY_WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE ; - LD B,2 + LD B,3 LD D,AY_R8AVOL ; SET VOLUME TO 0 LD E,$00 AY_QUIET: @@ -73,7 +73,7 @@ AY_QUIET: ; AY_BEEP: LD D,AY_R2CHBP ; SET TONE PERIOD - LD E,$55 ; CHANNEL B - R00 & R01 + LD E,$55 ; CHANNEL B - R02 & R03 CALL AY_WRTPSG ; $0055 = XXXX0000 01010101 LD D,AY_R3CHBP LD E,0 diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index 56e48f39..8fe13b25 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -30,13 +30,10 @@ AY_RDAT .EQU $60 ; ; REGISTERS ; -AY_R0CHAP .EQU $00 -AY_R1CHAP .EQU $01 AY_R2CHBP .EQU $02 AY_R3CHBP .EQU $03 AY_R7ENAB .EQU $07 AY_R8AVOL .EQU $08 -AY_R9BVOL .EQU $09 ; ;====================================================================== ; @@ -66,22 +63,9 @@ SBCV2004 .EQU 1 ; 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_CLKDIVIDER .EQU 2 -AY_CLK .EQU CPUOSC / AY_CLKDIVIDER -SN7RATIO .EQU AY_CLK * 100 / 32 - - -AY_FIRST_NOTE .EQU 5827 ; A1# -AY_LAST_NOTE .EQU 209300 ; C7 - -A1S .EQU SN7RATIO / AY_FIRST_NOTE -C7 .EQU SN7RATIO / AY_LAST_NOTE - - .ECHO "AY-3-8910: range of A1# (period: " - .ECHO A1S - .ECHO ") to C7 (period: " - .ECHO C7 - .ECHO ")\n" +AY_PHICLK .EQU 3579500 +AY_CLKDIV .EQU 2 +AY_CLK .EQU AY_PHICLK / AY_CLKDIV ; #INCLUDE "audio.inc" ; @@ -92,7 +76,7 @@ C7 .EQU SN7RATIO / AY_LAST_NOTE ; ANNOUNCE DEVICE ON CONSOLE. ACTIVATE DEVICE IF REQUIRED. ; SETUP FUNCTION TABLES. SETUP THE DEVICE. ; ANNOUNCE DEVICE WITH BEEP. SET VOLUME OFF. -; RETURN SUCCESS STATUS +; RETURN INITIALIZATION STATUS ; AY38910_INIT: CALL NEWLINE ; ANNOUNCE @@ -111,38 +95,69 @@ AY38910_INIT: LD DE, AY_IDAT ; BC := FUNCTION TABLE ADDRESS CALL SND_ADDENT ; DE := INSTANCE DATA PTR ; - CALL AY_RESET ; SET DEFAULT CHIP CONFIGURATION -; CALL AY_BEEP ; PLAY INITIALIZATION BEEP -; CALL AY_VOLUME_OFF ; MAKE QUIET + CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION ; - RET + LD E,$07 ; SET VOLUME TO 50% + CALL AY_SETV ; ON ALL CHANNELS +; + LD D,AY_R2CHBP ; BEEP ON CHANNEL B (CENTER) + LD E,$55 + CALL AY_WRTPSG ; R02 = $55 = 01010101 + LD D,AY_R3CHBP + LD E,$00 + CALL AY_WRTPSG ; R03 = $00 = XXXX0000 +; + CALL LDELAY ; HALF SECOND +; + LD E,$00 ; SET VOLUME OFF + CALL AY_SETV ; ON ALL CHANNELS +; +; RET ; ;====================================================================== -; SOUND DRIVER FUNCTION - RESET +; INITIALIZE DEVICE ;====================================================================== ; -AY_RESET: - AUDTRACE(TRACE_INIT) -; +AY_INIT: LD D,AY_R7ENAB ; SET MIXER CONTROL / IO ENABLE LD E,$F8 ; $F8 - 11 111 000 CALL AY_WRTPSG ; I/O PORTS = OUTPUT, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE - -; CALL AY_VOLUME_OFF ; TURN VOLUME OFF -; RET ; AND RETURN SUCCESS - -AY_VOLUME_OFF: - AUDTRACE(TRACE_VOLUME_OFF) - + RET +; +;====================================================================== +; SET VOLUME ALL CHANNELS +;====================================================================== +; +AY_SETV: LD B,AY_TONECNT ; NUMBER OF CHANNELS LD D,AY_R8AVOL ; BASE REGISTER FOR VOLUME - LD E,$00 ; AMPLITUDE 0 -AY_V: - CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS +AY_SV: CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS INC D - DJNZ AY_V + DJNZ AY_SV + RET ; - XOR A ; SIGNAL SUCCESS +;====================================================================== +; SOUND DRIVER FUNCTION - RESET +; +; INITIALIZE DEVICE. SET VOLUME OFF. RESET VOLUME AND TONE VARIABLES. +; +;====================================================================== +; +AY_RESET: + AUDTRACE(TRACE_INIT) +; + CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION +; + AUDTRACE(TRACE_VOLUME_OFF) + LD E,0 ; SET VOLUME OFF + CALL AY_SETV ; ON ALL CHANNELS +; + XOR A ; SIGNAL SUCCESS + LD (PENDING_VOLUME),A ; SET VOLUME TO ZERO + LD H,A + LD L,A + LD (PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO +; RET ; ;====================================================================== @@ -210,7 +225,7 @@ AY_NOTE: LD H, (HL) LD L, A - JR AY_PERIOD ; APPLY PERIOD + JR AY_PERIOD ; APPLY NOTE PERIOD AY_NOTE1: OR $FF ; NOT IMPLEMENTED YET @@ -349,7 +364,6 @@ AY_APPLY_PRD: LD E,H ; WRITE THE UPPER CALL AY_WRTPSG ; 8-BITS OF THE TONE PERIOD ; - POP AF POP BC POP DE @@ -391,8 +405,8 @@ AY_WRTPSG: ; ;====================================================================== ; -PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS) -PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) +PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS) +PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) #IF AUDIOTRACE TRACE_INIT .DB "\r\nAY_INIT CALLED\r\n$" @@ -405,262 +419,137 @@ TRACE_PERIOD_SET .DB "\r\nAY_PERIOD_SET CH: $" TRACE_PERIOD .DB ", PERIOD: $" TRACE_NEWLINE .DB "\r\n$" #ENDIF - -; THE FREQUENCY BY QUATER TONE STARTING AT A1# +; +; THE FREQUENCY BY QUARTER TONE STARTING AT A1# +; +;====================================================================== +; FREQUENCY TONE TABLE +;====================================================================== +; +; PERIOD OCTAVE NOTE MIDI# +; AY3NOTETBL: - .DW A1S - .DW SN7RATIO / 5912 - .DW SN7RATIO / 5998 - .DW SN7RATIO / 6085 - .DW SN7RATIO / 6174 - .DW SN7RATIO / 6264 - .DW SN7RATIO / 6355 - .DW SN7RATIO / 6447 - .DW SN7RATIO / 6541 - .DW SN7RATIO / 6636 - .DW SN7RATIO / 6733 - .DW SN7RATIO / 6831 - .DW SN7RATIO / 6930 - .DW SN7RATIO / 7031 - .DW SN7RATIO / 7133 - .DW SN7RATIO / 7237 - .DW SN7RATIO / 7342 - .DW SN7RATIO / 7449 - .DW SN7RATIO / 7557 - .DW SN7RATIO / 7667 - .DW SN7RATIO / 7778 - .DW SN7RATIO / 7891 - .DW SN7RATIO / 8006 - .DW SN7RATIO / 8122 - .DW SN7RATIO / 8241 - .DW SN7RATIO / 8361 - .DW SN7RATIO / 8482 - .DW SN7RATIO / 8606 - .DW SN7RATIO / 8731 - .DW SN7RATIO / 8858 - .DW SN7RATIO / 8987 - .DW SN7RATIO / 9118 - .DW SN7RATIO / 9250 - .DW SN7RATIO / 9385 - .DW SN7RATIO / 9521 - .DW SN7RATIO / 9660 - .DW SN7RATIO / 9800 - .DW SN7RATIO / 9943 - .DW SN7RATIO / 10087 - .DW SN7RATIO / 10234 - .DW SN7RATIO / 10383 - .DW SN7RATIO / 10534 - .DW SN7RATIO / 10687 - .DW SN7RATIO / 10843 - .DW SN7RATIO / 11000 - .DW SN7RATIO / 11160 - .DW SN7RATIO / 11322 - .DW SN7RATIO / 11487 - .DW SN7RATIO / 11654 - .DW SN7RATIO / 11824 - .DW SN7RATIO / 11995 - .DW SN7RATIO / 12170 - .DW SN7RATIO / 12347 - .DW SN7RATIO / 12527 - .DW SN7RATIO / 12709 - .DW SN7RATIO / 12894 - .DW SN7RATIO / 13081 - .DW SN7RATIO / 13271 - .DW SN7RATIO / 13464 - .DW SN7RATIO / 13660 - .DW SN7RATIO / 13859 - .DW SN7RATIO / 14061 - .DW SN7RATIO / 14265 - .DW SN7RATIO / 14473 - .DW SN7RATIO / 14683 - .DW SN7RATIO / 14897 - .DW SN7RATIO / 15113 - .DW SN7RATIO / 15333 - .DW SN7RATIO / 15556 - .DW SN7RATIO / 15782 - .DW SN7RATIO / 16012 - .DW SN7RATIO / 16245 - .DW SN7RATIO / 16481 - .DW SN7RATIO / 16721 - .DW SN7RATIO / 16964 - .DW SN7RATIO / 17211 - .DW SN7RATIO / 17461 - .DW SN7RATIO / 17715 - .DW SN7RATIO / 17973 - .DW SN7RATIO / 18234 - .DW SN7RATIO / 18500 - .DW SN7RATIO / 18769 - .DW SN7RATIO / 19042 - .DW SN7RATIO / 19319 - .DW SN7RATIO / 19600 - .DW SN7RATIO / 19885 - .DW SN7RATIO / 20174 - .DW SN7RATIO / 20468 - .DW SN7RATIO / 20765 - .DW SN7RATIO / 21067 - .DW SN7RATIO / 21373 - .DW SN7RATIO / 21684 - .DW SN7RATIO / 22000 - .DW SN7RATIO / 22320 - .DW SN7RATIO / 22645 - .DW SN7RATIO / 22974 - .DW SN7RATIO / 23308 - .DW SN7RATIO / 23647 - .DW SN7RATIO / 23991 - .DW SN7RATIO / 24340 - .DW SN7RATIO / 24694 - .DW SN7RATIO / 25053 - .DW SN7RATIO / 25418 - .DW SN7RATIO / 25787 - .DW SN7RATIO / 26163 - .DW SN7RATIO / 26544 - .DW SN7RATIO / 26930 - .DW SN7RATIO / 27321 - .DW SN7RATIO / 27718 - .DW SN7RATIO / 28121 - .DW SN7RATIO / 28530 - .DW SN7RATIO / 28945 - .DW SN7RATIO / 29366 - .DW SN7RATIO / 29793 - .DW SN7RATIO / 30226 - .DW SN7RATIO / 30666 - .DW SN7RATIO / 31113 - .DW SN7RATIO / 31566 - .DW SN7RATIO / 32025 - .DW SN7RATIO / 32490 - .DW SN7RATIO / 32963 - .DW SN7RATIO / 33442 - .DW SN7RATIO / 33929 - .DW SN7RATIO / 34422 - .DW SN7RATIO / 34923 - .DW SN7RATIO / 35431 - .DW SN7RATIO / 35946 - .DW SN7RATIO / 36469 - .DW SN7RATIO / 36999 - .DW SN7RATIO / 37537 - .DW SN7RATIO / 38083 - .DW SN7RATIO / 38637 - .DW SN7RATIO / 39200 - .DW SN7RATIO / 39770 - .DW SN7RATIO / 40349 - .DW SN7RATIO / 40936 - .DW SN7RATIO / 41530 - .DW SN7RATIO / 42134 - .DW SN7RATIO / 42747 - .DW SN7RATIO / 43369 - .DW SN7RATIO / 44000 - .DW SN7RATIO / 44640 - .DW SN7RATIO / 45289 - .DW SN7RATIO / 45948 - .DW SN7RATIO / 46616 - .DW SN7RATIO / 47294 - .DW SN7RATIO / 47982 - .DW SN7RATIO / 48680 - .DW SN7RATIO / 49388 - .DW SN7RATIO / 50106 - .DW SN7RATIO / 50835 - .DW SN7RATIO / 51575 - .DW SN7RATIO / 52325 - .DW SN7RATIO / 53086 - .DW SN7RATIO / 53858 - .DW SN7RATIO / 54642 - .DW SN7RATIO / 55437 - .DW SN7RATIO / 56243 - .DW SN7RATIO / 57061 - .DW SN7RATIO / 57891 - .DW SN7RATIO / 58733 - .DW SN7RATIO / 59587 - .DW SN7RATIO / 60454 - .DW SN7RATIO / 61333 - .DW SN7RATIO / 62225 - .DW SN7RATIO / 63130 - .DW SN7RATIO / 64048 - .DW SN7RATIO / 64980 - .DW SN7RATIO / 65925 - .DW SN7RATIO / 66884 - .DW SN7RATIO / 67857 - .DW SN7RATIO / 68844 - .DW SN7RATIO / 69846 - .DW SN7RATIO / 70862 - .DW SN7RATIO / 71893 - .DW SN7RATIO / 72938 - .DW SN7RATIO / 73999 - .DW SN7RATIO / 75075 - .DW SN7RATIO / 76167 - .DW SN7RATIO / 77275 - .DW SN7RATIO / 78399 - .DW SN7RATIO / 79539 - .DW SN7RATIO / 80696 - .DW SN7RATIO / 81870 - .DW SN7RATIO / 83061 - .DW SN7RATIO / 84269 - .DW SN7RATIO / 85495 - .DW SN7RATIO / 86738 - .DW SN7RATIO / 88000 - .DW SN7RATIO / 89280 - .DW SN7RATIO / 90579 - .DW SN7RATIO / 91896 - .DW SN7RATIO / 93233 - .DW SN7RATIO / 94589 - .DW SN7RATIO / 95965 - .DW SN7RATIO / 97361 - .DW SN7RATIO / 98777 - .DW SN7RATIO / 100214 - .DW SN7RATIO / 101671 - .DW SN7RATIO / 103150 - .DW SN7RATIO / 104650 - .DW SN7RATIO / 106172 - .DW SN7RATIO / 107716 - .DW SN7RATIO / 109283 - .DW SN7RATIO / 110873 - .DW SN7RATIO / 112486 - .DW SN7RATIO / 114122 - .DW SN7RATIO / 115782 - .DW SN7RATIO / 117466 - .DW SN7RATIO / 119175 - .DW SN7RATIO / 120908 - .DW SN7RATIO / 122667 - .DW SN7RATIO / 124451 - .DW SN7RATIO / 126261 - .DW SN7RATIO / 128098 - .DW SN7RATIO / 129961 - .DW SN7RATIO / 131851 - .DW SN7RATIO / 133769 - .DW SN7RATIO / 135715 - .DW SN7RATIO / 137689 - .DW SN7RATIO / 139691 - .DW SN7RATIO / 141723 - .DW SN7RATIO / 143784 - .DW SN7RATIO / 145876 - .DW SN7RATIO / 147998 - .DW SN7RATIO / 150151 - .DW SN7RATIO / 152335 - .DW SN7RATIO / 154550 - .DW SN7RATIO / 156798 - .DW SN7RATIO / 159079 - .DW SN7RATIO / 161393 - .DW SN7RATIO / 163740 - .DW SN7RATIO / 166122 - .DW SN7RATIO / 168538 - .DW SN7RATIO / 170990 - .DW SN7RATIO / 173477 - .DW SN7RATIO / 176000 - .DW SN7RATIO / 178560 - .DW SN7RATIO / 181157 - .DW SN7RATIO / 183792 - .DW SN7RATIO / 186466 - .DW SN7RATIO / 189178 - .DW SN7RATIO / 191930 - .DW SN7RATIO / 194722 - .DW SN7RATIO / 197553 - .DW SN7RATIO / 200426 - .DW SN7RATIO / 203342 - .DW SN7RATIO / 206299 - .DW C7 +; .DW 6842 ;0 12 +; .DW 6458 ;0 13 +; .DW 6096 ;0 14 +; .DW 5751 ;0 15 +; .DW 5430 ;0 16 +; .DW 5124 ;0 17 +; .DW 4838 ;0 18 +; .DW 4566 ;0 19 +; .DW 4309 ;0 20 + .DW 4068 ;0 A0 21 + .DW 3839 ;0 22 + .DW 3624 ;0 23 + .DW 3421 ;1 24 + .DW 3228 ;1 25 + .DW 3047 ;1 26 + .DW 2876 ;1 27 + .DW 2715 ;1 28 + .DW 2563 ;1 29 + .DW 2419 ;1 30 + .DW 2283 ;1 31 + .DW 2155 ;1 32 + .DW 2034 ;1 33 + .DW 1920 ;1 34 + .DW 1812 ;1 35 + .DW 1710 ;2 36 + .DW 1614 ;2 37 + .DW 1524 ;2 38 + .DW 1438 ;2 39 + .DW 1357 ;2 40 + .DW 1281 ;2 41 + .DW 1209 ;2 42 + .DW 1141 ;2 43 + .DW 1077 ;2 44 + .DW 1017 ;2 45 + .DW 960 ;2 46 + .DW 906 ;2 47 + .DW 855 ;3 48 + .DW 807 ;3 49 + .DW 762 ;3 50 + .DW 719 ;3 51 + .DW 679 ;3 52 + .DW 641 ;3 53 + .DW 605 ;3 54 + .DW 571 ;3 55 + .DW 539 ;3 56 + .DW 508 ;3 57 + .DW 480 ;3 58 + .DW 453 ;3 59 + .DW 428 ;4 60 + .DW 404 ;4 61 + .DW 381 ;4 62 + .DW 360 ;4 63 + .DW 339 ;4 64 + .DW 320 ;4 65 + .DW 302 ;4 66 + .DW 285 ;4 67 + .DW 269 ;4 68 + .DW 254 ;4 69 + .DW 240 ;4 70 + .DW 226 ;4 71 + .DW 214 ;5 72 + .DW 202 ;5 73 + .DW 190 ;5 74 + .DW 180 ;5 75 + .DW 170 ;5 76 + .DW 160 ;5 77 + .DW 151 ;5 78 + .DW 143 ;5 79 + .DW 135 ;5 80 + .DW 127 ;5 81 + .DW 120 ;5 82 + .DW 113 ;5 83 + .DW 107 ;6 84 + .DW 101 ;6 85 + .DW 95 ;6 86 + .DW 90 ;6 87 + .DW 85 ;6 88 + .DW 80 ;6 89 + .DW 76 ;6 90 + .DW 71 ;6 91 + .DW 67 ;6 92 + .DW 64 ;6 93 + .DW 60 ;6 94 + .DW 57 ;6 95 + .DW 53 ;7 96 + .DW 50 ;7 97 + .DW 48 ;7 98 + .DW 45 ;7 99 + .DW 42 ;7 100 + .DW 40 ;7 101 + .DW 38 ;7 102 + .DW 36 ;7 103 + .DW 34 ;7 104 + .DW 32 ;7 105 + .DW 30 ;7 106 + .DW 28 ;7 107 + .DW 27 ;8 108 + .DW 25 ;8 109 + .DW 24 ;8 110 + .DW 22 ;8 111 + .DW 21 ;8 112 + .DW 20 ;8 113 + .DW 19 ;8 114 + .DW 18 ;8 115 + .DW 17 ;8 116 + .DW 16 ;8 117 + .DW 15 ;8 118 + .DW 14 ;8 119 + .DW 13 ;9 120 + .DW 13 ;9 121 + .DW 12 ;9 122 + .DW 11 ;9 123 + .DW 11 ;9 124 + .DW 10 ;9 125 + .DW 9 ;9 126 + .DW 9 ;9 127 + .DW 8 ;9 128 SIZ_AY3NOTETBL .EQU $ - AY3NOTETBL - .ECHO "SN76489 approx " - .ECHO SIZ_AY3NOTETBL / 2 / 4 /12 + .ECHO "AY-3-8910 approx " + .ECHO SIZ_AY3NOTETBL / 2 / 12 .ECHO " Octaves. Last note index supported: " .ECHO SIZ_AY3NOTETBL / 2 diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index 0293dd15..5d849893 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -364,7 +364,7 @@ TRACE_PERIOD .DB ", PERIOD: $" TRACE_NEWLINE .DB "\r\n$" #ENDIF -; THE FREQUENCY BY QUATER TONE STARTING AT A1# +; THE FREQUENCY BY QUARTER TONE STARTING AT A1# SN7NOTETBL: .DW A1S .DW SN7RATIO / 5912