diff --git a/Source/HBIOS/audio.inc b/Source/HBIOS/audio.inc index b6365494..dfd7f884 100644 --- a/Source/HBIOS/audio.inc +++ b/Source/HBIOS/audio.inc @@ -41,25 +41,25 @@ AUD_NOTE: AUDTRACE_CR AUDTRACE_DE AUDTRACE_CR +; + 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 - push de - LD DE, 48 - CALL DIV16 - ; BC IS OCTAVE COUNT - ; HL is NOTE WITIN OCTAVE - ADD HL, HL - pop de - ADD HL, DE + 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) ; RETRIEVE PERIOD COUNT FROM SN7NOTETBL - INC HL - LD H, (HL) + 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 INC C -AUD_NOTE1: - DEC C - JR Z, AUD_NOTE2 +AUD_NOTE1: ; DIVIDE THE PERIOD + DEC C ; BY TWO + JR Z, AUD_NOTE2 ; FOR EACH OCTAVE SRL H RR L JR AUD_NOTE1 @@ -69,7 +69,8 @@ AUD_NOTE2: OR H RET NZ ; RETURN THE CALCULATED PERIOD - LD H, $FF ; OTHERWISE RETURN -1 PERIOD (ERROR) - LD L, $FF + CPL + LD H, A ; OTHERWISE RETURN -1 PERIOD (ERROR) + LD L, A RET #ENDIF