diff --git a/hooks.asm b/hooks.asm index ba46f1b..0084bb7 100755 --- a/hooks.asm +++ b/hooks.asm @@ -4,6 +4,8 @@ org $00802F ; <- 2F - Bank00.asm : 45 JSL.l Init_Primary NOP +org $0CC1AC ; <- 63 D4 00 - Bank0C.asm:8 (dl Tagalong_LoadGfx) +dl Init_PostRAMClear ;-------------------------------------------------------------------------------- ;================================================================================ diff --git a/init.asm b/init.asm index ee48530..726d39e 100644 --- a/init.asm +++ b/init.asm @@ -47,4 +47,14 @@ Init_Primary: LDA.b #$81 : STA $4200 ; thing we wrote over, turn on NMI & gamepad RTL -;-------------------------------------------------------------------------------- \ No newline at end of file +;-------------------------------------------------------------------------------- +; Init_PostRAMClear +;-------------------------------------------------------------------------------- +; This gets called after banks $7E and $7F get cleared, so if we need to +; initialize RAM in those banks, do it here +;-------------------------------------------------------------------------------- +Init_PostRAMClear: + + JSL msu_init + +JML $00D463 ; The original target of the jump table that we hijacked \ No newline at end of file diff --git a/msu.asm b/msu.asm index 4cc8947..6d155af 100644 --- a/msu.asm +++ b/msu.asm @@ -123,11 +123,13 @@ !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 +!REG_MSU_DELAYED_COMMAND = $7F5047 +!REG_MSU_PACK_COUNT = $7F5048 +!REG_MSU_PACK_CURRENT = $7F5049 !VAL_COMMAND_FADE_OUT = #$F1 !VAL_COMMAND_FADE_HALF = #$F2 @@ -139,6 +141,35 @@ !VAL_VOLUME_HALF = #$80 !VAL_VOLUME_FULL = #$FF +msu_init: + REP #$20 : SEP #$10 + LDA #$0000 + STA !REG_MSU_VOLUME + STA !REG_MSU_PACK_COUNT + + 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 + + LDA.w #$0000 + LDX.b #$FF + LDY.b #$01 + SEP #$20 +.check + TYA + REP #$20 + STA !REG_MSU_TRACK + !ADD.w #100 + INX + SEP #$20 + TAY +.wait + LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait + LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check + TXA : STA !REG_MSU_PACK_COUNT +.done + RTL + msu_main: SEP #$20 ; set 8-BIT accumulator LDA $4210 ; thing we wrote over @@ -152,7 +183,7 @@ msu_main: LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .nomsu SEP #$30 LDX !REG_MUSIC_CONTROL : BNE command_ff - LDA !REG_MSU_LOAD_FLAG : BEQ do_fade + LDA !REG_MSU_DELAYED_COMMAND : BEQ do_fade msu_check_busy: LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BEQ .ready @@ -165,10 +196,10 @@ msu_check_busy: STA !REG_TARGET_VOLUME STA !REG_CURRENT_VOLUME STA !REG_MSU_VOLUME - LDA !REG_MSU_LOAD_FLAG + LDA !REG_MSU_DELAYED_COMMAND STA !REG_MSU_CONTROL LDA #$00 - STA !REG_MSU_LOAD_FLAG + STA !REG_MSU_DELAYED_COMMAND JML spc_continue do_fade: @@ -230,11 +261,28 @@ load_track: .dungeon LDA $040C : LSR : !ADD #$21 : TAX .continue - STX !REG_MSU_TRACK_LO - STZ !REG_MSU_TRACK_HI + LDA #$00 : XBA + LDA !REG_MSU_PACK_CURRENT : BEQ + + + - + CMP !REG_MSU_PACK_COUNT : !BLT + + !SUB !REG_MSU_PACK_COUNT : BRA - + + + + PHX : PHA : TXA : PLX + REP #$20 + BEQ + + - + !ADD.w #100 + DEX : BNE - + + + STA !REG_MSU_TRACK + SEP #$20 + STZ !REG_MSU_CONTROL + PLX LDA.l MSUTrackList,x - STA !REG_MSU_LOAD_FLAG + STA !REG_MSU_DELAYED_COMMAND STX !REG_CURRENT_MSU_TRACK JML spc_continue @@ -262,15 +310,34 @@ alternate_fallback: LDA MSUDungeonFallbackList,X : STA $00 SEP #$20 LDA ($00) - PLY : STY $00 : PLB + PLY : STY $00 : SEP #$10 : PLB .fallback STA !REG_CURRENT_MSU_TRACK - STA !REG_MSU_TRACK_LO - STZ !REG_MSU_TRACK_HI + TAX + + LDA #$00 : XBA + LDA !REG_MSU_PACK_CURRENT : BEQ + + + - + CMP !REG_MSU_PACK_COUNT : !BLT + + !SUB !REG_MSU_PACK_COUNT : BRA - + + + + PHA : TXA : PLX + REP #$20 + BEQ + + - + !ADD.w #100 + DEX : BNE - + + + STA !REG_MSU_TRACK + SEP #$20 JML spc_continue spc_fallback: + LDA #$00 + STA !REG_MSU_DELAYED_COMMAND STZ !REG_MSU_CONTROL STZ !REG_CURRENT_MSU_TRACK STZ !REG_TARGET_VOLUME @@ -286,7 +353,7 @@ pendant_fanfare: LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc SEP #$20 LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc - LDA !REG_MSU_LOAD_FLAG : BNE .continue + LDA !REG_MSU_DELAYED_COMMAND : BNE .continue LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done .continue jml pendant_continue @@ -305,7 +372,7 @@ crystal_fanfare: LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc SEP #$20 LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc - LDA !REG_MSU_LOAD_FLAG : BNE .continue + LDA !REG_MSU_DELAYED_COMMAND : BNE .continue LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done .continue jml crystal_continue diff --git a/tables.asm b/tables.asm index 5514d05..dfb51e7 100644 --- a/tables.asm +++ b/tables.asm @@ -1438,6 +1438,9 @@ dw #9999 ; Rupee Limit ; $7F5042 - Tile Upload Offset Override (Low) ; $7F5043 - Tile Upload Offset Override (High) ; $7F5044 - $7F5046 - NMI Auxiliary Function +; $7F5047 - MSU-1 Delayed Load Command +; $7F5048 - MSU-1 Pack Count +; $7F5049 - MSU-1 Current Pack ; $7F5047 - $7F504F - Unused ; $7F5050 - $7F506F - Shop Block ; $7F5070 - Reserved for OneMind @@ -1460,7 +1463,7 @@ dw #9999 ; Rupee Limit ; $7F5098 - Water Entry Index ; $7F5099 - Last Entered Overworld Door ID ; $7F509A - (Reserved) -; $7F509B - MSU Flag +; $7F509B - Unused ; $7F509C - Inverted Mode Duck Map Temporary ; $7F509D - Stalfos Bomb Damage Value ; $7F509E - Valid Key Loaded