Fix title screen delay (bass version)
This commit is contained in:
@@ -1482,7 +1482,7 @@ org $09F2A7 ; <- 8F27C27E - module_death.asm:56 (STA $7EC227)
|
|||||||
JSL.l StoreMusicOnDeath
|
JSL.l StoreMusicOnDeath
|
||||||
|
|
||||||
org $0CC100 ; <- A511 C904 - Bank0C.asm:07 (LDA $11 : CMP.b #$04)
|
org $0CC100 ; <- A511 C904 - Bank0C.asm:07 (LDA $11 : CMP.b #$04)
|
||||||
JSL.l startup_wait
|
;JSL.l startup_wait
|
||||||
|
|
||||||
org $0EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20 : LDA.b #$22 : STA $012C)
|
org $0EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20 : LDA.b #$22 : STA $012C)
|
||||||
JSL.l ending_wait
|
JSL.l ending_wait
|
||||||
|
|||||||
12
msu.asm
12
msu.asm
@@ -383,18 +383,6 @@ StoreMusicOnDeath:
|
|||||||
msu_init:
|
msu_init:
|
||||||
PHP
|
PHP
|
||||||
|
|
||||||
STZ $4200
|
|
||||||
|
|
||||||
LDA.b #$FF : STA $2140
|
|
||||||
|
|
||||||
LDA.b #SPCEngineNewCode : STA.b $00
|
|
||||||
LDA.b #SPCEngineNewCode>>8 : STA.b $01
|
|
||||||
LDA.b #SPCEngineNewCode>>16
|
|
||||||
|
|
||||||
JSL Sound_LoadLightWorldSongBank_do_load
|
|
||||||
|
|
||||||
LDA.b #$81 : STA $4200
|
|
||||||
|
|
||||||
LDA NoBGM : BNE .done
|
LDA NoBGM : BNE .done
|
||||||
|
|
||||||
REP #$20
|
REP #$20
|
||||||
|
|||||||
19
music.asm
19
music.asm
@@ -279,22 +279,3 @@ Overworld_MosaicDarkWorldChecks:
|
|||||||
.done
|
.done
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
!SPCFreeSpace = $0700
|
|
||||||
|
|
||||||
SPCEngineNewCode:
|
|
||||||
dw .end-.start
|
|
||||||
dw !SPCFreeSpace
|
|
||||||
.start
|
|
||||||
incsrc spc.asm
|
|
||||||
.end
|
|
||||||
|
|
||||||
dw $0004
|
|
||||||
dw $0A73 ; $0A73: CMP A,#$F0
|
|
||||||
db $5F ; JMP SPCFreeSpace
|
|
||||||
dw !SPCFreeSpace
|
|
||||||
db $00 ; NOP
|
|
||||||
|
|
||||||
dw $0000, $0000
|
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
151
spc.asm
151
spc.asm
@@ -1,47 +1,106 @@
|
|||||||
;=======================================
|
// Build with bass v15
|
||||||
; SPC engine changes
|
// This code apparently triggers a pathalogical edge case
|
||||||
;
|
// which breaks forward labels, necessitating db-style branches
|
||||||
; Free space at $040F-07FF (probably)
|
// but the code is really only for documentation anyway, we're
|
||||||
;
|
// using a compiled .bps patch for actual patch generation.
|
||||||
; If we ever switch to ASAR we can rewrite
|
|
||||||
; this as actual SPC asm instead of this
|
|
||||||
; db jank.
|
|
||||||
|
|
||||||
; seek($0700)
|
architecture wdc65816
|
||||||
db $68, $F0 ; CMP A,#$F0 ; the thing we overwrote
|
|
||||||
db $D0, $03 ; BNE +
|
macro rom_seek(variable address) {
|
||||||
db $5F, $81, $0A ; JMP SilenceSong ; ($0A81)
|
origin ((address & $7F0000) >> 1) | (address & $7FFF)
|
||||||
db $68, $FA ; + : CMP A,#$FA ; new mute command $FA
|
base address
|
||||||
db $D0, $1C ; BNE +
|
}
|
||||||
db $C4, $F4 ; MOV $F4,A
|
|
||||||
db $E8, $00 ; MOV A,#$00
|
rom_seek($400000) // Pad ROM to 0x200000
|
||||||
db $C5, $4A, $0A ; MOV $0A4A,A ; $0A49: MOV A,#$70 -> MOV A,#$00
|
|
||||||
db $C5, $F3, $0A ; MOV $0AF3,A ; $0AF2: MOV $059,#$C0 -> MOV $059,#$00
|
rom_seek($008901)
|
||||||
db $C5, $32, $0C ; MOV $0C32,A ; $0C32: MOVW $058,YA -> NOP #2
|
lda.b #(SPC.IntroSongBank & 0xFF); sta $00
|
||||||
db $C5, $33, $0C ; MOV $0C33,A
|
lda.b #((SPC.IntroSongBank >> 8) & 0xFF); sta $01
|
||||||
db $E8, $C4 ; MOV A,#$C4 ; $0D19: MOVW $058,YA -> MOV $058,A
|
lda.b #((SPC.IntroSongBank >> 16) & 0xFF); sta $02
|
||||||
db $C5, $19, $0D ; MOV $0D19,A
|
|
||||||
db $E8, $58 ; MOV A,#$58
|
rom_seek($348000) // Seek to ROM offset 0x1A0000
|
||||||
db $C5, $1A, $0D ; MOV $0D1A,A
|
|
||||||
db $2F, $23 ; BRA ++
|
architecture spc700
|
||||||
db $68, $FB ; + : CMP A,#$FB ; new unmute command $FB
|
|
||||||
db $F0, $03 ; BEQ +
|
namespace SPC {
|
||||||
db $5F, $9D, $0A ; JMP NewSongInput ; ($0A9D)
|
constant ENGINE_ENTRYPOINT = $0800
|
||||||
db $C4, $F4 ; + : MOV $F4,A
|
constant NEW_CODE_LENGTH = (EngineStart - NewCodeSection)
|
||||||
db $E8, $70 ; MOV A,#$70
|
constant CODE_START = (ENGINE_ENTRYPOINT - NEW_CODE_LENGTH)
|
||||||
db $C5, $4A, $0A ; MOV $0A4A,A ; $0A49: MOV A,#$70
|
|
||||||
db $E8, $C0 ; MOV A,#$C0
|
macro spc_seek(variable address) {
|
||||||
db $C5, $F3, $0A ; MOV $0AF3,A ; $0AF2: MOV $059,#$C0
|
origin (address & $FFFF) + (((START & $7F0000) >> 1) | (START & $7FFF)) - CODE_START
|
||||||
db $E8, $DA ; MOV A,#$DA
|
base address
|
||||||
db $C5, $32, $0C ; MOV $0C32,A ; $0C32: MOVW $058,YA
|
}
|
||||||
db $C5, $19, $0D ; MOV $0D19,A ; $0D19: MOVW $058,YA
|
|
||||||
db $E8, $58 ; MOV A,#$58
|
// Insert the original SPC transfer blocks up to the main engine code
|
||||||
db $C5, $33, $0C ; MOV $0C33,A
|
insert IntroSongBank, "alttp.sfc", 0x0C8000, 0x7BCA
|
||||||
db $C5, $1A, $0D ; MOV $0D1A,A
|
dw NEW_CODE_LENGTH + $0F9E // New code is prepended to the original upload
|
||||||
db $3F, $81, $0A ; ++ : CALL SilenceSong ; ($0A81)
|
dw CODE_START // of length $0F9E to destination $0800
|
||||||
db $E4, $F4 ; - : MOV A,$F4
|
|
||||||
db $D0, $FC ; BNE -
|
|
||||||
db $64, $F4 ; CMP A,$F4
|
START:
|
||||||
db $D0, $F8 ; BNE -
|
spc_seek(CODE_START)
|
||||||
db $FA, $00, $F4 ; MOV $F4,#$00
|
if pc() < $0700 {
|
||||||
db $6F ; RET
|
error "SPC code out of bounds (PC < $0700)"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any new code goes here. DON'T DELETE THIS LABEL
|
||||||
|
// Labels not forward-declared (e.g. '+/++') don't work here
|
||||||
|
NewCodeSection:
|
||||||
|
|
||||||
|
SpecialCommand_Mute:
|
||||||
|
cmp #$F0 // The thing we overwrote
|
||||||
|
// bne +
|
||||||
|
db $D0, $03
|
||||||
|
jmp $0A81 // SilenceSong
|
||||||
|
+; cmp #$FA // New mute command $FA
|
||||||
|
// bne +
|
||||||
|
db $D0, $1C
|
||||||
|
sta $F4
|
||||||
|
lda #$00
|
||||||
|
sta $0A4A // $0A49: lda #$70 -> lda #$00
|
||||||
|
sta $0AF3 // $0AF2: MOV $059,#$C0 -> MOV $059,#$00
|
||||||
|
sta $0C32 // $0C32: MOVW $058,YA -> NOP #2
|
||||||
|
sta $0C33
|
||||||
|
lda #$C4 // $0D19: MOVW $058,YA -> lda $058
|
||||||
|
sta $0D19
|
||||||
|
lda #$58
|
||||||
|
sta $0D1A
|
||||||
|
// bra ++
|
||||||
|
db $2F, $23
|
||||||
|
+; cmp #$FB // New unmute command $FB
|
||||||
|
// beq +
|
||||||
|
db $F0, $03
|
||||||
|
jmp $0A9D // NewSongInput
|
||||||
|
+; sta $F4
|
||||||
|
lda #$70
|
||||||
|
sta $0A4A // $0A49: lda #$70
|
||||||
|
lda #$C0
|
||||||
|
sta $0AF3 // $0AF2: MOV $059,#$C0
|
||||||
|
lda #$DA
|
||||||
|
sta $0C32 // $0C32: MOVW $058,YA
|
||||||
|
sta $0D19 // $0D19: MOVW $058,YA
|
||||||
|
lda #$58
|
||||||
|
sta $0C33
|
||||||
|
sta $0D1A
|
||||||
|
+; jsr $0A81 // SilenceSong
|
||||||
|
-; lda $F4
|
||||||
|
bne -
|
||||||
|
cmp $F4
|
||||||
|
bne -
|
||||||
|
str $F4=$00 // ACK the CPU
|
||||||
|
rts
|
||||||
|
|
||||||
|
EngineStart:
|
||||||
|
// Upload the main engine, along with the rest of the original transfer block
|
||||||
|
insert "alttp.sfc", 0x0CFBCE, 0x57B2
|
||||||
|
|
||||||
|
// Hook to check for new special mute commands FA, FB
|
||||||
|
spc_seek($0A73) // $0A73: CMP A,#$F0
|
||||||
|
jmp SpecialCommand_Mute
|
||||||
|
nop
|
||||||
|
|
||||||
|
rom_seek($0C8000)
|
||||||
|
fill 0xD380
|
||||||
|
|
||||||
|
} // namespace SPC
|
||||||
42
tables.asm
42
tables.asm
@@ -1634,48 +1634,6 @@ db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
|||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
org $30D800 ; PC 0x185800 - 0x18591F
|
org $30D800 ; PC 0x185800 - 0x18591F
|
||||||
SPCMutePayload:
|
|
||||||
dw $0001 ; Transfer size
|
|
||||||
dw $0A4A ; Transfer destination
|
|
||||||
db $00 ; mov a,#$70 -> mov a,#$00
|
|
||||||
|
|
||||||
dw $0001 ; Transfer size
|
|
||||||
dw $0AF3 ; Transfer destination
|
|
||||||
db $00 ; mov $059,#$c0 -> mov $059,#$00
|
|
||||||
|
|
||||||
dw $0002 ; Transfer size
|
|
||||||
dw $0C32 ; Transfer destination
|
|
||||||
db $00, $00 ; movw $058,ya -> nop #2
|
|
||||||
|
|
||||||
dw $0001 ; Transfer size
|
|
||||||
dw $0D19 ; Transfer destination
|
|
||||||
db $34 ; movw $058,ya -> mov $058,a
|
|
||||||
|
|
||||||
dw $0000 ; Transfer size (end of transfer)
|
|
||||||
dw $FFFF ; Dummy destination
|
|
||||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Padding
|
|
||||||
|
|
||||||
SPCUnmutePayload:
|
|
||||||
dw $0001 ; Transfer size
|
|
||||||
dw $0A4A ; Transfer destination
|
|
||||||
db $70 ; mov a,#$70
|
|
||||||
|
|
||||||
dw $0001 ; Transfer size
|
|
||||||
dw $0AF3 ; Transfer destination
|
|
||||||
db $C0 ; mov $059,#$c0
|
|
||||||
|
|
||||||
dw $0002 ; Transfer size
|
|
||||||
dw $0C32 ; Transfer destination
|
|
||||||
db $da, $58 ; movw $058,ya
|
|
||||||
|
|
||||||
dw $0001 ; Transfer size
|
|
||||||
dw $0D19 ; Transfer destination
|
|
||||||
db $34 ; movw $058,ya
|
|
||||||
|
|
||||||
dw $0000 ; Transfer size (end of transfer)
|
|
||||||
dw $FFFF ; Dummy destination
|
|
||||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Padding
|
|
||||||
|
|
||||||
MSUTrackList:
|
MSUTrackList:
|
||||||
db $01,$03,$03,$03,$03,$03,$03,$01
|
db $01,$03,$03,$03,$03,$03,$03,$01
|
||||||
db $03,$01,$03,$03,$03,$03,$03,$03
|
db $03,$01,$03,$03,$03,$03,$03,$03
|
||||||
|
|||||||
Reference in New Issue
Block a user