Merge branch 'pikalax_work' of github.com:PikalaxALT/pokediamond into pikalax_work

This commit is contained in:
PikalaxALT
2020-05-16 13:48:56 -04:00
4 changed files with 549 additions and 543 deletions

View File

@@ -218,8 +218,9 @@ SECTIONS {
DGT_hash2.o (.text)
DGT_sha1s_arm4cw.o (.text)
CP_context.o (.text)
libspi.o (.text)
libpm.o (.text)
SPI_tp.o (.text)
SPI_mic.o (.text)
SPI_pm.o (.text)
librtc.o (.text)
libcard.o (.text)
libwm.o (.text)

528
arm9/asm/SPI_mic.s Normal file
View File

@@ -0,0 +1,528 @@
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start MicWaitBusy
MicWaitBusy: ; 0x020D4408
ldr ip, _020D441C ; =0x021D54B0
_020D440C:
ldr r0, [r12, #0x0]
cmp r0, #0x1
beq _020D440C
bx lr
.balign 4
_020D441C: .word 0x021D54B0
arm_func_start MicGetResultCallback
MicGetResultCallback: ; 0x020D4420
ldr r1, _020D442C ; =0x021D54B0
str r0, [r1, #0xc]
bx lr
.balign 4
_020D442C: .word 0x021D54B0
arm_func_start MicStopAutoSampling
MicStopAutoSampling:
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020D4460 ; =0x03004200
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
_020D4448:
cmp r0, #0x0
movge r0, #0x1
movlt r0, #0x0
add sp, sp, #4
ldmfd sp!, {lr}
bx lr
_020D4460: .word 0x03004200
arm_func_start MicStartAutoSampling
MicStartAutoSampling: ; 0x020D4464
stmdb sp!, {r4-r6,lr}
ldr ip, _020D4584 ; =0x02004100
mov r6, r0
mov r5, r1
mov r4, r2
orr r1, r3, r12
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
_020D4488:
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
mov r0, r6, lsr #0x10
orr r1, r0, #0x10000
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
ldr r1, _020D4588
mov r0, #0x9
and r1, r6, r1
orr r1, r1, #0x20000
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
mov r0, r5, lsr #0x10
orr r1, r0, #0x30000
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
ldr r1, _020D4588
mov r0, #0x9
and r1, r5, r1
orr r1, r1, #0x40000
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
mov r0, r4, lsr #0x10
orr r1, r0, #0x50000
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
ldr r0, _020D4588
ldr r1, _020D458C
and r0, r4, r0
orr r1, r0, r1
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movge r0, #0x1
movlt r0, #0x0
ldmia sp!, {r4-r6, lr}
bx lr
_020D4584: .word 0x02004100
_020D4588: .word 0x0000FFFF
_020D458C: .word 0x01060000
arm_func_start MicDoSampling
MicDoSampling: ; 0x020D4590
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020D45C4 ; =0x03004000
mov r2, #0x0
orr r1, r0, r1
mov r0, #0x9
bl PXI_SendWordByFifo
_020D45AC:
cmp r0, #0x0
movge r0, #0x1
movlt r0, #0x0
add sp, sp, #0x4
ldmfd sp!, {lr}
bx lr
_020D45C4: .word 0x03004000
arm_func_start MicCommonCallback
MicCommonCallback: ; 0x020D45C8
stmdb sp!, {r4,lr}
mov r4, r1
cmp r2, #0x0
beq _020D4610
ldr r0, _020D4700 ; =0x021D54B0
ldr r2, _020D4700 ; =0x021D54B0
ldr r1, [r0, #0x0]
ldr r12, [r2, #0x4]
cmp r1, #0x0
movne r1, #0x0
strne r1, [r0, #0x0]
cmp r12, #0x0
beq _020D4610
ldr r1, [r2, #0x8]
mov r3, #0x0
mov r0, #0x6
str r3, [r2, #0x4]
blx r12
_020D4610:
and r0, r4, #0xff
mov r1, r0, lsl #0x10
and r2, r4, #0x7f00
mov r0, r2, lsl #0x8
mov r1, r1, lsr #0x10
cmp r1, #0x4
mov r2, r0, lsr #0x10
addls pc, pc, r1, lsl #0x2
b _020D4670
_020D4634:
b _020D4648
b _020D4650
b _020D4658
b _020D4660
b _020D4668
_020D4648:
mov r0, #0x0
b _020D4674
_020D4650:
mov r0, #0x4
b _020D4674
_020D4658:
mov r0, #0x2
b _020D4674
_020D4660:
mov r0, #0x5
b _020D4674
_020D4668:
mov r0, #0x1
b _020D4674
_020D4670:
mov r0, #0x6
_020D4674:
cmp r2, #0x51
bne _020D46A0
ldr r1, _020D4700 ; =0x021D54B0
ldr r2, [r1, #0x10]
cmp r2, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
ldr r1, [r1, #0x14]
blx r2
ldmia sp!, {r4,lr}
bx lr
_020D46A0:
cmp r2, #0x40
bne _020D46C0
ldr r1, _020D4700 ; =0x021D54B0
ldr r2, [r1, #0x18]
cmp r2, #0x0
ldrne r1, _020D4704 ; =0x027FFF94
ldrneh r1, [r1, #0x0]
strneh r1, [r2, #0x0]
_020D46C0:
ldr r1, _020D4700 ; =0x021D54B0
ldr r2, [r1, #0x0]
cmp r2, #0x0
movne r2, #0x0
strne r2, [r1, #0x0]
ldr r2, _020D4700 ; =0x021D54B0
ldr r4, [r2, #0x4]
cmp r4, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
ldr r1, [r2, #0x8]
mov r3, #0x0
str r3, [r2, #0x4]
blx r4
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020D4700: .word 0x021D54B0
_020D4704: .word 0x027FFF94
arm_func_start MIC_GetLastSamplingAddress
MIC_GetLastSamplingAddress: ; 0x020D4708
ldr r0, _020D4714 ; =0x027FFF90
ldr r0, [r0, #0x0]
bx lr
.balign 4
_020D4714: .word 0x027FFF90
arm_func_start MIC_StopAutoSampling
MIC_StopAutoSampling: ; 0x020D4718
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020D4754 ; =MicGetResultCallback
mov r1, #0x0
bl MIC_StopAutoSamplingAsync
ldr r1, _020D4758 ; =0x021D54B0
cmp r0, #0x0
str r0, [r1, #0xc]
bne _020D4740
bl MicWaitBusy
_020D4740:
ldr r0, _020D4758 ; =0x021D54B0
ldr r0, [r0, #0xc]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020D4754: .word MicGetResultCallback
_020D4758: .word 0x021D54B0
arm_func_start MIC_StopAutoSamplingAsync
MIC_StopAutoSamplingAsync: ; 0x020D475C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r1
bl OS_DisableInterrupts
ldr r1, _020D47C8 ; =0x021D54B0
ldr r2, [r1, #0x0]
cmp r2, #0x0
beq _020D4794
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r5,lr}
bx lr
_020D4794:
mov r2, #0x1
str r2, [r1, #0x0]
bl OS_RestoreInterrupts
ldr r0, _020D47C8 ; =0x021D54B0
str r5, [r0, #0x4]
str r4, [r0, #0x8]
bl MicStopAutoSampling
_020D47B0:
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r5, lr}
bx lr
_020D47C8: .word 0x021D54B0
arm_func_start MIC_StartAutoSampling
MIC_StartAutoSampling: ; 0x020D47CC
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020D4808 ; =MicGetResultCallback
mov r2, #0x0
bl MIC_StartAutoSamplingAsync
ldr r1, _020D480C ; =0x021D54B0
cmp r0, #0x0
str r0, [r1, #0xc]
bne _020D47F4
bl MicWaitBusy
_020D47F4:
ldr r0, _020D480C ; =0x021D54B0
ldr r0, [r0, #0xc]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020D4808: .word MicGetResultCallback
_020D480C: .word 0x021D54B0
arm_func_start MIC_StartAutoSamplingAsync
MIC_StartAutoSamplingAsync: ; 0x020D4810
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
ldr r0, [r7, #0x4]
mov r6, r1
ands r0, r0, #0x1f
mov r5, r2
addne sp, sp, #0x4
movne r0, #0x2
ldmneia sp!, {r4-r7,lr}
bxne lr
ldr r1, [r7, #0x8]
ands r0, r1, #0x1f
addne sp, sp, #0x4
movne r0, #0x2
ldmneia sp!, {r4-r7,lr}
bxne lr
cmp r1, #0x0
addeq sp, sp, #0x4
moveq r0, #0x2
ldmeqia sp!, {r4-r7,lr}
bxeq lr
ldr r0, [r7, #0xc]
cmp r0, #0x400
addcc sp, sp, #0x4
movcc r0, #0x2
ldmccia sp!, {r4-r7,lr}
bxcc lr
ldr r0, [r7, #0x0]
cmp r0, #0x5
addls pc, pc, r0, lsl #0x2
b _020D48D8
_020D4890:
b _020D48A8
b _020D48B0
b _020D48B8
b _020D48C0
b _020D48C8
b _020D48D0
_020D48A8:
mov r1, #0x0
b _020D48E8
_020D48B0:
mov r1, #0x1
b _020D48E8
_020D48B8:
mov r1, #0x2
b _020D48E8
_020D48C0:
mov r1, #0x3
b _020D48E8
_020D48C8:
mov r1, #0x5
b _020D48E8
_020D48D0:
mov r1, #0x7
b _020D48E8
_020D48D8:
add sp, sp, #0x4
mov r0, #0x2
ldmia sp!, {r4-r7,lr}
bx lr
_020D48E8:
ldr r0, [r7, #0x10]
cmp r0, #0x0
orrne r0, r1, #0x10
andne r0, r0, #0xff
andeq r0, r1, #0xff
and r4, r0, #0xff
bl OS_DisableInterrupts
ldr r1, _020D497C
ldr r2, [r1]
cmp r2, #0x0
beq _020D4928
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020D4928:
mov r2, #0x1
str r2, [r1]
bl OS_RestoreInterrupts
ldr r0, _020D497C
mov r3, r4
str r6, [r0, #0x4]
str r5, [r0, #0x8]
ldr r1, [r7, #0x14]
str r1, [r0, #0x10]
ldr r1, [r7, #0x18]
str r1, [r0, #0x14]
ldr r0, [r7, #0x4]
ldr r1, [r7, #0x8]
ldr r2, [r7, #0xC]
bl MicStartAutoSampling
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
_020D497C: .word 0x021D54B0
arm_func_start MIC_DoSamplingAsync
MIC_DoSamplingAsync: ; 0x020D4980
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
cmp r0, #0x6
mov r7, r1
mov r6, r2
mov r5, r3
addge sp, sp, #0x4
movge r0, #0x2
ldmgeia sp!, {r4-r7,lr}
bxge lr
cmp r0, #0x3
addls pc, pc, r0, lsl #0x2
b _020D49E4
_020D49B4:
b _020D49C4
b _020D49CC
b _020D49D4
b _020D49DC
_020D49C4:
mov r4, #0x0
b _020D49F4
_020D49CC:
mov r4, #0x1
b _020D49F4
_020D49D4:
mov r4, #0x2
b _020D49F4
_020D49DC:
mov r4, #0x3
b _020D49F4
_020D49E4:
add sp, sp, #0x4
mov r0, #0x2
ldmia sp!, {r4-r7,lr}
bx lr
_020D49F4:
bl OS_DisableInterrupts
ldr r1, _020D4A58
ldr r2, [r1]
cmp r2, #0x0
beq _020D4A1C
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020D4A1C:
mov r2, #0x1
str r2, [r1]
bl OS_RestoreInterrupts
ldr r1, _020D4A58
mov r0, r4
str r6, [r1, #0x4]
str r5, [r1, #0x8]
str r7, [r1, #0x18]
bl MicDoSampling
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
_020D4A58: .word 0x021D54B0
arm_func_start MIC_Init
MIC_Init: ; 0x020D4A5C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r1, _020D4AD8 ; =0x021D54AC
ldrh r0, [r1, #0x0]
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,lr}
bxne lr
ldr r0, _020D4ADC ; =0x021D54B0
mov r2, #0x0
mov r3, #0x1
strh r3, [r1, #0x0]
str r2, [r0, #0x0]
str r2, [r0, #0x4]
bl PXI_Init
mov r5, #0x9
mov r4, #0x1
_020D4AA0:
mov r0, r5
mov r1, r4
bl PXI_IsCallbackReady
_020D4AAC:
cmp r0, #0x0
beq _020D4AA0
ldr r2, _020D4AE0
mov r3, #0x0
ldr r1, _020D4AE4
mov r0, #0x9
str r3, [r2]
bl PXI_SetFifoRecvCallback
add sp, sp, #0x4
ldmia sp!, {r4-r5, lr}
bx lr
_020D4AD8: .word 0x021D54AC
_020D4ADC: .word 0x021D54B0
_020D4AE0: .word 0x027FFF90
_020D4AE4: .word MicCommonCallback

View File

@@ -25,22 +25,22 @@ _020D4B14: .word 0x021D54D8
arm_func_start PM_AppendPostSleepCallback
PM_AppendPostSleepCallback: ; 0x020D4B18
ldr ip, _020D4B28 ; =FUN_020D4BC4
ldr ip, _020D4B28 ; =PMi_AppendList
mov r1, r0
ldr r0, _020D4B2C ; =0x021D54E0
bx r12
.balign 4
_020D4B28: .word FUN_020D4BC4
_020D4B28: .word PMi_AppendList
_020D4B2C: .word 0x021D54E0
arm_func_start PM_PrependPreSleepCallback
PM_PrependPreSleepCallback: ; 0x020D4B30
ldr ip, _020D4B40 ; =FUN_020D4C0C
ldr ip, _020D4B40 ; =PMi_PrependList
mov r1, r0
ldr r0, _020D4B44 ; =0x021D54D8
bx r12
.balign 4
_020D4B40: .word FUN_020D4C0C
_020D4B40: .word PMi_PrependList
_020D4B44: .word 0x021D54D8
arm_func_start PMi_ExecuteList
@@ -59,8 +59,8 @@ _020D4B58:
ldmia sp!, {r4,lr}
bx lr
arm_func_start FUN_020D4B78
FUN_020D4B78:
arm_func_start PMi_DeleteList
PMi_DeleteList:
cmp r0, #0x0
bxeq lr
ldr r3, [r0]
@@ -83,8 +83,8 @@ _020D4BB0:
bne _020D4B90
bx lr
arm_func_start FUN_020D4BC4
FUN_020D4BC4: ; 0x020D4BC4
arm_func_start PMi_AppendList
PMi_AppendList: ; 0x020D4BC4
cmp r0, #0x0
bxeq lr
ldr r2, [r0, #0x0]
@@ -106,8 +106,8 @@ _020D4C00:
str r1, [r2, #0x8]
bx lr
arm_func_start FUN_020D4C0C
FUN_020D4C0C: ; 0x020D4C0C
arm_func_start PMi_PrependList
PMi_PrependList: ; 0x020D4C0C
cmp r0, #0x0
ldrne r2, [r0, #0x0]
strne r2, [r1, #0x8]
@@ -508,23 +508,23 @@ _020D5120:
arm_func_start PM_SetAmpGain
PM_SetAmpGain: ; 0x020D5150
ldr ip, _020D5164 ; =FUN_020D53DC
ldr ip, _020D5164 ; =PMi_WriteRegister
mov r0, r0, lsl #0x10
mov r1, r0, lsr #0x10
mov r0, #0x3
bx r12
.balign 4
_020D5164: .word FUN_020D53DC
_020D5164: .word PMi_WriteRegister
arm_func_start PM_SetAmp
PM_SetAmp: ; 0x020D5168
ldr ip, _020D517C ; =FUN_020D53DC
ldr ip, _020D517C ; =PMi_WriteRegister
mov r0, r0, lsl #0x10
mov r1, r0, lsr #0x10
mov r0, #0x2
bx r12
.balign 4
_020D517C: .word FUN_020D53DC
_020D517C: .word PMi_WriteRegister
arm_func_start PM_ForceToPowerOff
PM_ForceToPowerOff: ; 0x020D5180
@@ -722,8 +722,8 @@ _020D53B4:
.balign 4
_020D53D8: .word 0x0000FFFF
arm_func_start FUN_020D53DC
FUN_020D53DC: ; 0x020D53DC
arm_func_start PMi_WriteRegister
PMi_WriteRegister: ; 0x020D53DC
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, _020D5414 ; =PMi_DummyCallback

View File

@@ -1,6 +1,7 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
.text
arm_func_start TP_CheckError
TP_CheckError: ; 0x020D36C4
@@ -961,527 +962,3 @@ _020D43EC:
_020D43FC: .word 0x021D5474
_020D4400: .word 0x027FFFAA
_020D4404: .word 0x027FFFAC
arm_func_start MicWaitBusy
MicWaitBusy: ; 0x020D4408
ldr ip, _020D441C ; =0x021D54B0
_020D440C:
ldr r0, [r12, #0x0]
cmp r0, #0x1
beq _020D440C
bx lr
.balign 4
_020D441C: .word 0x021D54B0
arm_func_start MicGetResultCallback
MicGetResultCallback: ; 0x020D4420
ldr r1, _020D442C ; =0x021D54B0
str r0, [r1, #0xc]
bx lr
.balign 4
_020D442C: .word 0x021D54B0
arm_func_start MicStopAutoSampling
MicStopAutoSampling:
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020D4460 ; =0x03004200
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
_020D4448:
cmp r0, #0x0
movge r0, #0x1
movlt r0, #0x0
add sp, sp, #4
ldmfd sp!, {lr}
bx lr
_020D4460: .word 0x03004200
arm_func_start MicStartAutoSampling
MicStartAutoSampling: ; 0x020D4464
stmdb sp!, {r4-r6,lr}
ldr ip, _020D4584 ; =0x02004100
mov r6, r0
mov r5, r1
mov r4, r2
orr r1, r3, r12
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
_020D4488:
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
mov r0, r6, lsr #0x10
orr r1, r0, #0x10000
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
ldr r1, _020D4588
mov r0, #0x9
and r1, r6, r1
orr r1, r1, #0x20000
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
mov r0, r5, lsr #0x10
orr r1, r0, #0x30000
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
ldr r1, _020D4588
mov r0, #0x9
and r1, r5, r1
orr r1, r1, #0x40000
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
mov r0, r4, lsr #0x10
orr r1, r0, #0x50000
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movlt r0, #0x0
ldmltia sp!, {r4-r6, lr}
bxlt lr
ldr r0, _020D4588
ldr r1, _020D458C
and r0, r4, r0
orr r1, r0, r1
mov r0, #0x9
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
movge r0, #0x1
movlt r0, #0x0
ldmia sp!, {r4-r6, lr}
bx lr
_020D4584: .word 0x02004100
_020D4588: .word 0x0000FFFF
_020D458C: .word 0x01060000
arm_func_start MicDoSampling
MicDoSampling: ; 0x020D4590
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020D45C4 ; =0x03004000
mov r2, #0x0
orr r1, r0, r1
mov r0, #0x9
bl PXI_SendWordByFifo
_020D45AC:
cmp r0, #0x0
movge r0, #0x1
movlt r0, #0x0
add sp, sp, #0x4
ldmfd sp!, {lr}
bx lr
_020D45C4: .word 0x03004000
arm_func_start MicCommonCallback
MicCommonCallback: ; 0x020D45C8
stmdb sp!, {r4,lr}
mov r4, r1
cmp r2, #0x0
beq _020D4610
ldr r0, _020D4700 ; =0x021D54B0
ldr r2, _020D4700 ; =0x021D54B0
ldr r1, [r0, #0x0]
ldr r12, [r2, #0x4]
cmp r1, #0x0
movne r1, #0x0
strne r1, [r0, #0x0]
cmp r12, #0x0
beq _020D4610
ldr r1, [r2, #0x8]
mov r3, #0x0
mov r0, #0x6
str r3, [r2, #0x4]
blx r12
_020D4610:
and r0, r4, #0xff
mov r1, r0, lsl #0x10
and r2, r4, #0x7f00
mov r0, r2, lsl #0x8
mov r1, r1, lsr #0x10
cmp r1, #0x4
mov r2, r0, lsr #0x10
addls pc, pc, r1, lsl #0x2
b _020D4670
_020D4634:
b _020D4648
b _020D4650
b _020D4658
b _020D4660
b _020D4668
_020D4648:
mov r0, #0x0
b _020D4674
_020D4650:
mov r0, #0x4
b _020D4674
_020D4658:
mov r0, #0x2
b _020D4674
_020D4660:
mov r0, #0x5
b _020D4674
_020D4668:
mov r0, #0x1
b _020D4674
_020D4670:
mov r0, #0x6
_020D4674:
cmp r2, #0x51
bne _020D46A0
ldr r1, _020D4700 ; =0x021D54B0
ldr r2, [r1, #0x10]
cmp r2, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
ldr r1, [r1, #0x14]
blx r2
ldmia sp!, {r4,lr}
bx lr
_020D46A0:
cmp r2, #0x40
bne _020D46C0
ldr r1, _020D4700 ; =0x021D54B0
ldr r2, [r1, #0x18]
cmp r2, #0x0
ldrne r1, _020D4704 ; =0x027FFF94
ldrneh r1, [r1, #0x0]
strneh r1, [r2, #0x0]
_020D46C0:
ldr r1, _020D4700 ; =0x021D54B0
ldr r2, [r1, #0x0]
cmp r2, #0x0
movne r2, #0x0
strne r2, [r1, #0x0]
ldr r2, _020D4700 ; =0x021D54B0
ldr r4, [r2, #0x4]
cmp r4, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
ldr r1, [r2, #0x8]
mov r3, #0x0
str r3, [r2, #0x4]
blx r4
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020D4700: .word 0x021D54B0
_020D4704: .word 0x027FFF94
arm_func_start MIC_GetLastSamplingAddress
MIC_GetLastSamplingAddress: ; 0x020D4708
ldr r0, _020D4714 ; =0x027FFF90
ldr r0, [r0, #0x0]
bx lr
.balign 4
_020D4714: .word 0x027FFF90
arm_func_start MIC_StopAutoSampling
MIC_StopAutoSampling: ; 0x020D4718
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020D4754 ; =MicGetResultCallback
mov r1, #0x0
bl MIC_StopAutoSamplingAsync
ldr r1, _020D4758 ; =0x021D54B0
cmp r0, #0x0
str r0, [r1, #0xc]
bne _020D4740
bl MicWaitBusy
_020D4740:
ldr r0, _020D4758 ; =0x021D54B0
ldr r0, [r0, #0xc]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020D4754: .word MicGetResultCallback
_020D4758: .word 0x021D54B0
arm_func_start MIC_StopAutoSamplingAsync
MIC_StopAutoSamplingAsync: ; 0x020D475C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r1
bl OS_DisableInterrupts
ldr r1, _020D47C8 ; =0x021D54B0
ldr r2, [r1, #0x0]
cmp r2, #0x0
beq _020D4794
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r5,lr}
bx lr
_020D4794:
mov r2, #0x1
str r2, [r1, #0x0]
bl OS_RestoreInterrupts
ldr r0, _020D47C8 ; =0x021D54B0
str r5, [r0, #0x4]
str r4, [r0, #0x8]
bl MicStopAutoSampling
_020D47B0:
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r5, lr}
bx lr
_020D47C8: .word 0x021D54B0
arm_func_start MIC_StartAutoSampling
MIC_StartAutoSampling: ; 0x020D47CC
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020D4808 ; =MicGetResultCallback
mov r2, #0x0
bl MIC_StartAutoSamplingAsync
ldr r1, _020D480C ; =0x021D54B0
cmp r0, #0x0
str r0, [r1, #0xc]
bne _020D47F4
bl MicWaitBusy
_020D47F4:
ldr r0, _020D480C ; =0x021D54B0
ldr r0, [r0, #0xc]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020D4808: .word MicGetResultCallback
_020D480C: .word 0x021D54B0
arm_func_start MIC_StartAutoSamplingAsync
MIC_StartAutoSamplingAsync: ; 0x020D4810
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
ldr r0, [r7, #0x4]
mov r6, r1
ands r0, r0, #0x1f
mov r5, r2
addne sp, sp, #0x4
movne r0, #0x2
ldmneia sp!, {r4-r7,lr}
bxne lr
ldr r1, [r7, #0x8]
ands r0, r1, #0x1f
addne sp, sp, #0x4
movne r0, #0x2
ldmneia sp!, {r4-r7,lr}
bxne lr
cmp r1, #0x0
addeq sp, sp, #0x4
moveq r0, #0x2
ldmeqia sp!, {r4-r7,lr}
bxeq lr
ldr r0, [r7, #0xc]
cmp r0, #0x400
addcc sp, sp, #0x4
movcc r0, #0x2
ldmccia sp!, {r4-r7,lr}
bxcc lr
ldr r0, [r7, #0x0]
cmp r0, #0x5
addls pc, pc, r0, lsl #0x2
b _020D48D8
_020D4890:
b _020D48A8
b _020D48B0
b _020D48B8
b _020D48C0
b _020D48C8
b _020D48D0
_020D48A8:
mov r1, #0x0
b _020D48E8
_020D48B0:
mov r1, #0x1
b _020D48E8
_020D48B8:
mov r1, #0x2
b _020D48E8
_020D48C0:
mov r1, #0x3
b _020D48E8
_020D48C8:
mov r1, #0x5
b _020D48E8
_020D48D0:
mov r1, #0x7
b _020D48E8
_020D48D8:
add sp, sp, #0x4
mov r0, #0x2
ldmia sp!, {r4-r7,lr}
bx lr
_020D48E8:
ldr r0, [r7, #0x10]
cmp r0, #0x0
orrne r0, r1, #0x10
andne r0, r0, #0xff
andeq r0, r1, #0xff
and r4, r0, #0xff
bl OS_DisableInterrupts
ldr r1, _020D497C
ldr r2, [r1]
cmp r2, #0x0
beq _020D4928
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020D4928:
mov r2, #0x1
str r2, [r1]
bl OS_RestoreInterrupts
ldr r0, _020D497C
mov r3, r4
str r6, [r0, #0x4]
str r5, [r0, #0x8]
ldr r1, [r7, #0x14]
str r1, [r0, #0x10]
ldr r1, [r7, #0x18]
str r1, [r0, #0x14]
ldr r0, [r7, #0x4]
ldr r1, [r7, #0x8]
ldr r2, [r7, #0xC]
bl MicStartAutoSampling
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
_020D497C: .word 0x021D54B0
arm_func_start MIC_DoSamplingAsync
MIC_DoSamplingAsync: ; 0x020D4980
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
cmp r0, #0x6
mov r7, r1
mov r6, r2
mov r5, r3
addge sp, sp, #0x4
movge r0, #0x2
ldmgeia sp!, {r4-r7,lr}
bxge lr
cmp r0, #0x3
addls pc, pc, r0, lsl #0x2
b _020D49E4
_020D49B4:
b _020D49C4
b _020D49CC
b _020D49D4
b _020D49DC
_020D49C4:
mov r4, #0x0
b _020D49F4
_020D49CC:
mov r4, #0x1
b _020D49F4
_020D49D4:
mov r4, #0x2
b _020D49F4
_020D49DC:
mov r4, #0x3
b _020D49F4
_020D49E4:
add sp, sp, #0x4
mov r0, #0x2
ldmia sp!, {r4-r7,lr}
bx lr
_020D49F4:
bl OS_DisableInterrupts
ldr r1, _020D4A58
ldr r2, [r1]
cmp r2, #0x0
beq _020D4A1C
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020D4A1C:
mov r2, #0x1
str r2, [r1]
bl OS_RestoreInterrupts
ldr r1, _020D4A58
mov r0, r4
str r6, [r1, #0x4]
str r5, [r1, #0x8]
str r7, [r1, #0x18]
bl MicDoSampling
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
_020D4A58: .word 0x021D54B0
arm_func_start MIC_Init
MIC_Init: ; 0x020D4A5C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r1, _020D4AD8 ; =0x021D54AC
ldrh r0, [r1, #0x0]
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,lr}
bxne lr
ldr r0, _020D4ADC ; =0x021D54B0
mov r2, #0x0
mov r3, #0x1
strh r3, [r1, #0x0]
str r2, [r0, #0x0]
str r2, [r0, #0x4]
bl PXI_Init
mov r5, #0x9
mov r4, #0x1
_020D4AA0:
mov r0, r5
mov r1, r4
bl PXI_IsCallbackReady
_020D4AAC:
cmp r0, #0x0
beq _020D4AA0
ldr r2, _020D4AE0
mov r3, #0x0
ldr r1, _020D4AE4
mov r0, #0x9
str r3, [r2]
bl PXI_SetFifoRecvCallback
add sp, sp, #0x4
ldmia sp!, {r4-r5, lr}
bx lr
_020D4AD8: .word 0x021D54AC
_020D4ADC: .word 0x021D54B0
_020D4AE0: .word 0x027FFF90
_020D4AE4: .word MicCommonCallback