diff --git a/Source/HBIOS/spk.asm b/Source/HBIOS/spk.asm index 3125b00c..7f27fa7f 100644 --- a/Source/HBIOS/spk.asm +++ b/Source/HBIOS/spk.asm @@ -80,8 +80,8 @@ SP_STUB: ;====================================================================== ; SP_NOTE: -; CALL PRTHEXWORDHL -; CALL PC_COLON + CALL PRTHEXWORDHL + CALL PC_COLON PUSH HL PUSH DE ; ON ENTRY HL IS A NOTE INDEX LD A,L @@ -106,13 +106,12 @@ SP_NOTE1: LD DE,SP_TUNTBL ; SAVE THIS ADDRESS AS ADD HL,DE ; THE PERIOD SP_NOTE2: -; CALL PRTHEXWORDHL -; CALL NEWLINE + CALL PRTHEXWORDHL + CALL NEWLINE LD (SP_PENDING_PERIOD),HL POP DE POP HL RET - ; ;====================================================================== ; SOUND DRIVER FUNCTION - QUERY AND SUBFUNCTIONS @@ -175,7 +174,7 @@ SP_SETTBL3: ; CALL PRTHEXBYTE ; LD B,SP_NOTCNT ; SET NUMBER OF NOTES TO - LD HL,SP_TUNTBL+2 ; ADJUST AND START POINT + LD HL,SP_TUNSTA+2 ; ADJUST AND START POINT ; SP_SETTBL2: PUSH HL @@ -185,10 +184,14 @@ SP_SETTBL2: ; PUSH BC LD B,C - LD HL,0 ; MULTIPLY -SP_SETTBL1: ; 1MHZ NOTE - ADD HL,DE ; VALUE BY - DJNZ SP_SETTBL1 ; SYSTEM MHZ + LD HL,0 ; MULTIPLY 1MHZ +SP_SETTBL1: ; NOTE VALUE BY + ADD HL,DE ; SYSTEM MHZ + JR NC,SP_SETBL4 + LD HL,$FFFF ; FOR CPU > 10MHz + LD B,1 ; HANDLE OVERFLOW +SP_SETBL4: + DJNZ SP_SETTBL1 POP BC ; LD DE,30 ; ADD OVERHEAD @@ -226,6 +229,13 @@ SP_PLAY1: LD D,(HL) INC HL +; LD A,$FF ; EXIT WITH ERROR + CP D ; STATUS IF INVALID + JR NZ,SP_PLAY2 ; NOTE ($FFFF) + CP E + RET Z +; +SP_PLAY2: LD C,(HL) ; LOAD 2ND ARG INC HL ; IN BC LD B,(HL) @@ -311,12 +321,126 @@ BE_END: ; ; https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=boards:sbc:sbc_v2:sbc_v2-004:spk_beep_tuntbl.xlsx ; -SP_TUN: - .DW -$1, $FFFF ; C0 - .DW -$1, $FFFF ; C - .DW -$1, $FFFF ; D0 +; +#DEFINE SP_TONESET(SP_FREQ) .DW SP_FREQ/100, 12500000/SP_FREQ +; SP_TUNTBL: - .DW $13, $191A ; D +SP_TUNSTA: + SP_TONESET(1635) ; C0 + SP_TONESET(1732) ; C + SP_TONESET(1835) ; D0 + SP_TONESET(1945) ; E0 + SP_TONESET(2060) ; F0 + SP_TONESET(2183) ; F + SP_TONESET(2312) ; G0 + SP_TONESET(2450) ; G + SP_TONESET(2596) ; A0 + SP_TONESET(2750) ; A + SP_TONESET(2914) ; + SP_TONESET(3087) ; B0 + SP_TONESET(3270) ; C1 + SP_TONESET(3465) ; C + SP_TONESET(3671) ; D1 + SP_TONESET(3889) ; D + SP_TONESET(4120) ; E1 + SP_TONESET(4365) ; F1 + SP_TONESET(4625) ; F + SP_TONESET(4900) ; G1 + SP_TONESET(5191) ; G + SP_TONESET(5500) ; A1 + SP_TONESET(5827) ; A + SP_TONESET(6174) ; B1 + SP_TONESET(6541) ; C2 + SP_TONESET(6930) ; C + SP_TONESET(7342) ; D2 + SP_TONESET(7778) ; D + SP_TONESET(8241) ; E2 + SP_TONESET(8731) ; F2 + SP_TONESET(9250) ; F + SP_TONESET(9800) ; G2 + SP_TONESET(10383) ; G + SP_TONESET(11000) ; A2 + SP_TONESET(11654) ; A + SP_TONESET(12347) ; B2 + SP_TONESET(13081) ; C3 + SP_TONESET(13859) ; C + SP_TONESET(14683) ; D3 + SP_TONESET(15556) ; D + SP_TONESET(16481) ; E3 + SP_TONESET(17461) ; F3 + SP_TONESET(18500) ; F + SP_TONESET(19600) ; G3 + SP_TONESET(20765) ; G + SP_TONESET(22000) ; A3 + SP_TONESET(23308) ; A + SP_TONESET(24694) ; B3 + SP_TONESET(26163) ; C4 + SP_TONESET(27718) ; C + SP_TONESET(29366) ; D4 + SP_TONESET(31113) ; D + SP_TONESET(32963) ; E4 + SP_TONESET(34923) ; F4 + SP_TONESET(36999) ; F + SP_TONESET(39200) ; G4 + SP_TONESET(41530) ; G + SP_TONESET(44000) ; A4 + SP_TONESET(46616) ; A + SP_TONESET(49388) ; B4 + SP_TONESET(52325) ; C5 + SP_TONESET(55437) ; C + SP_TONESET(58733) ; D5 + SP_TONESET(62225) ; D + SP_TONESET(65925) ; E5 + SP_TONESET(69846) ; F5 + SP_TONESET(73999) ; F + SP_TONESET(78399) ; G5 + SP_TONESET(83061) ; G + SP_TONESET(88000) ; A5 + SP_TONESET(93233) ; A + SP_TONESET(98777) ; B5 + SP_TONESET(104650) ; C6 + SP_TONESET(110873) ; C + SP_TONESET(117466) ; D6 + SP_TONESET(124451) ; D + SP_TONESET(131851) ; E6 + SP_TONESET(139691) ; F6 + SP_TONESET(147998) ; F + SP_TONESET(156798) ; G6 + SP_TONESET(166122) ; G + SP_TONESET(179000) ; A6 + SP_TONESET(186466) ; A + SP_TONESET(197553) ; B6 + SP_TONESET(209300) ; C7 + SP_TONESET(221746) ; C + SP_TONESET(234932) ; D7 + SP_TONESET(248902) ; D + SP_TONESET(263702) ; E7 + SP_TONESET(279383) ; F7 + SP_TONESET(295996) ; F + SP_TONESET(313596) ; G7 + SP_TONESET(332244) ; G + SP_TONESET(352000) ; A7 + SP_TONESET(372931) ; A + SP_TONESET(395107) ; B7 +SP_NOTE_C8: + SP_TONESET(418601) ; C8 + SP_TONESET(443492) ; C + SP_TONESET(469863) ; D8 + SP_TONESET(497803) ; D + SP_TONESET(527404) ; E8 + SP_TONESET(558765) ; F8 + SP_TONESET(591991) ; F + SP_TONESET(627193) ; G8 + SP_TONESET(664488) ; G + SP_TONESET(704000) ; A8 + SP_TONESET(745862) ; A + SP_TONESET(790213) ; B8 +; +SP_NOTCNT .EQU ($-SP_TUNSTA) / 4 +; + .DW $10, $FFFF ; C0 ; WILL OVERFLOW AT 10MHZ + .DW $11, $FFFF ; C ; WILL OVERFLOW AT 10MHZ + .DW $12, $FFFF ; D0 ; WILL OVERFLOW AT 10MHZ .DW $14, $17B3 ; E0 .DW $15, $165E ; F0 .DW $17, $151E ; F @@ -409,7 +533,7 @@ SP_TUNTBL: .DW $DC0, $23 ; A7 .DW $E91, $21 ; A .DW $F6F, $1F ; B7 -SP_NOTE_C8: +;SP_NOTE_C8: .DW $105A, $1D ; C8 .DW $1152, $1C ; C .DW $125A, $1A ; D8 @@ -422,6 +546,4 @@ SP_NOTE_C8: .DW $1B80, $11 ; A8 .DW $1D22, $10 ; A .DW $1EDE, $F ; B8 -; -SP_NOTCNT .EQU ($-SP_TUNTBL) / 4 -; +