From 5b03421e205b49f7ee35a9e6cbf1c64f1128acaa Mon Sep 17 00:00:00 2001 From: qwertymodo Date: Tue, 6 Feb 2018 22:38:27 -0800 Subject: [PATCH] MSU-1: Don't stall NMI while audio is busy loading, and wait for ending music to finish. --- hooks.asm | 3 +++ msu.asm | 77 ++++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 57 insertions(+), 23 deletions(-) diff --git a/hooks.asm b/hooks.asm index 3bb2506..c780d70 100644 --- a/hooks.asm +++ b/hooks.asm @@ -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 ;-------------------------------------------------------------------------------- ;================================================================================ diff --git a/msu.asm b/msu.asm index c2ff499..d49dada 100644 --- a/msu.asm +++ b/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 \ No newline at end of file + +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