Enable multiple MSU-1 packs, selected via F5049
This commit is contained in:
@@ -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
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
|
||||
12
init.asm
12
init.asm
@@ -47,4 +47,14 @@ Init_Primary:
|
||||
|
||||
LDA.b #$81 : STA $4200 ; thing we wrote over, turn on NMI & gamepad
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
;--------------------------------------------------------------------------------
|
||||
; 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
|
||||
91
msu.asm
91
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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user