mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.1 KiB
77 lines
2.1 KiB
#IF AUDIOTRACE
|
|
#DEFINE AUDTRACE(STR) PUSH DE \ LD DE, STR \ CALL WRITESTR \ POP DE
|
|
#DEFINE AUDTRACE_A CALL PRTHEXBYTE
|
|
#DEFINE AUDTRACE_B PUSH AF \ LD A, B \ CALL PRTHEXBYTE \ POP AF
|
|
#DEFINE AUDTRACE_D PUSH AF \ LD A, D \ CALL PRTHEXBYTE \ POP AF
|
|
#DEFINE AUDTRACE_E PUSH AF \ LD A, E \ CALL PRTHEXBYTE \ POP AF
|
|
#DEFINE AUDTRACE_L PUSH AF \ LD A, L \ CALL PRTHEXBYTE \ POP AF
|
|
#DEFINE AUDTRACE_HL CALL PRTHEXWORDHL
|
|
#DEFINE AUDTRACE_BC PUSH HL \ PUSH BC \ POP HL \ CALL PRTHEXWORDHL \ POP HL
|
|
#DEFINE AUDTRACE_DE PUSH HL \ PUSH DE \ POP HL \ CALL PRTHEXWORDHL \ POP HL
|
|
#DEFINE AUDTRACE_IY PUSH HL \ PUSH IY \ POP HL \ CALL PRTHEXWORDHL \ POP HL
|
|
|
|
#DEFINE AUDDEBUG(S) push hl \ CALL PRTSTRD \ .TEXT S \ .TEXT "$" \ pop hl ; $$$$$$ PRINT STRING S TO CONSOLE - PRTD("HELLO") - NO TRAILING $ REQUIRED
|
|
|
|
#DEFINE AUDTRACE_CR AUDDEBUG("\r\n$")
|
|
|
|
#ELSE
|
|
#DEFINE AUDTRACE(S)
|
|
#DEFINE AUDTRACE_A
|
|
#DEFINE AUDTRACE_B
|
|
#DEFINE AUDTRACE_D
|
|
#DEFINE AUDTRACE_E
|
|
#DEFINE AUDTRACE_L
|
|
#DEFINE AUDTRACE_BC
|
|
#DEFINE AUDTRACE_HL
|
|
#DEFINE AUDTRACE_DE
|
|
#DEFINE AUDTRACE_IY
|
|
|
|
#DEFINE AUDDEBUG(STR)
|
|
|
|
#DEFINE AUDTRACE_CR
|
|
#ENDIF
|
|
|
|
|
|
#IFNDEF AUDIOUTILS
|
|
#DEFINE AUDIOUTILS
|
|
|
|
AUD_NOTE:
|
|
AUDDEBUG("AUDNOTE ")
|
|
AUDTRACE_HL
|
|
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
|
|
|
|
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) ; 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: ; DIVIDE THE PERIOD
|
|
DEC C ; BY TWO
|
|
; JR Z, AUD_NOTE2 ; FOR EACH OCTAVE
|
|
RET Z
|
|
SRL H
|
|
RR L
|
|
JR AUD_NOTE1
|
|
|
|
;AUD_NOTE2:
|
|
; LD A, L ; IF NOT ZERO
|
|
; OR H
|
|
; RET NZ ; RETURN THE CALCULATED PERIOD
|
|
;
|
|
; CPL
|
|
; LD H, A ; OTHERWISE RETURN -1 PERIOD (ERROR)
|
|
; LD L, A
|
|
; RET
|
|
#ENDIF
|
|
|