|
|
|
@ -144,20 +144,20 @@ AY_SV: CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
AY_RESET: |
|
|
|
AUDTRACE(TRACE_INIT) |
|
|
|
AUDTRACE(AYT_INIT) |
|
|
|
; |
|
|
|
CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION |
|
|
|
; |
|
|
|
AUDTRACE(TRACE_VOLUME_OFF) |
|
|
|
AUDTRACE(AYT_VOLOFF) |
|
|
|
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 (AY_PENDING_VOLUME),A ; SET VOLUME TO ZERO |
|
|
|
LD H,A |
|
|
|
LD L,A |
|
|
|
LD (PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO |
|
|
|
; |
|
|
|
LD (AY_PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO |
|
|
|
; |
|
|
|
RET |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
@ -165,11 +165,11 @@ AY_RESET: |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
AY_VOLUME: |
|
|
|
AUDDEBUG("AY3VOL ") |
|
|
|
AUDTRACE(AYT_VOL) |
|
|
|
AUDTRACE_L |
|
|
|
AUDDEBUG("\r\n") |
|
|
|
AUDTRACE_CR |
|
|
|
LD A,L ; SAVE VOLUME |
|
|
|
LD (PENDING_VOLUME), A |
|
|
|
LD (AY_PENDING_VOLUME), A |
|
|
|
; |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
@ -179,22 +179,22 @@ AY_VOLUME: |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
AY_PERIOD: |
|
|
|
AUDDEBUG("AY3PRD ") |
|
|
|
AUDTRACE(AYT_PERIOD) |
|
|
|
AUDTRACE_HL |
|
|
|
AUDDEBUG("\r\n") |
|
|
|
AUDTRACE_CR |
|
|
|
|
|
|
|
LD A, H ; MAXIMUM TONE PERIOD IS 12-BITS |
|
|
|
CP $10 ; ALLOWED RANGE IS 0001-0FFF (4095) |
|
|
|
JP NC, AY_QUERY_PERIOD1 ; RETURN NZ IF NUMBER TOO LARGE |
|
|
|
|
|
|
|
LD (PENDING_PERIOD), HL ; SAVE AND |
|
|
|
LD (AY_PENDING_PERIOD), HL ; SAVE AND |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
|
|
|
|
AY_QUERY_PERIOD1: |
|
|
|
LD L, $FF |
|
|
|
LD H, L ; REQUESTED PERIOD IS LARGER |
|
|
|
LD (PENDING_PERIOD), HL ; THAN THE DEVICE CAN SUPPORT |
|
|
|
LD H, L ; REQUESTED PERIOD IS LARGER |
|
|
|
LD (AY_PENDING_PERIOD), HL ; THAN THE DEVICE CAN SUPPORT |
|
|
|
OR L ; SO SIGNAL FAILURE |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -203,9 +203,9 @@ AY_QUERY_PERIOD1: |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
AY_NOTE: |
|
|
|
AUDDEBUG("AY3NOT ") |
|
|
|
AUDTRACE(AYT_NOTE) |
|
|
|
AUDTRACE_L |
|
|
|
AUDDEBUG("\r\n") |
|
|
|
AUDTRACE_CR |
|
|
|
|
|
|
|
ADD HL, HL ; SHIFT RIGHT (MULT 2) -INDEX INTO AY3NOTETBL TABLE OF WORDS |
|
|
|
; TEST IF HL IS LARGER THAN AY3NOTETBL SIZE |
|
|
|
@ -236,11 +236,11 @@ AY_NOTE1: |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
AY_PLAY: |
|
|
|
AUDDEBUG("AY3PLY ") |
|
|
|
AUDTRACE(AYT_PLAY) |
|
|
|
AUDTRACE_D |
|
|
|
AUDDEBUG("\r\n") |
|
|
|
AUDTRACE_CR |
|
|
|
; |
|
|
|
LD A, (PENDING_PERIOD + 1) ; CHECK THE HIGH BYTE OF THE PERIOD |
|
|
|
LD A, (AY_PENDING_PERIOD + 1) ; CHECK THE HIGH BYTE OF THE PERIOD |
|
|
|
CP $FF |
|
|
|
JR Z, AY_PLAY1 ; PERIOD IS TOO LARGE, UNABLE TO PLAY |
|
|
|
CALL AY_APPLY_VOL |
|
|
|
@ -250,13 +250,13 @@ AY_PLAY: |
|
|
|
RET |
|
|
|
; |
|
|
|
AY_PLAY1: ; TURN CHANNEL VOL TO OFF AND STOP PLAYING |
|
|
|
LD A, (PENDING_VOLUME) |
|
|
|
LD A, (AY_PENDING_VOLUME) |
|
|
|
PUSH AF |
|
|
|
XOR A |
|
|
|
LD (PENDING_VOLUME), A |
|
|
|
LD (AY_PENDING_VOLUME), A |
|
|
|
CALL AY_APPLY_VOL |
|
|
|
POP AF |
|
|
|
LD (PENDING_VOLUME), A |
|
|
|
LD (AY_PENDING_VOLUME), A |
|
|
|
; |
|
|
|
OR $FF ; SIGNAL FAILURE |
|
|
|
RET |
|
|
|
@ -284,17 +284,17 @@ AY_QUERY: |
|
|
|
; |
|
|
|
AY_QUERY_CHCNT: |
|
|
|
LD B, AY_TONECNT ; RETURN NUMBER OF |
|
|
|
LD C, AY_NOISECNT ; TONE AND NOISE |
|
|
|
LD C, AY_NOISECNT ; TONE AND NOISE |
|
|
|
XOR A ; CHANNELS IN BC |
|
|
|
RET |
|
|
|
; |
|
|
|
AY_QUERY_PERIOD: |
|
|
|
LD HL, (PENDING_PERIOD) ; RETURN 16-BIT PERIOD |
|
|
|
LD HL, (AY_PENDING_PERIOD) ; RETURN 16-BIT PERIOD |
|
|
|
XOR A ; IN HL REGISTER |
|
|
|
RET |
|
|
|
; |
|
|
|
AY_QUERY_VOLUME: |
|
|
|
LD A, (PENDING_VOLUME) ; RETURN 8-BIT VOLUME |
|
|
|
LD A, (AY_PENDING_VOLUME) ; RETURN 8-BIT VOLUME |
|
|
|
LD L, A ; IN L REGISTER |
|
|
|
XOR A |
|
|
|
LD H, A |
|
|
|
@ -320,11 +320,11 @@ AY_APPLY_VOL: |
|
|
|
ADD A,AY_R8AVOL ; CHANNEL VOLUME |
|
|
|
LD D,A ; REGISTER |
|
|
|
; |
|
|
|
AUDTRACE(TRACE_REG_WR) |
|
|
|
AUDTRACE(AYT_REGWR) |
|
|
|
AUDTRACE_A |
|
|
|
AUDTRACE(TRACE_NEWLINE) |
|
|
|
AUDTRACE_CR |
|
|
|
; |
|
|
|
LD A, (PENDING_VOLUME) ; MAP THE VOLUME |
|
|
|
LD A, (AY_PENDING_VOLUME) ; MAP THE VOLUME |
|
|
|
RRCA ; FROM 00-FF |
|
|
|
RRCA ; TO 00-0F |
|
|
|
RRCA |
|
|
|
@ -353,11 +353,12 @@ AY_APPLY_PRD: |
|
|
|
ADD A,A ; CHANNEL REGISTER |
|
|
|
LD D,A ; FOR THE TONE PERIOD |
|
|
|
; |
|
|
|
AUDTRACE(TRACE_REG_WR) |
|
|
|
AUDTRACE(AYT_REGWR) |
|
|
|
AUDTRACE_A |
|
|
|
AUDTRACE(TRACE_NEWLINE) |
|
|
|
AUDTRACE_CR |
|
|
|
|
|
|
|
; |
|
|
|
LD HL,(PENDING_PERIOD) ; WRITE THE LOWER |
|
|
|
LD HL,(AY_PENDING_PERIOD) ; WRITE THE LOWER |
|
|
|
LD E,L ; 8-BITS OF THE TONE PERIOD |
|
|
|
CALL AY_WRTPSG |
|
|
|
INC D |
|
|
|
@ -405,19 +406,17 @@ AY_WRTPSG: |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS) |
|
|
|
PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) |
|
|
|
AY_PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS) |
|
|
|
AY_PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) |
|
|
|
|
|
|
|
#IF AUDIOTRACE |
|
|
|
TRACE_INIT .DB "\r\nAY_INIT CALLED\r\n$" |
|
|
|
TRACE_VOLUME_OFF .DB "\r\nAY_VOLUME_OFF\r\n$" |
|
|
|
TRACE_VOLUME_SET .DB "\r\nAY_VOLUME_SET CH: $" |
|
|
|
TRACE_PLAY .DB "\r\nPLAY\r\n$" |
|
|
|
TRACE_VOLUME .DB ", VOL: $" |
|
|
|
TRACE_REG_WR .DB "\r\nOUT AY-3-8910 $" |
|
|
|
TRACE_PERIOD_SET .DB "\r\nAY_PERIOD_SET CH: $" |
|
|
|
TRACE_PERIOD .DB ", PERIOD: $" |
|
|
|
TRACE_NEWLINE .DB "\r\n$" |
|
|
|
AYT_INIT .DB "\r\nAY_INIT\r\n$" |
|
|
|
AYT_VOLOFF .DB "\r\nAY_VOLUME OFF\r\n$" |
|
|
|
AYT_VOL .DB "\r\nAY_VOLUME: $" |
|
|
|
AYT_NOTE .DB "\r\nAY_NOTE: $" |
|
|
|
AYT_PERIOD .DB "\r\nAY_PERIOD $" |
|
|
|
AYT_PLAY .DB "\r\nAY_PLAY CH: $" |
|
|
|
AYT_REGWR .DB "\r\nOUT AY-3-8910 $" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; THE FREQUENCY BY QUARTER TONE STARTING AT A1# |
|
|
|
|