Archipelago/worlds/kdl3/src/kdl3_basepatch.asm

1339 lines
20 KiB
NASM

fullsa1rom
!GAME_STATUS = $36D0
; SNES hardware registers
!VMADDL = $002116
!VMDATAL = $002118
!MDMAEN = $00420B
!DMAP0 = $004300
!BBAD0 = $004301
!A1T0L = $004302
!A1B0 = $004304
!DAS0L = $004305
org $008033
JSL WriteBWRAM
NOP #5
org $00A245
HSVPatch:
BRA .Jump
PHX
LDA $6CA0,X
TAX
LDA $6E22,X
JSR $A25B
PLX
INX
.Jump:
JSL HeartStarVisual
org $00A3FC
JSL NintenHalken
NOP
org $00EAE4
JSL MainLoopHook
NOP
org $00F85E
JSL SpeedTrap
NOP #2
org $00FFC0
db "KDL3_BASEPATCH_ARCHI"
org $00FFD8
db $06
org $018405
JSL PauseMenu
org $01AFC8
JSL HeartStarCheck
NOP #13
org $01B013
SEC ; Remove Dedede Bad Ending
org $01B050
JSL HookBossPurify
NOP
org $02B7B0 ; Zero unlock
LDA $80A0
CMP #$0001
org $02C238
LDA #$0006
JSL OpenWorldUnlock
NOP #5
org $02C27C
JSL HeartStarSelectFix
NOP #2
org $02C317
JSL LoadFont
org $02C39D
JSL StageCompleteSet
NOP #2
org $02C3D9
JSL StrictBosses
NOP #2
org $02C3F0
JSL OpenWorldBossUnlock
NOP #6
org $02C463
JSL NormalGoalSet
NOP #2
org $049CD7
JSL AnimalFriendSpawn
org $06801E
JSL ConsumableSet
org $068518
JSL CopyAbilityOverride
NOP #2
org $099F35
JSL HeartStarCutsceneFix
org $09A01F
JSL HeartStarGraphicFix
NOP #2
db $B0
org $09A0AE
JSL HeartStarGraphicFix
NOP #2
db $90
org $0A87E8
JSL CopyAbilityAnimalOverride
NOP #2
org $12B238
JSL FinalIcebergFix
NOP #10
db $B0
org $14A3EB
LDA $07A2, Y
JSL StarsSet
NOP #3
org $15BC13
JML GiftGiving
NOP
org $0799A0
CopyAbilityOverride:
LDA $54F3, Y
PHA
ASL
TAX
PLA
CMP $8020, X
NOP #2
BEQ .StoreAbilityK
LDA #$0000
.StoreAbilityK:
STA $54A9, Y
RTL
NOP #4
CopyAbilityAnimalOverride:
PHA
ASL
TAY
PLA
CMP $8020, Y
NOP
BEQ .StoreAbilityA
LDA #$0000
.StoreAbilityA:
STA $54A9, X
STA $39DF, X
RTL
HeartStarCheck:
TXA
CMP #$0000 ; is this level 1
BEQ .PassToX
LSR
LSR
INC
.PassToX:
TAX
LDA $8070 ; heart stars
CLC
CMP $07D00A ;Compare to goal heart stars
BCC .CompareWorldHS ; we don't have enough
PHX
LDA #$0014
STA $7F62 ; play sound fx 0x14
LDA $07D012 ; goal
CMP #$0000 ; are we on zero goal?
BEQ .ZeroGoal ; we are
LDA #$0001
LDX $3617 ; current save
STA $53DD, X ; boss butch
STA $53DF, X ; MG5
STA $53E1, X ; Jumping
BRA .PullX
.ZeroGoal:
LDA #$0001
STA $80A0 ; zero unlock address
.PullX:
PLX
.CompareWorldHS:
LDA $8070 ; current heart stars
CMP $07D000, X ; compare to world heart stars
BCS .ReturnTrue
CLC
RTL
.ReturnTrue:
SEC
RTL
OpenWorldUnlock:
PHX
LDX $900E ; Are we on open world?
BNE .Open ; Branch if we are
LDA #$0001
.Open:
STA $5AC1 ;(cutscene)
STA $53CD ;(unlocked stages)
INC
STA $5AB9 ;(currently selectable stages)
CPX #$0001
BNE .Return ; Return if we aren't on open world
LDA #$0001
STA $5A9D
STA $5A9F
STA $5AA1
STA $5AA3
STA $5AA5
.Return:
PLX
RTL
MainLoopHook:
STA $D4
INC $3524
JSL ParseItemQueue
LDA $7F62 ; sfx to be played
BEQ .Traps ; skip if 0
JSL $00D927 ; play sfx
STZ $7F62
.Traps:
LDA $36D0
CMP #$FFFF ; are we in menus?
BEQ .Return ; return if we are
LDA $5541 ; gooey status
BPL .Slowness ; gooey is already spawned
LDA $39D1 ; is kirby alive?
BEQ .Slowness ; branch if he isn't
; maybe BMI here too?
LDA $8080
CMP #$0000 ; did we get a gooey trap
BEQ .Slowness ; branch if we did not
JSL GooeySpawn
DEC $8080
.Slowness:
LDA $8082 ; slowness
BEQ .Eject ; are we under the effects of a slowness trap
DEC $8082 ; dec by 1 each frame
.Eject:
PHX
PHY
LDA $54A9 ; copy ability
BEQ .PullVars ; branch if we do not have a copy ability
LDA $8084 ; eject ability
BEQ .PullVars ; branch if we haven't received eject
LDA #$2000 ; select button press
STA $60C1 ; write to controller mirror
DEC $8084
.PullVars:
PLY
PLX
.Return:
RTL
HeartStarGraphicFix:
LDA #$0000
PHX
PHY
LDX $363F ; current level
LDY $3641 ; current stage
.LoopLevel:
CPX #$0000
BEQ .LoopStage
INC #6
DEX
BRA .LoopLevel ; return to loop head
.LoopStage:
CPY #$0000
BEQ .EndLoop
INC
DEY
BRA .LoopStage ; return to loop head
.EndLoop
ASL
TAX
LDA $07D080, X ; table of original stage number
CMP #$0002 ; is the current stage a minigame stage?
BEQ .ReturnTrue ; branch if so
CLC
BRA .Return
.ReturnTrue:
SEC
.Return:
PLY
PLX
RTL
ParseItemQueue:
; Local item queue parsing
NOP
LDX #$0000
.LoopHead:
LDA $C000,X
BIT #$0010
BNE .Ability
BIT #$0020
BNE .Animal
BIT #$0040
BNE .Positive
BIT #$0080
BNE .Negative
.LoopCheck:
INX
INX
CPX #$000F
BCC .LoopHead
RTL
.Ability:
JSL .ApplyAbility
RTL
.Animal:
JSL .ApplyAnimal
RTL
.Positive:
LDY $36D0
CPY #$FFFF
BEQ .LoopCheck
JSL .ApplyPositive
RTL
.Negative:
AND #$000F
ASL
TAY
JSL .ApplyNegative
RTL
.ApplyAbility:
AND #$000F
PHA
ASL
TAY
PLA
STA $8020,Y
LDA #$0032
BRA .PlaySFX
.ApplyAnimal:
AND #$000F
PHA
ASL
TAY
PLA
INC
STA $8000,Y
LDA #$0032
BRA .PlaySFX
.PlaySFX:
STA $7F62
STZ $C000,X
.Return:
RTL
.ApplyPositive:
LDY $36D0
CPY #$FFFF
BEQ .Return
AND #$000F
BEQ .HeartStar
CMP #$0004
BCS .StarBit
CMP #$0002
BCS .Not1UP
LDA $39CF
INC
STA $39CF
STA $39E3
LDA #$0033
BRA .PlaySFX
.Not1UP:
CMP #$0003
BEQ .Invincibility
LDA $39D3
BEQ .JustKirby
LDA #$0008
STA $39D1
STA $39D3
BRA .PlayPositive
.JustKirby:
LDA #$000A
STA $39D1
BRA .PlayPositive
.Invincibility:
LDA #$0384
STA $54B1
BRA .PlayPositive
.HeartStar:
INC $8070
LDA #$0016
BRA .PlaySFX
.StarBit:
SEC
SBC #$0004
ASL
INC
CLC
ADC $39D7
ORA #$8000
STA $39D7
.PlayPositive:
LDA #$0026
.PlaySFXLong
BRA .PlaySFX
.ApplyNegative:
CPY #$0005
BCS .PlayNone
LDA $8080,Y
CPY #$0002
BNE .Increment
CLC
LDA #$0384
ADC $8080, Y
BVC .PlayNegative
LDA #$FFFF
.PlayNegative:
STA $8080,Y
LDA #$00A7
BRA .PlaySFXLong
.Increment:
INC
STA $8080, Y
BRA .PlayNegative
.PlayNone:
LDA #$0000
BRA .PlaySFXLong
AnimalFriendSpawn:
PHA
CPX #$0002 ; is this an animal friend?
BNE .Return
XBA
PHA
PHX
PHA
LDX #$0000
.CheckSpawned:
LDA $05CA, X
BNE .Continue
LDA #$0002
CMP $074A, X
BNE .ContinueCheck
PLA
PHA
XBA
CMP $07CA, X
BEQ .AlreadySpawned
.ContinueCheck:
INX
INX
BRA .CheckSpawned
.Continue:
PLA
PLX
ASL
TAY
PLA
INC
CMP $8000, Y ; do we have this animal friend
BEQ .Return ; we have this animal friend
.False:
INX
.Return:
PLY
LDA #$9999
RTL
.AlreadySpawned:
PLA
PLX
ASL
TAY
PLA
BRA .False
WriteBWRAM:
LDY #$6001 ;starting addr
LDA #$1FFE ;bytes to write
MVN $40, $40 ;copy $406000 from 406001 to 407FFE
LDX #$0000
LDY #$0014
.LoopHead:
LDA $8100, X ; rom header
CMP $07C000, X ; compare to real rom name
BNE .InitializeRAM ; area is uninitialized or corrupt, reset
INX
DEY
BMI .Return ; if Y is negative, rom header matches, valid bwram
BRA .LoopHead ; else continue loop
.InitializeRAM:
LDA #$0000
STA $8000 ; initialize first byte that gets copied
LDX #$8000
LDY #$8001
LDA #$7FFD
MVN $40, $40 ; initialize 0x8000 onward
LDX #$D000 ; seed info 0x3D000
LDY #$9000 ; target location
LDA #$1000
MVN $40, $07
LDX #$C000 ; ROM name
LDY #$8100 ; target
LDA #$0015
MVN $40, $07
.Return:
RTL
ConsumableSet:
PHA
PHX
PHY
AND #$00FF
PHA
LDX $53CF
LDY $53D3
LDA #$0000
DEY
.LoopLevel:
CPX #$0000
BEQ .LoopStage
CLC
ADC #$0007
DEX
BRA .LoopLevel ; return to loop head
.LoopStage:
CPY #$0000
BEQ .EndLoop
INC
DEY
BRA .LoopStage ; return to loop head
.EndLoop:
ASL
TAX
LDA $07D020, X ; current stage
ASL #6
TAX
PLA
.LoopHead:
CMP #$0000
BEQ .ApplyCheck
INX
DEC
BRA .LoopHead ; return to loop head
.ApplyCheck:
LDA $A000, X ; consumables index
PHA
ORA #$0001
STA $A000, X
PLA
AND #$00FF
BNE .Return
TXA
ORA #$1000
JSL ApplyLocalCheck
.Return:
PLY
PLX
PLA
XBA
AND #$00FF
RTL
NormalGoalSet:
PHX
LDA $07D012
CMP #$0000
BEQ .ZeroGoal
LDA #$0001
LDX $3617 ; current save
STA $53DD, X ; Boss butch
STA $53DF, X ; MG5
STA $53D1, X ; Jumping
BRA .Return
.ZeroGoal:
LDA #$0001
STA $80A0
.Return:
PLX
LDA #$0006
STA $5AC1 ; cutscene
RTL
FinalIcebergFix:
PHX
PHY
LDA #$0000
LDX $363F
LDY $3641
.LoopLevel:
CPX #$0000
BEQ .LoopStage
INC #7
DEX
BRA .LoopLevel ; return to loop head
.LoopStage:
CPY #$0000
BEQ .CheckStage
INC
DEY
BRA .LoopStage ; return to loop head
.CheckStage:
ASL
TAX
LDA $07D020, X
CMP #$001D
BEQ .ReturnTrue
CLC
BRA .Return
.ReturnTrue:
SEC
.Return:
PLY
PLX
RTL
StrictBosses:
PHX
LDA $901E ; Do we have strict bosses enabled?
BEQ .ReturnTrue ; Return True if we don't, always unlock the boss in this case
LDA $53CB ; unlocked level
CMP #$0005 ; have we unlocked level 5?
BCS .ReturnFalse ; we don't need to do anything if so
NOP #5 ;unsure when these got here
LDX $53CB
DEX
TXA
ASL
TAX
LDA $8070 ; current heart stars
CMP $07D000, X ; do we have enough HS to purify?
BCS .ReturnTrue ; branch if we do
.ReturnFalse:
SEC
BRA .Return
.ReturnTrue:
CLC
.Return:
PLX
LDA $53CD
RTL
NintenHalken:
LDX #$0005
.Halken:
LDA $00A405, X ; loop head (halken)
STA $4080F0, X
DEX
BPL .Halken ; branch if more letters to copy
LDX #$0005
.Ninten:
LDA $00A40B, X ; loop head (ninten)
STA $408FF0, X
DEX
BPL .Ninten ; branch if more letters to copy
REP #$20
LDA #$0001
RTL
StageCompleteSet:
PHX
LDA $5AC1 ; completed stage cutscene
BEQ .Return ; we have not completed a stage
LDA #$0000
LDX $53CF ; current level
.LoopLevel:
CPX #$0000
BEQ .StageStart
DEX
INC #7
BRA .LoopLevel ; return to loop head
.StageStart:
LDX $53D3 ; current stage
CPX #$0007 ; is this a boss stage
BEQ .Return ; return if so
DEX
.LoopStage:
CPX #$0000
BEQ .LoopEnd
INC
DEX
BRA .LoopStage ; return to loop head
.LoopEnd:
ASL
TAX
LDA $9020, X ; load the stage we completed
ASL
TAX
PHX
LDA $8200, X
AND #$00FF
BNE .ApplyClear
TXA
LSR
JSL ApplyLocalCheck
.ApplyClear:
PLX
LDA #$0001
ORA $8200, X
STA $8200, X
.Return:
PLX
LDA $53CF
CMP $53CB
RTL
OpenWorldBossUnlock:
PHX
PHY
LDA $900E ; Are we on open world?
BEQ .ReturnTrue ; Return true if we aren't, always unlock boss
LDA $53CD
CMP #$0006
BNE .ReturnFalse ; return if we aren't on stage 6
LDA $53CF
INC
CMP $53CB ; are we on the most unlocked level?
BNE .ReturnFalse ; return if we aren't
LDA #$0000
LDX $53CF
.LoopLevel:
CPX #$0000
BEQ .LoopStages
ADC #$0006
DEX
BRA .LoopLevel ; return to loop head
.LoopStages:
ASL
TAX
LDA #$0000
LDY #$0006
PHY
PHX
.LoopStage:
PLX
LDY $9020, X ; get stage id
INX
INX
PHA
TYA
ASL
TAY
PLA
ADC $8200, Y ; add current stage value to total
PLY
DEY
PHY
PHX
CPY #$0000
BNE .LoopStage ; return to loop head
PLX
PLY
SEC
SBC $9016
BCC .ReturnFalse
.ReturnTrue
LDA $53CD
INC
STA $53CD
STA $5AC1
BRA .Return
.ReturnFalse:
STZ $5AC1
.Return:
PLY
PLX
RTL
GooeySpawn:
PHY
PHX
LDX #$0000
LDY #$0000
STA $5543
LDA $1922,Y
STA $C0
LDA $19A2,Y
STA $C2
LDA #$0008
STA $C4
LDA #$0002
STA $352A
LDA #$0003
JSL $00F54F
STX $5541
LDA #$FFFF
STA $0622,X
JSL $00BAEF
JSL $C4883C
LDX $39D1
CPX #$0001
BEQ .Return
LDA #$FFFF
CPX #$0002
BEQ .Call
DEC
.Call:
JSL $C43C22
.Return:
PLX
PLY
RTL
SpeedTrap:
PHX
LDX $8082 ; do we have slowness
BEQ .Apply ; branch if we do not
LSR
.Apply:
PLX
STA $1F22, Y ; player max speed
EOR #$FFFF
RTL
HeartStarVisual:
CPX #$0000
BEQ .SkipInx
INX
.SkipInx
CPX $651E
BCC .Return
CPX #$0000
BEQ .Return
LDA $4036D0
AND #$00FF
BEQ .ReturnTrue
LDA $3000
AND #$0200
CMP #$0000
BNE .ReturnTrue
PHY
LDA $3000
TAY
CLC
ADC #$0020
STA $3000
LDA $408070
LDX #$0000
.LoopHead:
CMP #$000A
BCC .LoopEnd
SEC
SBC #$000A
INX
BRA .LoopHead
.LoopEnd:
PHX
TAX
PLA
ORA #$2500
PHA
LDA #$2C70
STA $0000, Y
PLA
INY
INY
STA $0000, Y
INY
INY
TXA
ORA #$2500
PHA
LDA #$2C78
STA $0000, Y
INY
INY
PLA
STA $0000, Y
INY
INY
JSL HeartStarVisual2 ; we ran out of room
PLY
.ReturnTrue:
SEC
.Return:
RTL
LoadFont:
JSL $00D29F ; play sfx
PHX
PHB
LDA #$0000
PHA
PLB
PLB
LDA #$7000
STA $2116
LDX #$0000
.LoopHead:
CPX #$0140
BEQ .LoopEnd
LDA $D92F50, X
STA $2118
INX
INX
BRA .LoopHead
.LoopEnd:
LDX #$0000
.2LoopHead:
CPX #$0020
BEQ .2LoopEnd
LDA $D92E10, X
STA $2118
INX
INX
BRA .2LoopHead
.2LoopEnd:
PHY
LDA $07D012
ASL
TAX
LDA $07E000, X
TAX
LDY #$0000
.3LoopHead:
CPY #$0020
BEQ .3LoopEnd
LDA $D93170, X
STA $2118
INX
INX
INY
INY
BRA .3LoopHead
.3LoopEnd:
LDA $07D00C
ASL
TAX
LDA $07E010, X
TAX
LDY #$0000
.4LoopHead:
CPY #$0020
BEQ .4LoopEnd
LDA $D93170, X
STA $2118
INX
INX
INY
INY
BRA .4LoopHead
.4LoopEnd:
PLY
PLB
PLX
RTL
HeartStarVisual2:
LDA #$2C80
STA $0000, Y
INY
INY
LDA #$250A
STA $0000, Y
INY
INY
LDA $4053CF
ASL
TAX
.LoopHead:
LDA $409000, X
CMP #$FFFF
BNE .LoopEnd
DEX
DEX
BRA .LoopHead
.LoopEnd:
LDX #$0000
.2LoopHead:
CMP #$000A
BCC .2LoopEnd
SEC
SBC #$000A
INX
BRA .2LoopHead ; return to loop head
.2LoopEnd:
PHX
TAX
PLA
ORA #$2500
PHA
LDA #$2C88
STA $0000, Y
PLA
INY
INY
STA $0000, Y
INY
INY
TXA
ORA #$2500
PHA
LDA #$2C90
STA $0000, Y
INY
INY
PLA
STA $0000, Y
INY
INY
LDA #$14D8
STA $0000, Y
INY
INY
LDA #$250B
STA $0000, Y
INY
INY
LDA #$14E0
STA $0000, Y
INY
INY
LDA #$250A
STA $0000, Y
INY
INY
LDA #$14E8
STA $0000, Y
INY
INY
LDA #$250C
STA $0000, Y
INY
INY
LDA $3000
SEC
SBC #$3040
LSR
LSR
.3LoopHead:
CMP #$0004
BCC .3LoopEnd
DEC #4
BRA .3LoopHead ; return to loop head
.3LoopEnd:
STA $3240
LDA #$0004
SEC
SBC $3240
TAX
LDA #$00FF
.4LoopHead:
CPX #$0000
BEQ .4LoopEnd
LSR
LSR
DEX
BRA .4LoopHead
.4LoopEnd:
LDY $3002
AND $0000, Y
STA $0000, Y
INY
LDA #$0000
STA $0000, Y
INY
INY
STA $0000, Y
RTL
HeartStarSelectFix:
PHX
TXA
ASL
TAX
LDA $9020, X
TAX
.LoopHead:
CMP #$0006
BMI .LoopEnd
INX
SEC
SBC #$0006
BRA .LoopHead
.LoopEnd:
LDA $53A7, X
PLX
AND #$00FF
RTL
HeartStarCutsceneFix:
TAX
LDA $53D3
DEC
STA $5AC3
LDA $53A7, X
AND #$00FF
BNE .Return
PHX
TXA
.Loop:
CMP #$0007
BCC .Continue
SEC
SBC #$0007
DEX
BRA .Loop
.Continue:
TXA
ORA #$0100
JSL ApplyLocalCheck
PLX
.Return
RTL
GiftGiving:
CMP #$0008
.This:
BCS .This ; this intentionally safe-crashes the game if hit
PHX
LDX $901C
BEQ .Return
PLX
STA $8086
LDA #$0026
JML $CABC99
.Return:
PLX
JML $CABC18
PauseMenu:
JSL $00D29F
PHX
PHY
LDA #$3300
STA !VMADDL
LDA #$0007
STA !A1B0
LDA #$F000
STA !A1T0L
LDA #$01C0
STA !DAS0L
SEP #$20
LDA #$01
STA !DMAP0
LDA #$18
STA !BBAD0
LDA #$01
STA !MDMAEN
REP #$20
LDY #$0000
.LoopHead:
INY ; loop head
CPY #$0009
BPL .LoopEnd
TYA
ASL
TAX
LDA $8020, X
BEQ .LoopHead ; return to loop head
TYA
CLC
ADC #$31E2
STA !VMADDL
LDA $07E020, X
STA !VMDATAL
BRA .LoopHead ; return to loop head
.LoopEnd:
LDY #$FFFF
.2LoopHead:
INY ; loop head
CPY #$0007
BPL .2LoopEnd
TYA
ASL
TAX
LDA $8000, X
BEQ .2LoopHead ; return to loop head
TYA
CLC
ADC #$3203
STA !VMADDL
LDA $07E040, X
STA !VMDATAL
BRA .2LoopHead ; return to loop head
.2LoopEnd:
PLY
PLX
RTL
StarsSet:
PHA
PHX
PHY
LDX $901A
BEQ .ApplyStar
AND #$00FF
PHA
LDX $53CF
LDY $53D3
LDA #$0000
DEY
.LoopLevel:
CPX #$0000
BEQ .LoopStage
CLC
ADC #$0007
DEX
BRA .LoopLevel
.LoopStage:
CPY #$0000
BEQ .LoopEnd
INC
DEY
BRA .LoopStage
.LoopEnd:
ASL
TAX
LDA $07D020, X
ASL
ASL
ASL
ASL
ASL
ASL
TAX
PLA
.2LoopHead:
CMP #$0000
BEQ .2LoopEnd
INX
DEC
BRA .2LoopHead
.2LoopEnd:
LDA $B000, X
PHA
ORA #$0001
STA $B000, X
PLA
AND #$00FF
BNE .Return
TXA
ORA #$2000
JSL ApplyLocalCheck
.Return:
PLY
PLX
PLA
XBA
AND #$00FF
RTL
.ApplyStar:
LDA $39D7
INC
ORA #$8000
STA $39D7
BRA .Return
ApplyLocalCheck:
; args: A-address of check following $08B000
TAX
LDA $09B000, X
AND #$00FF
TAY
LDX #$0000
.Loop:
LDA $C000, X
BEQ .Apply
INX
INX
CPX #$0010
BCC .Loop
BRA .Return ; this is dangerous, could lose a check here
.Apply:
TYA
STA $C000, X
.Return:
RTL
HookBossPurify:
ORA $B0
STA $53D5
LDA $B0
LDX #$0000
LSR
.Loop:
BIT #$0001
BNE .Apply
LSR
LSR
INX
CPX #$0005
BCS .Return
BRA .Loop
.Apply:
TXA
ORA #$0200
JSL ApplyLocalCheck
.Return:
RTL
org $07C000
db "KDL3_BASEPATCH_ARCHI"
org $07E000
db $20, $03
db $20, $00
db $80, $01
db $20, $01
db $00, $00
db $00, $00
db $00, $00
db $00, $00
db $A0, $01
db $A0, $00
; Pause Icons
org $07E020
db $00, $0C
db $30, $09
db $31, $09
db $32, $09
db $33, $09
db $34, $09
db $35, $09
db $36, $09
db $37, $09
org $07E040
db $38, $05
db $39, $05
db $3A, $01
db $3B, $05
db $3C, $05
db $3D, $05
org $07F000
incbin "APPauseIcons.dat"