|
|
|
@ -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 |
|
|
|
|