GBA-Exploader/arm9/source/linkreset_arm9.s
2024-05-08 00:50:01 -05:00

101 lines
1.5 KiB
ArmAsm

.TEXT
.ARM
.ALIGN
@---------------------------------------------------------------------------------------
.GLOBAL LinkReset_ARM9
.func LinkReset_ARM9
@---------------------------------------------------------------------------------------
LinkReset_ARM9:
MOV R12, #0x4000000
LDR R1, [R12,#0x130]
@ ANDS R1,R1,#0x30C @L+R+START+SELECT
@ BXNE LR
MOV R10, #0
MCR p15, 0, R10,c7,c5,0
MCR p15, 0, R10,c7,c6,0
MCR p15, 0, R10,c7,c10, 4
MCR p15, 0, R10,c3,c0,0
MCR p15, 0, R10,c1,c0
LDR R6,=0x40001A4
MOV R2,#0xC0
STRB R2,[R6,#-3]
LDR R2,=0xededdede
STR R2, [R6,#4]
MOV R0,#0x2
MOV R0,R0,LSL #24
STR R0, [R6,#8]
MOV R0,#0xA0000000
STR R0,[R6]
Wait_Busy00:
LDR R0,[R6]
TST R0,#0x80000000
BNE Wait_Busy00
ADD R7,R12,#0x200
ADR R0,reset+1
BX R0
.LTORG
.ALIGN
.THUMB
.ALIGN
@---------------------------------------------------------------------------------------
reset:
MOV R1,#0x21
LSL R1,R1,#20 @LDR R1,=0x2100000
STRH R1, [R7,#0x8] @[4000208]=0
STRH R1, [R7,#0x4]
MOV R4,#0x5C
SUB R6,R7,R4
LDR R0,=0x100200A4
STR R0,[R6,#4]
STRB R1,[R6,#8]
MOV R4,#0xAA
LSL R4,R4,#24
STR R4,[R6]
MOV R5,#0x40
LSL R3,R5,#17
LSL R5,R5,#4
MOV R4,#0x41
LSL R4,R4,#20
Wait_Ready:
LDR R0,[R6]
TST R0,R3
BEQ Wait_Ready
LDR R0,[R4,#0x10]
STR R0,[R1]
ADD R1,R1,#4
SUB R5,R5,#4
BNE Wait_Ready
LDR R0,=0xE880
STRH R0,[R7,#0x4] @WAIT_CR=0xE880
LDR R0, =0xE59FF018
LDR R2, =0x27FFE04
STR R0, [R2]
STR R2, [R2,#0x20]
BX R2
.endfunc
.end