mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
293 lines
5.9 KiB
ArmAsm
293 lines
5.9 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "main_0207B87C.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start OS_InitReset
|
|
OS_InitReset: ; 0x0207B87C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r0, _0207B8C8 ; =_022B99D0
|
|
ldrh r1, [r0, #2]
|
|
cmp r1, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r1, #1
|
|
strh r1, [r0, #2]
|
|
bl PXI_Init
|
|
mov r5, #0xc
|
|
mov r4, #1
|
|
_0207B8A4:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl PXI_IsCallbackReady
|
|
cmp r0, #0
|
|
beq _0207B8A4
|
|
ldr r1, _0207B8CC ; =sub_0207B8D0
|
|
mov r0, #0xc
|
|
bl PXI_SetFifoRecvCallback
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0207B8C8: .word _022B99D0
|
|
_0207B8CC: .word sub_0207B8D0
|
|
arm_func_end OS_InitReset
|
|
|
|
arm_func_start sub_0207B8D0
|
|
sub_0207B8D0: ; 0x0207B8D0
|
|
stmdb sp!, {r3, lr}
|
|
and r0, r1, #0x7f00
|
|
mov r0, r0, lsl #8
|
|
mov r0, r0, lsr #0x10
|
|
cmp r0, #0x10
|
|
bne _0207B8F8
|
|
ldr r0, _0207B900 ; =_022B99D0
|
|
mov r1, #1
|
|
strh r1, [r0]
|
|
ldmia sp!, {r3, pc}
|
|
_0207B8F8:
|
|
bl WaitForever2
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0207B900: .word _022B99D0
|
|
arm_func_end sub_0207B8D0
|
|
|
|
arm_func_start sub_0207B904
|
|
sub_0207B904: ; 0x0207B904
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0, lsl #8
|
|
mov r5, #0xc
|
|
mov r4, #0
|
|
_0207B914:
|
|
mov r0, r5
|
|
mov r1, r6
|
|
mov r2, r4
|
|
bl PXI_SendWordByFifo
|
|
cmp r0, #0
|
|
bne _0207B914
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end sub_0207B904
|
|
|
|
arm_func_start sub_0207B930
|
|
sub_0207B930: ; 0x0207B930
|
|
stmdb sp!, {r4, lr}
|
|
ldr r1, _0207B9C0 ; =0x027FFC40
|
|
mov r4, r0
|
|
ldrh r0, [r1]
|
|
cmp r0, #2
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
cmp r0, #0
|
|
beq _0207B958
|
|
bl WaitForever2
|
|
_0207B958:
|
|
bl OS_GetLockID
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
bl sub_02083434
|
|
ldr r0, _0207B9C4 ; =0x00000000
|
|
bl MI_StopDma
|
|
ldr r0, _0207B9C8 ; =0x00000001
|
|
bl MI_StopDma
|
|
ldr r0, _0207B9CC ; =0x00000002
|
|
bl MI_StopDma
|
|
ldr r0, _0207B9D0 ; =0x00000003
|
|
bl MI_StopDma
|
|
ldr r0, _0207B9D4 ; =0x00040000
|
|
bl OS_SetIrqMask
|
|
ldr r0, _0207B9D8 ; =0xFFFBFFFF
|
|
bl OS_ResetRequestIrqMask
|
|
ldr r1, _0207B9DC ; =0x027FFC20
|
|
ldr r0, _0207B9E0 ; =0x00000010
|
|
str r4, [r1]
|
|
bl sub_0207B904
|
|
ldr r0, _0207B9E4 ; =0x027E3F80
|
|
ldr r1, _0207B9E8 ; =0x00000800
|
|
sub r0, r0, r1
|
|
mov sp, r0
|
|
bl sub_01FF97CC
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207B9C0: .word 0x027FFC40
|
|
_0207B9C4: .word 0x00000000
|
|
_0207B9C8: .word 0x00000001
|
|
_0207B9CC: .word 0x00000002
|
|
_0207B9D0: .word 0x00000003
|
|
_0207B9D4: .word 0x00040000
|
|
_0207B9D8: .word 0xFFFBFFFF
|
|
_0207B9DC: .word 0x027FFC20
|
|
_0207B9E0: .word 0x00000010
|
|
_0207B9E4: .word 0x027E3F80
|
|
_0207B9E8: .word 0x00000800
|
|
arm_func_end sub_0207B930
|
|
|
|
arm_func_start sub_0207B9EC
|
|
sub_0207B9EC: ; 0x0207B9EC
|
|
ldr ip, _0207BA00 ; =MemcpyFast
|
|
mov r1, r0
|
|
ldr r0, _0207BA04 ; =0x027FFCF4
|
|
mov r2, #6
|
|
bx ip
|
|
.align 2, 0
|
|
_0207BA00: .word MemcpyFast
|
|
_0207BA04: .word 0x027FFCF4
|
|
arm_func_end sub_0207B9EC
|
|
|
|
arm_func_start GetDsFirmwareUserSettings
|
|
GetDsFirmwareUserSettings: ; 0x0207BA08
|
|
stmdb sp!, {r4, lr}
|
|
ldr ip, _0207BA88 ; =0x027FFC80
|
|
mov r4, r0
|
|
ldrh r2, [ip, #0x64]
|
|
add r0, ip, #6
|
|
add r1, r4, #4
|
|
mov r2, r2, lsl #0x1d
|
|
mov r2, r2, lsr #0x1d
|
|
strb r2, [r4]
|
|
ldrb r3, [ip, #2]
|
|
mov r2, #0x14
|
|
mov r3, r3, lsl #0x1c
|
|
mov r3, r3, lsr #0x1c
|
|
strb r3, [r4, #1]
|
|
ldrb r3, [ip, #3]
|
|
strb r3, [r4, #2]
|
|
ldrb r3, [ip, #4]
|
|
strb r3, [r4, #3]
|
|
ldrb r3, [ip, #0x1a]
|
|
strh r3, [r4, #0x1a]
|
|
ldrb r3, [ip, #0x50]
|
|
strh r3, [r4, #0x52]
|
|
bl ArrayCopy16
|
|
ldr r0, _0207BA88 ; =0x027FFC80
|
|
add r1, r4, #0x1c
|
|
add r0, r0, #0x1c
|
|
mov r2, #0x34
|
|
bl ArrayCopy16
|
|
mov r0, #0
|
|
strh r0, [r4, #0x18]
|
|
strh r0, [r4, #0x50]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0207BA88: .word 0x027FFC80
|
|
arm_func_end GetDsFirmwareUserSettings
|
|
|
|
arm_func_start CountLeadingZeros
|
|
CountLeadingZeros: ; 0x0207BA8C
|
|
clz r0, r0
|
|
bx lr
|
|
arm_func_end CountLeadingZeros
|
|
|
|
arm_func_start OSi_InitVramExclusive
|
|
OSi_InitVramExclusive: ; 0x0207BA94
|
|
ldr r0, _0207BAC0 ; =_022B99D4
|
|
mov r3, #0
|
|
str r3, [r0]
|
|
ldr r0, _0207BAC4 ; =_022B99D8
|
|
mov r2, r3
|
|
_0207BAA8:
|
|
mov r1, r3, lsl #1
|
|
add r3, r3, #1
|
|
strh r2, [r0, r1]
|
|
cmp r3, #9
|
|
blt _0207BAA8
|
|
bx lr
|
|
.align 2, 0
|
|
_0207BAC0: .word _022B99D4
|
|
_0207BAC4: .word _022B99D8
|
|
arm_func_end OSi_InitVramExclusive
|
|
|
|
arm_func_start sub_0207BAC8
|
|
sub_0207BAC8: ; 0x0207BAC8
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
mov r5, r0
|
|
mov sl, r1
|
|
bl EnableIrqFlag
|
|
ldr r4, _0207BB44 ; =_022B99D4
|
|
ldr r1, _0207BB48 ; =0x000001FF
|
|
ldr r2, [r4]
|
|
mov sb, r0
|
|
and r0, r5, r2
|
|
ldr r6, _0207BB4C ; =_022B99D8
|
|
and r8, r0, r1
|
|
mov r7, #1
|
|
mov r5, #0
|
|
_0207BAFC:
|
|
mov r0, r8
|
|
bl CountLeadingZeros
|
|
rsbs r2, r0, #0x1f
|
|
bmi _0207BB38
|
|
mov r1, r2, lsl #1
|
|
ldrh r0, [r6, r1]
|
|
mvn r2, r7, lsl r2
|
|
cmp sl, r0
|
|
and r8, r8, r2
|
|
bne _0207BAFC
|
|
ldr r0, [r4]
|
|
strh r5, [r6, r1]
|
|
and r0, r0, r2
|
|
str r0, [r4]
|
|
b _0207BAFC
|
|
_0207BB38:
|
|
mov r0, sb
|
|
bl SetIrqFlag
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_0207BB44: .word _022B99D4
|
|
_0207BB48: .word 0x000001FF
|
|
_0207BB4C: .word _022B99D8
|
|
arm_func_end sub_0207BAC8
|
|
|
|
arm_func_start sub_0207BB50
|
|
sub_0207BB50: ; 0x0207BB50
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r1, _0207BC10 ; =0x04000006
|
|
mov r5, r0
|
|
ldrh r6, [r1]
|
|
ldr r4, _0207BC14 ; =0x027FFC00
|
|
bl GetTimer0Control
|
|
orr r0, r0, r6, lsl #16
|
|
str r0, [r5]
|
|
ldr r1, _0207BC18 ; =_022B99A8
|
|
ldrh ip, [r4, #0xf8]
|
|
ldr r3, [r1]
|
|
ldr r2, [r1, #4]
|
|
mov r0, r4
|
|
eor r2, r3, ip, lsl #16
|
|
str r2, [r5, #4]
|
|
ldr r2, [r1]
|
|
ldr r3, [r0, #0x3c]
|
|
ldr r2, [r1, #4]
|
|
ldr r1, [r4, #0xf4]
|
|
ldr ip, _0207BC1C ; =0x04000600
|
|
eor r1, r2, r1
|
|
eor r2, r3, r1
|
|
str r2, [r5, #8]
|
|
ldr r1, [ip]
|
|
eor r1, r2, r1
|
|
str r1, [r5, #8]
|
|
ldr r2, [r0, #0x1e8]
|
|
add r1, r0, #0x300
|
|
str r2, [r5, #0xc]
|
|
ldr r3, [r0, #0x1ec]
|
|
sub r2, ip, #0x4d0
|
|
str r3, [r5, #0x10]
|
|
ldr r3, [r0, #0x390]
|
|
ldrh r4, [r1, #0x94]
|
|
add r0, r0, #0x3a8
|
|
eor r3, r3, r4, lsl #16
|
|
str r3, [r5, #0x14]
|
|
ldrh r4, [r1, #0xaa]
|
|
ldrh r3, [r1, #0xac]
|
|
orr r3, r3, r4, lsl #16
|
|
str r3, [r5, #0x18]
|
|
ldrh r2, [r2]
|
|
ldrh r0, [r0]
|
|
ldrh r1, [r1, #0x98]
|
|
orr r0, r2, r0
|
|
orr r0, r0, r1, lsl #16
|
|
str r0, [r5, #0x1c]
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0207BC10: .word 0x04000006
|
|
_0207BC14: .word 0x027FFC00
|
|
_0207BC18: .word _022B99A8
|
|
_0207BC1C: .word 0x04000600
|
|
arm_func_end sub_0207BB50
|