mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
AY38910: Fix issue with interrupt handling during boot beep
This commit is contained in:
@@ -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
|
||||
;
|
||||
@@ -159,6 +164,8 @@ AY_TIMER:
|
||||
|
||||
LD E,$00 ; SET VOLUME OFF
|
||||
CALL AY_SETV ; ON ALL CHANNELS
|
||||
LD A, $01 ; READY & NOT IN INTERUPT HANDLER
|
||||
LD (AY_READY), A
|
||||
|
||||
AY_TIMER1:
|
||||
JP 0 ; OVERWRITTEN WITH NEXT HANDLER
|
||||
@@ -174,8 +181,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 +215,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 +243,7 @@ AY_VOLUME:
|
||||
AUDTRACE(AYT_VOL)
|
||||
AUDTRACE_L
|
||||
AUDTRACE_CR
|
||||
|
||||
LD A,L ; SAVE VOLUME
|
||||
LD (AY_PENDING_VOLUME), A
|
||||
;
|
||||
@@ -283,6 +300,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 +409,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 +433,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 +456,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 +464,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 +487,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$"
|
||||
|
||||
Reference in New Issue
Block a user