Implement SPC fallback for missing MSU-1 tracks
This commit is contained in:
88
msu.asm
88
msu.asm
@@ -146,10 +146,15 @@
|
|||||||
!VAL_VOLUME_FULL = #$FF
|
!VAL_VOLUME_FULL = #$FF
|
||||||
|
|
||||||
CheckMusicLoadRequest:
|
CheckMusicLoadRequest:
|
||||||
PHP : REP #$10 : PHA : PHX
|
PHP : REP #$10 : PHA : PHX : PHY
|
||||||
LDA !REG_MUSIC_CONTROL_REQUEST : BEQ .done : BMI .done : CMP $0133 : BEQ .done
|
LDA !REG_MUSIC_CONTROL_REQUEST : BEQ .skip : BMI .skip : CMP $0133 : BNE .continue
|
||||||
|
.skip
|
||||||
|
STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
||||||
|
PLY : PLX : PLA : PLP
|
||||||
|
RTL
|
||||||
|
|
||||||
+; ; Shut down NMI until music loads
|
.continue
|
||||||
|
; Shut down NMI until music loads
|
||||||
STZ $4200
|
STZ $4200
|
||||||
|
|
||||||
; Set SPC into loader mode
|
; Set SPC into loader mode
|
||||||
@@ -161,20 +166,30 @@ CheckMusicLoadRequest:
|
|||||||
LDX !REG_MSU_ID_45 : CPX !VAL_MSU_ID_45 : BNE .unmute
|
LDX !REG_MSU_ID_45 : CPX !VAL_MSU_ID_45 : BNE .unmute
|
||||||
|
|
||||||
; TODO: actually look up the current track in the table
|
; TODO: actually look up the current track in the table
|
||||||
LDA !REG_MSU_FALLBACK_TABLE : BEQ .unmute
|
SEP #$10
|
||||||
|
LDA !REG_MUSIC_CONTROL_REQUEST : DEC : PHA
|
||||||
|
AND #$07 : TAY
|
||||||
|
PLA : LSR #3 : TAX
|
||||||
|
LDA !REG_MSU_FALLBACK_TABLE,X : BEQ .unmute : CMP #$FF : BEQ .mute
|
||||||
|
|
||||||
|
- : CPY #$00 : BEQ +
|
||||||
|
LSR : DEY : BRA - : +
|
||||||
|
|
||||||
|
AND #$01 : BEQ .unmute
|
||||||
|
|
||||||
.mute
|
.mute
|
||||||
LDA.b #SPCMutePayload : STA $00
|
LDA.b #SPCMutePayload : STA $00
|
||||||
LDA.b #SPCMutePayload>>8 : STA $01
|
LDA.b #SPCMutePayload>>8 : STA $01
|
||||||
LDA.b #SPCMutePayload>>16
|
LDA.b #SPCMutePayload>>16
|
||||||
BRA .load
|
BRA .load
|
||||||
|
|
||||||
.unmute
|
.unmute
|
||||||
LDA.b #SPCUnmutePayload : STA $00
|
LDA.b #SPCUnmutePayload : STA $00
|
||||||
LDA.b #SPCUnmutePayload>>8 : STA $01
|
LDA.b #SPCUnmutePayload>>8 : STA $01
|
||||||
LDA.b #SPCUnmutePayload>>16
|
LDA.b #SPCUnmutePayload>>16
|
||||||
|
|
||||||
.load
|
.load
|
||||||
|
REP #$10
|
||||||
JSL Sound_LoadLightWorldSongBank_do_load
|
JSL Sound_LoadLightWorldSongBank_do_load
|
||||||
|
|
||||||
; Re-enable NMI and joypad
|
; Re-enable NMI and joypad
|
||||||
@@ -195,12 +210,12 @@ CheckMusicLoadRequest:
|
|||||||
|
|
||||||
.done
|
.done
|
||||||
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
||||||
PLX : PLA : PLP
|
PLY : PLX : PLA : PLP
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
.sfx_indoors
|
.sfx_indoors
|
||||||
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
||||||
PLX : PLA : PLP
|
PLY : PLX : PLA : PLP
|
||||||
JML Module_PreDungeon_setAmbientSfx
|
JML Module_PreDungeon_setAmbientSfx
|
||||||
|
|
||||||
msu_init:
|
msu_init:
|
||||||
@@ -213,25 +228,52 @@ msu_init:
|
|||||||
LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : 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
|
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .done
|
||||||
|
|
||||||
|
; Count the number of available MSU-1 packs
|
||||||
LDA.w #$0000
|
LDA.w #$0000
|
||||||
LDX.b #$FF
|
LDX.b #$FF
|
||||||
LDY.b #$01
|
LDY.b #$01
|
||||||
SEP #$20
|
SEP #$20
|
||||||
|
|
||||||
.check_pack
|
.check_pack
|
||||||
TYA
|
TYA
|
||||||
REP #$20
|
REP #$20
|
||||||
STA !REG_MSU_TRACK
|
STA !REG_MSU_TRACK
|
||||||
!ADD.w #100
|
!ADD.w #100
|
||||||
INX
|
INX
|
||||||
SEP #$20
|
SEP #$20
|
||||||
TAY
|
TAY
|
||||||
.wait_pack
|
.wait_pack
|
||||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack
|
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack
|
||||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack
|
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack
|
||||||
TXA : STA !REG_MSU_PACK_COUNT
|
TXA : STA !REG_MSU_PACK_COUNT
|
||||||
|
|
||||||
|
; Check the current MSU-1 pack for tracks that require SPC fallback
|
||||||
|
LDA.b #64
|
||||||
|
LDX.b #7
|
||||||
|
LDY.b #7
|
||||||
|
|
||||||
|
.check_track
|
||||||
|
STA !REG_MSU_TRACK_LO
|
||||||
|
STZ !REG_MSU_TRACK_HI
|
||||||
|
PHA
|
||||||
|
CLC
|
||||||
|
|
||||||
|
.wait_track
|
||||||
|
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_track
|
||||||
|
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE +
|
||||||
|
SEC : +
|
||||||
|
LDA !REG_MSU_FALLBACK_TABLE,X : ROL : STA !REG_MSU_FALLBACK_TABLE,X
|
||||||
|
|
||||||
|
DEY : BPL .next_track
|
||||||
|
DEX : BPL +
|
||||||
|
PLA
|
||||||
.done
|
.done
|
||||||
PLP
|
PLP
|
||||||
RTL
|
RTL : +
|
||||||
|
LDY.b #7
|
||||||
|
.next_track
|
||||||
|
PLA : DEC
|
||||||
|
BRA .check_track
|
||||||
|
|
||||||
msu_main:
|
msu_main:
|
||||||
SEP #$20 ; set 8-BIT accumulator
|
SEP #$20 ; set 8-BIT accumulator
|
||||||
|
|||||||
Reference in New Issue
Block a user