|
|
|
@ -137,10 +137,15 @@ AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE |
|
|
|
LD HL, AY_TIMER ; INSTALL TIMER HOOK HANDLER |
|
|
|
LD (VEC_TICK + 1), HL |
|
|
|
|
|
|
|
LD A, $02 ; NOT READY & IN INTERUPT HANDLER |
|
|
|
LD (AY_READY), A |
|
|
|
|
|
|
|
#ELSE |
|
|
|
CALL LDELAY ; HALF SECOND DELAY |
|
|
|
LD E,$00 ; SET VOLUME OFF |
|
|
|
CALL AY_SETV ; ON ALL CHANNELS |
|
|
|
CALL AY_SETV ; ON ALL CHANNELS |
|
|
|
LD A, $01 ; READY & NOT IN INTERUPT HANDLER |
|
|
|
LD (AY_READY), A |
|
|
|
|
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
@ -154,11 +159,15 @@ AY_TIMER: |
|
|
|
LD (AY_TIMTIK), A |
|
|
|
JR NZ, AY_TIMER1 |
|
|
|
|
|
|
|
LD HL, (AY_TIMHOOK) ; REMOVE US FROM THE TIMER HOOKS LIST |
|
|
|
LD (VEC_TICK + 1), HL |
|
|
|
|
|
|
|
LD E,$00 ; SET VOLUME OFF |
|
|
|
CALL AY_SETV ; ON ALL CHANNELS |
|
|
|
LD A, $01 ; READY & NOT IN INTERUPT HANDLER |
|
|
|
LD (AY_READY), A |
|
|
|
|
|
|
|
LD DE, AY_TIMER ; MAKE AY_TIMER A NO_OP HANDLER |
|
|
|
LD HL, AY_TIMER1 |
|
|
|
LD BC, 3 |
|
|
|
LDIR |
|
|
|
|
|
|
|
AY_TIMER1: |
|
|
|
JP 0 ; OVERWRITTEN WITH NEXT HANDLER |
|
|
|
@ -174,8 +183,16 @@ AY_TIMTIK .DB 0 ; COUNT DOWN TO FINISH BOOT BEEP |
|
|
|
; |
|
|
|
AY_INIT: |
|
|
|
LD DE,(AY_R7ENAB*256)+$F8 ; SET MIXER CONTROL / IO ENABLE. $F8 - 11 111 000 |
|
|
|
CALL AY_WRTPSG ; I/O PORTS = OUTPUT, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE |
|
|
|
RET |
|
|
|
JP AY_WRTPSG ; I/O PORTS = OUTPUT, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE |
|
|
|
|
|
|
|
AY_CHKREDY: |
|
|
|
LD A, (AY_READY) |
|
|
|
BIT 0, A |
|
|
|
RET NZ |
|
|
|
|
|
|
|
POP HL ; REMOVE LAST RETURN ADDRESS |
|
|
|
OR $FF |
|
|
|
RET ; RETURN NZ |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; SET VOLUME ALL CHANNELS |
|
|
|
@ -200,7 +217,8 @@ AY_SV: CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS |
|
|
|
; |
|
|
|
AY_RESET: |
|
|
|
AUDTRACE(AYT_INIT) |
|
|
|
; |
|
|
|
CALL AY_CHKREDY ; RETURNS TO OUR CALLER IF NOT READY |
|
|
|
|
|
|
|
PUSH DE |
|
|
|
PUSH HL |
|
|
|
CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION |
|
|
|
@ -227,6 +245,7 @@ AY_VOLUME: |
|
|
|
AUDTRACE(AYT_VOL) |
|
|
|
AUDTRACE_L |
|
|
|
AUDTRACE_CR |
|
|
|
|
|
|
|
LD A,L ; SAVE VOLUME |
|
|
|
LD (AY_PENDING_VOLUME), A |
|
|
|
; |
|
|
|
@ -283,6 +302,8 @@ AY_PLAY: |
|
|
|
AUDTRACE(AYT_PLAY) |
|
|
|
AUDTRACE_D |
|
|
|
AUDTRACE_CR |
|
|
|
CALL AY_CHKREDY ; RETURNS TO OUR CALLER IF NOT READY |
|
|
|
|
|
|
|
; |
|
|
|
LD A, (AY_PENDING_PERIOD + 1) ; CHECK THE HIGH BYTE OF THE PERIOD |
|
|
|
INC A |
|
|
|
@ -390,6 +411,21 @@ AY_QUERY_DEV: |
|
|
|
LD DE, (AY_RSEL*256)+AY_RDAT ; AND ADDRESS AND DATA PORT |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
|
|
|
|
AY_DI: |
|
|
|
LD A, (AY_READY) |
|
|
|
BIT 1, A |
|
|
|
RET NZ |
|
|
|
HB_DI |
|
|
|
RET |
|
|
|
|
|
|
|
AY_EI: |
|
|
|
LD A, (AY_READY) |
|
|
|
BIT 1, A |
|
|
|
RET NZ |
|
|
|
HB_EI |
|
|
|
RET |
|
|
|
|
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
@ -399,7 +435,7 @@ AY_QUERY_DEV: |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
AY_WRTPSG: |
|
|
|
HB_DI |
|
|
|
CALL AY_DI |
|
|
|
#IF (SBCV2004) |
|
|
|
LD A,8 ; SBC-V2-004 CHANGE |
|
|
|
OUT (112),A ; TO HALF CLOCK SPEED |
|
|
|
@ -422,8 +458,7 @@ AY_WRTPSG: |
|
|
|
LD A,0 ; SBC-V2-004 CHANGE TO |
|
|
|
OUT (112),A ; NORMAL CLOCK SPEED |
|
|
|
#ENDIF |
|
|
|
HB_EI |
|
|
|
RET |
|
|
|
JP AY_EI |
|
|
|
|
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
@ -431,7 +466,7 @@ AY_WRTPSG: |
|
|
|
; READ FROM REGISTER D AND RETURN WITH RESULT IN E |
|
|
|
; |
|
|
|
AY_RDPSG: |
|
|
|
HB_DI |
|
|
|
CALL AY_DI |
|
|
|
#IF (SBCV2004) |
|
|
|
LD A,8 ; SBC-V2-004 CHANGE |
|
|
|
OUT (112),A ; TO HALF CLOCK SPEED |
|
|
|
@ -454,13 +489,14 @@ AY_RDPSG: |
|
|
|
LD A,0 ; SBC-V2-004 CHANGE TO |
|
|
|
OUT (112),A ; NORMAL CLOCK SPEED |
|
|
|
#ENDIF |
|
|
|
HB_EI |
|
|
|
RET |
|
|
|
JP AY_EI |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
AY_PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS) ; ORDER |
|
|
|
AY_PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) ; SIGNIFICANT |
|
|
|
AY_READY .DB 0 ; BIT 0 -> NZ DRIVER IS READY TO RECEIVE PLAY COMMAND |
|
|
|
; BIT 1 -> NZ EXECUTING WITHIN TIMER HANDLER = DO NOT DIS/ENABLE INT |
|
|
|
; |
|
|
|
#IF AUDIOTRACE |
|
|
|
AYT_INIT .DB "\r\nAY_INIT\r\n$" |
|
|
|
|