MSU-1: Don't stall NMI while audio is busy loading, and wait for ending music to finish.
This commit is contained in:
@@ -1066,6 +1066,9 @@ spc_nmi:
|
||||
JML msu_main
|
||||
NOP
|
||||
spc_continue:
|
||||
|
||||
org $0EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20)
|
||||
JSL.l ending_wait
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
|
||||
77
msu.asm
77
msu.asm
@@ -58,6 +58,7 @@
|
||||
!REG_MUSIC_CONTROL = $012C
|
||||
!REG_CURRENT_TRACK = $0130
|
||||
!REG_CURRENT_COMMAND = $0133
|
||||
!REG_MSU_LOAD_FLAG = $7F509B
|
||||
|
||||
!REG_SPC_CONTROL = $2140
|
||||
!REG_NMI_FLAGS = $4210
|
||||
@@ -93,6 +94,35 @@ msu_main:
|
||||
SEP #$30
|
||||
LDX !REG_MUSIC_CONTROL
|
||||
BNE command_ff
|
||||
LDA !REG_MSU_LOAD_FLAG
|
||||
BEQ do_fade
|
||||
|
||||
msu_check_busy:
|
||||
LDA !REG_MSU_STATUS
|
||||
BIT !FLAG_MSU_STATUS_AUDIO_BUSY
|
||||
BEQ .ready
|
||||
JML spc_continue
|
||||
.ready
|
||||
LDA !REG_MSU_STATUS
|
||||
BIT !FLAG_MSU_STATUS_TRACK_MISSING
|
||||
BNE spc_fallback
|
||||
LDA !VAL_VOLUME_FULL
|
||||
STA !REG_TARGET_VOLUME
|
||||
STA !REG_CURRENT_VOLUME
|
||||
STA !REG_MSU_VOLUME
|
||||
LDA !REG_MSU_LOAD_FLAG
|
||||
STA !REG_MSU_CONTROL
|
||||
LDA #$00
|
||||
STA !REG_MSU_LOAD_FLAG
|
||||
JML spc_continue
|
||||
|
||||
spc_fallback:
|
||||
STZ !REG_MSU_CONTROL
|
||||
STZ !REG_CURRENT_MSU_TRACK
|
||||
STZ !REG_TARGET_VOLUME
|
||||
STZ !REG_CURRENT_VOLUME
|
||||
STZ !REG_MSU_VOLUME
|
||||
JML spc_continue
|
||||
|
||||
do_fade:
|
||||
LDA !REG_CURRENT_VOLUME
|
||||
@@ -156,28 +186,29 @@ load_track:
|
||||
STX !REG_MSU_TRACK_LO
|
||||
STZ !REG_MSU_TRACK_HI
|
||||
STZ !REG_MSU_CONTROL
|
||||
LDA !VAL_VOLUME_FULL
|
||||
STA !REG_TARGET_VOLUME
|
||||
STA !REG_CURRENT_VOLUME
|
||||
STA !REG_MSU_VOLUME
|
||||
|
||||
msu_check_busy:
|
||||
LDA !REG_MSU_STATUS
|
||||
BIT !FLAG_MSU_STATUS_AUDIO_BUSY
|
||||
BNE msu_check_busy
|
||||
BIT !FLAG_MSU_STATUS_TRACK_MISSING
|
||||
BEQ msu_play
|
||||
|
||||
spc_fallback:
|
||||
STZ !REG_MSU_CONTROL
|
||||
STZ !REG_CURRENT_MSU_TRACK
|
||||
STZ !REG_TARGET_VOLUME
|
||||
STZ !REG_CURRENT_VOLUME
|
||||
STZ !REG_MSU_VOLUME
|
||||
LDA.l track_list,x
|
||||
STA !REG_MSU_LOAD_FLAG
|
||||
STX !REG_CURRENT_MSU_TRACK
|
||||
JML spc_continue
|
||||
|
||||
msu_play:
|
||||
LDA.l MSUTrackList, X
|
||||
STA !REG_MSU_CONTROL
|
||||
STX !REG_CURRENT_MSU_TRACK
|
||||
JML spc_continue
|
||||
|
||||
ending_wait:
|
||||
rep #$20
|
||||
lda !REG_MSU_ID_01
|
||||
cmp !VAL_MSU_ID_01
|
||||
bne .done
|
||||
lda !REG_MSU_ID_23
|
||||
cmp !VAL_MSU_ID_23
|
||||
bne .done
|
||||
lda !REG_MSU_ID_45
|
||||
cmp !VAL_MSU_ID_45
|
||||
bne .done
|
||||
sep #$20
|
||||
.wait
|
||||
lda !REG_MSU_STATUS
|
||||
bit !FLAG_MSU_STATUS_AUDIO_PLAYING
|
||||
bne .wait
|
||||
.done
|
||||
sep #$20
|
||||
lda #$22
|
||||
rtl
|
||||
|
||||
Reference in New Issue
Block a user