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
|
JML msu_main
|
||||||
NOP
|
NOP
|
||||||
spc_continue:
|
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_MUSIC_CONTROL = $012C
|
||||||
!REG_CURRENT_TRACK = $0130
|
!REG_CURRENT_TRACK = $0130
|
||||||
!REG_CURRENT_COMMAND = $0133
|
!REG_CURRENT_COMMAND = $0133
|
||||||
|
!REG_MSU_LOAD_FLAG = $7F509B
|
||||||
|
|
||||||
!REG_SPC_CONTROL = $2140
|
!REG_SPC_CONTROL = $2140
|
||||||
!REG_NMI_FLAGS = $4210
|
!REG_NMI_FLAGS = $4210
|
||||||
@@ -93,6 +94,35 @@ msu_main:
|
|||||||
SEP #$30
|
SEP #$30
|
||||||
LDX !REG_MUSIC_CONTROL
|
LDX !REG_MUSIC_CONTROL
|
||||||
BNE command_ff
|
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:
|
do_fade:
|
||||||
LDA !REG_CURRENT_VOLUME
|
LDA !REG_CURRENT_VOLUME
|
||||||
@@ -156,28 +186,29 @@ load_track:
|
|||||||
STX !REG_MSU_TRACK_LO
|
STX !REG_MSU_TRACK_LO
|
||||||
STZ !REG_MSU_TRACK_HI
|
STZ !REG_MSU_TRACK_HI
|
||||||
STZ !REG_MSU_CONTROL
|
STZ !REG_MSU_CONTROL
|
||||||
LDA !VAL_VOLUME_FULL
|
LDA.l track_list,x
|
||||||
STA !REG_TARGET_VOLUME
|
STA !REG_MSU_LOAD_FLAG
|
||||||
STA !REG_CURRENT_VOLUME
|
STX !REG_CURRENT_MSU_TRACK
|
||||||
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
|
|
||||||
JML spc_continue
|
JML spc_continue
|
||||||
|
|
||||||
msu_play:
|
|
||||||
LDA.l MSUTrackList, X
|
ending_wait:
|
||||||
STA !REG_MSU_CONTROL
|
rep #$20
|
||||||
STX !REG_CURRENT_MSU_TRACK
|
lda !REG_MSU_ID_01
|
||||||
JML spc_continue
|
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