From 8cd7c04103137b485533f68b113885a6e08fffd8 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 11 Jun 2020 18:21:51 +0100 Subject: arm7: finish splitting dtcm.s rename remaining dtcm files to wram files --- arm7/arm7.lsf | 14 +- arm7/asm/CARD_common.s | 105 + arm7/asm/CARD_fifo.s | 90 + arm7/asm/CARD_pullOut.s | 218 ++ arm7/asm/CARD_rom.s | 194 ++ arm7/asm/CARD_spi.s | 644 ++++ arm7/asm/CARD_thread.s | 156 + arm7/asm/FS_file.s | 10 + arm7/asm/OS_irqHandler.s | 40 +- arm7/asm/SND.s | 6 + arm7/asm/SND_util.s | 8 +- arm7/asm/dtcm.s | 1322 -------- arm7/asm/dtcm2.s | 7573 ---------------------------------------------- arm7/asm/dtcm_bss.s | 243 -- arm7/asm/dtcm_data.s | 112 - arm7/asm/wram2.s | 7573 ++++++++++++++++++++++++++++++++++++++++++++++ arm7/asm/wram_bss.s | 203 ++ arm7/asm/wram_data.s | 56 + arm7/global.inc | 18 +- 19 files changed, 9328 insertions(+), 9257 deletions(-) create mode 100644 arm7/asm/CARD_common.s create mode 100644 arm7/asm/CARD_fifo.s create mode 100644 arm7/asm/CARD_pullOut.s create mode 100644 arm7/asm/CARD_rom.s create mode 100644 arm7/asm/CARD_spi.s create mode 100644 arm7/asm/CARD_thread.s create mode 100644 arm7/asm/FS_file.s delete mode 100644 arm7/asm/dtcm.s delete mode 100644 arm7/asm/dtcm2.s delete mode 100644 arm7/asm/dtcm_bss.s delete mode 100644 arm7/asm/dtcm_data.s create mode 100644 arm7/asm/wram2.s create mode 100644 arm7/asm/wram_bss.s create mode 100644 arm7/asm/wram_data.s diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf index 3b988f59..46486c4f 100644 --- a/arm7/arm7.lsf +++ b/arm7/arm7.lsf @@ -55,11 +55,17 @@ Autoload WRAM Object SND_work.o Object SND_alarm.o Object SND_command.o - Object dtcm.o + Object FS_file.o + Object CARD_common.o + Object CARD_spi.o + Object CARD_rom.o + Object CARD_thread.o + Object CARD_fifo.o + Object CARD_pullOut.o Object libsyscall.o - Object dtcm2.o - Object dtcm_data.o - Object dtcm_bss.o + Object wram2.o + Object wram_data.o + Object wram_bss.o } Autoload EXT diff --git a/arm7/asm/CARD_common.s b/arm7/asm/CARD_common.s new file mode 100644 index 00000000..be71fcdf --- /dev/null +++ b/arm7/asm/CARD_common.s @@ -0,0 +1,105 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global _0380912C +_0380912C: ;0x0380912C + .space 0x03809140 - 0x0380912C + + .global cardi_common +cardi_common: ;0x03809140 + .space 0x03809188 - 0x03809140 + + .global _03809188 +_03809188: ;0x03809188 + .space 0x03809760 - 0x03809188 + + .global _03809760 +_03809760: ;0x03809760 + .space 0x03809764 - 0x03809760 + + .section .text + + arm_func_start CARD_GetRomHeader +CARD_GetRomHeader: ; 0x037FFF20 + ldr r0, _037FFF28 ; =0x027FFA80 + bx lr +_037FFF28: .word 0x027FFA80 + + arm_func_start CARD_SetThreadPriority +CARD_SetThreadPriority: ; 0x037FFF2C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + ldr r6, _037FFF70 ; =cardi_common + bl OS_DisableInterrupts + mov r4, r0 + ldr r5, [r6, #240] ; 0xf0 + str r7, [r6, #240] ; 0xf0 + add r0, r6, #72 ; 0x48 + ldr r1, [r6, #240] ; 0xf0 + bl OS_SetThreadPriority + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_037FFF70: .word cardi_common + + arm_func_start CARD_Enable +CARD_Enable: ; 0x037FFF74 + ldr r1, _037FFF80 ; =_0380912C + str r0, [r1] + bx lr +_037FFF80: .word _0380912C + + arm_func_start CARDi_InitCommon +CARDi_InitCommon: ; 0x037FFF84 + stmfd sp!, {lr} + sub sp, sp, #12 + mvn r1, #2 + ldr r0, _0380001C ; =cardi_common + str r1, [r0, #12] + mov r2, #0 + str r2, [r0, #16] + str r2, [r0, #28] + str r2, [r0] + str r2, [r0, #8] + str r2, [r0, #24] + str r2, [r0, #20] + str r2, [r0, #248] ; 0xf8 + str r2, [r0, #244] ; 0xf4 + mov r1, #4 + str r1, [r0, #240] ; 0xf0 + mov r1, #1024 ; 0x400 + str r1, [sp] + ldr r0, [r0, #240] ; 0xf0 + str r0, [sp, #4] + ldr r0, _03800020 ; =_03809188 + ldr r1, _03800024 ; =CARDi_TaskThread + ldr r3, _03800028 ; =_03809760 + bl OS_CreateThread + ldr r0, _03800020 ; =_03809188 + bl OS_WakeupThreadDirect + mov r0, #11 + ldr r1, _0380002C ; =CARDi_OnFifoRecv + bl PXI_SetFifoRecvCallback + ldr r0, _03800030 ; =0x027FFC40 + ldrh r0, [r0] +_03800000: + cmp r0, #2 + beq _03800010 + mov r0, #1 + bl CARD_Enable +_03800010: + add sp, sp, #12 + ldmia sp!, {lr} + bx lr +_0380001C: .word cardi_common +_03800020: .word _03809188 +_03800024: .word CARDi_TaskThread +_03800028: .word _03809760 +_0380002C: .word CARDi_OnFifoRecv +_03800030: .word 0x027FFC40 diff --git a/arm7/asm/CARD_fifo.s b/arm7/asm/CARD_fifo.s new file mode 100644 index 00000000..7e3cd489 --- /dev/null +++ b/arm7/asm/CARD_fifo.s @@ -0,0 +1,90 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARDi_OnFifoRecv +CARDi_OnFifoRecv: ; 0x03800D2C + stmfd sp!, {lr} + sub sp, sp, #4 + cmp r0, #11 + bne _03800DFC + cmp r2, #0 + beq _03800DFC + ldr r0, _03800E08 ; =cardi_common + ldr r2, [r0, #8] + cmp r2, #0 + streq r1, [r0, #4] + ldr r2, [r0, #4] + cmp r2, #12 + addls pc, pc, r2, lsl #2 + b _03800DC8 + b _03800D98 + b _03800DC8 + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC + b _03800DBC +_03800D98: + ldr r2, [r0, #8] + cmp r2, #0 + beq _03800DC8 + cmp r2, #1 + streq r1, [r0] + ldreq r1, [r0, #252] ; 0xfc + orreq r1, r1, #16 + streq r1, [r0, #252] ; 0xfc + b _03800DC8 +_03800DBC: + ldr r1, [r0, #252] ; 0xfc + orr r1, r1, #16 + str r1, [r0, #252] ; 0xfc +_03800DC8: + ldr r1, [r0, #252] ; 0xfc + ands r1, r1, #16 + ldreq r1, [r0, #8] + addeq r1, r1, #1 + streq r1, [r0, #8] + beq _03800DFC + mov r1, #0 + str r1, [r0, #8] + ldr r1, [r0, #252] ; 0xfc + ands r1, r1, #4 + ldrne r0, [r0, #236] ; 0xec + addeq r0, r0, #72 ; 0x48 + bl OS_WakeupThreadDirect +_03800DFC: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03800E08: .word cardi_common + + arm_func_start FUN_03800E0C +FUN_03800E0C: ; 0x03800E0C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, r1 + mov r5, #14 + mov r4, #0 + b _03800E30 +_03800E28: + mov r0, r6 + bl FUN_037F8CB4 +_03800E30: + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _03800E28 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr diff --git a/arm7/asm/CARD_pullOut.s b/arm7/asm/CARD_pullOut.s new file mode 100644 index 00000000..ed919647 --- /dev/null +++ b/arm7/asm/CARD_pullOut.s @@ -0,0 +1,218 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global _03807668 +_03807668: + .word 0xFFFFFFFF + + .global _0380766C +_0380766C: + .word 0x00000001 + + .section .bss + + .global _038099A0 +_038099A0: ;0x038099A0 + .space 0x038099A4 - 0x038099A0 + + .global _038099A4 +_038099A4: ;0x038099A4 + .space 0x038099A8 - 0x038099A4 + + .global _038099A8 +_038099A8: ;0x038099A8 + .space 0x038099AC - 0x038099A8 + + .section .text + + arm_func_start FUN_03800E54 +FUN_03800E54: ; 0x03800E54 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #0 + bl CTRDG_VibPulseEdgeUpdate + bl SND_BeginSleep + bl WVR_Shutdown + bl OS_Terminate + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start CARD_CheckPullOut_Polling +CARD_CheckPullOut_Polling: ; 0x03800E7C + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _03800F50 ; =_038099A0 + ldr r0, [r0] + cmp r0, #0 + bne _03800F44 + ldr r0, _03800F54 ; =0x027FFC40 + ldrh r0, [r0] + cmp r0, #2 + beq _03800F44 + ldr r1, _03800F58 ; =_03807668 + ldr r3, [r1] + mvn r0, #0 + cmp r3, r0 + ldreq r0, _03800F5C ; =0x027FFC3C + ldreq r0, [r0] + addeq r0, r0, #10 + streq r0, [r1] + beq _03800F44 + ldr r2, _03800F5C ; =0x027FFC3C + ldr r0, [r2] + cmp r0, r3 + bcc _03800F44 + ldr r0, [r2] + add r0, r0, #10 + str r0, [r1] + bl CARD_IsPulledOut + cmp r0, #0 + beq _03800F1C + mov r1, #1 + ldr r0, _03800F50 ; =_038099A0 + str r1, [r0] + bl CARD_GetRomHeader + ldr r0, [r0, #12] + cmp r0, #0 + bne _03800F1C + ldr r0, _03800F60 ; =_0380766C + ldr r0, [r0] + cmp r0, #0 + bne _03800F44 +_03800F1C: + mov r1, #0 + ldr r0, _03800F60 ; =_0380766C + str r1, [r0] + ldr r0, _03800F50 ; =_038099A0 + ldr r0, [r0] + cmp r0, #0 + beq _03800F44 + mov r0, #17 + mov r1, #100 ; 0x64 + bl FUN_03800E0C +_03800F44: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03800F50: .word _038099A0 +_03800F54: .word 0x027FFC40 +_03800F58: .word _03807668 +_03800F5C: .word 0x027FFC3C +_03800F60: .word _0380766C + + arm_func_start CARD_IsCardIreqLo +CARD_IsCardIreqLo: ; 0x03800F64 + mov r2, #1 + mov r0, r2 + ldr r1, _03800F88 ; =0x04000214 + ldr r1, [r1] + ands r1, r1, #1048576 ; 0x100000 + movne r0, #0 + ldrne r1, _03800F8C ; =_038099A8 + strne r2, [r1] + bx lr +_03800F88: .word 0x04000214 +_03800F8C: .word _038099A8 + + arm_func_start CARD_CompareCardID +CARD_CompareCardID: ; 0x03800F90 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _03800FE8 ; =0x027FFC10 + ldrh r0, [r0] + cmp r0, #0 + ldreq r0, _03800FEC ; =0x027FF800 + ldrne r0, _03800FF0 ; =0x027FFC00 + ldr r0, [r0] + str r0, [sp] + bl CARDi_ReadRomID + ldr r1, [sp] + cmp r0, r1 + moveq r0, #1 + movne r0, #0 + cmp r0, #0 + moveq r2, #1 + movne r2, #0 + ldr r1, _03800FF4 ; =_038099A8 + str r2, [r1] + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03800FE8: .word 0x027FFC10 +_03800FEC: .word 0x027FF800 +_03800FF0: .word 0x027FFC00 +_03800FF4: .word _038099A8 + + arm_func_start CARD_IsPulledOut +CARD_IsPulledOut: ; 0x03800FF8 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _03801040 ; =_038099A8 + ldr r0, [r0] + cmp r0, #0 + bne _0380102C + ldr r0, _03801044 ; =0x027FFC1F + ldrb r0, [r0] + ands r0, r0, #1 + beq _03801028 + bl CARD_CompareCardID + b _0380102C +_03801028: + bl CARD_IsCardIreqLo +_0380102C: + ldr r0, _03801040 ; =_038099A8 + ldr r0, [r0] + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03801040: .word _038099A8 +_03801044: .word 0x027FFC1F + + arm_func_start FUN_03801048 +FUN_03801048: ; 0x03801048 + stmfd sp!, {lr} + sub sp, sp, #4 + and r0, r1, #63 ; 0x3f + cmp r0, #1 + bne _03801064 + bl FUN_03800E54 + b _03801068 +_03801064: + bl OS_Terminate +_03801068: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start CARD_InitPulledOutCallback +CARD_InitPulledOutCallback: ; 0x03801074 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r0, _038010CC ; =_038099A4 + ldr r1, [r0] + cmp r1, #0 + bne _038010C0 + mov r1, #1 + str r1, [r0] + bl PXI_Init + mov r5, #14 + mov r4, #0 +_038010A0: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady + cmp r0, #0 + beq _038010A0 + mov r0, #14 + ldr r1, _038010D0 ; =FUN_03801048 + bl PXI_SetFifoRecvCallback +_038010C0: + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_038010CC: .word _038099A4 +_038010D0: .word FUN_03801048 + .balign 2, 0 ; Don't pad with nop diff --git a/arm7/asm/CARD_rom.s b/arm7/asm/CARD_rom.s new file mode 100644 index 00000000..51725ca1 --- /dev/null +++ b/arm7/asm/CARD_rom.s @@ -0,0 +1,194 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global cardi_rom_header_addr +cardi_rom_header_addr: + .word 0x027FFE00 + + .section .bss + + .global cardi_rom_base +cardi_rom_base: ;0x03809774 + .space 0x03809780 - 0x03809774 + + .global rom_stat +rom_stat: ;0x03809780 + .space 0x038099A0 - 0x03809780 + + .section .text + + arm_func_start CARDi_GetRomAccessor +CARDi_GetRomAccessor: ; 0x038008C4 + ldr r0, _038008CC ; =_03800A7C + bx lr +_038008CC: .word _03800A7C + + arm_func_start CARD_Init +CARD_Init: ; 0x038008D0 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r2, _03800940 ; =cardi_common + ldr r0, [r2, #252] ; 0xfc + cmp r0, #0 + bne _03800934 + mov r0, #1 + str r0, [r2, #252] ; 0xfc + mov r1, #0 + str r1, [r2, #40] ; 0x28 + ldr r0, [r2, #40] ; 0x28 + str r0, [r2, #36] ; 0x24 + ldr r0, [r2, #36] ; 0x24 + str r0, [r2, #32] + mvn r0, #0 + str r0, [r2, #44] ; 0x2c + str r1, [r2, #60] ; 0x3c + str r1, [r2, #64] ; 0x40 + ldr r0, _03800944 ; =cardi_rom_base + str r1, [r0] + bl CARDi_InitCommon + bl CARDi_GetRomAccessor + ldr r1, _03800948 ; =rom_stat + str r0, [r1] + bl CARD_InitPulledOutCallback +_03800934: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03800940: .word cardi_common +_03800944: .word cardi_rom_base +_03800948: .word rom_stat + + arm_func_start CARDi_ReadRomID +CARDi_ReadRomID: ; 0x0380094C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r5, _03800A10 ; =cardi_common + bl OS_DisableInterrupts + mov r4, r0 + add r6, r5, #244 ; 0xf4 + b _0380096C +_03800964: + mov r0, r6 + bl OS_SleepThread +_0380096C: + ldr r0, [r5, #252] ; 0xfc + ands r0, r0, #4 + bne _03800964 + ldr r0, [r5, #252] ; 0xfc + orr r0, r0, #4 + str r0, [r5, #252] ; 0xfc + mov r0, #0 + str r0, [r5, #60] ; 0x3c + str r0, [r5, #64] ; 0x40 + mov r0, r4 + bl OS_RestoreInterrupts + bl CARDi_ReadRomIDCore + mov r8, r0 + ldr r7, _03800A10 ; =cardi_common + mov r1, #0 + ldr r0, [r7] + str r1, [r0] + ldr r6, [r7, #60] ; 0x3c + ldr r5, [r7, #64] ; 0x40 + bl OS_DisableInterrupts + mov r4, r0 + ldr r0, [r7, #252] ; 0xfc + bic r0, r0, #76 ; 0x4c + str r0, [r7, #252] ; 0xfc + add r0, r7, #244 ; 0xf4 + bl OS_WakeupThread + ldr r0, [r7, #252] ; 0xfc + ands r0, r0, #16 + beq _038009E8 + add r0, r7, #72 ; 0x48 + bl OS_WakeupThreadDirect +_038009E8: + mov r0, r4 + bl OS_RestoreInterrupts + cmp r6, #0 + beq _03800A04 + mov r0, r5 + mov lr, pc + bx r6 +_03800A04: + mov r0, r8 + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr +_03800A10: .word cardi_common + + arm_func_start CARDi_ReadRomIDCore +CARDi_ReadRomIDCore: ; 0x03800A14 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #-1207959552 ; 0xb8000000 + mov r1, #0 + bl CARDi_SetRomOp + ldr r0, _03800A70 ; =cardi_rom_header_addr + ldr r0, [r0] + ldr r0, [r0, #96] ; 0x60 + bic r0, r0, #117440512 ; 0x7000000 + orr r1, r0, #-1493172224 ; 0xa7000000 + mov r0, #8192 ; 0x2000 + rsb r0, r0, #0 + and r0, r1, r0 + ldr r1, _03800A74 ; =0x040001A4 + str r0, [r1] +_03800A50: + ldr r0, [r1] + ands r0, r0, #8388608 ; 0x800000 + beq _03800A50 + ldr r0, _03800A78 ; =0x04100010 + ldr r0, [r0] + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03800A70: .word cardi_rom_header_addr +_03800A74: .word 0x040001A4 +_03800A78: .word 0x04100010 +_03800A7C: + bx lr + + arm_func_start CARDi_SetRomOp +CARDi_SetRomOp: ; 0x03800A80 + ldr r3, _03800AF8 ; =0x040001A4 +_03800A84: + ldr r2, [r3] + ands r2, r2, #-2147483648 ; 0x80000000 + bne _03800A84 + mov r3, #192 ; 0xc0 + ldr r2, _03800AFC ; =0x040001A1 + strb r3, [r2] + mov r3, r0, lsr #24 + ldr r2, _03800B00 ; =0x040001A8 + strb r3, [r2] + mov r3, r0, lsr #16 + ldr r2, _03800B04 ; =0x040001A9 + strb r3, [r2] + mov r3, r0, lsr #8 + ldr r2, _03800B08 ; =0x040001AA + strb r3, [r2] + ldr r2, _03800B0C ; =0x040001AB + strb r0, [r2] + mov r2, r1, lsr #24 + ldr r0, _03800B10 ; =0x040001AC + strb r2, [r0] + mov r2, r1, lsr #16 + ldr r0, _03800B14 ; =0x040001AD + strb r2, [r0] + mov r2, r1, lsr #8 + ldr r0, _03800B18 ; =0x040001AE + strb r2, [r0] + ldr r0, _03800B1C ; =0x040001AF + strb r1, [r0] + bx lr +_03800AF8: .word 0x040001A4 +_03800AFC: .word 0x040001A1 +_03800B00: .word 0x040001A8 +_03800B04: .word 0x040001A9 +_03800B08: .word 0x040001AA +_03800B0C: .word 0x040001AB +_03800B10: .word 0x040001AC +_03800B14: .word 0x040001AD +_03800B18: .word 0x040001AE +_03800B1C: .word 0x040001AF diff --git a/arm7/asm/CARD_spi.s b/arm7/asm/CARD_spi.s new file mode 100644 index 00000000..bf82b91d --- /dev/null +++ b/arm7/asm/CARD_spi.s @@ -0,0 +1,644 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global _03809764 +_03809764: ;0x03809764 + .space 0x03809774 - 0x03809764 + + .section .text + + arm_func_start CARDi_SetWriteProtectCore +CARDi_SetWriteProtectCore: ; 0x03800034 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + sub sp, sp, #8 + mov r4, r0 + bl CARDi_WaitPrevCommand + cmp r0, #0 + beq _038000BC + ldr r0, _038000C8 ; =cardi_common + ldr sl, [r0] + mov r9, #10 + mov r0, #1 + strb r0, [sp] + strb r4, [sp, #1] + mov r8, #2 + add r7, sp, #0 + mov r6, #0 + ldr r5, _038000CC ; =CARDi_CommWriteCore + mov r4, #5 +_03800078: + bl CARDi_WriteEnable + mov r0, r8 + bl CARDi_CommandBegin + mov r0, r7 + mov r1, r6 + mov r2, r8 + mov r3, r5 + bl CARDi_CommArray + mov r0, r4 + mov r1, r6 + bl CARDi_CommandEnd + ldr r0, [sl] + cmp r0, #4 + bne _038000BC + sub r9, r9, #1 + cmp r9, #0 + bgt _03800078 +_038000BC: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + bx lr +_038000C8: .word cardi_common +_038000CC: .word CARDi_CommWriteCore + + arm_func_start CARDi_EraseChipCore +CARDi_EraseChipCore: ; 0x038000D0 + stmdb sp!, {r4, lr} + bl CARDi_WaitPrevCommand + cmp r0, #0 + beq _03800114 + ldr r0, _0380011C ; =cardi_common + ldr r4, [r0] + bl CARDi_WriteEnable + mov r0, #1 + bl CARDi_CommandBegin + ldr r0, _03800120 ; =_038072BC + mov r1, #0 + mov r2, #1 + ldr r3, _03800124 ; =CARDi_CommWriteCore + bl CARDi_CommArray + ldr r0, [r4, #52] ; 0x34 + ldr r1, [r4, #56] ; 0x38 + bl CARDi_CommandEnd +_03800114: + ldmia sp!, {r4, lr} + bx lr +_0380011C: .word cardi_common +_03800120: .word _038072BC +_03800124: .word CARDi_CommWriteCore + + arm_func_start CARDi_EraseBackupSectorCore +CARDi_EraseBackupSectorCore: ; 0x03800128 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r0 + mov r6, r1 + ldr r0, _038001B8 ; =cardi_common + ldr r5, [r0] + ldr r4, [r5, #28] + sub r1, r4, #1 + orr r0, r7, r6 + ands r0, r1, r0 + movne r0, #2 + strne r0, [r5] + bne _038001B0 + bl CARDi_WaitPrevCommand + cmp r0, #0 + beq _038001B0 + mov r8, #216 ; 0xd8 + b _038001A8 +_0380016C: + bl CARDi_WriteEnable + ldr r0, [r5, #36] ; 0x24 + add r0, r0, #1 + bl CARDi_CommandBegin + mov r0, r7 + mov r1, r8 + bl CARDi_SendSpiAddressingCommand + ldr r0, [r5, #60] ; 0x3c + ldr r1, [r5, #64] ; 0x40 + bl CARDi_CommandEnd + ldr r0, [r5] + cmp r0, #0 + bne _038001B0 + add r7, r7, r4 + sub r6, r6, r4 +_038001A8: + cmp r6, #0 + bne _0380016C +_038001B0: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr +_038001B8: .word cardi_common + + arm_func_start CARDi_VerifyBackupCore +CARDi_VerifyBackupCore: ; 0x038001BC + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl CARDi_WaitPrevCommand + cmp r0, #0 + beq _0380024C + ldr r0, _03800258 ; =cardi_common + ldr r4, [r0] + mov r1, #1 + ldr r0, _0380025C ; =_03809764 + str r1, [r0, #12] + ldr r0, [r4, #36] ; 0x24 + add r0, r0, #1 + add r0, r0, r5 + bl CARDi_CommandBegin + mov r0, r7 + mov r1, #3 + bl CARDi_SendSpiAddressingCommand + mov r0, r6 + mov r1, #0 + mov r2, r5 + ldr r3, _03800260 ; =CARDi_CommVerifyCore + bl CARDi_CommArray + mov r0, #0 + mov r1, r0 + bl CARDi_CommandEnd + ldr r0, [r4] + cmp r0, #0 + bne _0380024C + ldr r0, _0380025C ; =_03809764 + ldr r0, [r0, #12] + cmp r0, #0 + moveq r0, #1 + streq r0, [r4] +_0380024C: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_03800258: .word cardi_common +_0380025C: .word _03809764 +_03800260: .word CARDi_CommVerifyCore + + arm_func_start CARDi_WriteBackupCore +CARDi_WriteBackupCore: ; 0x03800264 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + mov sl, r0 + mov r9, r1 + mov r8, r2 + bl CARDi_WaitPrevCommand + cmp r0, #0 + beq _03800314 + ldr r0, _03800320 ; =cardi_common + ldr r7, [r0] + ldr r6, [r7, #32] + sub r4, r6, #1 + mov fp, #10 + mov r0, #0 + str r0, [sp] + b _0380030C +_038002A4: + and r0, sl, r4 + sub r5, r6, r0 + cmp r5, r8 + movhi r5, r8 + bl CARDi_WriteEnable + ldr r0, [r7, #36] ; 0x24 + add r0, r0, #1 + add r0, r0, r5 + bl CARDi_CommandBegin + mov r0, sl + mov r1, fp + bl CARDi_SendSpiAddressingCommand + mov r0, r9 + ldr r1, [sp] + mov r2, r5 + ldr r3, _03800324 ; =CARDi_CommWriteCore + bl CARDi_CommArray + ldr r0, [r7, #44] ; 0x2c + ldr r1, [r7, #48] ; 0x30 + bl CARDi_CommandEnd + ldr r0, [r7] + cmp r0, #0 + bne _03800314 + add r9, r9, r5 + add sl, sl, r5 + sub r8, r8, r5 +_0380030C: + cmp r8, #0 + bne _038002A4 +_03800314: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_03800320: .word cardi_common +_03800324: .word CARDi_CommWriteCore + + arm_func_start CARDi_ProgramBackupCore +CARDi_ProgramBackupCore: ; 0x03800328 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + mov sl, r0 + mov r9, r1 + mov r8, r2 + bl CARDi_WaitPrevCommand + cmp r0, #0 + beq _038003D8 + ldr r0, _038003E4 ; =cardi_common + ldr r7, [r0] + ldr r6, [r7, #32] + sub r4, r6, #1 + mov r0, #2 + str r0, [sp] + mov fp, #0 + b _038003D0 +_03800368: + and r0, sl, r4 + sub r5, r6, r0 + cmp r5, r8 + movhi r5, r8 + bl CARDi_WriteEnable + ldr r0, [r7, #36] ; 0x24 + add r0, r0, #1 + add r0, r0, r5 + bl CARDi_CommandBegin + mov r0, sl + ldr r1, [sp] + bl CARDi_SendSpiAddressingCommand + mov r0, r9 + mov r1, fp + mov r2, r5 + ldr r3, _038003E8 ; =CARDi_CommWriteCore + bl CARDi_CommArray + ldr r0, [r7, #40] ; 0x28 + mov r1, fp + bl CARDi_CommandEnd + ldr r0, [r7] + cmp r0, #0 + bne _038003D8 + add r9, r9, r5 + add sl, sl, r5 + sub r8, r8, r5 +_038003D0: + cmp r8, #0 + bne _03800368 +_038003D8: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_038003E4: .word cardi_common +_038003E8: .word CARDi_CommWriteCore + + arm_func_start CARDi_ReadBackupCore +CARDi_ReadBackupCore: ; 0x038003EC + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl CARDi_WaitPrevCommand + cmp r0, #0 + beq _0380044C + ldr r0, _03800454 ; =cardi_common + ldr r0, [r0] + ldr r0, [r0, #36] ; 0x24 + add r0, r0, #1 + add r0, r0, r4 + bl CARDi_CommandBegin + mov r0, r6 + mov r1, #3 + bl CARDi_SendSpiAddressingCommand + mov r0, #0 + mov r1, r5 + mov r2, r4 + ldr r3, _03800458 ; =CARDi_CommReadCore + bl CARDi_CommArray + mov r0, #0 + mov r1, r0 + bl CARDi_CommandEnd +_0380044C: + ldmia sp!, {r4, r5, r6, lr} + bx lr +_03800454: .word cardi_common +_03800458: .word CARDi_CommReadCore + + arm_func_start CARDi_InitStatusRegister +CARDi_InitStatusRegister: ; 0x0380045C + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr r0, _038004F8 ; =cardi_common + ldr r0, [r0] + ldrb r4, [r0, #72] ; 0x48 + cmp r4, #255 ; 0xff + beq _038004EC + ldr r0, _038004FC ; =_03809760 + ldr r0, [r0] + cmp r0, #0 + bne _038004EC + mov r0, #5 + strb r0, [sp] + mov r0, #2 + bl CARDi_CommandBegin + add r0, sp, #0 + mov r1, #0 + mov r2, #1 + ldr r3, _03800500 ; =CARDi_CommWriteCore + bl CARDi_CommArray + mov r0, #0 + add r1, sp, #1 + mov r2, #1 + ldr r3, _03800504 ; =CARDi_CommReadCore + bl CARDi_CommArray + mov r0, #0 + mov r1, r0 + bl CARDi_CommandEnd + ldrb r0, [sp, #1] + cmp r0, r4 + beq _038004E0 + mov r0, r4 + bl CARDi_SetWriteProtectCore +_038004E0: + mov r1, #1 + ldr r0, _038004FC ; =_03809760 + str r1, [r0] +_038004EC: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_038004F8: .word cardi_common +_038004FC: .word _03809760 +_03800500: .word CARDi_CommWriteCore +_03800504: .word CARDi_CommReadCore + + arm_func_start CARDi_SendSpiAddressingCommand +CARDi_SendSpiAddressingCommand: ; 0x03800508 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r2, _038005AC ; =cardi_common + ldr r2, [r2] + ldr r2, [r2, #36] ; 0x24 + cmp r2, #1 + beq _03800538 + cmp r2, #2 + beq _03800554 + cmp r2, #3 + beq _0380056C + b _0380058C +_03800538: + and r3, r0, #255 ; 0xff + mov r0, r0, lsr #5 + and r0, r0, #8 + orr r0, r1, r0 + orr r0, r0, r3, lsl #8 + str r0, [sp] + b _0380058C +_03800554: + and r3, r0, #255 ; 0xff + and r0, r0, #65280 ; 0xff00 + orr r0, r1, r0 + orr r0, r0, r3, lsl #16 + str r0, [sp] + b _0380058C +_0380056C: + and ip, r0, #255 ; 0xff + and r3, r0, #65280 ; 0xff00 + mov r0, r0, lsr #8 + and r0, r0, #65280 ; 0xff00 + orr r0, r1, r0 + orr r0, r0, r3, lsl #8 + orr r0, r0, ip, lsl #24 + str r0, [sp] +_0380058C: + add r0, sp, #0 + mov r1, #0 + add r2, r2, #1 + ldr r3, _038005B0 ; =CARDi_CommWriteCore + bl CARDi_CommArray + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038005AC: .word cardi_common +_038005B0: .word CARDi_CommWriteCore + + arm_func_start CARDi_WriteEnable +CARDi_WriteEnable: ; 0x038005B4 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #1 + bl CARDi_CommandBegin + ldr r0, _038005F0 ; =_038072C0 + mov r1, #0 + mov r2, #1 + ldr r3, _038005F4 ; =CARDi_CommWriteCore + bl CARDi_CommArray + mov r0, #0 + mov r1, r0 + bl CARDi_CommandEnd + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038005F0: .word _038072C0 +_038005F4: .word CARDi_CommWriteCore + + arm_func_start CARDi_CommVerifyCore +CARDi_CommVerifyCore: ; 0x038005F8 + mov r2, #0 + ldr r1, _03800658 ; =0x040001A2 + strh r2, [r1] + ldr r2, _0380065C ; =0x040001A0 +_03800608: + ldrh r1, [r2] + ands r1, r1, #128 ; 0x80 + bne _03800608 + ldr r1, _03800658 ; =0x040001A2 + ldrh r1, [r1] + and r2, r1, #255 ; 0xff + ldr r1, [r0, #4] + ldrb r1, [r1] + cmp r2, r1 + beq _03800648 + mov r1, #0 + str r1, [r0, #12] + ldr r1, [r0] + cmp r1, #1 + movhi r1, #1 + strhi r1, [r0] +_03800648: + ldr r1, [r0, #4] + add r1, r1, #1 + str r1, [r0, #4] + bx lr +_03800658: .word 0x040001A2 +_0380065C: .word 0x040001A0 + + arm_func_start CARDi_CommWriteCore +CARDi_CommWriteCore: ; 0x03800660 + sub sp, sp, #8 + ldr r1, [r0, #4] + ldrb r2, [r1] + ldr r1, _038006A4 ; =0x040001A2 + strh r2, [r1] + ldr r1, [r0, #4] + add r1, r1, #1 + str r1, [r0, #4] + ldr r1, _038006A8 ; =0x040001A0 +_03800684: + ldrh r0, [r1] + ands r0, r0, #128 ; 0x80 + bne _03800684 + ldr r0, _038006A4 ; =0x040001A2 + ldrh r0, [r0] + strh r0, [sp] + add sp, sp, #8 + bx lr +_038006A4: .word 0x040001A2 +_038006A8: .word 0x040001A0 + + arm_func_start CARDi_CommReadCore +CARDi_CommReadCore: ; 0x038006AC + mov r2, #0 + ldr r1, _038006E8 ; =0x040001A2 + strh r2, [r1] + ldr r2, _038006EC ; =0x040001A0 +_038006BC: + ldrh r1, [r2] + ands r1, r1, #128 ; 0x80 + bne _038006BC + ldr r1, _038006E8 ; =0x040001A2 + ldrh r2, [r1] + ldr r1, [r0, #8] + strb r2, [r1] + ldr r1, [r0, #8] + add r1, r1, #1 + str r1, [r0, #8] + bx lr +_038006E8: .word 0x040001A2 +_038006EC: .word 0x040001A0 + + arm_func_start CARDi_CommArray +CARDi_CommArray: ; 0x038006F0 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r2 + mov r6, r3 + ldr r5, _03800774 ; =_03809764 + str r0, [r5, #4] + str r1, [r5, #8] + ldr r0, _03800778 ; =0x0000A040 + ldr r4, _0380077C ; =0x040001A0 + strh r0, [r4] + mov r8, #40960 ; 0xa000 + b _03800750 +_0380071C: + ldr r0, [r5] + sub r0, r0, #1 + str r0, [r5] + ldr r0, [r5] + cmp r0, #0 + streqh r8, [r4] +_03800734: + ldrh r0, [r4] + ands r0, r0, #128 ; 0x80 + bne _03800734 + mov r0, r5 + mov lr, pc + bx r6 + sub r7, r7, #1 +_03800750: + cmp r7, #0 + bne _0380071C + ldr r0, [r5] + cmp r0, #0 + moveq r1, #0 + ldreq r0, _0380077C ; =0x040001A0 + streqh r1, [r0] + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr +_03800774: .word _03809764 +_03800778: .word 0x0000A040 +_0380077C: .word 0x040001A0 + + arm_func_start CARDi_WaitPrevCommand +CARDi_WaitPrevCommand: ; 0x03800780 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #0 + mov r1, #50 ; 0x32 + bl CARDi_CommandEnd + ldr r0, _038007C0 ; =cardi_common + ldr r1, [r0] + ldr r0, [r1] + cmp r0, #4 + moveq r0, #6 + streq r0, [r1] + moveq r0, #0 + movne r0, #1 + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038007C0: .word cardi_common + + arm_func_start CARDi_CommandCheckBusy +CARDi_CommandCheckBusy: ; 0x038007C4 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #2 + bl CARDi_CommandBegin + ldr r0, _03800824 ; =_038072C4 + mov r1, #0 + mov r2, #1 + ldr r3, _03800828 ; =CARDi_CommWriteCore + bl CARDi_CommArray + mov r0, #0 + add r1, sp, #0 + mov r2, #1 + ldr r3, _0380082C ; =CARDi_CommReadCore + bl CARDi_CommArray + mov r0, #0 + mov r1, r0 + bl CARDi_CommandEnd + ldrb r0, [sp] + ands r0, r0, #1 + moveq r0, #1 + movne r0, #0 + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03800824: .word _038072C4 +_03800828: .word CARDi_CommWriteCore +_0380082C: .word CARDi_CommReadCore + + arm_func_start CARDi_CommandEnd +CARDi_CommandEnd: ; 0x03800830 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + mov r4, r1 + adds r1, r5, r4 + beq _038008A8 + cmp r5, #0 + beq _03800850 + bl OS_Sleep +_03800850: + cmp r4, #0 + beq _03800890 + sub r6, r4, r5 + mov r4, #5 + b _0380087C +_03800864: + cmp r6, #5 + movlt r5, r6 + movge r5, r4 + mov r0, r5 + bl OS_Sleep + sub r6, r6, r5 +_0380087C: + bl CARDi_CommandCheckBusy + cmp r0, #0 + bne _03800890 + cmp r6, #0 + bgt _03800864 +_03800890: + bl CARDi_CommandCheckBusy + cmp r0, #0 + moveq r1, #4 + ldreq r0, _038008B0 ; =cardi_common + ldreq r0, [r0] + streq r1, [r0] +_038008A8: + ldmia sp!, {r4, r5, r6, lr} + bx lr +_038008B0: .word cardi_common + + arm_func_start CARDi_CommandBegin +CARDi_CommandBegin: ; 0x038008B4 + ldr r1, _038008C0 ; =_03809764 + str r0, [r1] + bx lr +_038008C0: .word _03809764 diff --git a/arm7/asm/CARD_thread.s b/arm7/asm/CARD_thread.s new file mode 100644 index 00000000..fba1cf76 --- /dev/null +++ b/arm7/asm/CARD_thread.s @@ -0,0 +1,156 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARDi_TaskThread +CARDi_TaskThread: ; 0x03800B20 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + ldr r9, _03800D28 ; =cardi_common + add r5, r9, #72 ; 0x48 + mov r8, #0 + add r7, r9, #252 ; 0xfc + mov r6, #1 + mov r4, #3 + mov fp, #11 +_03800B44: + mov sl, r8 + bl OS_DisableInterrupts + str r0, [sp] +_03800B50: + ldr r0, [r9, #252] ; 0xfc + ands r0, r0, #4 + bne _03800B88 + ldr r0, [r9, #252] ; 0xfc + ands r0, r0, #16 + beq _03800B94 + ldr r0, [r7] + orr r0, r0, #4 + str r0, [r7] + ldr r0, [r7] + bic r0, r0, #16 + str r0, [r7] + mov sl, r6 + b _03800BA4 +_03800B88: + ldr r0, [r9, #252] ; 0xfc + ands r0, r0, #8 + bne _03800BA4 +_03800B94: + str r5, [r9, #236] ; 0xec + mov r0, r8 + bl OS_SleepThread + b _03800B50 +_03800BA4: + ldr r0, [sp] + bl OS_RestoreInterrupts + cmp sl, #0 + beq _03800D14 + ldr r0, [r9] + str r8, [r0] + ldr r2, [r9] + ldr r1, [r2, #76] ; 0x4c + ldr r0, [r9, #4] + mov r0, r6, lsl r0 + ands r0, r1, r0 + streq r4, [r2] + ldr r0, [r9, #4] + cmp r0, #12 + addls pc, pc, r0, lsl #2 + b _03800CB8 + b _03800CC0 + b _03800CC0 + b _03800C18 + b _03800C20 + b _03800C30 + b _03800CB8 + b _03800C3C + b _03800C54 + b _03800C6C + b _03800C84 + b _03800CB8 + b _03800C9C + b _03800CB0 +_03800C18: + bl CARDi_InitStatusRegister + b _03800CC0 +_03800C20: + bl CARDi_ReadRomIDCore + ldr r1, [r9] + str r0, [r1, #8] + b _03800CC0 +_03800C30: + ldr r0, [r9] + str r4, [r0] + b _03800CC0 +_03800C3C: + ldr r2, [r9] + ldr r0, [r2, #12] + ldr r1, [r2, #16] + ldr r2, [r2, #20] + bl CARDi_ReadBackupCore + b _03800CC0 +_03800C54: + ldr r2, [r9] + ldr r0, [r2, #16] + ldr r1, [r2, #12] + ldr r2, [r2, #20] + bl CARDi_WriteBackupCore + b _03800CC0 +_03800C6C: + ldr r2, [r9] + ldr r0, [r2, #16] + ldr r1, [r2, #12] + ldr r2, [r2, #20] + bl CARDi_ProgramBackupCore + b _03800CC0 +_03800C84: + ldr r2, [r9] + ldr r0, [r2, #16] + ldr r1, [r2, #12] + ldr r2, [r2, #20] + bl CARDi_VerifyBackupCore + b _03800CC0 +_03800C9C: + ldr r1, [r9] + ldr r0, [r1, #16] + ldr r1, [r1, #20] + bl CARDi_EraseBackupSectorCore + b _03800CC0 +_03800CB0: + bl CARDi_EraseChipCore + b _03800CC0 +_03800CB8: + ldr r0, [r9] + str r4, [r0] +_03800CC0: + mov r0, fp + mov r1, r6 + mov r2, r6 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _03800CC0 + bl OS_DisableInterrupts + mov sl, r0 + ldr r0, [r9, #252] ; 0xfc + bic r0, r0, #76 ; 0x4c + str r0, [r9, #252] ; 0xfc + add r0, r9, #244 ; 0xf4 + bl OS_WakeupThread + ldr r0, [r9, #252] ; 0xfc + ands r0, r0, #16 + beq _03800D08 + mov r0, r5 + bl OS_WakeupThreadDirect +_03800D08: + mov r0, sl + bl OS_RestoreInterrupts + b _03800B44 +_03800D14: + mov r0, r9 + ldr r1, [r9, #68] ; 0x44 + mov lr, pc + bx r1 + b _03800B44 +_03800D28: .word cardi_common diff --git a/arm7/asm/FS_file.s b/arm7/asm/FS_file.s new file mode 100644 index 00000000..28f14661 --- /dev/null +++ b/arm7/asm/FS_file.s @@ -0,0 +1,10 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start FS_Init +FS_Init: ; 0x037FFF14 + ldr ip, _037FFF1C ; =CARD_Init + bx ip +_037FFF1C: .word CARD_Init diff --git a/arm7/asm/OS_irqHandler.s b/arm7/asm/OS_irqHandler.s index ed96fdae..6c3ffc5a 100644 --- a/arm7/asm/OS_irqHandler.s +++ b/arm7/asm/OS_irqHandler.s @@ -1,7 +1,45 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .data + + .global _038075E4 +_038075E4: + .word 0x00090008 + .word 0x000B000A + .word 0x00040003 + .word 0x00060005 + .word 0x00000000 + + .global OS_IRQTable +OS_IRQTable: + .word OSi_IrqVBlank + .word OS_IrqDummy + .word OS_IrqDummy + .word OSi_IrqTimer0 + .word OSi_IrqTimer1 + .word OSi_IrqTimer2 + .word OSi_IrqTimer3 + .word OS_IrqDummy + .word OSi_IrqDma0 + .word OSi_IrqDma1 + .word OSi_IrqDma2 + .word OSi_IrqDma3 + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + .word OS_IrqDummy + + .section .text arm_func_start OS_IrqHandler OS_IrqHandler: ; 0x037F853C diff --git a/arm7/asm/SND.s b/arm7/asm/SND.s index 43e137e1..8bab9030 100644 --- a/arm7/asm/SND.s +++ b/arm7/asm/SND.s @@ -3,6 +3,12 @@ .include "asm/macros.inc" .include "global.inc" + .section .data + + .global sMasterPan +sMasterPan: + .word 0xFFFFFFFF + .section .bss .global sSurroundDecay diff --git a/arm7/asm/SND_util.s b/arm7/asm/SND_util.s index 256f5f41..4d136781 100644 --- a/arm7/asm/SND_util.s +++ b/arm7/asm/SND_util.s @@ -1,7 +1,13 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .data + + .global _03807660 +_03807660: + .word 0x12345678 + + .section .text arm_func_start SND_CalcRandom SND_CalcRandom: ; 0x037FC058 diff --git a/arm7/asm/dtcm.s b/arm7/asm/dtcm.s deleted file mode 100644 index 454742e5..00000000 --- a/arm7/asm/dtcm.s +++ /dev/null @@ -1,1322 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .text - arm_func_start FS_Init -FS_Init: ; 0x037FFF14 - ldr ip, _037FFF1C ; =CARD_Init - bx ip -_037FFF1C: .word CARD_Init - - arm_func_start CARD_GetRomHeader -CARD_GetRomHeader: ; 0x037FFF20 - ldr r0, _037FFF28 ; =0x027FFA80 - bx lr -_037FFF28: .word 0x027FFA80 - - arm_func_start CARD_SetThreadPriority -CARD_SetThreadPriority: ; 0x037FFF2C - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r0 - ldr r6, _037FFF70 ; =cardi_common - bl OS_DisableInterrupts - mov r4, r0 - ldr r5, [r6, #240] ; 0xf0 - str r7, [r6, #240] ; 0xf0 - add r0, r6, #72 ; 0x48 - ldr r1, [r6, #240] ; 0xf0 - bl OS_SetThreadPriority - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r5 - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_037FFF70: .word cardi_common - - arm_func_start CARD_Enable -CARD_Enable: ; 0x037FFF74 - ldr r1, _037FFF80 ; =_0380912C - str r0, [r1] - bx lr -_037FFF80: .word _0380912C - - arm_func_start CARDi_InitCommon -CARDi_InitCommon: ; 0x037FFF84 - stmfd sp!, {lr} - sub sp, sp, #12 - mvn r1, #2 - ldr r0, _0380001C ; =cardi_common - str r1, [r0, #12] - mov r2, #0 - str r2, [r0, #16] - str r2, [r0, #28] - str r2, [r0] - str r2, [r0, #8] - str r2, [r0, #24] - str r2, [r0, #20] - str r2, [r0, #248] ; 0xf8 - str r2, [r0, #244] ; 0xf4 - mov r1, #4 - str r1, [r0, #240] ; 0xf0 - mov r1, #1024 ; 0x400 - str r1, [sp] - ldr r0, [r0, #240] ; 0xf0 - str r0, [sp, #4] - ldr r0, _03800020 ; =_03809188 - ldr r1, _03800024 ; =CARDi_TaskThread - ldr r3, _03800028 ; =_03809760 - bl OS_CreateThread - ldr r0, _03800020 ; =_03809188 - bl OS_WakeupThreadDirect - mov r0, #11 - ldr r1, _0380002C ; =CARDi_OnFifoRecv - bl PXI_SetFifoRecvCallback - ldr r0, _03800030 ; =0x027FFC40 - ldrh r0, [r0] -_03800000: - cmp r0, #2 - beq _03800010 - mov r0, #1 - bl CARD_Enable -_03800010: - add sp, sp, #12 - ldmia sp!, {lr} - bx lr -_0380001C: .word cardi_common -_03800020: .word _03809188 -_03800024: .word CARDi_TaskThread -_03800028: .word _03809760 -_0380002C: .word CARDi_OnFifoRecv -_03800030: .word 0x027FFC40 - - arm_func_start CARDi_SetWriteProtectCore -CARDi_SetWriteProtectCore: ; 0x03800034 - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - sub sp, sp, #8 - mov r4, r0 - bl FUN_03800780 - cmp r0, #0 - beq _038000BC - ldr r0, _038000C8 ; =cardi_common - ldr sl, [r0] - mov r9, #10 - mov r0, #1 - strb r0, [sp] - strb r4, [sp, #1] - mov r8, #2 - add r7, sp, #0 - mov r6, #0 - ldr r5, _038000CC ; =_03800660 - mov r4, #5 -_03800078: - bl FUN_038005B4 - mov r0, r8 - bl FUN_038008B4 - mov r0, r7 - mov r1, r6 - mov r2, r8 - mov r3, r5 - bl FUN_038006F0 - mov r0, r4 - mov r1, r6 - bl FUN_03800830 - ldr r0, [sl] - cmp r0, #4 - bne _038000BC - sub r9, r9, #1 - cmp r9, #0 - bgt _03800078 -_038000BC: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - bx lr -_038000C8: .word cardi_common -_038000CC: .word _03800660 - - arm_func_start CARDi_EraseChipCore -CARDi_EraseChipCore: ; 0x038000D0 - stmdb sp!, {r4, lr} - bl FUN_03800780 - cmp r0, #0 - beq _03800114 - ldr r0, _0380011C ; =cardi_common - ldr r4, [r0] - bl FUN_038005B4 - mov r0, #1 - bl FUN_038008B4 - ldr r0, _03800120 ; =_038072BC - mov r1, #0 - mov r2, #1 - ldr r3, _03800124 ; =_03800660 - bl FUN_038006F0 - ldr r0, [r4, #52] ; 0x34 - ldr r1, [r4, #56] ; 0x38 - bl FUN_03800830 -_03800114: - ldmia sp!, {r4, lr} - bx lr -_0380011C: .word cardi_common -_03800120: .word _038072BC -_03800124: .word _03800660 - - arm_func_start CARDi_EraseBackupSectorCore -CARDi_EraseBackupSectorCore: ; 0x03800128 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r0 - mov r6, r1 - ldr r0, _038001B8 ; =cardi_common - ldr r5, [r0] - ldr r4, [r5, #28] - sub r1, r4, #1 - orr r0, r7, r6 - ands r0, r1, r0 - movne r0, #2 - strne r0, [r5] - bne _038001B0 - bl FUN_03800780 - cmp r0, #0 - beq _038001B0 - mov r8, #216 ; 0xd8 - b _038001A8 -_0380016C: - bl FUN_038005B4 - ldr r0, [r5, #36] ; 0x24 - add r0, r0, #1 - bl FUN_038008B4 - mov r0, r7 - mov r1, r8 - bl FUN_03800508 - ldr r0, [r5, #60] ; 0x3c - ldr r1, [r5, #64] ; 0x40 - bl FUN_03800830 - ldr r0, [r5] - cmp r0, #0 - bne _038001B0 - add r7, r7, r4 - sub r6, r6, r4 -_038001A8: - cmp r6, #0 - bne _0380016C -_038001B0: - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_038001B8: .word cardi_common - - arm_func_start CARDi_VerifyBackupCore -CARDi_VerifyBackupCore: ; 0x038001BC - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl FUN_03800780 - cmp r0, #0 - beq _0380024C - ldr r0, _03800258 ; =cardi_common - ldr r4, [r0] - mov r1, #1 - ldr r0, _0380025C ; =_03809764 - str r1, [r0, #12] - ldr r0, [r4, #36] ; 0x24 - add r0, r0, #1 - add r0, r0, r5 - bl FUN_038008B4 - mov r0, r7 - mov r1, #3 - bl FUN_03800508 - mov r0, r6 - mov r1, #0 - mov r2, r5 - ldr r3, _03800260 ; =_038005F8 - bl FUN_038006F0 - mov r0, #0 - mov r1, r0 - bl FUN_03800830 - ldr r0, [r4] - cmp r0, #0 - bne _0380024C - ldr r0, _0380025C ; =_03809764 - ldr r0, [r0, #12] - cmp r0, #0 - moveq r0, #1 - streq r0, [r4] -_0380024C: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_03800258: .word cardi_common -_0380025C: .word _03809764 -_03800260: .word _038005F8 - - arm_func_start CARDi_WriteBackupCore -CARDi_WriteBackupCore: ; 0x03800264 - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - sub sp, sp, #4 - mov sl, r0 - mov r9, r1 - mov r8, r2 - bl FUN_03800780 - cmp r0, #0 - beq _03800314 - ldr r0, _03800320 ; =cardi_common - ldr r7, [r0] - ldr r6, [r7, #32] - sub r4, r6, #1 - mov fp, #10 - mov r0, #0 - str r0, [sp] - b _0380030C -_038002A4: - and r0, sl, r4 - sub r5, r6, r0 - cmp r5, r8 - movhi r5, r8 - bl FUN_038005B4 - ldr r0, [r7, #36] ; 0x24 - add r0, r0, #1 - add r0, r0, r5 - bl FUN_038008B4 - mov r0, sl - mov r1, fp - bl FUN_03800508 - mov r0, r9 - ldr r1, [sp] - mov r2, r5 - ldr r3, _03800324 ; =_03800660 - bl FUN_038006F0 - ldr r0, [r7, #44] ; 0x2c - ldr r1, [r7, #48] ; 0x30 - bl FUN_03800830 - ldr r0, [r7] - cmp r0, #0 - bne _03800314 - add r9, r9, r5 - add sl, sl, r5 - sub r8, r8, r5 -_0380030C: - cmp r8, #0 - bne _038002A4 -_03800314: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - bx lr -_03800320: .word cardi_common -_03800324: .word _03800660 - - arm_func_start CARDi_ProgramBackupCore -CARDi_ProgramBackupCore: ; 0x03800328 - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - sub sp, sp, #4 - mov sl, r0 - mov r9, r1 - mov r8, r2 - bl FUN_03800780 - cmp r0, #0 - beq _038003D8 - ldr r0, _038003E4 ; =cardi_common - ldr r7, [r0] - ldr r6, [r7, #32] - sub r4, r6, #1 - mov r0, #2 - str r0, [sp] - mov fp, #0 - b _038003D0 -_03800368: - and r0, sl, r4 - sub r5, r6, r0 - cmp r5, r8 - movhi r5, r8 - bl FUN_038005B4 - ldr r0, [r7, #36] ; 0x24 - add r0, r0, #1 - add r0, r0, r5 - bl FUN_038008B4 - mov r0, sl - ldr r1, [sp] - bl FUN_03800508 - mov r0, r9 - mov r1, fp - mov r2, r5 - ldr r3, _038003E8 ; =_03800660 - bl FUN_038006F0 - ldr r0, [r7, #40] ; 0x28 - mov r1, fp - bl FUN_03800830 - ldr r0, [r7] - cmp r0, #0 - bne _038003D8 - add r9, r9, r5 - add sl, sl, r5 - sub r8, r8, r5 -_038003D0: - cmp r8, #0 - bne _03800368 -_038003D8: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - bx lr -_038003E4: .word cardi_common -_038003E8: .word _03800660 - - arm_func_start CARDi_ReadBackupCore -CARDi_ReadBackupCore: ; 0x038003EC - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl FUN_03800780 - cmp r0, #0 - beq _0380044C - ldr r0, _03800454 ; =cardi_common - ldr r0, [r0] - ldr r0, [r0, #36] ; 0x24 - add r0, r0, #1 - add r0, r0, r4 - bl FUN_038008B4 - mov r0, r6 - mov r1, #3 - bl FUN_03800508 - mov r0, #0 - mov r1, r5 - mov r2, r4 - ldr r3, _03800458 ; =_038006AC - bl FUN_038006F0 - mov r0, #0 - mov r1, r0 - bl FUN_03800830 -_0380044C: - ldmia sp!, {r4, r5, r6, lr} - bx lr -_03800454: .word cardi_common -_03800458: .word _038006AC - - arm_func_start CARDi_InitStatusRegister -CARDi_InitStatusRegister: ; 0x0380045C - stmdb sp!, {r4, lr} - sub sp, sp, #8 - ldr r0, _038004F8 ; =cardi_common - ldr r0, [r0] - ldrb r4, [r0, #72] ; 0x48 - cmp r4, #255 ; 0xff - beq _038004EC - ldr r0, _038004FC ; =_03809760 - ldr r0, [r0] - cmp r0, #0 - bne _038004EC - mov r0, #5 - strb r0, [sp] - mov r0, #2 - bl FUN_038008B4 - add r0, sp, #0 - mov r1, #0 - mov r2, #1 - ldr r3, _03800500 ; =_03800660 - bl FUN_038006F0 - mov r0, #0 - add r1, sp, #1 - mov r2, #1 - ldr r3, _03800504 ; =_038006AC - bl FUN_038006F0 - mov r0, #0 - mov r1, r0 - bl FUN_03800830 - ldrb r0, [sp, #1] - cmp r0, r4 - beq _038004E0 - mov r0, r4 - bl CARDi_SetWriteProtectCore -_038004E0: - mov r1, #1 - ldr r0, _038004FC ; =_03809760 - str r1, [r0] -_038004EC: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_038004F8: .word cardi_common -_038004FC: .word _03809760 -_03800500: .word _03800660 -_03800504: .word _038006AC - - arm_func_start FUN_03800508 -FUN_03800508: ; 0x03800508 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r2, _038005AC ; =cardi_common - ldr r2, [r2] - ldr r2, [r2, #36] ; 0x24 - cmp r2, #1 - beq _03800538 - cmp r2, #2 - beq _03800554 - cmp r2, #3 - beq _0380056C - b _0380058C -_03800538: - and r3, r0, #255 ; 0xff - mov r0, r0, lsr #5 - and r0, r0, #8 - orr r0, r1, r0 - orr r0, r0, r3, lsl #8 - str r0, [sp] - b _0380058C -_03800554: - and r3, r0, #255 ; 0xff - and r0, r0, #65280 ; 0xff00 - orr r0, r1, r0 - orr r0, r0, r3, lsl #16 - str r0, [sp] - b _0380058C -_0380056C: - and ip, r0, #255 ; 0xff - and r3, r0, #65280 ; 0xff00 - mov r0, r0, lsr #8 - and r0, r0, #65280 ; 0xff00 - orr r0, r1, r0 - orr r0, r0, r3, lsl #8 - orr r0, r0, ip, lsl #24 - str r0, [sp] -_0380058C: - add r0, sp, #0 - mov r1, #0 - add r2, r2, #1 - ldr r3, _038005B0 ; =_03800660 - bl FUN_038006F0 - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_038005AC: .word cardi_common -_038005B0: .word _03800660 - - arm_func_start FUN_038005B4 -FUN_038005B4: ; 0x038005B4 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #1 - bl FUN_038008B4 - ldr r0, _038005F0 ; =_038072C0 - mov r1, #0 - mov r2, #1 - ldr r3, _038005F4 ; =_03800660 - bl FUN_038006F0 - mov r0, #0 - mov r1, r0 - bl FUN_03800830 - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_038005F0: .word _038072C0 -_038005F4: .word _03800660 -_038005F8: - mov r2, #0 - ldr r1, _03800658 ; =0x040001A2 - strh r2, [r1] - ldr r2, _0380065C ; =0x040001A0 -_03800608: - ldrh r1, [r2] - ands r1, r1, #128 ; 0x80 - bne _03800608 - ldr r1, _03800658 ; =0x040001A2 - ldrh r1, [r1] - and r2, r1, #255 ; 0xff - ldr r1, [r0, #4] - ldrb r1, [r1] - cmp r2, r1 - beq _03800648 - mov r1, #0 - str r1, [r0, #12] - ldr r1, [r0] - cmp r1, #1 - movhi r1, #1 - strhi r1, [r0] -_03800648: - ldr r1, [r0, #4] - add r1, r1, #1 - str r1, [r0, #4] - bx lr -_03800658: .word 0x040001A2 -_0380065C: .word 0x040001A0 -_03800660: - sub sp, sp, #8 - ldr r1, [r0, #4] - ldrb r2, [r1] - ldr r1, _038006A4 ; =0x040001A2 - strh r2, [r1] - ldr r1, [r0, #4] - add r1, r1, #1 - str r1, [r0, #4] - ldr r1, _038006A8 ; =0x040001A0 -_03800684: - ldrh r0, [r1] - ands r0, r0, #128 ; 0x80 - bne _03800684 - ldr r0, _038006A4 ; =0x040001A2 - ldrh r0, [r0] - strh r0, [sp] - add sp, sp, #8 - bx lr -_038006A4: .word 0x040001A2 -_038006A8: .word 0x040001A0 -_038006AC: - mov r2, #0 - ldr r1, _038006E8 ; =0x040001A2 - strh r2, [r1] - ldr r2, _038006EC ; =0x040001A0 -_038006BC: - ldrh r1, [r2] - ands r1, r1, #128 ; 0x80 - bne _038006BC - ldr r1, _038006E8 ; =0x040001A2 - ldrh r2, [r1] - ldr r1, [r0, #8] - strb r2, [r1] - ldr r1, [r0, #8] - add r1, r1, #1 - str r1, [r0, #8] - bx lr -_038006E8: .word 0x040001A2 -_038006EC: .word 0x040001A0 - - arm_func_start FUN_038006F0 -FUN_038006F0: ; 0x038006F0 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r2 - mov r6, r3 - ldr r5, _03800774 ; =_03809764 - str r0, [r5, #4] - str r1, [r5, #8] - ldr r0, _03800778 ; =0x0000A040 - ldr r4, _0380077C ; =0x040001A0 - strh r0, [r4] - mov r8, #40960 ; 0xa000 - b _03800750 -_0380071C: - ldr r0, [r5] - sub r0, r0, #1 - str r0, [r5] - ldr r0, [r5] - cmp r0, #0 - streqh r8, [r4] -_03800734: - ldrh r0, [r4] - ands r0, r0, #128 ; 0x80 - bne _03800734 - mov r0, r5 - mov lr, pc - bx r6 - sub r7, r7, #1 -_03800750: - cmp r7, #0 - bne _0380071C - ldr r0, [r5] - cmp r0, #0 - moveq r1, #0 - ldreq r0, _0380077C ; =0x040001A0 - streqh r1, [r0] - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_03800774: .word _03809764 -_03800778: .word 0x0000A040 -_0380077C: .word 0x040001A0 - - arm_func_start FUN_03800780 -FUN_03800780: ; 0x03800780 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #0 - mov r1, #50 ; 0x32 - bl FUN_03800830 - ldr r0, _038007C0 ; =cardi_common - ldr r1, [r0] - ldr r0, [r1] - cmp r0, #4 - moveq r0, #6 - streq r0, [r1] - moveq r0, #0 - movne r0, #1 - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_038007C0: .word cardi_common - - arm_func_start FUN_038007C4 -FUN_038007C4: ; 0x038007C4 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #2 - bl FUN_038008B4 - ldr r0, _03800824 ; =_038072C4 - mov r1, #0 - mov r2, #1 - ldr r3, _03800828 ; =_03800660 - bl FUN_038006F0 - mov r0, #0 - add r1, sp, #0 - mov r2, #1 - ldr r3, _0380082C ; =_038006AC - bl FUN_038006F0 - mov r0, #0 - mov r1, r0 - bl FUN_03800830 - ldrb r0, [sp] - ands r0, r0, #1 - moveq r0, #1 - movne r0, #0 - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03800824: .word _038072C4 -_03800828: .word _03800660 -_0380082C: .word _038006AC - - arm_func_start FUN_03800830 -FUN_03800830: ; 0x03800830 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - mov r4, r1 - adds r1, r5, r4 - beq _038008A8 - cmp r5, #0 - beq _03800850 - bl OS_Sleep -_03800850: - cmp r4, #0 - beq _03800890 - sub r6, r4, r5 - mov r4, #5 - b _0380087C -_03800864: - cmp r6, #5 - movlt r5, r6 - movge r5, r4 - mov r0, r5 - bl OS_Sleep - sub r6, r6, r5 -_0380087C: - bl FUN_038007C4 - cmp r0, #0 - bne _03800890 - cmp r6, #0 - bgt _03800864 -_03800890: - bl FUN_038007C4 - cmp r0, #0 - moveq r1, #4 - ldreq r0, _038008B0 ; =cardi_common - ldreq r0, [r0] - streq r1, [r0] -_038008A8: - ldmia sp!, {r4, r5, r6, lr} - bx lr -_038008B0: .word cardi_common - - arm_func_start FUN_038008B4 -FUN_038008B4: ; 0x038008B4 - ldr r1, _038008C0 ; =_03809764 - str r0, [r1] - bx lr -_038008C0: .word _03809764 - - arm_func_start CARDi_GetRomAccessor -CARDi_GetRomAccessor: ; 0x038008C4 - ldr r0, _038008CC ; =_03800A7C - bx lr -_038008CC: .word _03800A7C - - arm_func_start CARD_Init -CARD_Init: ; 0x038008D0 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r2, _03800940 ; =cardi_common - ldr r0, [r2, #252] ; 0xfc - cmp r0, #0 - bne _03800934 - mov r0, #1 - str r0, [r2, #252] ; 0xfc - mov r1, #0 - str r1, [r2, #40] ; 0x28 - ldr r0, [r2, #40] ; 0x28 - str r0, [r2, #36] ; 0x24 - ldr r0, [r2, #36] ; 0x24 - str r0, [r2, #32] - mvn r0, #0 - str r0, [r2, #44] ; 0x2c - str r1, [r2, #60] ; 0x3c - str r1, [r2, #64] ; 0x40 - ldr r0, _03800944 ; =cardi_rom_base - str r1, [r0] - bl CARDi_InitCommon - bl CARDi_GetRomAccessor - ldr r1, _03800948 ; =rom_stat - str r0, [r1] - bl CARD_InitPulledOutCallback -_03800934: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03800940: .word cardi_common -_03800944: .word cardi_rom_base -_03800948: .word rom_stat - - arm_func_start CARDi_ReadRomID -CARDi_ReadRomID: ; 0x0380094C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r5, _03800A10 ; =cardi_common - bl OS_DisableInterrupts - mov r4, r0 - add r6, r5, #244 ; 0xf4 - b _0380096C -_03800964: - mov r0, r6 - bl OS_SleepThread -_0380096C: - ldr r0, [r5, #252] ; 0xfc - ands r0, r0, #4 - bne _03800964 - ldr r0, [r5, #252] ; 0xfc - orr r0, r0, #4 - str r0, [r5, #252] ; 0xfc - mov r0, #0 - str r0, [r5, #60] ; 0x3c - str r0, [r5, #64] ; 0x40 - mov r0, r4 - bl OS_RestoreInterrupts - bl CARDi_ReadRomIDCore - mov r8, r0 - ldr r7, _03800A10 ; =cardi_common - mov r1, #0 - ldr r0, [r7] - str r1, [r0] - ldr r6, [r7, #60] ; 0x3c - ldr r5, [r7, #64] ; 0x40 - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, [r7, #252] ; 0xfc - bic r0, r0, #76 ; 0x4c - str r0, [r7, #252] ; 0xfc - add r0, r7, #244 ; 0xf4 - bl OS_WakeupThread - ldr r0, [r7, #252] ; 0xfc - ands r0, r0, #16 - beq _038009E8 - add r0, r7, #72 ; 0x48 - bl OS_WakeupThreadDirect -_038009E8: - mov r0, r4 - bl OS_RestoreInterrupts - cmp r6, #0 - beq _03800A04 - mov r0, r5 - mov lr, pc - bx r6 -_03800A04: - mov r0, r8 - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_03800A10: .word cardi_common - - arm_func_start CARDi_ReadRomIDCore -CARDi_ReadRomIDCore: ; 0x03800A14 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #-1207959552 ; 0xb8000000 - mov r1, #0 - bl FUN_03800A80 - ldr r0, _03800A70 ; =cardi_rom_header_addr - ldr r0, [r0] - ldr r0, [r0, #96] ; 0x60 - bic r0, r0, #117440512 ; 0x7000000 - orr r1, r0, #-1493172224 ; 0xa7000000 - mov r0, #8192 ; 0x2000 - rsb r0, r0, #0 - and r0, r1, r0 - ldr r1, _03800A74 ; =0x040001A4 - str r0, [r1] -_03800A50: - ldr r0, [r1] - ands r0, r0, #8388608 ; 0x800000 - beq _03800A50 - ldr r0, _03800A78 ; =0x04100010 - ldr r0, [r0] - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03800A70: .word cardi_rom_header_addr -_03800A74: .word 0x040001A4 -_03800A78: .word 0x04100010 -_03800A7C: - bx lr - - arm_func_start FUN_03800A80 -FUN_03800A80: ; 0x03800A80 - ldr r3, _03800AF8 ; =0x040001A4 -_03800A84: - ldr r2, [r3] - ands r2, r2, #-2147483648 ; 0x80000000 - bne _03800A84 - mov r3, #192 ; 0xc0 - ldr r2, _03800AFC ; =0x040001A1 - strb r3, [r2] - mov r3, r0, lsr #24 - ldr r2, _03800B00 ; =0x040001A8 - strb r3, [r2] - mov r3, r0, lsr #16 - ldr r2, _03800B04 ; =0x040001A9 - strb r3, [r2] - mov r3, r0, lsr #8 - ldr r2, _03800B08 ; =0x040001AA - strb r3, [r2] - ldr r2, _03800B0C ; =0x040001AB - strb r0, [r2] - mov r2, r1, lsr #24 - ldr r0, _03800B10 ; =0x040001AC - strb r2, [r0] - mov r2, r1, lsr #16 - ldr r0, _03800B14 ; =0x040001AD - strb r2, [r0] - mov r2, r1, lsr #8 - ldr r0, _03800B18 ; =0x040001AE - strb r2, [r0] - ldr r0, _03800B1C ; =0x040001AF - strb r1, [r0] - bx lr -_03800AF8: .word 0x040001A4 -_03800AFC: .word 0x040001A1 -_03800B00: .word 0x040001A8 -_03800B04: .word 0x040001A9 -_03800B08: .word 0x040001AA -_03800B0C: .word 0x040001AB -_03800B10: .word 0x040001AC -_03800B14: .word 0x040001AD -_03800B18: .word 0x040001AE -_03800B1C: .word 0x040001AF - - arm_func_start CARDi_TaskThread -CARDi_TaskThread: ; 0x03800B20 - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - sub sp, sp, #4 - ldr r9, _03800D28 ; =cardi_common - add r5, r9, #72 ; 0x48 - mov r8, #0 - add r7, r9, #252 ; 0xfc - mov r6, #1 - mov r4, #3 - mov fp, #11 -_03800B44: - mov sl, r8 - bl OS_DisableInterrupts - str r0, [sp] -_03800B50: - ldr r0, [r9, #252] ; 0xfc - ands r0, r0, #4 - bne _03800B88 - ldr r0, [r9, #252] ; 0xfc - ands r0, r0, #16 - beq _03800B94 - ldr r0, [r7] - orr r0, r0, #4 - str r0, [r7] - ldr r0, [r7] - bic r0, r0, #16 - str r0, [r7] - mov sl, r6 - b _03800BA4 -_03800B88: - ldr r0, [r9, #252] ; 0xfc - ands r0, r0, #8 - bne _03800BA4 -_03800B94: - str r5, [r9, #236] ; 0xec - mov r0, r8 - bl OS_SleepThread - b _03800B50 -_03800BA4: - ldr r0, [sp] - bl OS_RestoreInterrupts - cmp sl, #0 - beq _03800D14 - ldr r0, [r9] - str r8, [r0] - ldr r2, [r9] - ldr r1, [r2, #76] ; 0x4c - ldr r0, [r9, #4] - mov r0, r6, lsl r0 - ands r0, r1, r0 - streq r4, [r2] - ldr r0, [r9, #4] - cmp r0, #12 - addls pc, pc, r0, lsl #2 - b _03800CB8 - b _03800CC0 - b _03800CC0 - b _03800C18 - b _03800C20 - b _03800C30 - b _03800CB8 - b _03800C3C - b _03800C54 - b _03800C6C - b _03800C84 - b _03800CB8 - b _03800C9C - b _03800CB0 -_03800C18: - bl CARDi_InitStatusRegister - b _03800CC0 -_03800C20: - bl CARDi_ReadRomIDCore - ldr r1, [r9] - str r0, [r1, #8] - b _03800CC0 -_03800C30: - ldr r0, [r9] - str r4, [r0] - b _03800CC0 -_03800C3C: - ldr r2, [r9] - ldr r0, [r2, #12] - ldr r1, [r2, #16] - ldr r2, [r2, #20] - bl CARDi_ReadBackupCore - b _03800CC0 -_03800C54: - ldr r2, [r9] - ldr r0, [r2, #16] - ldr r1, [r2, #12] - ldr r2, [r2, #20] - bl CARDi_WriteBackupCore - b _03800CC0 -_03800C6C: - ldr r2, [r9] - ldr r0, [r2, #16] - ldr r1, [r2, #12] - ldr r2, [r2, #20] - bl CARDi_ProgramBackupCore - b _03800CC0 -_03800C84: - ldr r2, [r9] - ldr r0, [r2, #16] - ldr r1, [r2, #12] - ldr r2, [r2, #20] - bl CARDi_VerifyBackupCore - b _03800CC0 -_03800C9C: - ldr r1, [r9] - ldr r0, [r1, #16] - ldr r1, [r1, #20] - bl CARDi_EraseBackupSectorCore - b _03800CC0 -_03800CB0: - bl CARDi_EraseChipCore - b _03800CC0 -_03800CB8: - ldr r0, [r9] - str r4, [r0] -_03800CC0: - mov r0, fp - mov r1, r6 - mov r2, r6 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _03800CC0 - bl OS_DisableInterrupts - mov sl, r0 - ldr r0, [r9, #252] ; 0xfc - bic r0, r0, #76 ; 0x4c - str r0, [r9, #252] ; 0xfc - add r0, r9, #244 ; 0xf4 - bl OS_WakeupThread - ldr r0, [r9, #252] ; 0xfc - ands r0, r0, #16 - beq _03800D08 - mov r0, r5 - bl OS_WakeupThreadDirect -_03800D08: - mov r0, sl - bl OS_RestoreInterrupts - b _03800B44 -_03800D14: - mov r0, r9 - ldr r1, [r9, #68] ; 0x44 - mov lr, pc - bx r1 - b _03800B44 -_03800D28: .word cardi_common - - arm_func_start CARDi_OnFifoRecv -CARDi_OnFifoRecv: ; 0x03800D2C - stmfd sp!, {lr} - sub sp, sp, #4 - cmp r0, #11 - bne _03800DFC - cmp r2, #0 - beq _03800DFC - ldr r0, _03800E08 ; =cardi_common - ldr r2, [r0, #8] - cmp r2, #0 - streq r1, [r0, #4] - ldr r2, [r0, #4] - cmp r2, #12 - addls pc, pc, r2, lsl #2 - b _03800DC8 - b _03800D98 - b _03800DC8 - b _03800DBC - b _03800DBC - b _03800DBC - b _03800DBC - b _03800DBC - b _03800DBC - b _03800DBC - b _03800DBC - b _03800DBC - b _03800DBC - b _03800DBC -_03800D98: - ldr r2, [r0, #8] - cmp r2, #0 - beq _03800DC8 - cmp r2, #1 - streq r1, [r0] - ldreq r1, [r0, #252] ; 0xfc - orreq r1, r1, #16 - streq r1, [r0, #252] ; 0xfc - b _03800DC8 -_03800DBC: - ldr r1, [r0, #252] ; 0xfc - orr r1, r1, #16 - str r1, [r0, #252] ; 0xfc -_03800DC8: - ldr r1, [r0, #252] ; 0xfc - ands r1, r1, #16 - ldreq r1, [r0, #8] - addeq r1, r1, #1 - streq r1, [r0, #8] - beq _03800DFC - mov r1, #0 - str r1, [r0, #8] - ldr r1, [r0, #252] ; 0xfc - ands r1, r1, #4 - ldrne r0, [r0, #236] ; 0xec - addeq r0, r0, #72 ; 0x48 - bl OS_WakeupThreadDirect -_03800DFC: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03800E08: .word cardi_common - - arm_func_start FUN_03800E0C -FUN_03800E0C: ; 0x03800E0C - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r0 - mov r6, r1 - mov r5, #14 - mov r4, #0 - b _03800E30 -_03800E28: - mov r0, r6 - bl FUN_037F8CB4 -_03800E30: - mov r0, r5 - mov r1, r7 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - bne _03800E28 - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr - - arm_func_start FUN_03800E54 -FUN_03800E54: ; 0x03800E54 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #0 - bl CTRDG_VibPulseEdgeUpdate - bl SND_BeginSleep - bl WVR_Shutdown - bl OS_Terminate - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start CARD_CheckPullOut_Polling -CARD_CheckPullOut_Polling: ; 0x03800E7C - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _03800F50 ; =_038099A0 - ldr r0, [r0] - cmp r0, #0 - bne _03800F44 - ldr r0, _03800F54 ; =0x027FFC40 - ldrh r0, [r0] - cmp r0, #2 - beq _03800F44 - ldr r1, _03800F58 ; =_03807668 - ldr r3, [r1] - mvn r0, #0 - cmp r3, r0 - ldreq r0, _03800F5C ; =0x027FFC3C - ldreq r0, [r0] - addeq r0, r0, #10 - streq r0, [r1] - beq _03800F44 - ldr r2, _03800F5C ; =0x027FFC3C - ldr r0, [r2] - cmp r0, r3 - bcc _03800F44 - ldr r0, [r2] - add r0, r0, #10 - str r0, [r1] - bl CARD_IsPulledOut - cmp r0, #0 - beq _03800F1C - mov r1, #1 - ldr r0, _03800F50 ; =_038099A0 - str r1, [r0] - bl CARD_GetRomHeader - ldr r0, [r0, #12] - cmp r0, #0 - bne _03800F1C - ldr r0, _03800F60 ; =_0380766C - ldr r0, [r0] - cmp r0, #0 - bne _03800F44 -_03800F1C: - mov r1, #0 - ldr r0, _03800F60 ; =_0380766C - str r1, [r0] - ldr r0, _03800F50 ; =_038099A0 - ldr r0, [r0] - cmp r0, #0 - beq _03800F44 - mov r0, #17 - mov r1, #100 ; 0x64 - bl FUN_03800E0C -_03800F44: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03800F50: .word _038099A0 -_03800F54: .word 0x027FFC40 -_03800F58: .word _03807668 -_03800F5C: .word 0x027FFC3C -_03800F60: .word _0380766C - - arm_func_start CARD_IsCardIreqLo -CARD_IsCardIreqLo: ; 0x03800F64 - mov r2, #1 - mov r0, r2 - ldr r1, _03800F88 ; =0x04000214 - ldr r1, [r1] - ands r1, r1, #1048576 ; 0x100000 - movne r0, #0 - ldrne r1, _03800F8C ; =_038099A8 - strne r2, [r1] - bx lr -_03800F88: .word 0x04000214 -_03800F8C: .word _038099A8 - - arm_func_start CARD_CompareCardID -CARD_CompareCardID: ; 0x03800F90 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _03800FE8 ; =0x027FFC10 - ldrh r0, [r0] - cmp r0, #0 - ldreq r0, _03800FEC ; =0x027FF800 - ldrne r0, _03800FF0 ; =0x027FFC00 - ldr r0, [r0] - str r0, [sp] - bl CARDi_ReadRomID - ldr r1, [sp] - cmp r0, r1 - moveq r0, #1 - movne r0, #0 - cmp r0, #0 - moveq r2, #1 - movne r2, #0 - ldr r1, _03800FF4 ; =_038099A8 - str r2, [r1] - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03800FE8: .word 0x027FFC10 -_03800FEC: .word 0x027FF800 -_03800FF0: .word 0x027FFC00 -_03800FF4: .word _038099A8 - - arm_func_start CARD_IsPulledOut -CARD_IsPulledOut: ; 0x03800FF8 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _03801040 ; =_038099A8 - ldr r0, [r0] - cmp r0, #0 - bne _0380102C - ldr r0, _03801044 ; =0x027FFC1F - ldrb r0, [r0] - ands r0, r0, #1 - beq _03801028 - bl CARD_CompareCardID - b _0380102C -_03801028: - bl CARD_IsCardIreqLo -_0380102C: - ldr r0, _03801040 ; =_038099A8 - ldr r0, [r0] - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03801040: .word _038099A8 -_03801044: .word 0x027FFC1F - - arm_func_start FUN_03801048 -FUN_03801048: ; 0x03801048 - stmfd sp!, {lr} - sub sp, sp, #4 - and r0, r1, #63 ; 0x3f - cmp r0, #1 - bne _03801064 - bl FUN_03800E54 - b _03801068 -_03801064: - bl OS_Terminate -_03801068: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start CARD_InitPulledOutCallback -CARD_InitPulledOutCallback: ; 0x03801074 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - ldr r0, _038010CC ; =_038099A4 - ldr r1, [r0] - cmp r1, #0 - bne _038010C0 - mov r1, #1 - str r1, [r0] - bl PXI_Init - mov r5, #14 - mov r4, #0 -_038010A0: - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady - cmp r0, #0 - beq _038010A0 - mov r0, #14 - ldr r1, _038010D0 ; =FUN_03801048 - bl PXI_SetFifoRecvCallback -_038010C0: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_038010CC: .word _038099A4 -_038010D0: .word FUN_03801048 - .balign 2, 0 ; Don't pad with nop diff --git a/arm7/asm/dtcm2.s b/arm7/asm/dtcm2.s deleted file mode 100644 index 57fd39e1..00000000 --- a/arm7/asm/dtcm2.s +++ /dev/null @@ -1,7573 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .text - - arm_func_start FUN_03801150 -FUN_03801150: ;@ 0x03801150 - stmfd sp!, {lr} - sub sp, sp, #4 - cmp r2, #0 - bne _038011B4 - sub r0, r0, #4 - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _038011B4 - b _038011AC - b _038011B4 - b _03801188 - b _038011B4 - b _038011A0 - b _03801194 -_03801188: - mov r0, r1 - bl TP_AnalyzeCommand - b _038011B4 -_03801194: - mov r0, r1 - bl MIC_AnalyzeCommand - b _038011B4 -_038011A0: - mov r0, r1 - bl PM_AnalyzeCommand - b _038011B4 -_038011AC: - mov r0, r1 - bl NVRAM_AnalyzeCommand -_038011B4: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_038011C0 -FUN_038011C0: ;@ 0x038011C0 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - ldr r6, _03801228 ;@ =_03809C5C - add r5, sp, #0 - mov r4, #1 -_038011D4: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl OS_ReceiveMessage - ldr r0, [sp] - ldr r1, [r0] - cmp r1, #3 - addls pc, pc, r1, lsl #2 - b _038011D4 - b _03801208 - b _03801220 - b _03801210 - b _03801218 -_03801208: - bl TP_ExecuteProcess - b _038011D4 -_03801210: - bl MIC_ExecuteProcess - b _038011D4 -_03801218: - bl PM_ExecuteProcess - b _038011D4 -_03801220: - bl NVRAM_ExecuteProcess - b _038011D4 -_03801228: .word _03809C5C - - arm_func_start SPIi_CheckEntry -SPIi_CheckEntry: ;@ 0x0380122C - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _03801250 ;@ =_03809C5C - add r1, sp, #0 - mov r2, #0 - bl OS_ReadMessage - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03801250: .word _03809C5C - - arm_func_start SPIi_SetEntry -SPIi_SetEntry: ;@ 0x03801254 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - mov r4, r1 - ldrh r0, [sp, #24] - cmp r0, #4 - movhi r0, #0 - bhi _0380130C - bl OS_DisableInterrupts - ldr r2, _03801318 ;@ =_038099B0 - ldr r3, [r2, #1164] ;@ 0x48c - mov r1, #24 - mul ip, r3, r1 - ldr r3, _0380131C ;@ =_03809CBC - str r5, [r3, ip] - ldr r3, [r2, #1164] ;@ 0x48c - mul r5, r3, r1 - ldr r3, _03801320 ;@ =_03809CC0 - str r4, [r3, r5] - add r3, sp, #24 - bic r3, r3, #3 - add r6, r3, #4 - mov lr, #0 - ldrh ip, [sp, #24] - b _038012D4 -_038012B8: - add r6, r6, #4 - ldr r5, [r6, #-4] - ldr r4, [r2, #1164] ;@ 0x48c - mla r3, r4, r1, r2 - add r3, r3, lr, lsl #2 - str r5, [r3, #788] ;@ 0x314 - add lr, lr, #1 -_038012D4: - cmp lr, ip - blt _038012B8 - ldr r1, _03801318 ;@ =_038099B0 - ldr r4, [r1, #1164] ;@ 0x48c - add r2, r4, #1 - and r2, r2, #15 - str r2, [r1, #1164] ;@ 0x48c - bl OS_RestoreInterrupts - ldr r0, _03801324 ;@ =_03809C5C - ldr r2, _0380131C ;@ =_03809CBC - mov r1, #24 - mla r1, r4, r1, r2 - mov r2, #0 - bl OS_SendMessage -_0380130C: - ldmia sp!, {r4, r5, r6, lr} - add sp, sp, #16 - bx lr -_03801318: .word _038099B0 -_0380131C: .word _03809CBC -_03801320: .word _03809CC0 -_03801324: .word _03809C5C - - arm_func_start SPIi_ReleaseException -SPIi_ReleaseException: ;@ 0x03801328 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _03801364 ;@ =_038099B0 - ldr r2, [r1, #4] - cmp r2, r0 - bne _03801358 - mov r0, #5 - str r0, [r1, #4] - mov r0, #0 - str r0, [r1] - ldr r0, _03801368 ;@ =_03809E40 - bl OS_WakeupThread -_03801358: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03801364: .word _038099B0 -_03801368: .word _03809E40 - - arm_func_start SPIi_GetException -SPIi_GetException: ;@ 0x0380136C - mov r2, #1 - ldr r1, _03801380 ;@ =_038099B0 - str r2, [r1] - str r0, [r1, #4] - bx lr -_03801380: .word _038099B0 - - arm_func_start SPIi_CheckException -SPIi_CheckException: ;@ 0x03801384 - ldr r0, _0380139C ;@ =_038099B0 - ldr r0, [r0] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - bx lr -_0380139C: .word _038099B0 - - arm_func_start SPIi_ReturnResult -SPIi_ReturnResult: ;@ 0x038013A0 - stmdb sp!, {r4, r5, r6, lr} - and r2, r0, #112 ;@ 0x70 - cmp r2, #48 ;@ 0x30 - bgt _038013E0 - cmp r2, #48 ;@ 0x30 - bge _03801434 - cmp r2, #16 - bgt _038013D4 - cmp r2, #16 - bge _0380141C - cmp r2, #0 - beq _0380141C - b _03801438 -_038013D4: - cmp r2, #32 - beq _03801434 - b _03801438 -_038013E0: - cmp r2, #80 ;@ 0x50 - bgt _038013FC - cmp r2, #80 ;@ 0x50 - bge _03801424 - cmp r2, #64 ;@ 0x40 - beq _03801424 - b _03801438 -_038013FC: - cmp r2, #96 ;@ 0x60 - bgt _03801410 - cmp r2, #96 ;@ 0x60 - beq _0380142C - b _03801438 -_03801410: - cmp r2, #112 ;@ 0x70 - beq _0380142C - b _03801438 -_0380141C: - mov r4, #6 - b _03801438 -_03801424: - mov r4, #9 - b _03801438 -_0380142C: - mov r4, #8 - b _03801438 -_03801434: - mov r4, #4 -_03801438: - and r0, r0, #255 ;@ 0xff - orr r0, r0, #128 ;@ 0x80 - mov r0, r0, lsl #8 - orr r2, r0, #50331648 ;@ 0x3000000 - and r0, r1, #255 ;@ 0xff - orr r6, r2, r0 - mov r5, #0 -_03801454: - mov r0, r4 - mov r1, r6 - mov r2, r5 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _03801454 - ldmia sp!, {r4, r5, r6, lr} - bx lr - - arm_func_start SPI_Unlock -SPI_Unlock: ;@ 0x03801474 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _038014D8 ;@ =_038099B0 - ldr r2, [r1] - cmp r2, #0 - beq _038014CC - ldr r2, [r1, #4] - cmp r2, #4 - bne _038014CC - ldr r1, [r1, #1176] ;@ 0x498 - cmp r1, r0 - bne _038014CC - bl OS_DisableInterrupts - mov r2, #5 - ldr r1, _038014D8 ;@ =_038099B0 - str r2, [r1, #4] - mov r2, #0 - str r2, [r1] - str r2, [r1, #1176] ;@ 0x498 - bl OS_RestoreInterrupts - ldr r0, _038014DC ;@ =_03809E40 - bl OS_WakeupThread -_038014CC: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_038014D8: .word _038099B0 -_038014DC: .word _03809E40 - - arm_func_start SPI_Lock -SPI_Lock: ;@ 0x038014E0 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r0 - ldr r5, _0380153C ;@ =_03809E40 - ldr r4, _03801540 ;@ =_038099B0 -_038014F4: - bl OS_DisableInterrupts - mov r6, r0 - ldr r1, [r4] - cmp r1, #0 - beq _03801518 - bl OS_RestoreInterrupts - mov r0, r5 - bl OS_SleepThread - b _038014F4 -_03801518: - mov r0, #4 - bl SPIi_GetException - ldr r0, _03801540 ;@ =_038099B0 - str r7, [r0, #1176] ;@ 0x498 - mov r0, r6 - bl OS_RestoreInterrupts - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_0380153C: .word _03809E40 -_03801540: .word _038099B0 - - arm_func_start SPI_Init -SPI_Init: ;@ 0x03801544 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #8 - mov r4, r0 - ldr r0, _03801640 ;@ =_038099AC - ldrh r1, [r0] - cmp r1, #0 - bne _03801634 - mov r1, #1 - strh r1, [r0] - mov r1, #0 - ldr r0, _03801644 ;@ =_038099B0 - str r1, [r0] - mov r1, #5 - str r1, [r0, #4] - bl TP_Init - bl NVRAM_Init - bl MIC_Init - bl PM_Init - bl PXI_Init - mov r0, #6 - ldr r1, _03801648 ;@ =FUN_03801150 - bl PXI_SetFifoRecvCallback - mov r0, #9 - ldr r1, _03801648 ;@ =FUN_03801150 - bl PXI_SetFifoRecvCallback - mov r0, #8 - ldr r1, _03801648 ;@ =FUN_03801150 - bl PXI_SetFifoRecvCallback - mov r0, #4 - ldr r1, _03801648 ;@ =FUN_03801150 - bl PXI_SetFifoRecvCallback - ldr r0, _0380164C ;@ =_03809C5C - ldr r1, _03801650 ;@ =_03809C7C - mov r2, #16 - bl OS_InitMessageQueue - mov r8, #0 - ldr r7, _03801654 ;@ =_03809CBC - mov r6, r8 - mov r5, #24 -_038015E0: - mla r0, r8, r5, r7 - mov r1, r6 - mov r2, r5 - bl MI_CpuFill8 - add r8, r8, #1 - cmp r8, #16 - blt _038015E0 - mov r2, #0 - ldr r0, _03801644 ;@ =_038099B0 - str r2, [r0, #1164] ;@ 0x48c - str r2, [r0, #1172] ;@ 0x494 - str r2, [r0, #1168] ;@ 0x490 - mov r0, #512 ;@ 0x200 - str r0, [sp] - str r4, [sp, #4] - ldr r0, _03801658 ;@ =_038099B8 - ldr r1, _0380165C ;@ =FUN_038011C0 - ldr r3, _0380164C ;@ =_03809C5C - bl OS_CreateThread - ldr r0, _03801658 ;@ =_038099B8 - bl OS_WakeupThreadDirect -_03801634: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_03801640: .word _038099AC -_03801644: .word _038099B0 -_03801648: .word FUN_03801150 -_0380164C: .word _03809C5C -_03801650: .word _03809C7C -_03801654: .word _03809CBC -_03801658: .word _038099B8 -_0380165C: .word FUN_038011C0 - - arm_func_start FUN_03801660 -FUN_03801660: ;@ 0x03801660 - stmfd sp!, {lr} - sub sp, sp, #4 - cmp r0, #0 - bne _03801680 - mov r0, #3 - mov r1, #2 - bl SPIi_ReturnResult - b _03801698 -_03801680: - ldr r1, _038016A4 ;@ =_03809E54 - str r0, [r1, #36] ;@ 0x24 - str r0, [r1, #40] ;@ 0x28 - mov r0, #3 - mov r1, #0 - bl SPIi_ReturnResult -_03801698: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_038016A4: .word _03809E54 - - arm_func_start FUN_038016A8 -FUN_038016A8: ;@ 0x038016A8 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - mov r0, #0 - mov r1, #16 - mov r2, #1 - mov r3, r4 - bl SPIi_SetEntry - cmp r0, #0 - bne _0380170C - ldr r0, [sp] - bic r0, r0, #100663296 ;@ 0x6000000 - orr r0, r0, #100663296 ;@ 0x6000000 - str r0, [sp] - ldrh r1, [sp] - ldr r0, _03801718 ;@ =0x027FFFAA - strh r1, [r0] - ldrh r1, [sp, #2] - ldr r0, _0380171C ;@ =0x027FFFAC - strh r1, [r0] - mov r0, #16 - and r1, r4, #255 ;@ 0xff - mov r1, r1, lsl #16 - mov r1, r1, lsr #16 - bl SPIi_ReturnResult -_0380170C: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03801718: .word 0x027FFFAA -_0380171C: .word 0x027FFFAC - - arm_func_start TP_ExecuteProcess -TP_ExecuteProcess: ;@ 0x03801720 - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - sub sp, sp, #16 - mov sl, r0 - ldr r1, [sl, #4] - cmp r1, #2 - bhi _03801754 - cmp r1, #0 - beq _0380176C - cmp r1, #1 - beq _03801834 - cmp r1, #2 - beq _038018E0 - b _0380192C -_03801754: - cmp r1, #16 - bne _0380192C - ldr r0, _03801938 ;@ =_03809E54 - ldr r0, [r0, #32] - cmp r0, #2 - bne _0380192C -_0380176C: - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #0 - bl SPIi_CheckException - cmp r0, #0 - bne _038017A4 - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, [sl, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #4 - bl SPIi_ReturnResult - b _0380192C -_038017A4: - mov r0, #0 - bl SPIi_GetException - mov r0, r4 - bl OS_RestoreInterrupts - add r0, sp, #8 - ldr r1, _03801938 ;@ =_03809E54 - ldr r1, [r1, #36] ;@ 0x24 - add r2, sp, #4 - bl TP_ExecSampling - add r0, sp, #8 - ldrh r1, [sp, #4] - bl FUN_03801954 - ldrh r1, [sp, #8] - ldr r0, _0380193C ;@ =0x027FFFAA - strh r1, [r0] - ldrh r1, [sp, #10] - ldr r0, _03801940 ;@ =0x027FFFAC - strh r1, [r0] - ldr r0, [sl, #4] - cmp r0, #0 - bne _0380180C - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #0 - bl SPIi_ReturnResult - b _03801828 -_0380180C: - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - ldr r1, [sl, #8] - and r1, r1, #255 ;@ 0xff - mov r1, r1, lsl #16 - mov r1, r1, lsr #16 - bl SPIi_ReturnResult -_03801828: - mov r0, #0 - bl SPIi_ReleaseException - b _0380192C -_03801834: - ldr r7, _03801938 ;@ =_03809E54 - ldr r0, [r7, #32] - cmp r0, #1 - bne _038018CC - mov r9, #0 - ldr r8, _03801944 ;@ =0x00000107 - ldr r6, _03801948 ;@ =_03809E80 - mov r5, #10 - ldr r4, _0380194C ;@ =FUN_038016A8 - b _0380189C -_0380185C: - mul r0, r9, r8 - bl _u32_div_f - ldr r1, [sl, #12] - add r0, r1, r0 - mov r1, r8 - bl _u32_div_f - add r2, r7, r9, lsl #1 - strh r1, [r2, #204] ;@ 0xcc - str r9, [sp] - mov r0, #40 ;@ 0x28 - mla r0, r9, r0, r6 - ldrsh r1, [r2, #204] ;@ 0xcc - mov r2, r5 - mov r3, r4 - bl OS_SetPeriodicVAlarm - add r9, r9, #1 -_0380189C: - ldr r1, [sl, #8] - cmp r9, r1 - bcc _0380185C - ldr r0, [sl, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #0 - bl SPIi_ReturnResult - mov r1, #2 - ldr r0, _03801938 ;@ =_03809E54 - str r1, [r0, #32] - b _0380192C -_038018CC: - mov r0, r1, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult - b _0380192C -_038018E0: - ldr r0, _03801938 ;@ =_03809E54 - ldr r0, [r0, #32] - cmp r0, #3 - bne _0380191C - ldr r0, _03801950 ;@ =0x54505641 - bl OS_CancelVAlarms - ldr r0, [sl, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #0 - bl SPIi_ReturnResult - mov r1, #0 - ldr r0, _03801938 ;@ =_03809E54 - str r1, [r0, #32] - b _0380192C -_0380191C: - mov r0, r1, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult -_0380192C: - add sp, sp, #16 - ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - bx lr -_03801938: .word _03809E54 -_0380193C: .word 0x027FFFAA -_03801940: .word 0x027FFFAC -_03801944: .word 0x00000107 -_03801948: .word _03809E80 -_0380194C: .word FUN_038016A8 -_03801950: .word 0x54505641 - - arm_func_start FUN_03801954 -FUN_03801954: ;@ 0x03801954 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, [r0] - mov r2, r0, lsl #7 - movs r2, r2, lsr #31 - bne _03801984 - mov r1, #0 - ldr r0, _03801A3C ;@ =_03809E50 - strb r1, [r0] - ldr r0, _03801A40 ;@ =_03809E4C - strb r1, [r0] - b _03801A30 -_03801984: - mov r0, r0, lsl #5 - movs r0, r0, lsr #30 - beq _038019D4 - mov r2, #0 - ldr r0, _03801A40 ;@ =_03809E4C - strb r2, [r0] - ldr r0, _03801A3C ;@ =_03809E50 - ldrb r1, [r0] - add r1, r1, #1 - strb r1, [r0] - ldrb r1, [r0] - cmp r1, #4 - bcc _03801A30 - strb r2, [r0] - ldr r0, _03801A44 ;@ =_03809E54 - ldr r1, [r0, #36] ;@ 0x24 - cmp r1, #35 ;@ 0x23 - addlt r1, r1, #1 - strlt r1, [r0, #36] ;@ 0x24 - b _03801A30 -_038019D4: - mov lr, #0 - ldr r3, _03801A3C ;@ =_03809E50 - strb lr, [r3] - ldr r2, _03801A44 ;@ =_03809E54 - ldr ip, [r2, #36] ;@ 0x24 - cmp r1, ip, asr #1 - ldrge r0, _03801A40 ;@ =_03809E4C - strgeb lr, [r0] - bge _03801A30 - ldr r0, _03801A40 ;@ =_03809E4C - ldrb r1, [r0] - add r1, r1, #1 - strb r1, [r0] - ldrb r1, [r0] - cmp r1, #4 - bcc _03801A30 - strb lr, [r0] - ldr r0, [r2, #40] ;@ 0x28 - cmp ip, r0 - subgt r0, ip, #1 - strgt r0, [r2, #36] ;@ 0x24 - movgt r0, #3 - strgtb r0, [r3] -_03801A30: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03801A3C: .word _03809E50 -_03801A40: .word _03809E4C -_03801A44: .word _03809E54 - - arm_func_start TP_AnalyzeCommand -TP_AnalyzeCommand: ;@ 0x03801A48 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - ands r1, r0, #33554432 ;@ 0x2000000 - beq _03801A78 - mov r4, #0 - mov r3, r4 - ldr r1, _03801C00 ;@ =_03809E54 -_03801A64: - mov r2, r4, lsl #1 - strh r3, [r1, r2] - add r4, r4, #1 - cmp r4, #16 - blt _03801A64 -_03801A78: - and r1, r0, #983040 ;@ 0xf0000 - mov r1, r1, lsr #16 - mov r1, r1, lsl #1 - ldr r2, _03801C00 ;@ =_03809E54 - strh r0, [r2, r1] - ands r0, r0, #16777216 ;@ 0x1000000 - beq _03801BF4 - ldrh r1, [r2] - and r0, r1, #65280 ;@ 0xff00 - mov r0, r0, lsl #8 - mov r4, r0, lsr #16 - cmp r4, #3 - addls pc, pc, r4, lsl #2 - b _03801BE8 - b _03801AD4 - b _03801AFC - b _03801B98 - b _03801AC0 -_03801AC0: - and r0, r1, #255 ;@ 0xff - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - bl FUN_03801660 - b _03801BF4 -_03801AD4: - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SPIi_SetEntry - cmp r0, #0 - bne _03801BF4 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult - b _03801BF4 -_03801AFC: - ldr r0, [r2, #32] - cmp r0, #0 - beq _03801B18 - mov r0, r4 - mov r1, #3 - bl SPIi_ReturnResult - b _03801BF4 -_03801B18: - and r0, r1, #255 ;@ 0xff - mov r0, r0, lsl #16 - movs r3, r0, lsr #16 - beq _03801B30 - cmp r3, #4 - bls _03801B40 -_03801B30: - mov r0, r4 - mov r1, #2 - bl SPIi_ReturnResult - b _03801BF4 -_03801B40: - ldrh r1, [r2, #2] - ldr r0, _03801C04 ;@ =0x00000107 - cmp r1, r0 - bcc _03801B60 - mov r0, r4 - mov r1, #2 - bl SPIi_ReturnResult - b _03801BF4 -_03801B60: - str r1, [sp] - mov r0, #0 - mov r1, r4 - mov r2, #2 - bl SPIi_SetEntry - cmp r0, #0 - movne r1, #1 - ldrne r0, _03801C00 ;@ =_03809E54 - strne r1, [r0, #32] - bne _03801BF4 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult - b _03801BF4 -_03801B98: - ldr r0, [r2, #32] - cmp r0, #2 - beq _03801BB4 - mov r0, r4 - mov r1, #3 - bl SPIi_ReturnResult - b _03801BF4 -_03801BB4: - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SPIi_SetEntry - cmp r0, #0 - movne r1, #3 - ldrne r0, _03801C00 ;@ =_03809E54 - strne r1, [r0, #32] - bne _03801BF4 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult - b _03801BF4 -_03801BE8: - mov r0, r4 - mov r1, #1 - bl SPIi_ReturnResult -_03801BF4: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03801C00: .word _03809E54 -_03801C04: .word 0x00000107 - - arm_func_start TP_Init -TP_Init: ;@ 0x03801C08 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r3, #0 - ldr r0, _03801CFC ;@ =_03809E54 - str r3, [r0, #32] - mov r1, #20 - str r1, [r0, #36] ;@ 0x24 - str r1, [r0, #40] ;@ 0x28 - mov r2, r3 -_03801C28: - mov r1, r3, lsl #1 - strh r2, [r0, r1] - add r3, r3, #1 - cmp r3, #16 - blt _03801C28 - bl OS_IsVAlarmAvailable - cmp r0, #0 - bne _03801C4C - bl OS_InitVAlarm -_03801C4C: - mov r7, #0 - ldr r6, _03801D00 ;@ =_03809E80 - ldr r5, _03801D04 ;@ =0x54505641 - mov r4, #40 ;@ 0x28 -_03801C5C: - mla r8, r7, r4, r6 - mov r0, r8 - bl OS_CreateVAlarm - mov r0, r8 - mov r1, r5 - bl OS_SetVAlarmTag - add r7, r7, #1 - cmp r7, #4 - blt _03801C5C - ldr r1, _03801D08 ;@ =0x040001C0 -_03801C84: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03801C84 - ldr r0, _03801D0C ;@ =0x00008A01 - strh r0, [r1] - mov r1, #132 ;@ 0x84 - ldr r0, _03801D10 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03801D08 ;@ =0x040001C0 -_03801CA8: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03801CA8 - mov r1, #0 - ldr r0, _03801D10 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03801D08 ;@ =0x040001C0 -_03801CC4: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03801CC4 - ldr r0, _03801D14 ;@ =0x00008201 - strh r0, [r1] - mov r1, #0 - ldr r0, _03801D10 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03801D08 ;@ =0x040001C0 -_03801CE8: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03801CE8 - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_03801CFC: .word _03809E54 -_03801D00: .word _03809E80 -_03801D04: .word 0x54505641 -_03801D08: .word 0x040001C0 -_03801D0C: .word 0x00008A01 -_03801D10: .word 0x040001C2 -_03801D14: .word 0x00008201 - - arm_func_start TP_ExecSampling -TP_ExecSampling: ;@ 0x03801D18 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #12 - mov r7, r0 - movs r6, r1 - mov r5, r2 - mov r0, #0 - strh r0, [r5] - rsbmi r6, r6, #0 - bl FUN_03802160 - movs r4, r0 - bne _03801D94 - ldr r1, [r7] - mov r0, #4096 ;@ 0x1000 - rsb r0, r0, #0 - and r0, r1, r0 - str r0, [r7] - ldr r1, [r7] - ldr r0, _03801F4C ;@ =0xFF000FFF - and r0, r1, r0 - str r0, [r7] - ldr r0, [r7] - bic r0, r0, #16777216 ;@ 0x1000000 - str r0, [r7] - ldr r0, [r7] - bic r0, r0, #100663296 ;@ 0x6000000 - orr r0, r0, #100663296 ;@ 0x6000000 - str r0, [r7] - mov r1, #0 - ldr r0, _03801F50 ;@ =_03809F28 - strh r1, [r0] - b _03801F40 -_03801D94: - add r0, sp, #0 - mov r1, r6 - mov r2, #0 - add r3, sp, #2 - bl FUN_03801F68 - ldr r1, [r7] - bic r1, r1, #100663296 ;@ 0x6000000 - and r0, r0, #3 - orr r0, r1, r0, lsl #25 - str r0, [r7] - ldr r1, [r7] - mov r0, #4096 ;@ 0x1000 - rsb r0, r0, #0 - and r2, r1, r0 - ldrh r1, [sp] - ldr r0, _03801F54 ;@ =0x00000FFF - and r0, r1, r0 - orr r0, r2, r0 - str r0, [r7] - add r0, sp, #0 - mov r1, r6 - mov r2, #1 - add r3, sp, #4 - bl FUN_03801F68 - cmp r0, #2 - bne _03801E1C - ldr r0, [r7] - bic r1, r0, #100663296 ;@ 0x6000000 - mov r0, r0, lsl #5 - mov r0, r0, lsr #30 - orr r0, r0, #2 - and r0, r0, #3 - orr r0, r1, r0, lsl #25 - str r0, [r7] -_03801E1C: - ldr r1, [r7] - ldr r0, _03801F4C ;@ =0xFF000FFF - and r2, r1, r0 - ldrh r1, [sp] - ldr r0, _03801F54 ;@ =0x00000FFF - and r0, r1, r0 - orr r0, r2, r0, lsl #12 - str r0, [r7] - ldr r0, _03801F58 ;@ =0x00008A01 - ldr r3, _03801F5C ;@ =0x040001C0 - strh r0, [r3] - mov r6, #0 - mov r2, r6 - ldr r1, _03801F60 ;@ =0x040001C2 -_03801E54: - strh r2, [r1] -_03801E58: - ldrh r0, [r3] - ands r0, r0, #128 ;@ 0x80 - bne _03801E58 - add r6, r6, #1 - cmp r6, #12 - blt _03801E54 - ldr r0, _03801F64 ;@ =0x00008201 - strh r0, [r3] - mov r1, #0 - ldr r0, _03801F60 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03801F5C ;@ =0x040001C0 -_03801E88: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03801E88 - cmp r4, #2 - ldreq r0, [r7] - biceq r0, r0, #100663296 ;@ 0x6000000 - orreq r0, r0, #100663296 ;@ 0x6000000 - streq r0, [r7] - bl FUN_03802160 - cmp r0, #0 - beq _03801F20 - cmp r0, #1 - beq _03801EF0 - cmp r0, #2 - bne _03801F3C - ldr r0, [r7] - orr r0, r0, #16777216 ;@ 0x1000000 - str r0, [r7] - ldr r0, [r7] - bic r0, r0, #100663296 ;@ 0x6000000 - orr r0, r0, #100663296 ;@ 0x6000000 - str r0, [r7] - mov r1, #0 - ldr r0, _03801F50 ;@ =_03809F28 - strh r1, [r0] - b _03801F40 -_03801EF0: - ldr r0, [r7] - orr r0, r0, #16777216 ;@ 0x1000000 - str r0, [r7] - mov r1, #1 - ldr r0, _03801F50 ;@ =_03809F28 - strh r1, [r0] - ldrh r0, [sp, #4] - ldrh r1, [sp, #2] - cmp r1, r0 - movcc r1, r0 - strh r1, [r5] - b _03801F40 -_03801F20: - ldr r0, [r7] - bic r0, r0, #16777216 ;@ 0x1000000 - str r0, [r7] - mov r1, #0 - ldr r0, _03801F50 ;@ =_03809F28 - strh r1, [r0] - b _03801F40 -_03801F3C: - bl OS_Terminate -_03801F40: - add sp, sp, #12 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_03801F4C: .word 0xFF000FFF -_03801F50: .word _03809F28 -_03801F54: .word 0x00000FFF -_03801F58: .word 0x00008A01 -_03801F5C: .word 0x040001C0 -_03801F60: .word 0x040001C2 -_03801F64: .word 0x00008201 - - arm_func_start FUN_03801F68 -FUN_03801F68: ;@ 0x03801F68 - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - sub sp, sp, #24 - cmp r2, #0 - moveq r5, #209 ;@ 0xd1 - moveq r6, #1 - movne r5, #145 ;@ 0x91 - movne r6, #2 -_03801F84: - ldr r4, _0380214C ;@ =0x040001C0 - ldrh r2, [r4] - ands r2, r2, #128 ;@ 0x80 - bne _03801F84 - ldr r2, _03802150 ;@ =0x00008A01 - strh r2, [r4] - and r5, r5, #255 ;@ 0xff - ldr r2, _03802154 ;@ =0x040001C2 - strh r5, [r2] -_03801FA8: - ldrh r2, [r4] - ands r2, r2, #128 ;@ 0x80 - bne _03801FA8 - mov r7, #0 - ldr ip, _0380214C ;@ =0x040001C0 - ldr lr, _03802154 ;@ =0x040001C2 - add r2, sp, #0 - mov r4, r7 - ldr r9, _03802158 ;@ =0x00007FF8 -_03801FCC: - strh r4, [lr] -_03801FD0: - ldrh r8, [ip] - ands r8, r8, #128 ;@ 0x80 - bne _03801FD0 - ldrh r8, [lr] - and r8, r8, #255 ;@ 0xff - mov r8, r8, lsl #16 - mov r8, r8, lsr #8 - str r8, [r2, r7, lsl #2] - strh r5, [lr] -_03801FF4: - ldrh r8, [ip] - ands r8, r8, #128 ;@ 0x80 - bne _03801FF4 - ldrh r8, [lr] - and r8, r8, #255 ;@ 0xff - mov r8, r8, lsl #16 - ldr sl, [r2, r7, lsl #2] - orr r8, sl, r8, lsr #16 - str r8, [r2, r7, lsl #2] - ldr r8, [r2, r7, lsl #2] - and r8, r8, r9 - mov r8, r8, asr #3 - str r8, [r2, r7, lsl #2] - add r7, r7, #1 - cmp r7, #5 - blt _03801FCC - ldr r2, _0380215C ;@ =0x00008201 - strh r2, [ip] - mov r2, #0 - strh r2, [lr] - ldr r4, _0380214C ;@ =0x040001C0 -_03802048: - ldrh r2, [r4] - ands r2, r2, #128 ;@ 0x80 - bne _03802048 - mov r8, #0 - mov r7, r8 - add r5, sp, #0 -_03802060: - add r9, r7, #1 - ldr r4, [r5, r7, lsl #2] - b _03802084 -_0380206C: - ldr r2, [r5, r9, lsl #2] - subs r2, r4, r2 - rsbmi r2, r2, #0 - cmp r2, r8 - movgt r8, r2 - add r9, r9, #1 -_03802084: - cmp r9, #5 - blt _0380206C - add r7, r7, #1 - cmp r7, #4 - blt _03802060 - strh r8, [r3] - mov r4, #0 - add r2, sp, #0 - b _0380211C -_038020A8: - add r3, r4, #1 - ldr r7, [r2, r4, lsl #2] - b _03802110 -_038020B4: - ldr r8, [r2, r3, lsl #2] - subs r5, r7, r8 - rsbmi r5, r5, #0 - cmp r5, r1 - bgt _0380210C - add r9, r3, #1 - b _03802104 -_038020D0: - ldr r5, [r2, r9, lsl #2] - subs sl, r7, r5 - rsbmi sl, sl, #0 - cmp sl, r1 - bgt _03802100 - add r1, r8, r7, lsl #1 - add r1, r5, r1 - mov r1, r1, asr #2 - bic r1, r1, #7 - strh r1, [r0] - mov r0, #0 - b _03802140 -_03802100: - add r9, r9, #1 -_03802104: - cmp r9, #5 - blt _038020D0 -_0380210C: - add r3, r3, #1 -_03802110: - cmp r3, #4 - blt _038020B4 - add r4, r4, #1 -_0380211C: - cmp r4, #3 - blt _038020A8 - ldr r2, [sp] - ldr r1, [sp, #16] - add r1, r2, r1 - mov r1, r1, asr #1 - bic r1, r1, #7 - strh r1, [r0] - mov r0, r6 -_03802140: - add sp, sp, #24 - ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - bx lr -_0380214C: .word 0x040001C0 -_03802150: .word 0x00008A01 -_03802154: .word 0x040001C2 -_03802158: .word 0x00007FF8 -_0380215C: .word 0x00008201 - - arm_func_start FUN_03802160 -FUN_03802160: ;@ 0x03802160 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - ldr r1, _038022A4 ;@ =0x040001C0 -_03802174: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03802174 - ldr r0, _038022A8 ;@ =0x00008A01 - strh r0, [r1] - mov r1, #132 ;@ 0x84 - ldr r0, _038022AC ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038022A4 ;@ =0x040001C0 -_03802198: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03802198 - mov r1, #0 - ldr r0, _038022AC ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038022A4 ;@ =0x040001C0 -_038021B4: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038021B4 - ldr r0, _038022B0 ;@ =0x00008201 - strh r0, [r1] - mov r1, #0 - ldr r0, _038022AC ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038022A4 ;@ =0x040001C0 -_038021D8: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038021D8 - ldr r0, _038022B4 ;@ =_03809F28 - ldrh r0, [r0] - cmp r0, #0 - bne _0380220C - ldr r0, _038022B8 ;@ =0x04000136 - ldrh r0, [r0] - ands r0, r0, #64 ;@ 0x40 - moveq r0, #1 - movne r0, #0 - b _03802298 -_0380220C: - ldr r0, _038022B8 ;@ =0x04000136 - ldrh r0, [r0] - ands r0, r0, #64 ;@ 0x40 - moveq r0, #1 - beq _03802298 - ldr r0, _038022A8 ;@ =0x00008A01 - strh r0, [r1] - mov r1, #132 ;@ 0x84 - ldr r0, _038022AC ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038022A4 ;@ =0x040001C0 -_03802238: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03802238 - mov r1, #0 - ldr r0, _038022AC ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038022A4 ;@ =0x040001C0 -_03802254: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03802254 - ldr r0, _038022B0 ;@ =0x00008201 - strh r0, [r1] - mov r1, #0 - ldr r0, _038022AC ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038022A4 ;@ =0x040001C0 -_03802278: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03802278 - ldr r0, _038022B8 ;@ =0x04000136 - ldrh r0, [r0] - ands r0, r0, #64 ;@ 0x40 - movne r0, #0 - moveq r0, #2 -_03802298: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_038022A4: .word 0x040001C0 -_038022A8: .word 0x00008A01 -_038022AC: .word 0x040001C2 -_038022B0: .word 0x00008201 -_038022B4: .word _03809F28 -_038022B8: .word 0x04000136 - - arm_func_start PM_ExecuteProcess -PM_ExecuteProcess: ;@ 0x038022BC - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r4, r0 - bl OS_DisableInterrupts - mov r5, r0 - mov r0, #3 - bl SPIi_CheckException - cmp r0, #0 - bne _03802300 - mov r0, r5 - bl OS_RestoreInterrupts - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #4 - bl SPIi_ReturnResult - b _0380242C -_03802300: - mov r0, #3 - bl SPIi_GetException - mov r0, r5 - bl OS_RestoreInterrupts - ldr r1, [r4, #4] - sub r0, r1, #97 ;@ 0x61 - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _03802414 - b _0380233C - b _03802414 - b _038023E0 - b _03802368 - b _038023A4 - b _03802408 -_0380233C: - mov r1, #1 - ldr r0, _03802438 ;@ =PMi_Work - str r1, [r0, #32] - ldr r1, [r4, #8] - ldr r0, _0380243C ;@ =PMi_TriggerBL - strh r1, [r0] - ldr r1, [r4, #12] - ldr r0, _03802440 ;@ =PMi_KeyPattern - strh r1, [r0] - bl PMi_DoSleep - b _03802424 -_03802368: - mov r1, #4 - ldr r0, _03802438 ;@ =PMi_Work - str r1, [r0, #32] - ldr r2, [r4, #8] - str r2, [r0, #40] ;@ 0x28 - ldr r1, [r4, #12] - str r1, [r0, #36] ;@ 0x24 - mov r0, r2, lsl #16 - mov r0, r0, lsr #16 - and r1, r1, #255 ;@ 0xff - bl PMi_SetRegister - mov r0, #100 ;@ 0x64 - mov r1, #0 - bl SPIi_ReturnResult - b _03802424 -_038023A4: - mov r1, #3 - ldr r0, _03802438 ;@ =PMi_Work - str r1, [r0, #32] - ldr r1, [r4, #8] - str r1, [r0, #40] ;@ 0x28 - mov r0, r1, lsl #16 - mov r4, r0, lsr #16 - mov r0, r4 - bl PMi_GetRegister - mov r1, r0 - add r0, r4, #112 ;@ 0x70 - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - bl SPIi_ReturnResult - b _03802424 -_038023E0: - mov r0, #2 - ldr r1, _03802438 ;@ =PMi_Work - str r0, [r1, #32] - ldr r0, [r4, #8] - str r0, [r1, #36] ;@ 0x24 - bl PMi_SwitchUtilityProc - mov r0, #99 ;@ 0x63 - mov r1, #0 - bl SPIi_ReturnResult - b _03802424 -_03802408: - ldr r0, [r4, #8] - bl PMi_SetLED - b _03802424 -_03802414: - mov r0, r1, lsl #16 - mov r0, r0, lsr #16 - mov r1, #1 - bl SPIi_ReturnResult -_03802424: - mov r0, #3 - bl SPIi_ReleaseException -_0380242C: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_03802438: .word PMi_Work -_0380243C: .word PMi_TriggerBL -_03802440: .word PMi_KeyPattern - - arm_func_start PM_AnalyzeCommand -PM_AnalyzeCommand: ;@ 0x03802444 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - ands r1, r0, #33554432 ;@ 0x2000000 - beq _03802474 - mov r4, #0 - mov r3, r4 - ldr r1, _03802610 ;@ =PMi_Work -_03802460: - mov r2, r4, lsl #1 - strh r3, [r1, r2] - add r4, r4, #1 - cmp r4, #16 - blt _03802460 -_03802474: - and r1, r0, #983040 ;@ 0xf0000 - mov r1, r1, lsr #16 - mov r1, r1, lsl #1 - ldr ip, _03802610 ;@ =PMi_Work - strh r0, [ip, r1] - ands r0, r0, #16777216 ;@ 0x1000000 - beq _03802604 - ldrh r3, [ip] - and r0, r3, #65280 ;@ 0xff00 - mov r0, r0, lsl #8 - mov r4, r0, lsr #16 - sub r0, r4, #96 ;@ 0x60 - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _038025F8 - b _038024D0 - b _038024E0 - b _038025F8 - b _03802588 - b _0380251C - b _03802558 - b _038025C4 - b _038025DC -_038024D0: - mov r0, #96 ;@ 0x60 - mov r1, #0 - bl SPIi_ReturnResult - b _03802604 -_038024E0: - ldrh r1, [ip, #2] - ldr r0, _03802614 ;@ =0x0000FFFF - and r0, r1, r0 - str r0, [sp] - mov r0, #3 - mov r1, r4 - mov r2, #2 - and r3, r3, #255 ;@ 0xff - bl SPIi_SetEntry - cmp r0, #0 - bne _03802604 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult - b _03802604 -_0380251C: - ldrh r1, [ip, #2] - ldr r0, _03802614 ;@ =0x0000FFFF - and r0, r1, r0 - str r0, [sp] - mov r0, #3 - mov r1, r4 - mov r2, #2 - and r3, r3, #255 ;@ 0xff - bl SPIi_SetEntry - cmp r0, #0 - bne _03802604 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult - b _03802604 -_03802558: - mov r0, #3 - mov r1, r4 - mov r2, #1 - ldr ip, _03802614 ;@ =0x0000FFFF - and r3, r3, ip - bl SPIi_SetEntry - cmp r0, #0 - bne _03802604 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult - b _03802604 -_03802588: - mov r0, #3 - mov r1, r4 - mov r2, #1 - and lr, r3, #255 ;@ 0xff - ldrh ip, [ip, #2] - ldr r3, _03802614 ;@ =0x0000FFFF - and r3, ip, r3 - orr r3, r3, lr, lsl #16 - bl SPIi_SetEntry - cmp r0, #0 - bne _03802604 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult - b _03802604 -_038025C4: - and r0, r3, #255 ;@ 0xff - bl PM_SetLEDPattern - mov r0, #102 ;@ 0x66 - mov r1, #0 - bl SPIi_ReturnResult - b _03802604 -_038025DC: - bl PM_GetLEDPattern - mov r1, r0 - mov r0, #103 ;@ 0x67 - mov r1, r1, lsl #16 - mov r1, r1, lsr #16 - bl SPIi_ReturnResult - b _03802604 -_038025F8: - mov r0, r4 - mov r1, #1 - bl SPIi_ReturnResult -_03802604: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03802610: .word PMi_Work -_03802614: .word 0x0000FFFF - - arm_func_start PM_Init -PM_Init: ;@ 0x03802618 - mov r1, #1 - ldr r0, _0380264C ;@ =PMi_Initialized - str r1, [r0] - mov r3, #0 - ldr r0, _03802650 ;@ =PMi_Work - str r3, [r0, #32] - mov r2, r3 -_03802634: - mov r1, r3, lsl #1 - strh r2, [r0, r1] - add r3, r3, #1 - cmp r3, #16 - blt _03802634 - bx lr -_0380264C: .word PMi_Initialized -_03802650: .word PMi_Work - - arm_func_start PMi_SendPxiCommand -PMi_SendPxiCommand: ;@ 0x03802654 - ldr r3, _03802678 ;@ =0x0000FFFF - and r3, r2, r3 - and r0, r0, #62914560 ;@ 0x3c00000 - mov r2, r0, lsl #22 - and r0, r1, #4128768 ;@ 0x3f0000 - orr r0, r2, r0, lsl #16 - orr r0, r3, r0 - ldr ip, _0380267C ;@ =PMi_SendPxiData - bx ip -_03802678: .word 0x0000FFFF -_0380267C: .word PMi_SendPxiData - - arm_func_start PMi_SendPxiData -PMi_SendPxiData: ;@ 0x03802680 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, #8 - mov r4, #0 -_03802690: - mov r0, r5 - mov r1, r6 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - bne _03802690 - ldmia sp!, {r4, r5, r6, lr} - bx lr - - arm_func_start PMi_ResetControl -PMi_ResetControl: ;@ 0x038026B0 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0 - bl PMi_GetRegister - mvn r1, r4 - and r0, r0, r1 - and r1, r0, #255 ;@ 0xff - mov r0, #0 - bl PMi_SetRegister - ldmia sp!, {r4, lr} - bx lr - - arm_func_start PMi_SetControl -PMi_SetControl: ;@ 0x038026DC - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0 - bl PMi_GetRegister - orr r1, r0, r4 - mov r0, #0 - bl PMi_SetRegister - ldmia sp!, {r4, lr} - bx lr - - arm_func_start PMi_GetRegister -PMi_GetRegister: ;@ 0x03802700 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r1, _0380278C ;@ =0x040001C0 -_0380270C: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _0380270C - bl FUN_03802808 - mov r0, #1 - bl FUN_03802820 - orr r0, r4, #128 ;@ 0x80 - and r0, r0, #255 ;@ 0xff - and r1, r0, #255 ;@ 0xff - ldr r0, _03802790 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _0380278C ;@ =0x040001C0 -_0380273C: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _0380273C - mov r0, #0 - bl FUN_03802820 - mov r1, #0 - ldr r0, _03802790 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _0380278C ;@ =0x040001C0 -_03802760: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03802760 - ldr r0, _03802790 ;@ =0x040001C2 - ldrh r0, [r0] - and r0, r0, #255 ;@ 0xff - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - and r0, r0, #255 ;@ 0xff - ldmia sp!, {r4, lr} - bx lr -_0380278C: .word 0x040001C0 -_03802790: .word 0x040001C2 - - arm_func_start PMi_SetRegister -PMi_SetRegister: ;@ 0x03802794 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r5, r0 - mov r4, r1 - ldr r1, _03802800 ;@ =0x040001C0 -_038027A8: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038027A8 - bl FUN_03802808 - mov r0, #1 - bl FUN_03802820 - and r0, r5, #255 ;@ 0xff - and r1, r0, #255 ;@ 0xff - ldr r0, _03802804 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03802800 ;@ =0x040001C0 -_038027D4: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038027D4 - mov r0, #0 - bl FUN_03802820 - and r1, r4, #255 ;@ 0xff - ldr r0, _03802804 ;@ =0x040001C2 - strh r1, [r0] - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_03802800: .word 0x040001C0 -_03802804: .word 0x040001C2 - - arm_func_start FUN_03802808 -FUN_03802808: ;@ 0x03802808 - ldr r1, _03802818 ;@ =0x00008202 - ldr r0, _0380281C ;@ =0x040001C0 - strh r1, [r0] - bx lr -_03802818: .word 0x00008202 -_0380281C: .word 0x040001C0 - - arm_func_start FUN_03802820 -FUN_03802820: ;@ 0x03802820 - ldr r1, _03802834 ;@ =0x00008002 - orr r1, r1, r0, lsl #11 - ldr r0, _03802838 ;@ =0x040001C0 - strh r1, [r0] - bx lr -_03802834: .word 0x00008002 -_03802838: .word 0x040001C0 - - arm_func_start PMi_SetLED -PMi_SetLED: ;@ 0x0380283C - stmdb sp!, {r4, lr} - mov r4, r0 - cmp r4, #1 - beq _03802860 - cmp r4, #2 - beq _03802878 - cmp r4, #3 - beq _0380286C - b _0380288C -_03802860: - mov r0, #16 - bl PMi_ResetControl - b _03802890 -_0380286C: - mov r0, #48 ;@ 0x30 - bl PMi_SetControl - b _03802890 -_03802878: - mov r0, #32 - bl PMi_ResetControl - mov r0, #16 - bl PMi_SetControl - b _03802890 -_0380288C: - bl OS_Terminate -_03802890: - ldr r0, _038028A0 ;@ =PMi_LEDStatus - str r4, [r0] - ldmia sp!, {r4, lr} - bx lr -_038028A0: .word PMi_LEDStatus - - arm_func_start PMi_SwitchUtilityProc -PMi_SwitchUtilityProc: ;@ 0x038028A4 - stmfd sp!, {lr} - sub sp, sp, #4 - cmp r0, #15 - addls pc, pc, r0, lsl #2 - b _038029C4 - b _038029C4 - b _038028F8 - b _0380290C - b _03802920 - b _03802934 - b _03802940 - b _0380294C - b _03802958 - b _03802964 - b _03802970 - b _0380297C - b _03802988 - b _03802994 - b _038029A0 - b _038029B8 - b _038029AC -_038028F8: - mov r0, #1 - bl PM_SetLEDPattern - mov r0, #1 - bl PMi_SetLED - b _038029C4 -_0380290C: - mov r0, #3 - bl PM_SetLEDPattern - mov r0, #3 - bl PMi_SetLED - b _038029C4 -_03802920: - mov r0, #2 - bl PM_SetLEDPattern - mov r0, #2 - bl PMi_SetLED - b _038029C4 -_03802934: - mov r0, #4 - bl PMi_SetControl - b _038029C4 -_03802940: - mov r0, #4 - bl PMi_ResetControl - b _038029C4 -_0380294C: - mov r0, #8 - bl PMi_SetControl - b _038029C4 -_03802958: - mov r0, #8 - bl PMi_ResetControl - b _038029C4 -_03802964: - mov r0, #12 - bl PMi_SetControl - b _038029C4 -_03802970: - mov r0, #12 - bl PMi_ResetControl - b _038029C4 -_0380297C: - mov r0, #1 - bl PMi_SetControl - b _038029C4 -_03802988: - mov r0, #1 - bl PMi_ResetControl - b _038029C4 -_03802994: - mov r0, #2 - bl PMi_ResetControl - b _038029C4 -_038029A0: - mov r0, #2 - bl PMi_SetControl - b _038029C4 -_038029AC: - mov r0, #64 ;@ 0x40 - bl PMi_ResetControl - b _038029C4 -_038029B8: - bl SND_BeginSleep - mov r0, #64 ;@ 0x40 - bl PMi_SetControl -_038029C4: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start PMi_DoSleep -PMi_DoSleep: ;@ 0x038029D0 - stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - sub sp, sp, #4 - mov r5, #0 - ldr r0, _03802B94 ;@ =0x04000208 - ldrh r4, [r0] - strh r5, [r0] - bl OS_DisableInterrupts - mov r9, r0 - mvn r0, #-33554432 ;@ 0xfe000000 - bl OS_DisableIrqMask - mov r8, r0 - mov r0, r5 - bl PMi_GetRegister - mov r7, r0 - mov r0, #2 - bl PM_SetLEDPattern - mov r0, #2 - bl PMi_SetLED - mov r0, #2 - bl PMi_SetLED - bl SND_BeginSleep - mov r0, #1 - bl PMi_ResetControl - ldr r0, _03802B98 ;@ =PMi_TriggerBL - ldrh r0, [r0] - ands r0, r0, #1 - beq _03802A58 - ldr r0, _03802B9C ;@ =PMi_KeyPattern - ldrh r0, [r0] - orr r1, r0, #16384 ;@ 0x4000 - ldr r0, _03802BA0 ;@ =0x04000132 - strh r1, [r0] - mov r0, #4096 ;@ 0x1000 - bl OS_EnableIrqMask -_03802A58: - ldr r0, _03802B98 ;@ =PMi_TriggerBL - ldrh r0, [r0] - ands r0, r0, #4 - beq _03802A70 - mov r0, #4194304 ;@ 0x400000 - bl OS_EnableIrqMask -_03802A70: - ldr r0, _03802B98 ;@ =PMi_TriggerBL - ldrh r0, [r0] - ands r0, r0, #2 - beq _03802AB4 - ldr r0, _03802BA4 ;@ =0x04000134 - ldrh r6, [r0] - mov r5, #1 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #64 ;@ 0x40 - mov r1, #0 - bl EXIi_SetBitRcnt0L - mov r0, #256 ;@ 0x100 - mov r1, r0 - bl EXIi_SetBitRcnt0L - mov r0, #128 ;@ 0x80 - bl OS_EnableIrqMask -_03802AB4: - ldr r0, _03802B98 ;@ =PMi_TriggerBL - ldrh r0, [r0] - ands r0, r0, #8 - beq _03802ACC - mov r0, #1048576 ;@ 0x100000 - bl OS_EnableIrqMask -_03802ACC: - ldr r0, _03802B98 ;@ =PMi_TriggerBL - ldrh r0, [r0] - ands r0, r0, #16 - beq _03802AE4 - mov r0, #8192 ;@ 0x2000 - bl OS_EnableIrqMask -_03802AE4: - mov r0, r9 - bl OS_RestoreInterrupts - ldr r1, _03802B94 ;@ =0x04000208 - ldrh r0, [r1] - mov r0, #1 - strh r0, [r1] - bl FUN_03802BAC - mov r0, #0 - mov r1, r7 - bl PMi_SetRegister - ldr r0, _03802B98 ;@ =PMi_TriggerBL - ldrh r1, [r0] - ands r0, r1, #32 - movne r0, #6 - moveq r0, #7 - ands r1, r1, #64 ;@ 0x40 - movne r7, #4 - moveq r7, #5 - bl PMi_SwitchUtilityProc - mov r0, r7 - bl PMi_SwitchUtilityProc - cmp r5, #0 - ldrne r0, _03802BA4 ;@ =0x04000134 - strneh r6, [r0] - mov r0, #1 - bl PMi_SetControl - bl SND_EndSleep - mov r1, #0 - ldr r0, _03802BA8 ;@ =PMi_Work - str r1, [r0, #32] - mov r0, #98 ;@ 0x62 - mov r2, r1 - bl PMi_SendPxiCommand - bl OS_DisableInterrupts - mov r0, r8 - bl OS_SetIrqMask - mov r0, r9 - bl OS_RestoreInterrupts - ldr r1, _03802B94 ;@ =0x04000208 - ldrh r0, [r1] - strh r4, [r1] - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, lr} - bx lr -_03802B94: .word 0x04000208 -_03802B98: .word PMi_TriggerBL -_03802B9C: .word PMi_KeyPattern -_03802BA0: .word 0x04000132 -_03802BA4: .word 0x04000134 -_03802BA8: .word PMi_Work - - arm_func_start FUN_03802BAC -FUN_03802BAC: ;@ 0x03802BAC - ldr ip, _03802BB4 ;@ =SVC_Stop - bx ip -_03802BB4: .word SVC_Stop - - arm_func_start PM_GetLEDPattern -PM_GetLEDPattern: ;@ 0x03802BB8 - ldr r0, _03802BC4 ;@ =PMi_BlinkPatternNo - ldr r0, [r0] - bx lr -_03802BC4: .word PMi_BlinkPatternNo - - arm_func_start PM_SetLEDPattern -PM_SetLEDPattern: ;@ 0x03802BC8 - cmp r0, #15 - ldrle r1, _03802BE4 ;@ =PMi_BlinkPatternNo - strle r0, [r1] - movle r1, #0 - ldrle r0, _03802BE8 ;@ =_03809F64 - strle r1, [r0] - bx lr -_03802BE4: .word PMi_BlinkPatternNo -_03802BE8: .word _03809F64 - - arm_func_start PM_SelfBlinkProc -PM_SelfBlinkProc: ;@ 0x03802BEC - stmdb sp!, {r4, r5, r6, lr} - ldr r0, _03802D04 ;@ =PMi_BlinkPatternNo - ldr r3, [r0] - cmp r3, #0 - bne _03802C28 - mov r0, #3 - mov r1, #102 ;@ 0x66 - mov r2, #1 - mov r3, r2 - bl SPIi_SetEntry - cmp r0, #0 - beq _03802CFC - mov r0, #1 - bl PM_SetLEDPattern - b _03802CFC -_03802C28: - cmp r3, #4 - bge _03802C54 - ldr r0, _03802D08 ;@ =PMi_LEDStatus - ldr r0, [r0] - cmp r3, r0 - beq _03802CFC - mov r0, #3 - mov r1, #102 ;@ 0x66 - mov r2, #1 - bl SPIi_SetEntry - b _03802CFC -_03802C54: - ldr r6, _03802D0C ;@ =PMi_BlinkPatternData - sub r1, r3, #4 - mov r0, #12 - mul r5, r1, r0 - add r4, r6, r5 - ldr r0, _03802D10 ;@ =_03809F64 - ldr r0, [r0] - ldrh r1, [r4, #10] - bl _u32_div_f - ldr r5, [r6, r5] - ldr lr, [r4, #4] - mov r3, #0 - mov r2, #-2147483648 ;@ 0x80000000 - mov ip, r3, lsr r0 - rsb r1, r0, #32 - orr ip, ip, r2, lsl r1 - sub r1, r0, #32 - orr ip, ip, r2, lsr r1 - and r0, lr, r2, lsr r0 - and r1, r5, ip - cmp r0, r3 - cmpeq r1, r3 - movne r3, #1 - moveq r3, #2 - ldr r0, _03802D10 ;@ =_03809F64 - ldr r1, [r0] - add ip, r1, #1 - str ip, [r0] - ldrh r2, [r4, #8] - ldrh r1, [r4, #10] - mul r1, r2, r1 - cmp ip, r1 - movcs r1, #0 - strcs r1, [r0] - ldr r0, _03802D08 ;@ =PMi_LEDStatus - ldr r0, [r0] - cmp r3, r0 - beq _03802CFC - mov r0, #3 - mov r1, #102 ;@ 0x66 - mov r2, #1 - bl SPIi_SetEntry -_03802CFC: - ldmia sp!, {r4, r5, r6, lr} - bx lr -_03802D04: .word PMi_BlinkPatternNo -_03802D08: .word PMi_LEDStatus -_03802D0C: .word PMi_BlinkPatternData -_03802D10: .word _03809F64 - - arm_func_start FUN_03802D14 -FUN_03802D14: ;@ 0x03802D14 - stmdb sp!, {r4, r5, r6, r7, lr} - ldr r4, _03802E6C ;@ =_03809F6C - ldrh r5, [r4, #38] ;@ 0x26 - and r0, r5, #4 - cmp r0, #4 - ldrh r6, [r4, #56] ;@ 0x38 - ldrneh r7, [r4, #58] ;@ 0x3a - ldreq r7, _03802E70 ;@ =0x0000FFFF - bl SPIi_CheckEntry - cmp r0, #0 - bne _03802D80 - mov r0, #2 - bl SPIi_CheckException - cmp r0, #0 - beq _03802D80 - and r0, r5, #1 - cmp r0, #1 - bne _03802D70 - bl MIC_ExecSampling12 - tst r5, #2 - moveq r7, r0 - eorne r7, r0, #32768 ;@ 0x8000 - b _03802D80 -_03802D70: - bl MIC_ExecSampling8 - tst r5, #2 - moveq r7, r0 - eorne r7, r0, #128 ;@ 0x80 -_03802D80: - and r0, r5, #1 - ldr r3, _03802E74 ;@ =0x027FFC00 - ldr r1, [r4, #44] ;@ 0x2c - cmp r0, #1 - bne _03802DB0 - ldr r2, [r4, #40] ;@ 0x28 - strh r7, [r2, r1]! - str r2, [r3, #912] ;@ 0x390 - add r3, r3, #916 ;@ 0x394 - strh r7, [r3] - add r1, r1, #2 - b _03802DE8 -_03802DB0: - and r7, r7, #255 ;@ 0xff - tst r1, #1 - bne _03802DC8 - mov r6, r7 - add r1, r1, #1 - b _03802DE8 -_03802DC8: - orr r0, r6, r7, lsl #8 - ldr r2, [r4, #40] ;@ 0x28 - sub r1, r1, #1 - strh r0, [r2, r1]! - str r2, [r3, #912] ;@ 0x390 - add r3, r3, #916 ;@ 0x394 - strh r0, [r3] - add r1, r1, #2 -_03802DE8: - strh r6, [r4, #56] ;@ 0x38 - strh r7, [r4, #58] ;@ 0x3a - ldr r0, [r4, #48] ;@ 0x30 - cmp r1, r0 - movcs r1, #0 - str r1, [r4, #44] ;@ 0x2c - bcc _03802E64 - ldrh r0, [r4, #36] ;@ 0x24 - and r0, r0, #16 - cmp r0, #16 - bne _03802E24 - mov r0, #81 ;@ 0x51 - mov r1, #0 - bl SPIi_ReturnResult - b _03802E64 -_03802E24: - mov r0, #2 - mov r1, #66 ;@ 0x42 - mov r2, #0 - bl SPIi_SetEntry - cmp r0, #0 - bne _03802E4C - mov r0, #81 ;@ 0x51 - mov r1, #4 - bl SPIi_ReturnResult - b _03802E64 -_03802E4C: - mov r0, #4 - str r0, [r4, #32] - ldr r1, _03802E78 ;@ =0x0400010E - ldrh r0, [r1] - bic r0, r0, #128 ;@ 0x80 - strh r0, [r1] -_03802E64: - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_03802E6C: .word _03809F6C -_03802E70: .word 0x0000FFFF -_03802E74: .word 0x027FFC00 -_03802E78: .word 0x0400010E - - arm_func_start FUN_03802E7C -FUN_03802E7C: ;@ 0x03802E7C - stmfd sp!, {lr} - sub sp, sp, #4 - bl FUN_03802D14 - ldr r1, _03802EB0 ;@ =0x0380FFF8 - ldr r0, [r1] - orr r0, r0, #64 ;@ 0x40 - str r0, [r1] - mov r1, #64 ;@ 0x40 - ldr r0, _03802EB4 ;@ =0x04000214 - str r1, [r0] - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03802EB0: .word 0x0380FFF8 -_03802EB4: .word 0x04000214 - - arm_func_start MIC_ExecuteProcess -MIC_ExecuteProcess: ;@ 0x03802EB8 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r5, r0 - ldr r2, [r5, #4] - cmp r2, #64 ;@ 0x40 - beq _03802EE4 - cmp r2, #65 ;@ 0x41 - beq _03802FB0 - cmp r2, #66 ;@ 0x42 - beq _0380304C - b _038030F0 -_03802EE4: - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #2 - bl SPIi_CheckException - cmp r0, #0 - bne _03802F1C - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, [r5, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #4 - bl SPIi_ReturnResult - b _038030F0 -_03802F1C: - mov r0, #2 - bl SPIi_GetException - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, [r5, #8] - and r0, r0, #1 - cmp r0, #1 - bne _03802F68 - bl MIC_ExecSampling12 - ldr r1, [r5, #8] - ands r1, r1, #2 - eorne r0, r0, #32768 ;@ 0x8000 - movne r0, r0, lsl #16 - movne r0, r0, lsr #16 - ldr r1, _038030FC ;@ =0x027FFF94 - strh r0, [r1] - ldr r0, _03803100 ;@ =0x027FFF90 - str r1, [r0] - b _03802F90 -_03802F68: - bl MIC_ExecSampling8 - ldr r1, [r5, #8] - ands r1, r1, #2 - eorne r0, r0, #128 ;@ 0x80 - movne r0, r0, lsl #16 - movne r0, r0, lsr #16 - ldr r1, _038030FC ;@ =0x027FFF94 - strh r0, [r1] - ldr r0, _03803100 ;@ =0x027FFF90 - str r1, [r0] -_03802F90: - ldr r0, [r5, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #0 - bl SPIi_ReturnResult - mov r0, #2 - bl SPIi_ReleaseException - b _038030F0 -_03802FB0: - ldr r0, _03803104 ;@ =_03809F6C - ldr r1, [r0, #32] - cmp r1, #1 - bne _03803038 - mov r1, #0 - strh r1, [r0, #58] ;@ 0x3a - strh r1, [r0, #56] ;@ 0x38 - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #64 ;@ 0x40 - bl OS_EnableIrqMask - mov r0, #64 ;@ 0x40 - ldr r1, _03803108 ;@ =FUN_03802E7C - bl MIC_SetIrqFunction - bl MIC_EnableMultipleInterrupt - ldr r0, _03803104 ;@ =_03809F6C - ldrh r2, [r0, #52] ;@ 0x34 - ldr r1, _0380310C ;@ =0x0400010C - strh r2, [r1] - ldrh r0, [r0, #54] ;@ 0x36 - orr r1, r0, #192 ;@ 0xc0 - ldr r0, _03803110 ;@ =0x0400010E - strh r1, [r0] - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, [r5, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #0 - bl SPIi_ReturnResult - mov r1, #2 - ldr r0, _03803104 ;@ =_03809F6C - str r1, [r0, #32] - b _038030F0 -_03803038: - mov r0, r2, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult - b _038030F0 -_0380304C: - ldr r0, _03803104 ;@ =_03809F6C - ldr r1, [r0, #32] - sub r0, r1, #3 - cmp r0, #1 - bhi _038030CC - ldr r1, _03803110 ;@ =0x0400010E - ldrh r0, [r1] - bic r0, r0, #128 ;@ 0x80 - strh r0, [r1] - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #64 ;@ 0x40 - mov r1, #0 - bl MIC_SetIrqFunction - bl MIC_DisableMultipleInterrupt - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, _03803104 ;@ =_03809F6C - ldr r0, [r0, #32] - cmp r0, #3 - bne _038030B0 - mov r0, #66 ;@ 0x42 - mov r1, #0 - bl SPIi_ReturnResult - b _038030BC -_038030B0: - mov r0, #81 ;@ 0x51 - mov r1, #0 - bl SPIi_ReturnResult -_038030BC: - mov r1, #0 - ldr r0, _03803104 ;@ =_03809F6C - str r1, [r0, #32] - b _038030F0 -_038030CC: - cmp r1, #3 - bne _038030E4 - mov r0, #66 ;@ 0x42 - mov r1, #3 - bl SPIi_ReturnResult - b _038030F0 -_038030E4: - mov r0, #81 ;@ 0x51 - mov r1, #3 - bl SPIi_ReturnResult -_038030F0: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_038030FC: .word 0x027FFF94 -_03803100: .word 0x027FFF90 -_03803104: .word _03809F6C -_03803108: .word FUN_03802E7C -_0380310C: .word 0x0400010C -_03803110: .word 0x0400010E - - arm_func_start FUN_03803114 -FUN_03803114: ;@ 0x03803114 - cmp r0, #65536 ;@ 0x10000 - bcs _03803138 - mov r2, #0 - ldr r1, _038031B4 ;@ =_03809F6C - strh r2, [r1, #54] ;@ 0x36 - rsb r0, r0, #65536 ;@ 0x10000 - strh r0, [r1, #52] ;@ 0x34 - mov r0, #1 - bx lr -_03803138: - cmp r0, #4194304 ;@ 0x400000 - bcs _03803160 - mov r2, #1 - ldr r1, _038031B4 ;@ =_03809F6C - strh r2, [r1, #54] ;@ 0x36 - mov r0, r0, lsr #6 - rsb r0, r0, #65536 ;@ 0x10000 - strh r0, [r1, #52] ;@ 0x34 - mov r0, r2 - bx lr -_03803160: - cmp r0, #16777216 ;@ 0x1000000 - bcs _03803188 - mov r2, #2 - ldr r1, _038031B4 ;@ =_03809F6C - strh r2, [r1, #54] ;@ 0x36 - mov r0, r0, lsr #8 - rsb r0, r0, #65536 ;@ 0x10000 - strh r0, [r1, #52] ;@ 0x34 - mov r0, #1 - bx lr -_03803188: - cmp r0, #67108864 ;@ 0x4000000 - movcs r0, #0 - bxcs lr - mov r2, #3 - ldr r1, _038031B4 ;@ =_03809F6C - strh r2, [r1, #54] ;@ 0x36 - mov r0, r0, lsr #10 - rsb r0, r0, #65536 ;@ 0x10000 - strh r0, [r1, #52] ;@ 0x34 - mov r0, #1 - bx lr -_038031B4: .word _03809F6C - - arm_func_start MIC_AnalyzeCommand -MIC_AnalyzeCommand: ;@ 0x038031B8 - stmdb sp!, {r4, lr} - ands r1, r0, #33554432 ;@ 0x2000000 - beq _038031E4 - mov r4, #0 - mov r3, r4 - ldr r1, _03803478 ;@ =_03809F6C -_038031D0: - mov r2, r4, lsl #1 - strh r3, [r1, r2] - add r4, r4, #1 - cmp r4, #16 - blt _038031D0 -_038031E4: - and r1, r0, #983040 ;@ 0xf0000 - mov r1, r1, lsr #16 - mov r2, r1, lsl #1 - ldr r1, _03803478 ;@ =_03809F6C - strh r0, [r1, r2] - ands r0, r0, #16777216 ;@ 0x1000000 - beq _03803470 - ldrh r3, [r1] - and r0, r3, #65280 ;@ 0xff00 - mov r0, r0, lsl #8 - mov r4, r0, lsr #16 - sub r0, r4, #64 ;@ 0x40 - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _03803464 - b _03803230 - b _03803270 - b _03803378 - b _038033DC -_03803230: - mov r0, #2 - mov r1, r4 - mov r2, #1 - and r3, r3, #255 ;@ 0xff - bl SPIi_SetEntry - cmp r0, #0 - bne _03803258 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult -_03803258: - mov r1, #0 - ldr r0, _0380347C ;@ =0x027FFF94 - strh r1, [r0] - ldr r0, _03803480 ;@ =0x027FFF90 - str r1, [r0] - b _03803470 -_03803270: - ldr r0, [r1, #32] - cmp r0, #0 - beq _0380328C - mov r0, r4 - mov r1, #3 - bl SPIi_ReturnResult - b _03803470 -_0380328C: - and r0, r3, #255 ;@ 0xff - strh r0, [r1, #36] ;@ 0x24 - ldrh r2, [r1, #2] - ldrh r0, [r1, #4] - orr r3, r0, r2, lsl #16 - cmp r3, #33554432 ;@ 0x2000000 - bcc _038032B0 - cmp r3, #37748736 ;@ 0x2400000 - bcc _038032C0 -_038032B0: - mov r0, r4 - mov r1, #2 - bl SPIi_ReturnResult - b _03803470 -_038032C0: - str r3, [r1, #40] ;@ 0x28 - ldrh r2, [r1, #6] - ldrh r0, [r1, #8] - orr r2, r0, r2, lsl #16 - add r0, r3, r2 - cmp r0, #37748736 ;@ 0x2400000 - bls _038032EC - mov r0, r4 - mov r1, #2 - bl SPIi_ReturnResult - b _03803470 -_038032EC: - str r2, [r1, #48] ;@ 0x30 - ldrh r2, [r1, #10] - ldrh r0, [r1, #12] - orr r0, r0, r2, lsl #16 - bl FUN_03803114 - cmp r0, #0 - bne _03803318 - mov r0, r4 - mov r1, #2 - bl SPIi_ReturnResult - b _03803470 -_03803318: - mov r2, #0 - ldr r0, _03803478 ;@ =_03809F6C - str r2, [r0, #44] ;@ 0x2c - ldrh r1, [r0, #36] ;@ 0x24 - and r1, r1, #7 - strh r1, [r0, #38] ;@ 0x26 - mov r0, #2 - mov r1, r4 - bl SPIi_SetEntry - cmp r0, #0 - bne _03803354 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult - b _03803470 -_03803354: - mov r1, #0 - ldr r0, _0380347C ;@ =0x027FFF94 - strh r1, [r0] - ldr r0, _03803480 ;@ =0x027FFF90 - str r1, [r0] - mov r1, #1 - ldr r0, _03803478 ;@ =_03809F6C - str r1, [r0, #32] - b _03803470 -_03803378: - ldr r0, [r1, #32] - cmp r0, #2 - beq _03803394 - mov r0, r4 - mov r1, #3 - bl SPIi_ReturnResult - b _03803470 -_03803394: - mov r0, #2 - mov r1, r4 - mov r2, #0 - bl SPIi_SetEntry - cmp r0, #0 - bne _038033BC - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult - b _03803470 -_038033BC: - mov r1, #3 - ldr r0, _03803478 ;@ =_03809F6C - str r1, [r0, #32] - ldr r1, _03803484 ;@ =0x0400010E - ldrh r0, [r1] - bic r0, r0, #128 ;@ 0x80 - strh r0, [r1] - b _03803470 -_038033DC: - ldr r0, [r1, #32] - cmp r0, #2 - beq _038033F8 - mov r0, r4 - mov r1, #3 - bl SPIi_ReturnResult - b _03803470 -_038033F8: - ldrh r2, [r1, #2] - ldrh r0, [r1, #4] - orr r0, r0, r2, lsl #16 - bl FUN_03803114 - cmp r0, #0 - bne _03803420 - mov r0, r4 - mov r1, #2 - bl SPIi_ReturnResult - b _03803470 -_03803420: - bl OS_DisableInterrupts - ldr ip, _03803484 ;@ =0x0400010E - ldrh r1, [ip] - bic r1, r1, #128 ;@ 0x80 - strh r1, [ip] - ldr r1, _03803478 ;@ =_03809F6C - ldrh r3, [r1, #52] ;@ 0x34 - ldr r2, _03803488 ;@ =0x0400010C - strh r3, [r2] - ldrh r1, [r1, #54] ;@ 0x36 - orr r1, r1, #192 ;@ 0xc0 - strh r1, [ip] - bl OS_RestoreInterrupts - mov r0, r4 - mov r1, #0 - bl SPIi_ReturnResult - b _03803470 -_03803464: - mov r0, r4 - mov r1, #1 - bl SPIi_ReturnResult -_03803470: - ldmia sp!, {r4, lr} - bx lr -_03803478: .word _03809F6C -_0380347C: .word 0x027FFF94 -_03803480: .word 0x027FFF90 -_03803484: .word 0x0400010E -_03803488: .word 0x0400010C - - arm_func_start MIC_Init -MIC_Init: ;@ 0x0380348C - mov r3, #0 - ldr r0, _038034C4 ;@ =_03809F6C - str r3, [r0, #32] - mov r2, r3 -_0380349C: - mov r1, r3, lsl #1 - strh r2, [r0, r1] - add r3, r3, #1 - cmp r3, #16 - blt _0380349C - ldr r1, _038034C8 ;@ =0x0400010E - ldrh r0, [r1] - bic r0, r0, #128 ;@ 0x80 - strh r0, [r1] - bx lr -_038034C4: .word _03809F6C -_038034C8: .word 0x0400010E - - arm_func_start MIC_ExecSampling12 -MIC_ExecSampling12: ;@ 0x038034CC - ldr r1, _03803580 ;@ =0x040001C0 -_038034D0: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038034D0 - ldr r0, _03803584 ;@ =0x00008A01 - strh r0, [r1] - mov r1, #228 ;@ 0xe4 - ldr r0, _03803588 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03803580 ;@ =0x040001C0 -_038034F4: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038034F4 - mov r1, #0 - ldr r0, _03803588 ;@ =0x040001C2 - strh r1, [r0] - ldr r2, _03803580 ;@ =0x040001C0 -_03803510: - ldrh r0, [r2] - ands r0, r0, #128 ;@ 0x80 - bne _03803510 - ldr r1, _03803588 ;@ =0x040001C2 - ldrh r0, [r1] - and r0, r0, #255 ;@ 0xff - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r0, r0, lsl #24 - mov r3, r0, lsr #16 - ldr r0, _0380358C ;@ =0x00008201 - strh r0, [r2] - mov r0, #0 - strh r0, [r1] - ldr r1, _03803580 ;@ =0x040001C0 -_0380354C: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _0380354C - ldr r0, _03803588 ;@ =0x040001C2 - ldrh r0, [r0] - and r0, r0, #255 ;@ 0xff - mov r0, r0, lsl #16 - orr r1, r3, r0, lsr #16 - ldr r0, _03803590 ;@ =0x00007FF8 - and r0, r1, r0 - mov r0, r0, lsl #17 - mov r0, r0, lsr #16 - bx lr -_03803580: .word 0x040001C0 -_03803584: .word 0x00008A01 -_03803588: .word 0x040001C2 -_0380358C: .word 0x00008201 -_03803590: .word 0x00007FF8 - - arm_func_start MIC_ExecSampling8 -MIC_ExecSampling8: ;@ 0x03803594 - ldr r1, _03803648 ;@ =0x040001C0 -_03803598: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03803598 - ldr r0, _0380364C ;@ =0x00008A01 - strh r0, [r1] - mov r1, #236 ;@ 0xec - ldr r0, _03803650 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03803648 ;@ =0x040001C0 -_038035BC: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038035BC - mov r1, #0 - ldr r0, _03803650 ;@ =0x040001C2 - strh r1, [r0] - ldr r2, _03803648 ;@ =0x040001C0 -_038035D8: - ldrh r0, [r2] - ands r0, r0, #128 ;@ 0x80 - bne _038035D8 - ldr r1, _03803650 ;@ =0x040001C2 - ldrh r0, [r1] - and r0, r0, #255 ;@ 0xff - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r0, r0, lsl #24 - mov r3, r0, lsr #16 - ldr r0, _03803654 ;@ =0x00008201 - strh r0, [r2] - mov r0, #0 - strh r0, [r1] - ldr r1, _03803648 ;@ =0x040001C0 -_03803614: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03803614 - ldr r0, _03803650 ;@ =0x040001C2 - ldrh r0, [r0] - and r0, r0, #255 ;@ 0xff - mov r0, r0, lsl #16 - orr r1, r3, r0, lsr #16 - ldr r0, _03803658 ;@ =0x00007F80 - and r0, r1, r0 - mov r0, r0, lsl #9 - mov r0, r0, lsr #16 - bx lr -_03803648: .word 0x040001C0 -_0380364C: .word 0x00008A01 -_03803650: .word 0x040001C2 -_03803654: .word 0x00008201 -_03803658: .word 0x00007F80 -_0380365C: - mov ip, #67108864 ;@ 0x4000000 - add r1, ip, #520 ;@ 0x208 - ldrh r0, [r1] - tst r0, r0 - bxeq lr - ldr r3, [ip, #528] ;@ 0x210 - ldr r1, [ip, #532] ;@ 0x214 - ands r2, r1, r3 - bxeq lr - ldr r0, _038037C8 ;@ =0x01DF3FFF - tst r2, r0 - streq r2, [ip, #532] ;@ 0x214 - bxeq lr - stmfd sp!, {lr} - mrs r0, SPSR - stmfd sp!, {r0} - stmdb sp, {sp, lr}^ - sub sp, sp, #8 - mov r0, #159 ;@ 0x9f - msr CPSR_c, r0 - ldr r1, _038037CC ;@ =OSi_ThreadInfo - ldrh r0, [r1, #2] - add r0, r0, #1 - strh r0, [r1, #2] - ldr r1, _038037D0 ;@ =_03809FA8 - cmp r0, #1 - moveq r0, sp - ldreq sp, [r1, #4] - streq r0, [r1, #4] - stmfd sp!, {r3} - ldr r1, _038037D4 ;@ =_038072C8 - ldr r0, [r1] - tst r0, r2 - strne r0, [ip, #532] ;@ 0x214 - ldrne r0, [r1, #4] - ldrne r3, _038037D8 ;@ =OS_IRQTable - ldrne r0, [r3, r0, lsl #2] - bne _03803738 - mov r3, #1 -_038036F8: - ldr r0, [r1, r3, lsl #3] - tst r0, r2 - addeq r3, r3, #1 - beq _038036F8 - str r0, [ip, #532] ;@ 0x214 - add r0, r1, r3, lsl #3 - ldr r2, [r0, #4] - ldr r3, _038037D8 ;@ =OS_IRQTable - ldr r0, [r3, r2, lsl #2] - ldr r2, _038037CC ;@ =OSi_ThreadInfo - ldrh r3, [r2, #2] - cmp r3, #1 - ldreq r2, [r1] - streq r2, [ip, #528] ;@ 0x210 - moveq r2, #31 - msreq CPSR_c, r2 -_03803738: - ldr r1, [ip, #528] ;@ 0x210 - stmfd sp!, {r1} - adr lr, _03803748 - bx r0 -_03803748: - mov r0, #159 ;@ 0x9f - msr CPSR_c, r0 - mov ip, #67108864 ;@ 0x4000000 - ldmia sp!, {r0} - ldr r1, [ip, #528] ;@ 0x210 - eor r2, r0, r1 - and r1, r2, r1 - and r0, r2, r0 - ldmia sp!, {r3} - orr r3, r3, r1 - bic r3, r3, r0 - str r3, [ip, #528] ;@ 0x210 - ldr r2, _038037CC ;@ =OSi_ThreadInfo - ldr r3, _038037D0 ;@ =_03809FA8 - ldrh r0, [r2, #2] - subs r1, r0, #1 - strh r1, [r2, #2] - moveq r0, sp - ldreq sp, [r3, #4] - streq r0, [r3, #4] - mov r0, #146 ;@ 0x92 - msr CPSR_c, r0 - ldmia sp, {sp, lr}^ - nop ;@ (mov r0, r0) - add sp, sp, #8 - ldmia sp!, {r0} - msr SPSR_fc, r0 - tst r1, r1 - ldreq r0, _038037DC ;@ =OS_IrqHandler_ThreadSwitch - addeq lr, pc, #0 - bxeq r0 - ldmia sp!, {pc} -_038037C8: .word 0x01DF3FFF -_038037CC: .word OSi_ThreadInfo -_038037D0: .word _03809FA8 -_038037D4: .word _038072C8 -_038037D8: .word OS_IRQTable -_038037DC: .word OS_IrqHandler_ThreadSwitch - - arm_func_start MIC_DisableMultipleInterrupt -MIC_DisableMultipleInterrupt: ;@ 0x038037E0 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _03803820 ;@ =0x0380FFFC - ldr r1, [r0] - ldr r0, _03803824 ;@ =_0380365C - cmp r1, r0 - bne _03803814 - bl OS_DisableInterrupts - ldr r1, _03803828 ;@ =_03809FA8 - ldr r2, [r1, #12] - ldr r1, _03803820 ;@ =0x0380FFFC - str r2, [r1] - bl OS_RestoreInterrupts -_03803814: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03803820: .word 0x0380FFFC -_03803824: .word _0380365C -_03803828: .word _03809FA8 - - arm_func_start MIC_EnableMultipleInterrupt -MIC_EnableMultipleInterrupt: ;@ 0x0380382C - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _03803888 ;@ =0x0380FFFC - ldr r2, [r0] - ldr r0, _0380388C ;@ =_0380365C - cmp r2, r0 - beq _0380387C - mov r1, #0 - ldr r0, _03803890 ;@ =_03809FA8 - str r1, [r0] - ldr r1, _03803894 ;@ =0x0380FE80 - str r1, [r0, #4] - mov r1, #64 ;@ 0x40 - str r1, [r0, #8] - str r2, [r0, #12] - bl OS_DisableInterrupts - ldr r2, _0380388C ;@ =_0380365C - ldr r1, _03803888 ;@ =0x0380FFFC - str r2, [r1] - bl OS_RestoreInterrupts -_0380387C: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03803888: .word 0x0380FFFC -_0380388C: .word _0380365C -_03803890: .word _03809FA8 -_03803894: .word 0x0380FE80 - - arm_func_start MIC_SetIrqFunction -MIC_SetIrqFunction: ;@ 0x03803898 - mov ip, #0 - ldr r2, _038038BC ;@ =OS_IRQTable -_038038A0: - ands r3, r0, #1 - strne r1, [r2, ip, lsl #2] - mov r0, r0, lsr #1 - add ip, ip, #1 - cmp ip, #25 - blt _038038A0 - bx lr -_038038BC: .word OS_IRQTable - - arm_func_start CTRDGi_SendtoPxi -CTRDGi_SendtoPxi: ;@ 0x038038C0 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r0 - mov r6, #1 - mov r5, #13 - mov r4, #0 - b _038038E4 -_038038DC: - mov r0, r6 - bl FUN_037F8CB4 -_038038E4: - mov r0, r5 - mov r1, r7 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - bne _038038DC - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr - - arm_func_start CTRDGi_UnlockByProcessor -CTRDGi_UnlockByProcessor: ;@ 0x03803908 - stmdb sp!, {r4, lr} - mov r4, r1 - ldr r1, [r4] - cmp r1, #0 - bne _03803920 - bl OS_UnLockCartridge -_03803920: - ldr r0, [r4, #4] - bl OS_RestoreInterrupts - ldmia sp!, {r4, lr} - bx lr - - arm_func_start CTRDGi_LockByProcessor -CTRDGi_LockByProcessor: ;@ 0x03803930 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r5, r0 - mov r4, r1 - bl OS_DisableInterrupts - str r0, [r4, #4] - ldr r0, _0380398C ;@ =0x027FFFE8 - bl OS_ReadOwnerOfLockWord - and r0, r0, #128 ;@ 0x80 - str r0, [r4] - ldr r0, [r4] - cmp r0, #0 - bne _03803974 - mov r0, r5 - bl OS_TryLockCartridge - cmp r0, #0 - bne _0380397C -_03803974: - mov r0, #1 - b _03803980 -_0380397C: - mov r0, #0 -_03803980: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_0380398C: .word 0x027FFFE8 - - arm_func_start CTRDGi_RestoreAccessCycle -CTRDGi_RestoreAccessCycle: ;@ 0x03803990 - ldr r3, [r0] - ldr r2, _038039C0 ;@ =0x04000204 - ldrh r1, [r2] - bic r1, r1, #12 - orr r1, r1, r3, lsl #2 - strh r1, [r2] - ldr r1, [r0, #4] - ldrh r0, [r2] - bic r0, r0, #16 - orr r0, r0, r1, lsl #4 - strh r0, [r2] - bx lr -_038039C0: .word 0x04000204 - - arm_func_start CTRDGi_ChangeLatestAccessCycle -CTRDGi_ChangeLatestAccessCycle: ;@ 0x038039C4 - ldr r2, _03803A08 ;@ =0x04000204 - ldrh r1, [r2] - and r1, r1, #12 - mov r1, r1, asr #2 - str r1, [r0] - ldrh r1, [r2] - and r1, r1, #16 - mov r1, r1, asr #4 - str r1, [r0, #4] - ldrh r0, [r2] - bic r0, r0, #12 - orr r0, r0, #12 - strh r0, [r2] - ldrh r0, [r2] - bic r0, r0, #16 - strh r0, [r2] - bx lr -_03803A08: .word 0x04000204 - - arm_func_start CTRDG_IsExisting -CTRDG_IsExisting: ;@ 0x03803A0C - stmdb sp!, {r4, lr} - sub sp, sp, #16 - mov r4, #1 - ldr r2, _03803B20 ;@ =0x027FFC30 - ldrh r1, [r2] - ldr r0, _03803B24 ;@ =0x0000FFFF - cmp r1, r0 - moveq r0, #0 - beq _03803B14 - ldrb r0, [r2, #5] - mov r0, r0, lsl #30 - mov r0, r0, lsr #31 - cmp r0, #1 - moveq r0, #0 - beq _03803B14 - ldr r0, _03803B28 ;@ =CTRDGi_Work - ldrh r0, [r0, #2] - add r1, sp, #0 - bl CTRDGi_LockByProcessor - cmp r0, #0 - bne _03803A70 - ldr r0, [sp, #4] - bl OS_RestoreInterrupts - mov r0, r4 - b _03803B14 -_03803A70: - add r0, sp, #8 - bl CTRDGi_ChangeLatestAccessCycle - mov r2, #134217728 ;@ 0x8000000 - ldrb r3, [r2, #178] ;@ 0xb2 - cmp r3, #150 ;@ 0x96 - bne _03803A9C - ldr r0, _03803B20 ;@ =0x027FFC30 - ldrh r1, [r0] - ldrh r0, [r2, #190] ;@ 0xbe - cmp r1, r0 - bne _03803AE4 -_03803A9C: - cmp r3, #150 ;@ 0x96 - beq _03803ABC - ldr r0, _03803B20 ;@ =0x027FFC30 - ldrh r1, [r0] - ldr r0, _03803B2C ;@ =0x0801FFFE - ldrh r0, [r0] - cmp r1, r0 - bne _03803AE4 -_03803ABC: - ldr r2, _03803B20 ;@ =0x027FFC30 - ldr r1, [r2, #8] - mov r0, #134217728 ;@ 0x8000000 - ldr r0, [r0, #172] ;@ 0xac - cmp r1, r0 - beq _03803AF8 - ldrb r0, [r2, #5] - mov r0, r0, lsl #31 - movs r0, r0, lsr #31 - beq _03803AF8 -_03803AE4: - ldr r1, _03803B20 ;@ =0x027FFC30 - ldrb r0, [r1, #5] - orr r0, r0, #2 - strb r0, [r1, #5] - mov r4, #0 -_03803AF8: - add r0, sp, #8 - bl CTRDGi_RestoreAccessCycle - ldr r0, _03803B28 ;@ =CTRDGi_Work - ldrh r0, [r0, #2] - add r1, sp, #0 - bl CTRDGi_UnlockByProcessor - mov r0, r4 -_03803B14: - add sp, sp, #16 - ldmia sp!, {r4, lr} - bx lr -_03803B20: .word 0x027FFC30 -_03803B24: .word 0x0000FFFF -_03803B28: .word CTRDGi_Work -_03803B2C: .word 0x0801FFFE - - arm_func_start CTRDG_IsPulledOut -CTRDG_IsPulledOut: ;@ 0x03803B30 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r2, _03803B80 ;@ =0x027FFC30 - ldrh r1, [r2] - ldr r0, _03803B84 ;@ =0x0000FFFF - cmp r1, r0 - moveq r0, #0 - beq _03803B74 - ldrb r0, [r2, #5] - mov r0, r0, lsl #30 - movs r0, r0, lsr #31 - bne _03803B64 - bl CTRDG_IsExisting -_03803B64: - ldr r0, _03803B80 ;@ =0x027FFC30 - ldrb r0, [r0, #5] - mov r0, r0, lsl #30 - mov r0, r0, lsr #31 -_03803B74: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03803B80: .word 0x027FFC30 -_03803B84: .word 0x0000FFFF - - arm_func_start CTRDGi_InitCommon -CTRDGi_InitCommon: ;@ 0x03803B88 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #0 - str r0, [sp] - add r0, sp, #0 - ldr r1, _03803BC0 ;@ =CTRDGi_Work - ldr r2, _03803BC4 ;@ =0x05000001 - bl FUN_03803BC8 - bl OS_GetLockID - ldr r1, _03803BC0 ;@ =CTRDGi_Work - strh r0, [r1, #2] - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03803BC0: .word CTRDGi_Work -_03803BC4: .word 0x05000001 - - arm_func_start FUN_03803BC8 -FUN_03803BC8: ;@ 0x03803BC8 - ldr ip, _03803BD0 ;@ =SVC_CpuSet - bx ip -_03803BD0: .word SVC_CpuSet - - arm_func_start FUN_03803BD4 -FUN_03803BD4: ;@ 0x03803BD4 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - and r0, r1, #63 ;@ 0x3f - cmp r0, #3 - bne _03803C40 - ldr r0, _03803C50 ;@ =0x01FFFFC0 - and r0, r1, r0 - mov r2, r0, lsr #6 - ldr r1, _03803C54 ;@ =0x04000204 - ldrh r0, [r1] - bic r0, r0, #96 ;@ 0x60 - orr r0, r0, r2, lsl #5 - strh r0, [r1] - mov r7, #1 - mov r6, #17 - mov r5, #18 - mov r4, #0 - b _03803C24 -_03803C1C: - mov r0, r7 - bl FUN_037F8CB4 -_03803C24: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - bne _03803C1C - b _03803C44 -_03803C40: - bl OS_Terminate -_03803C44: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_03803C50: .word 0x01FFFFC0 -_03803C54: .word 0x04000204 - - arm_func_start FUN_03803C58 -FUN_03803C58: ;@ 0x03803C58 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #0 - bl CTRDG_VibPulseEdgeUpdate - bl SND_BeginSleep - bl WVR_Shutdown - bl OS_Terminate - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_CheckPullOut_Polling -CTRDG_CheckPullOut_Polling: ;@ 0x03803C80 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - ldr r1, _03803D80 ;@ =_03807708 - ldr r3, [r1] - mvn r0, #0 - cmp r3, r0 - ldreq r0, _03803D84 ;@ =0x027FFC3C - ldreq r0, [r0] - addeq r0, r0, #10 - streq r0, [r1] - beq _03803D74 - ldr r0, _03803D88 ;@ =_03809FCC - ldr r0, [r0] - cmp r0, #0 - bne _03803D74 - ldr r0, _03803D8C ;@ =_03809FC8 - ldr r0, [r0] - cmp r0, #0 - bne _03803D74 - ldr r2, _03803D84 ;@ =0x027FFC3C - ldr r0, [r2] - cmp r0, r3 - bcc _03803D74 - ldr r0, [r2] - add r0, r0, #10 - str r0, [r1] - bl CTRDG_IsPulledOut - ldr r1, _03803D8C ;@ =_03809FC8 - str r0, [r1] - bl CTRDG_IsExisting - cmp r0, #0 - bne _03803D28 - ldr r0, _03803D90 ;@ =_03807704 - ldr r0, [r0] - cmp r0, #0 - movne r1, #1 - ldrne r0, _03803D88 ;@ =_03809FCC - strne r1, [r0] - bne _03803D74 - mov r1, #1 - ldr r0, _03803D8C ;@ =_03809FC8 - str r1, [r0] -_03803D28: - mov r7, #0 - ldr r0, _03803D90 ;@ =_03807704 - str r7, [r0] - ldr r0, _03803D8C ;@ =_03809FC8 - ldr r0, [r0] - cmp r0, #0 - beq _03803D74 - mov r6, #100 ;@ 0x64 - mov r5, #13 - mov r4, #17 - b _03803D5C -_03803D54: - mov r0, r6 - bl OS_Sleep -_03803D5C: - mov r0, r5 - mov r1, r4 - mov r2, r7 - bl PXI_SendWordByFifo - cmp r0, #0 - bne _03803D54 -_03803D74: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_03803D80: .word _03807708 -_03803D84: .word 0x027FFC3C -_03803D88: .word _03809FCC -_03803D8C: .word _03809FC8 -_03803D90: .word _03807704 - - arm_func_start FUN_03803D94 -FUN_03803D94: ;@ 0x03803D94 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r0 - mov r0, #134217728 ;@ 0x8000000 - add r6, r0, #4 - mov r4, #1 - bl OS_GetLockID - mov r0, r0, lsl #16 - mov r5, r0, lsr #16 - mov r0, r5 - bl OS_LockCartridge - mov r1, #0 - ldr r0, _03803E3C ;@ =0x0000FFFF - eor r2, r0, #3 - mov r2, r2, lsl #16 - mov lr, r2, lsr #16 - eor r2, r0, #132 ;@ 0x84 - mov r2, r2, lsl #16 - mov r8, r2, lsr #16 - b _03803E18 -_03803DE0: - mov ip, r0 - cmp r1, #76 ;@ 0x4c - moveq ip, r8 - beq _03803DF8 - cmp r1, #77 ;@ 0x4d - moveq ip, lr -_03803DF8: - mov r3, r1, lsl #1 - ldrh r2, [r7, r3] - and ip, ip, r2 - ldrh r2, [r6, r3] - cmp ip, r2 - movne r4, #0 - bne _03803E20 - add r1, r1, #1 -_03803E18: - cmp r1, #78 ;@ 0x4e - blt _03803DE0 -_03803E20: - mov r0, r5 - bl OS_UnLockCartridge - mov r0, r5 - bl OS_ReleaseLockID - mov r0, r4 - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_03803E3C: .word 0x0000FFFF - - arm_func_start FUN_03803E40 -FUN_03803E40: ;@ 0x03803E40 - ldr r1, _03803E54 ;@ =current_vib - str r0, [r1] - ldr r1, _03803E58 ;@ =0x08001000 - strh r0, [r1] - bx lr -_03803E54: .word current_vib -_03803E58: .word 0x08001000 - - arm_func_start CTRDG_VibPulseEdgeUpdate -CTRDG_VibPulseEdgeUpdate: ;@ 0x03803E5C - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - sub sp, sp, #4 - movs r5, r0 - beq _03803E9C - ldr r0, [r5] - cmp r0, #0 - bne _03803E9C - ldr r0, [r5, #68] ;@ 0x44 - add r0, r0, #1 - str r0, [r5, #68] ;@ 0x44 - ldr r1, [r5, #64] ;@ 0x40 - cmp r1, #0 - beq _03803E9C - ldr r0, [r5, #68] ;@ 0x44 - cmp r0, r1 - movhi r5, #0 -_03803E9C: - cmp r5, #0 - beq _03803EB0 - ldr r0, [r5, #60] ;@ 0x3c - cmp r0, #0 - bne _03803F48 -_03803EB0: - bl OS_DisableInterrupts - mov r9, r0 - ldr r0, _03804068 ;@ =current_vib - ldr r0, [r0] - cmp r0, #2 - bne _03803F34 - mov r8, #0 - ldr r7, _0380406C ;@ =0x027FFFE8 - ldr r4, _03804070 ;@ =_03809FBC - ldr fp, _03804074 ;@ =0x000080E8 - mov r6, r8 - mov r5, #1 - b _03803F2C -_03803EE4: - mov r0, r7 - bl OS_ReadOwnerOfLockWord - ands sl, r0, #128 ;@ 0x80 - bne _03803F04 - ldrh r0, [r4] - bl OS_TryLockCartridge - cmp r0, #0 - bne _03803F24 -_03803F04: - mov r0, r6 - bl FUN_03803E40 - mov r8, r5 - cmp sl, #0 - bne _03803F2C - ldrh r0, [r4] - bl OS_UnlockCartridge - b _03803F2C -_03803F24: - mov r0, fp - bl OS_SpinWait -_03803F2C: - cmp r8, #0 - beq _03803EE4 -_03803F34: - ldr r0, _03804078 ;@ =_03809FEC - bl OS_CancelAlarm - mov r0, r9 - bl OS_RestoreInterrupts - b _0380405C -_03803F48: - cmp r5, #0 - beq _0380405C - ldr r0, _0380406C ;@ =0x027FFFE8 - bl OS_ReadOwnerOfLockWord - ands r4, r0, #128 ;@ 0x80 - bne _03803F74 - ldr r0, _03804070 ;@ =_03809FBC - ldrh r0, [r0] - bl OS_TryLockCartridge - cmp r0, #0 - bne _03804044 -_03803F74: - ldr r1, [r5] - ldr r0, [r5, #4] - cmp r1, r0 - bne _03803FB0 - mov r0, #0 - bl FUN_03803E40 - str r5, [sp] - ldr r0, _03804078 ;@ =_03809FEC - ldr r1, [r5, #8] - mov r2, #0 - ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate - bl OS_SetAlarm - mov r0, #0 - str r0, [r5] - b _0380402C -_03803FB0: - ands r0, r1, #1 - beq _03803FF4 - mov r0, #0 - bl FUN_03803E40 - str r5, [sp] - ldr r0, _03804078 ;@ =_03809FEC - ldr r1, [r5] - mov r1, r1, lsr #1 - add r1, r5, r1, lsl #2 - ldr r1, [r1, #36] ;@ 0x24 - mov r2, #0 - ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate - bl OS_SetAlarm - ldr r0, [r5] - add r0, r0, #1 - str r0, [r5] - b _0380402C -_03803FF4: - mov r0, #2 - bl FUN_03803E40 - str r5, [sp] - ldr r0, _03804078 ;@ =_03809FEC - ldr r1, [r5] - mov r1, r1, lsr #1 - add r1, r5, r1, lsl #2 - ldr r1, [r1, #12] - mov r2, #0 - ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate - bl OS_SetAlarm - ldr r0, [r5] - add r0, r0, #1 - str r0, [r5] -_0380402C: - cmp r4, #0 - bne _0380405C - ldr r0, _03804070 ;@ =_03809FBC - ldrh r0, [r0] - bl OS_UnlockCartridge - b _0380405C -_03804044: - str r5, [sp] - ldr r0, _03804078 ;@ =_03809FEC - ldr r1, _03804080 ;@ =0x0000020B - mov r2, #0 - ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate - bl OS_SetAlarm -_0380405C: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - bx lr -_03804068: .word current_vib -_0380406C: .word 0x027FFFE8 -_03804070: .word _03809FBC -_03804074: .word 0x000080E8 -_03804078: .word _03809FEC -_0380407C: .word CTRDG_VibPulseEdgeUpdate -_03804080: .word 0x0000020B -_03804084: - mov r0, r1 - ldr ip, _03804090 ;@ =CTRDG_VibPulseEdgeUpdate - bx ip -_03804090: .word CTRDG_VibPulseEdgeUpdate - - arm_func_start FUN_03804094 -FUN_03804094: ;@ 0x03804094 - stmfd sp!, {lr} - sub sp, sp, #4 - and r0, r1, #63 ;@ 0x3f - cmp r0, #2 - bne _038040B0 - bl FUN_03803C58 - b _038040B4 -_038040B0: - bl OS_Terminate -_038040B4: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_038040C0 -FUN_038040C0: ;@ 0x038040C0 - stmfd sp!, {lr} - sub sp, sp, #4 - and r0, r1, #63 ;@ 0x3f - cmp r0, #1 - ldreq r0, _038040F4 ;@ =_03809FD4 - streq r1, [r0] - moveq r1, #1 - streq r1, [r0, #16] - beq _038040E8 - bl OS_Terminate -_038040E8: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_038040F4: .word _03809FD4 - - arm_func_start CTRDGi_InitModuleInfo -CTRDGi_InitModuleInfo: ;@ 0x038040F8 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - ldr r0, _038041C8 ;@ =_03809FC4 - ldr r1, [r0] - cmp r1, #0 - bne _038041BC - mov r1, #1 - str r1, [r0] - ldr r0, _038041CC ;@ =0x04000300 - ldrh r0, [r0] - ands r0, r0, #1 - beq _038041BC - mov r0, #262144 ;@ 0x40000 - bl OS_SetIrqMask - mov r5, r0 - ldr r1, _038041D0 ;@ =0x04000208 - ldrh r4, [r1] - mov r0, #1 - strh r0, [r1] - mov r7, #256 ;@ 0x100 - ldr r6, _038041D4 ;@ =_03809FD4 - b _03804158 -_03804150: - mov r0, r7 - bl FUN_037F8CB4 -_03804158: - ldr r0, [r6, #16] - cmp r0, #1 - bne _03804150 - ldr r1, [r6] - ldr r0, _038041D8 ;@ =0x01FFFFC0 - and r0, r1, r0 - mov r0, r0, lsr #6 - mov r0, r0, lsl #5 - add r0, r0, #33554432 ;@ 0x2000000 - add r0, r0, #4 - bl FUN_03803D94 - ldr r2, _038041DC ;@ =0x027FFC30 - ldrb r1, [r2, #5] - bic r1, r1, #1 - and r0, r0, #255 ;@ 0xff - and r0, r0, #1 - orr r0, r1, r0 - strb r0, [r2, #5] - mov r0, #1 - bl CTRDGi_SendtoPxi - ldr r1, _038041D0 ;@ =0x04000208 - ldrh r0, [r1] - strh r4, [r1] - mov r0, r5 - bl OS_SetIrqMask -_038041BC: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_038041C8: .word _03809FC4 -_038041CC: .word 0x04000300 -_038041D0: .word 0x04000208 -_038041D4: .word _03809FD4 -_038041D8: .word 0x01FFFFC0 -_038041DC: .word 0x027FFC30 - - arm_func_start CTRDG_Init -CTRDG_Init: ;@ 0x038041E0 - stmfd sp!, {lr} - sub sp, sp, #4 - bl OS_InitTick - bl OS_InitAlarm - ldr r0, _03804270 ;@ =_03809FEC - bl OS_CreateAlarm - ldr r0, _03804274 ;@ =_03809FD0 - ldr r1, [r0] - cmp r1, #0 - bne _03804264 - mov r1, #1 - str r1, [r0] - bl CTRDGi_InitCommon - bl OS_GetLockID - mvn r1, #2 - cmp r0, r1 - beq _03804264 - ldr r1, _03804278 ;@ =_03809FBC - strh r0, [r1] - bl PXI_Init - mov r0, #13 - ldr r1, _0380427C ;@ =FUN_038040C0 - bl PXI_SetFifoRecvCallback - bl CTRDGi_InitModuleInfo - mov r0, #13 - ldr r1, _03804280 ;@ =FUN_03804094 - bl PXI_SetFifoRecvCallback - mov r0, #16 - ldr r1, _03804284 ;@ =_03804084 - bl PXI_SetFifoRecvCallback - mov r0, #17 - ldr r1, _03804288 ;@ =FUN_03803BD4 - bl PXI_SetFifoRecvCallback -_03804264: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03804270: .word _03809FEC -_03804274: .word _03809FD0 -_03804278: .word _03809FBC -_0380427C: .word FUN_038040C0 -_03804280: .word FUN_03804094 -_03804284: .word _03804084 -_03804288: .word FUN_03803BD4 - - arm_func_start FUN_0380428C -FUN_0380428C: ;@ 0x0380428C - stmfd sp!, {lr} - sub sp, sp, #4 - add r0, sp, #0 - bl NVRAM_ReadStatusRegister - ldrh r1, [sp] - ands r0, r1, #1 - movne r0, #0 - bne _038042B8 - ands r0, r1, #2 - movne r0, #1 - moveq r0, #0 -_038042B8: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_038042C4 -FUN_038042C4: ;@ 0x038042C4 - stmfd sp!, {lr} - sub sp, sp, #4 - add r0, sp, #0 - bl NVRAM_ReadStatusRegister - ldrh r0, [sp] - ands r0, r0, #1 - moveq r0, #1 - movne r0, #0 - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start NVRAM_ExecuteProcess -NVRAM_ExecuteProcess: ;@ 0x038042F0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r4, r0 - bl OS_DisableInterrupts - mov r5, r0 - mov r0, #1 - bl SPIi_CheckException - cmp r0, #0 - bne _03804334 - mov r0, r5 - bl OS_RestoreInterrupts - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #4 - bl SPIi_ReturnResult - b _038045C0 -_03804334: - mov r0, #1 - bl SPIi_GetException - mov r0, r5 - bl OS_RestoreInterrupts - ldr r0, [r4, #4] - sub r0, r0, #32 - cmp r0, #13 - addls pc, pc, r0, lsl #2 - b _03804584 - b _03804390 - b _03804398 - b _038043A0 - b _038043AC - b _038043EC - b _0380442C - b _03804474 - b _038044BC - b _038044F4 - b _0380452C - b _03804534 - b _0380453C - b _03804570 - b _0380457C -_03804390: - bl NVRAM_WriteEnable - b _038045A4 -_03804398: - bl NVRAM_WriteDisable - b _038045A4 -_038043A0: - ldr r0, [r4, #16] - bl NVRAM_ReadStatusRegister - b _038045A4 -_038043AC: - bl FUN_038042C4 - cmp r0, #0 - bne _038043D8 - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult - mov r0, #1 - bl SPIi_ReleaseException - b _038045C0 -_038043D8: - ldr r0, [r4, #8] - ldr r1, [r4, #12] - ldr r2, [r4, #16] - bl NVRAM_ReadDataBytes - b _038045A4 -_038043EC: - bl FUN_038042C4 - cmp r0, #0 - bne _03804418 - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult - mov r0, #1 - bl SPIi_ReleaseException - b _038045C0 -_03804418: - ldr r0, [r4, #8] - ldr r1, [r4, #12] - ldr r2, [r4, #16] - bl NVRAM_ReadDataBytesAtHigherSpeed - b _038045A4 -_0380442C: - bl FUN_0380428C - cmp r0, #0 - bne _03804458 - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult - mov r0, #1 - bl SPIi_ReleaseException - b _038045C0 -_03804458: - ldr r0, [r4, #8] - ldr r1, [r4, #12] - mov r1, r1, lsl #16 - mov r1, r1, lsr #16 - ldr r2, [r4, #16] - bl NVRAM_PageWrite - b _038045A4 -_03804474: - bl FUN_0380428C - cmp r0, #0 - bne _038044A0 - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult - mov r0, #1 - bl SPIi_ReleaseException - b _038045C0 -_038044A0: - ldr r0, [r4, #8] - ldr r1, [r4, #12] - mov r1, r1, lsl #16 - mov r1, r1, lsr #16 - ldr r2, [r4, #16] - bl NVRAM_PageProgram - b _038045A4 -_038044BC: - bl FUN_0380428C - cmp r0, #0 - bne _038044E8 - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult - mov r0, #1 - bl SPIi_ReleaseException - b _038045C0 -_038044E8: - ldr r0, [r4, #8] - bl NVRAM_PageErase - b _038045A4 -_038044F4: - bl FUN_0380428C - cmp r0, #0 - bne _03804520 - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult - mov r0, #1 - bl SPIi_ReleaseException - b _038045C0 -_03804520: - ldr r0, [r4, #8] - bl NVRAM_SectorErase - b _038045A4 -_0380452C: - bl NVRAM_DeepPowerDown - b _038045A4 -_03804534: - bl NVRAM_ReleaseFromDeepPowerDown - b _038045A4 -_0380453C: - bl FUN_0380428C - cmp r0, #0 - bne _03804568 - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #3 - bl SPIi_ReturnResult - mov r0, #1 - bl SPIi_ReleaseException - b _038045C0 -_03804568: - bl NVRAM_ChipErase - b _038045A4 -_03804570: - ldr r0, [r4, #16] - bl NVRAM_ReadSiliconId - b _038045A4 -_0380457C: - bl NVRAM_SoftwareReset - b _038045A4 -_03804584: - mov r0, #1 - bl SPIi_ReleaseException - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #1 - bl SPIi_ReturnResult - b _038045C0 -_038045A4: - ldr r0, [r4, #4] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - mov r1, #0 - bl SPIi_ReturnResult - mov r0, #1 - bl SPIi_ReleaseException -_038045C0: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr - - arm_func_start NVRAM_AnalyzeCommand -NVRAM_AnalyzeCommand: ;@ 0x038045CC - stmdb sp!, {r4, r5, lr} - sub sp, sp, #12 - ands r1, r0, #33554432 ;@ 0x2000000 - beq _038045FC - mov r5, #0 - mov lr, r5 - ldr r1, _0380476C ;@ =_0380A018 -_038045E8: - mov r4, r5, lsl #1 - strh lr, [r1, r4] - add r5, r5, #1 - cmp r5, #16 - blt _038045E8 -_038045FC: - and r1, r0, #983040 ;@ 0xf0000 - mov r1, r1, lsr #16 - mov r4, r1, lsl #1 - ldr r1, _0380476C ;@ =_0380A018 - strh r0, [r1, r4] - ands r0, r0, #16777216 ;@ 0x1000000 - beq _03804760 - ldrh r0, [r1] - and r4, r0, #65280 ;@ 0xff00 - mov r4, r4, lsl #8 - mov r4, r4, lsr #16 - sub lr, r4, #34 ;@ 0x22 - cmp lr, #10 - addls pc, pc, lr, lsl #2 - b _03804734 - b _03804664 - b _038046A0 - b _038046A0 - b _038046E8 - b _038046E8 - b _03804728 - b _03804728 - b _03804734 - b _03804734 - b _03804734 - b _03804664 -_03804664: - ldrh ip, [r1, #4] - and lr, ip, #65280 ;@ 0xff00 - and r0, r0, #255 ;@ 0xff - mov ip, r0, lsl #24 - ldrh r0, [r1, #2] - orr r0, ip, r0, lsl #8 - orr ip, r0, lr, lsr #8 - cmp ip, #33554432 ;@ 0x2000000 - bcc _03804690 - cmp ip, #41943040 ;@ 0x2800000 - bcc _03804734 -_03804690: - mov r0, r4 - mov r1, #2 - bl SPIi_ReturnResult - b _03804760 -_038046A0: - ldrh r3, [r1, #8] - ldrh r2, [r1, #10] - orr ip, r2, r3, lsl #16 - cmp ip, #33554432 ;@ 0x2000000 - bcc _038046BC - cmp ip, #41943040 ;@ 0x2800000 - bcc _038046CC -_038046BC: - mov r0, r4 - mov r1, #2 - bl SPIi_ReturnResult - b _03804760 -_038046CC: - and r2, r0, #255 ;@ 0xff - ldrh r0, [r1, #2] - orr r3, r0, r2, lsl #16 - ldrh r2, [r1, #4] - ldrh r0, [r1, #6] - orr r2, r0, r2, lsl #16 - b _03804734 -_038046E8: - ldrh r3, [r1, #6] - ldrh r2, [r1, #8] - orr ip, r2, r3, lsl #16 - cmp ip, #33554432 ;@ 0x2000000 - bcc _03804704 - cmp ip, #41943040 ;@ 0x2800000 - bcc _03804714 -_03804704: - mov r0, r4 - mov r1, #2 - bl SPIi_ReturnResult - b _03804760 -_03804714: - and r2, r0, #255 ;@ 0xff - ldrh r0, [r1, #2] - orr r3, r0, r2, lsl #16 - ldrh r2, [r1, #4] - b _03804734 -_03804728: - and r3, r0, #255 ;@ 0xff - ldrh r0, [r1, #2] - orr r3, r0, r3, lsl #16 -_03804734: - str r2, [sp] - str ip, [sp, #4] - mov r0, #1 - mov r1, r4 - mov r2, #3 - bl SPIi_SetEntry - cmp r0, #0 - bne _03804760 - mov r0, r4 - mov r1, #4 - bl SPIi_ReturnResult -_03804760: - add sp, sp, #12 - ldmia sp!, {r4, r5, lr} - bx lr -_0380476C: .word _0380A018 - - arm_func_start NVRAM_Init -NVRAM_Init: ;@ 0x03804770 - mov r3, #0 - mov r2, r3 - ldr r0, _03804794 ;@ =_0380A018 -_0380477C: - mov r1, r3, lsl #1 - strh r2, [r0, r1] - add r3, r3, #1 - cmp r3, #16 - blt _0380477C - bx lr -_03804794: .word _0380A018 - - arm_func_start NVRAM_SoftwareReset -NVRAM_SoftwareReset: ;@ 0x03804798 - ldr r1, _038047D0 ;@ =0x040001C0 -_0380479C: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _0380479C - mov r0, #33024 ;@ 0x8100 - strh r0, [r1] - mov r1, #255 ;@ 0xff - ldr r0, _038047D4 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038047D0 ;@ =0x040001C0 -_038047C0: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038047C0 - bx lr -_038047D0: .word 0x040001C0 -_038047D4: .word 0x040001C2 - - arm_func_start NVRAM_ReadSiliconId -NVRAM_ReadSiliconId: ;@ 0x038047D8 - ldr r2, _0380486C ;@ =0x040001C0 -_038047DC: - ldrh r1, [r2] - ands r1, r1, #128 ;@ 0x80 - bne _038047DC - mov r1, #35072 ;@ 0x8900 - strh r1, [r2] - mov r2, #159 ;@ 0x9f - ldr r1, _03804870 ;@ =0x040001C2 - strh r2, [r1] - ldr r2, _0380486C ;@ =0x040001C0 -_03804800: - ldrh r1, [r2] - ands r1, r1, #128 ;@ 0x80 - bne _03804800 - mov r2, #0 - ldr r1, _03804870 ;@ =0x040001C2 - strh r2, [r1] - ldr r3, _0380486C ;@ =0x040001C0 -_0380481C: - ldrh r1, [r3] - ands r1, r1, #128 ;@ 0x80 - bne _0380481C - ldr r2, _03804870 ;@ =0x040001C2 - ldrh r1, [r2] - and r1, r1, #255 ;@ 0xff - strb r1, [r0] - mov r1, #33024 ;@ 0x8100 - strh r1, [r3] - mov r1, #0 - strh r1, [r2] - ldr r2, _0380486C ;@ =0x040001C0 -_0380484C: - ldrh r1, [r2] - ands r1, r1, #128 ;@ 0x80 - bne _0380484C - ldr r1, _03804870 ;@ =0x040001C2 - ldrh r1, [r1] - and r1, r1, #255 ;@ 0xff - strb r1, [r0, #1] - bx lr -_0380486C: .word 0x040001C0 -_03804870: .word 0x040001C2 - - arm_func_start NVRAM_ChipErase -NVRAM_ChipErase: ;@ 0x03804874 - ldr r1, _038048AC ;@ =0x040001C0 -_03804878: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03804878 - mov r0, #33024 ;@ 0x8100 - strh r0, [r1] - mov r1, #199 ;@ 0xc7 - ldr r0, _038048B0 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038048AC ;@ =0x040001C0 -_0380489C: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _0380489C - bx lr -_038048AC: .word 0x040001C0 -_038048B0: .word 0x040001C2 - - arm_func_start NVRAM_ReleaseFromDeepPowerDown -NVRAM_ReleaseFromDeepPowerDown: ;@ 0x038048B4 - ldr r1, _038048EC ;@ =0x040001C0 -_038048B8: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038048B8 - mov r0, #33024 ;@ 0x8100 - strh r0, [r1] - mov r1, #171 ;@ 0xab - ldr r0, _038048F0 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038048EC ;@ =0x040001C0 -_038048DC: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038048DC - bx lr -_038048EC: .word 0x040001C0 -_038048F0: .word 0x040001C2 - - arm_func_start NVRAM_DeepPowerDown -NVRAM_DeepPowerDown: ;@ 0x038048F4 - ldr r1, _0380492C ;@ =0x040001C0 -_038048F8: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038048F8 - mov r0, #33024 ;@ 0x8100 - strh r0, [r1] - mov r1, #185 ;@ 0xb9 - ldr r0, _03804930 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _0380492C ;@ =0x040001C0 -_0380491C: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _0380491C - bx lr -_0380492C: .word 0x040001C0 -_03804930: .word 0x040001C2 - - arm_func_start NVRAM_SectorErase -NVRAM_SectorErase: ;@ 0x03804934 - and r1, r0, #16711680 ;@ 0xff0000 - mov r1, r1, lsr #16 - mov r1, r1, lsl #16 - mov r2, r1, lsr #16 - and r1, r0, #65280 ;@ 0xff00 - mov r1, r1, lsl #8 - mov r1, r1, lsr #16 - and r0, r0, #255 ;@ 0xff - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - ldr ip, _038049F0 ;@ =0x040001C0 -_03804960: - ldrh r3, [ip] - ands r3, r3, #128 ;@ 0x80 - bne _03804960 - mov r3, #35072 ;@ 0x8900 - strh r3, [ip] - mov ip, #216 ;@ 0xd8 - ldr r3, _038049F4 ;@ =0x040001C2 - strh ip, [r3] - ldr ip, _038049F0 ;@ =0x040001C0 -_03804984: - ldrh r3, [ip] - ands r3, r3, #128 ;@ 0x80 - bne _03804984 - and r3, r2, #255 ;@ 0xff - ldr r2, _038049F4 ;@ =0x040001C2 - strh r3, [r2] - ldr r3, _038049F0 ;@ =0x040001C0 -_038049A0: - ldrh r2, [r3] - ands r2, r2, #128 ;@ 0x80 - bne _038049A0 - and r2, r1, #255 ;@ 0xff - ldr r1, _038049F4 ;@ =0x040001C2 - strh r2, [r1] - ldr r2, _038049F0 ;@ =0x040001C0 -_038049BC: - ldrh r1, [r2] - ands r1, r1, #128 ;@ 0x80 - bne _038049BC - mov r1, #33024 ;@ 0x8100 - strh r1, [r2] - and r1, r0, #255 ;@ 0xff - ldr r0, _038049F4 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _038049F0 ;@ =0x040001C0 -_038049E0: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _038049E0 - bx lr -_038049F0: .word 0x040001C0 -_038049F4: .word 0x040001C2 - - arm_func_start NVRAM_PageErase -NVRAM_PageErase: ;@ 0x038049F8 - and r1, r0, #16711680 ;@ 0xff0000 - mov r1, r1, lsr #16 - mov r1, r1, lsl #16 - mov r2, r1, lsr #16 - and r1, r0, #65280 ;@ 0xff00 - mov r1, r1, lsl #8 - mov r1, r1, lsr #16 - and r0, r0, #255 ;@ 0xff - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - ldr ip, _03804AB4 ;@ =0x040001C0 -_03804A24: - ldrh r3, [ip] - ands r3, r3, #128 ;@ 0x80 - bne _03804A24 - mov r3, #35072 ;@ 0x8900 - strh r3, [ip] - mov ip, #219 ;@ 0xdb - ldr r3, _03804AB8 ;@ =0x040001C2 - strh ip, [r3] - ldr ip, _03804AB4 ;@ =0x040001C0 -_03804A48: - ldrh r3, [ip] - ands r3, r3, #128 ;@ 0x80 - bne _03804A48 - and r3, r2, #255 ;@ 0xff - ldr r2, _03804AB8 ;@ =0x040001C2 - strh r3, [r2] - ldr r3, _03804AB4 ;@ =0x040001C0 -_03804A64: - ldrh r2, [r3] - ands r2, r2, #128 ;@ 0x80 - bne _03804A64 - and r2, r1, #255 ;@ 0xff - ldr r1, _03804AB8 ;@ =0x040001C2 - strh r2, [r1] - ldr r2, _03804AB4 ;@ =0x040001C0 -_03804A80: - ldrh r1, [r2] - ands r1, r1, #128 ;@ 0x80 - bne _03804A80 - mov r1, #33024 ;@ 0x8100 - strh r1, [r2] - and r1, r0, #255 ;@ 0xff - ldr r0, _03804AB8 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03804AB4 ;@ =0x040001C0 -_03804AA4: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03804AA4 - bx lr -_03804AB4: .word 0x040001C0 -_03804AB8: .word 0x040001C2 - - arm_func_start NVRAM_PageProgram -NVRAM_PageProgram: ;@ 0x03804ABC - stmdb sp!, {r4, lr} - sub sp, sp, #8 - cmp r1, #1 - bcc _03804BD4 - add r3, r0, r1 - sub r3, r3, #1 - mov r3, r3, lsr #8 - cmp r3, r0, lsr #8 - andhi r1, r0, #255 ;@ 0xff - rsbhi r1, r1, #256 ;@ 0x100 - movhi r1, r1, lsl #16 - movhi r1, r1, lsr #16 - and r3, r0, #16711680 ;@ 0xff0000 - mov r3, r3, lsr #16 - strh r3, [sp] - and r3, r0, #65280 ;@ 0xff00 - mov r3, r3, lsr #8 - strh r3, [sp, #2] - and r0, r0, #255 ;@ 0xff - strh r0, [sp, #4] - ldr r3, _03804BE0 ;@ =0x040001C0 -_03804B10: - ldrh r0, [r3] - ands r0, r0, #128 ;@ 0x80 - bne _03804B10 - mov r0, #35072 ;@ 0x8900 - strh r0, [r3] - mov r0, #2 - ldr lr, _03804BE4 ;@ =0x040001C2 - strh r0, [lr] - mov r4, #0 - add r3, sp, #0 - ldr ip, _03804BE0 ;@ =0x040001C0 -_03804B3C: - ldrh r0, [ip] - ands r0, r0, #128 ;@ 0x80 - bne _03804B3C - mov r0, r4, lsl #1 - ldrh r0, [r3, r0] - and r0, r0, #255 ;@ 0xff - strh r0, [lr] - add r4, r4, #1 - cmp r4, #3 - blt _03804B3C - mov ip, #0 - sub lr, r1, #1 - ldr r3, _03804BE0 ;@ =0x040001C0 - ldr r0, _03804BE4 ;@ =0x040001C2 - b _03804B94 -_03804B78: - ldrh r1, [r3] - ands r1, r1, #128 ;@ 0x80 - bne _03804B78 - ldrb r1, [r2, ip] - and r1, r1, #255 ;@ 0xff - strh r1, [r0] - add ip, ip, #1 -_03804B94: - cmp ip, lr - blt _03804B78 - ldr r1, _03804BE0 ;@ =0x040001C0 -_03804BA0: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03804BA0 - mov r0, #33024 ;@ 0x8100 - strh r0, [r1] - ldrb r0, [r2, ip] - and r1, r0, #255 ;@ 0xff - ldr r0, _03804BE4 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03804BE0 ;@ =0x040001C0 -_03804BC8: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03804BC8 -_03804BD4: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03804BE0: .word 0x040001C0 -_03804BE4: .word 0x040001C2 - - arm_func_start NVRAM_PageWrite -NVRAM_PageWrite: ;@ 0x03804BE8 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - cmp r1, #1 - bcc _03804D00 - add r3, r0, r1 - sub r3, r3, #1 - mov r3, r3, lsr #8 - cmp r3, r0, lsr #8 - andhi r1, r0, #255 ;@ 0xff - rsbhi r1, r1, #256 ;@ 0x100 - movhi r1, r1, lsl #16 - movhi r1, r1, lsr #16 - and r3, r0, #16711680 ;@ 0xff0000 - mov r3, r3, lsr #16 - strh r3, [sp] - and r3, r0, #65280 ;@ 0xff00 - mov r3, r3, lsr #8 - strh r3, [sp, #2] - and r0, r0, #255 ;@ 0xff - strh r0, [sp, #4] - ldr r3, _03804D0C ;@ =0x040001C0 -_03804C3C: - ldrh r0, [r3] - ands r0, r0, #128 ;@ 0x80 - bne _03804C3C - mov r0, #35072 ;@ 0x8900 - strh r0, [r3] - mov r0, #10 - ldr lr, _03804D10 ;@ =0x040001C2 - strh r0, [lr] - mov r4, #0 - add r3, sp, #0 - ldr ip, _03804D0C ;@ =0x040001C0 -_03804C68: - ldrh r0, [ip] - ands r0, r0, #128 ;@ 0x80 - bne _03804C68 - mov r0, r4, lsl #1 - ldrh r0, [r3, r0] - and r0, r0, #255 ;@ 0xff - strh r0, [lr] - add r4, r4, #1 - cmp r4, #3 - blt _03804C68 - mov ip, #0 - sub lr, r1, #1 - ldr r3, _03804D0C ;@ =0x040001C0 - ldr r0, _03804D10 ;@ =0x040001C2 - b _03804CC0 -_03804CA4: - ldrh r1, [r3] - ands r1, r1, #128 ;@ 0x80 - bne _03804CA4 - ldrb r1, [r2, ip] - and r1, r1, #255 ;@ 0xff - strh r1, [r0] - add ip, ip, #1 -_03804CC0: - cmp ip, lr - blt _03804CA4 - ldr r1, _03804D0C ;@ =0x040001C0 -_03804CCC: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03804CCC - mov r0, #33024 ;@ 0x8100 - strh r0, [r1] - ldrb r0, [r2, ip] - and r1, r0, #255 ;@ 0xff - ldr r0, _03804D10 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _03804D0C ;@ =0x040001C0 -_03804CF4: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03804CF4 -_03804D00: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03804D0C: .word 0x040001C0 -_03804D10: .word 0x040001C2 - - arm_func_start NVRAM_ReadDataBytesAtHigherSpeed -NVRAM_ReadDataBytesAtHigherSpeed: ;@ 0x03804D14 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - cmp r1, #1 - bcc _03804E3C - and r3, r0, #16711680 ;@ 0xff0000 - mov r3, r3, lsr #16 - strh r3, [sp] - and r3, r0, #65280 ;@ 0xff00 - mov r3, r3, lsr #8 - strh r3, [sp, #2] - and r0, r0, #255 ;@ 0xff - strh r0, [sp, #4] - ldr r3, _03804E48 ;@ =0x040001C0 -_03804D48: - ldrh r0, [r3] - ands r0, r0, #128 ;@ 0x80 - bne _03804D48 - mov r0, #35072 ;@ 0x8900 - strh r0, [r3] - mov r0, #11 - ldr ip, _03804E4C ;@ =0x040001C2 - strh r0, [ip] - mov lr, #0 - add r3, sp, #0 - ldr r4, _03804E48 ;@ =0x040001C0 -_03804D74: - ldrh r0, [r4] - ands r0, r0, #128 ;@ 0x80 - bne _03804D74 - mov r0, lr, lsl #1 - ldrh r0, [r3, r0] - and r0, r0, #255 ;@ 0xff - strh r0, [ip] - add lr, lr, #1 - cmp lr, #3 - blt _03804D74 - ldr r3, _03804E48 ;@ =0x040001C0 -_03804DA0: - ldrh r0, [r3] - ands r0, r0, #128 ;@ 0x80 - bne _03804DA0 - mov r3, #0 - ldr r0, _03804E4C ;@ =0x040001C2 - strh r3, [r0] - ldr r3, _03804E48 ;@ =0x040001C0 -_03804DBC: - ldrh r0, [r3] - ands r0, r0, #128 ;@ 0x80 - bne _03804DBC - mov r0, #0 - ldr ip, _03804E48 ;@ =0x040001C0 - mov r4, r0 - ldr lr, _03804E4C ;@ =0x040001C2 - sub r1, r1, #1 - b _03804E00 -_03804DE0: - strh r4, [lr] -_03804DE4: - ldrh r3, [ip] - ands r3, r3, #128 ;@ 0x80 - bne _03804DE4 - ldrh r3, [lr] - and r3, r3, #255 ;@ 0xff - strb r3, [r2, r0] - add r0, r0, #1 -_03804E00: - cmp r0, r1 - bcc _03804DE0 - mov r1, #33024 ;@ 0x8100 - ldr ip, _03804E48 ;@ =0x040001C0 - strh r1, [ip] - mov r3, #0 - ldr r1, _03804E4C ;@ =0x040001C2 - strh r3, [r1] -_03804E20: - ldrh r1, [ip] - ands r1, r1, #128 ;@ 0x80 - bne _03804E20 - ldr r1, _03804E4C ;@ =0x040001C2 - ldrh r1, [r1] - and r1, r1, #255 ;@ 0xff - strb r1, [r2, r0] -_03804E3C: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03804E48: .word 0x040001C0 -_03804E4C: .word 0x040001C2 - - arm_func_start NVRAM_ReadDataBytes -NVRAM_ReadDataBytes: ;@ 0x03804E50 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - cmp r1, #1 - bcc _03804F5C - and r3, r0, #16711680 ;@ 0xff0000 - mov r3, r3, lsr #16 - strh r3, [sp] - and r3, r0, #65280 ;@ 0xff00 - mov r3, r3, lsr #8 - strh r3, [sp, #2] - and r0, r0, #255 ;@ 0xff - strh r0, [sp, #4] - ldr r3, _03804F68 ;@ =0x040001C0 -_03804E84: - ldrh r0, [r3] - ands r0, r0, #128 ;@ 0x80 - bne _03804E84 - mov r0, #35072 ;@ 0x8900 - strh r0, [r3] - mov r0, #3 - ldr ip, _03804F6C ;@ =0x040001C2 - strh r0, [ip] - mov lr, #0 - add r3, sp, #0 - ldr r4, _03804F68 ;@ =0x040001C0 -_03804EB0: - ldrh r0, [r4] - ands r0, r0, #128 ;@ 0x80 - bne _03804EB0 - mov r0, lr, lsl #1 - ldrh r0, [r3, r0] - and r0, r0, #255 ;@ 0xff - strh r0, [ip] - add lr, lr, #1 - cmp lr, #3 - blt _03804EB0 - ldr r3, _03804F68 ;@ =0x040001C0 -_03804EDC: - ldrh r0, [r3] - ands r0, r0, #128 ;@ 0x80 - bne _03804EDC - mov r0, #0 - ldr ip, _03804F68 ;@ =0x040001C0 - mov r4, r0 - ldr lr, _03804F6C ;@ =0x040001C2 - sub r1, r1, #1 - b _03804F20 -_03804F00: - strh r4, [lr] -_03804F04: - ldrh r3, [ip] - ands r3, r3, #128 ;@ 0x80 - bne _03804F04 - ldrh r3, [lr] - and r3, r3, #255 ;@ 0xff - strb r3, [r2, r0] - add r0, r0, #1 -_03804F20: - cmp r0, r1 - bcc _03804F00 - mov r1, #33024 ;@ 0x8100 - ldr ip, _03804F68 ;@ =0x040001C0 - strh r1, [ip] - mov r3, #0 - ldr r1, _03804F6C ;@ =0x040001C2 - strh r3, [r1] -_03804F40: - ldrh r1, [ip] - ands r1, r1, #128 ;@ 0x80 - bne _03804F40 - ldr r1, _03804F6C ;@ =0x040001C2 - ldrh r1, [r1] - and r1, r1, #255 ;@ 0xff - strb r1, [r2, r0] -_03804F5C: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03804F68: .word 0x040001C0 -_03804F6C: .word 0x040001C2 - - arm_func_start NVRAM_ReadStatusRegister -NVRAM_ReadStatusRegister: ;@ 0x03804F70 - ldr r2, _03804FDC ;@ =0x040001C0 -_03804F74: - ldrh r1, [r2] - ands r1, r1, #128 ;@ 0x80 - bne _03804F74 - mov r1, #35072 ;@ 0x8900 - strh r1, [r2] - mov r2, #5 - ldr r1, _03804FE0 ;@ =0x040001C2 - strh r2, [r1] - ldr r2, _03804FDC ;@ =0x040001C0 -_03804F98: - ldrh r1, [r2] - ands r1, r1, #128 ;@ 0x80 - bne _03804F98 - mov r1, #33024 ;@ 0x8100 - strh r1, [r2] - mov r2, #0 - ldr r1, _03804FE0 ;@ =0x040001C2 - strh r2, [r1] - ldr r2, _03804FDC ;@ =0x040001C0 -_03804FBC: - ldrh r1, [r2] - ands r1, r1, #128 ;@ 0x80 - bne _03804FBC - ldr r1, _03804FE0 ;@ =0x040001C2 - ldrh r1, [r1] - and r1, r1, #255 ;@ 0xff - strb r1, [r0] - bx lr -_03804FDC: .word 0x040001C0 -_03804FE0: .word 0x040001C2 - - arm_func_start NVRAM_WriteDisable -NVRAM_WriteDisable: ;@ 0x03804FE4 - ldr r1, _0380501C ;@ =0x040001C0 -_03804FE8: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03804FE8 - mov r0, #33024 ;@ 0x8100 - strh r0, [r1] - mov r1, #4 - ldr r0, _03805020 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _0380501C ;@ =0x040001C0 -_0380500C: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _0380500C - bx lr -_0380501C: .word 0x040001C0 -_03805020: .word 0x040001C2 - - arm_func_start NVRAM_WriteEnable -NVRAM_WriteEnable: ;@ 0x03805024 - ldr r1, _0380505C ;@ =0x040001C0 -_03805028: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _03805028 - mov r0, #33024 ;@ 0x8100 - strh r0, [r1] - mov r1, #6 - ldr r0, _03805060 ;@ =0x040001C2 - strh r1, [r0] - ldr r1, _0380505C ;@ =0x040001C0 -_0380504C: - ldrh r0, [r1] - ands r0, r0, #128 ;@ 0x80 - bne _0380504C - bx lr -_0380505C: .word 0x040001C0 -_03805060: .word 0x040001C2 - - arm_func_start FUN_03805064 -FUN_03805064: ;@ 0x03805064 - stmfd sp!, {lr} - sub sp, sp, #4 - mov lr, #0 - mov r2, lr - b _03805094 -_03805078: - mov r1, r2, lsl #2 - mov r1, r0, lsr r1 - and r1, r1, #15 - cmp r1, #10 - movcs r0, #0 - bcs _038050D0 - add r2, r2, #1 -_03805094: - cmp r2, #8 - blt _03805078 - mov r3, #0 - mov ip, #1 - mov r2, #10 -_038050A8: - mov r1, r3, lsl #2 - mov r1, r0, lsr r1 - and r1, r1, #15 - mla lr, ip, r1, lr - add r3, r3, #1 - mul r1, ip, r2 - mov ip, r1 - cmp r3, #8 - blt _038050A8 - mov r0, lr -_038050D0: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_038050DC -FUN_038050DC: ;@ 0x038050DC - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - sub r0, r7, #1 - cmp r0, #1 - subls r8, r8, #1 - addls r7, r7, #12 - mov r0, r8 - mov r1, #400 ;@ 0x190 - bl _u32_div_f - mov r5, r0 - mov r0, r8 - mov r1, #100 ;@ 0x64 - bl _u32_div_f - mov r4, r0 - mov r0, #13 - mul r0, r7, r0 - add r0, r0, #8 - mov r1, #5 - bl _u32_div_f - add r1, r8, r8, lsr #2 - sub r1, r1, r4 - add r1, r5, r1 - add r0, r1, r0 - add r0, r6, r0 - mov r1, #7 - bl _u32_div_f - mov r0, r1 - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr - - arm_func_start FUN_03805158 -FUN_03805158: ;@ 0x03805158 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - add r0, sp, #0 - bl RTC_ReadStatus1 - add r0, sp, #2 - bl RTC_ReadStatus2 - ldrh r0, [sp] - mov r1, r0, lsl #24 - movs r1, r1, lsr #31 - bne _0380519C - mov r0, r0, lsl #25 - movs r0, r0, lsr #31 - bne _0380519C - ldrh r0, [sp, #2] - mov r0, r0, lsl #24 - movs r0, r0, lsr #31 - beq _038051B4 -_0380519C: - ldrh r0, [sp] - bic r0, r0, #1 - orr r0, r0, #1 - strh r0, [sp] - add r0, sp, #0 - bl RTC_WriteStatus1 -_038051B4: - ldrh r0, [sp] - mov r1, r0, lsl #27 - movs r1, r1, lsr #31 - bne _038051D0 - mov r0, r0, lsl #26 - movs r0, r0, lsr #31 - beq _038051F0 -_038051D0: - ldrh r0, [sp, #2] - bic r0, r0, #15 - strh r0, [sp, #2] - ldrh r0, [sp, #2] - bic r0, r0, #64 ;@ 0x40 - strh r0, [sp, #2] - add r0, sp, #2 - bl RTC_WriteStatus2 -_038051F0: - ldr r0, _03805288 ;@ =0x027FFDE8 - bl RTC_ReadDateTime - ldr r0, _03805288 ;@ =0x027FFDE8 - ldrb r0, [r0] - bl FUN_03805064 - mov r4, r0 - ldr r0, _03805288 ;@ =0x027FFDE8 - ldr r0, [r0] - mov r0, r0, lsl #19 - mov r0, r0, lsr #27 - bl FUN_03805064 - mov r5, r0 - ldr r0, _03805288 ;@ =0x027FFDE8 - ldr r0, [r0] - mov r0, r0, lsl #10 - mov r0, r0, lsr #26 - bl FUN_03805064 - mov r2, r0 - add r0, r4, #2000 ;@ 0x7d0 - mov r1, r5 - bl FUN_038050DC - ldr r2, _03805288 ;@ =0x027FFDE8 - ldr r1, [r2] - mov r3, r1, lsl #5 - mov r3, r3, lsr #29 - cmp r3, r0 - beq _03805274 - bic r1, r1, #117440512 ;@ 0x7000000 - and r0, r0, #7 - orr r0, r1, r0, lsl #24 - str r0, [r2] - mov r0, r2 - bl RTC_WriteDateTime -_03805274: - mov r0, #1 - bl RTC_SetHourFormat - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_03805288: .word 0x027FFDE8 - - arm_func_start FUN_0380528C -FUN_0380528C: ;@ 0x0380528C - stmdb sp!, {r4, lr} - sub sp, sp, #8 - add r0, sp, #0 - bl RTC_ReadStatus1 - ldrh r0, [sp] - mov r1, r0, lsl #27 - movs r1, r1, lsr #31 - bne _038052B8 - mov r0, r0, lsl #26 - movs r0, r0, lsr #31 - beq _03805310 -_038052B8: - add r0, sp, #2 - bl RTC_ReadStatus2 - mov r4, #0 - ldrh r0, [sp] - mov r0, r0, lsl #27 - movs r0, r0, lsr #31 - orrne r4, r4, #1 - ldrneh r0, [sp, #2] - bicne r0, r0, #15 - strneh r0, [sp, #2] - ldrh r0, [sp] - mov r0, r0, lsl #26 - movs r0, r0, lsr #31 - orrne r4, r4, #2 - ldrneh r0, [sp, #2] - bicne r0, r0, #64 ;@ 0x40 - strneh r0, [sp, #2] - add r0, sp, #2 - bl RTC_WriteStatus2 - mov r0, #48 ;@ 0x30 - mov r1, r4 - bl FUN_038057D8 -_03805310: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start FUN_0380531C -FUN_0380531C: ;@ 0x0380531C - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - sub sp, sp, #76 ;@ 0x4c - ldr r6, _038057CC ;@ =0x027FFDE8 - add r5, r6, #4 - mov r7, #0 - ldr r9, _038057D0 ;@ =_0380A03C - mov r8, #1 - mov r0, #16 - str r0, [sp] - mov r0, #17 - str r0, [sp, #4] - mov r0, #18 - str r0, [sp, #8] - mov sl, #19 - mov r4, #2 - mov fp, #20 - mov r0, #21 - str r0, [sp, #12] - mov r0, #22 - str r0, [sp, #16] - mov r0, #23 - str r0, [sp, #20] - mov r0, #24 - str r0, [sp, #24] - mov r0, #25 - str r0, [sp, #28] - mov r0, #32 - str r0, [sp, #32] - mov r0, #33 ;@ 0x21 - str r0, [sp, #36] ;@ 0x24 - mov r0, #34 ;@ 0x22 - str r0, [sp, #40] ;@ 0x28 - mov r0, #35 ;@ 0x23 - str r0, [sp, #44] ;@ 0x2c - mov r0, #36 ;@ 0x24 - str r0, [sp, #48] ;@ 0x30 - mov r0, #37 ;@ 0x25 - str r0, [sp, #52] ;@ 0x34 - mov r0, #38 ;@ 0x26 - str r0, [sp, #56] ;@ 0x38 - mov r0, #39 ;@ 0x27 - str r0, [sp, #60] ;@ 0x3c - mov r0, #40 ;@ 0x28 - str r0, [sp, #64] ;@ 0x40 - mov r0, #41 ;@ 0x29 - str r0, [sp, #68] ;@ 0x44 -_038053D4: - mov r0, r9 - add r1, sp, #72 ;@ 0x48 - mov r2, r8 - bl OS_ReceiveMessage - ldr r0, _038057D4 ;@ =_0380A13C - ldrh r0, [r0, #216] ;@ 0xd8 - cmp r0, #41 ;@ 0x29 - addls pc, pc, r0, lsl #2 - b _038057BC - b _038054A0 - b _038054B8 - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038054DC - b _038054F8 - b _03805514 - b _03805530 - b _03805568 - b _038055A0 - b _038055D8 - b _038055F4 - b _03805610 - b _0380562C - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _038057BC - b _03805648 - b _03805664 - b _03805688 - b _038056A4 - b _038056DC - b _03805714 - b _0380574C - b _03805768 - b _03805784 - b _038057A0 -_038054A0: - bl RTC_Reset - str r7, [r9, #468] ;@ 0x1d4 - mov r0, r7 - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038054B8: - ldrh r0, [r6] - mov r0, r0, lsl #30 - mov r0, r0, lsr #31 - bl RTC_SetHourFormat - str r7, [r9, #468] ;@ 0x1d4 - mov r0, r8 - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038054DC: - mov r0, r6 - bl RTC_ReadDateTime - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp] - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038054F8: - mov r0, r6 - bl RTC_ReadDate - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #4] - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805514: - add r0, r6, #4 - bl RTC_ReadTime - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #8] - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805530: - mov r0, r5 - bl RTC_ReadPulse - cmp r0, #0 - bne _03805554 - str r7, [r9, #468] ;@ 0x1d4 - mov r0, sl - mov r1, r4 - bl FUN_038057D8 - b _038053D4 -_03805554: - str r7, [r9, #468] ;@ 0x1d4 - mov r0, sl - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805568: - mov r0, r5 - bl RTC_ReadAlarm1 - cmp r0, #0 - bne _0380558C - str r7, [r9, #468] ;@ 0x1d4 - mov r0, fp - mov r1, r4 - bl FUN_038057D8 - b _038053D4 -_0380558C: - str r7, [r9, #468] ;@ 0x1d4 - mov r0, fp - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038055A0: - mov r0, r5 - bl RTC_ReadAlarm2 - cmp r0, #0 - bne _038055C4 - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #12] - mov r1, r4 - bl FUN_038057D8 - b _038053D4 -_038055C4: - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #12] - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038055D8: - mov r0, r6 - bl RTC_ReadStatus1 - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #16] - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038055F4: - add r0, r6, #2 - bl RTC_ReadStatus2 - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #20] - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805610: - add r0, r6, #4 - bl RTC_ReadAdjust - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #24] - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_0380562C: - add r0, r6, #4 - bl RTC_ReadFree - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #28] - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805648: - mov r0, r6 - bl RTC_WriteDateTime - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #32] - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805664: - add r0, r6, #4 - bl RTC_ReadTime - mov r0, r6 - bl RTC_WriteDateTime - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #36] ;@ 0x24 - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805688: - add r0, r6, #4 - bl RTC_WriteTime - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #40] ;@ 0x28 - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038056A4: - mov r0, r5 - bl RTC_WritePulse - cmp r0, #0 - bne _038056C8 - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #44] ;@ 0x2c - mov r1, r4 - bl FUN_038057D8 - b _038053D4 -_038056C8: - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #44] ;@ 0x2c - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038056DC: - mov r0, r5 - bl RTC_WriteAlarm1 - cmp r0, #0 - bne _03805700 - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #48] ;@ 0x30 - mov r1, r4 - bl FUN_038057D8 - b _038053D4 -_03805700: - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #48] ;@ 0x30 - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805714: - mov r0, r5 - bl RTC_WriteAlarm2 - cmp r0, #0 - bne _03805738 - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #52] ;@ 0x34 - mov r1, r4 - bl FUN_038057D8 - b _038053D4 -_03805738: - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #52] ;@ 0x34 - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_0380574C: - mov r0, r6 - bl RTC_WriteStatus1 - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #56] ;@ 0x38 - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805768: - add r0, r6, #2 - bl RTC_WriteStatus2 - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #60] ;@ 0x3c - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_03805784: - add r0, r6, #4 - bl RTC_WriteAdjust - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #64] ;@ 0x40 - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038057A0: - add r0, r6, #4 - bl RTC_WriteFree - str r7, [r9, #468] ;@ 0x1d4 - ldr r0, [sp, #68] ;@ 0x44 - mov r1, r7 - bl FUN_038057D8 - b _038053D4 -_038057BC: - str r7, [r9, #468] ;@ 0x1d4 - mov r1, r8 - bl FUN_038057D8 - b _038053D4 -_038057CC: .word 0x027FFDE8 -_038057D0: .word _0380A03C -_038057D4: .word _0380A13C - - arm_func_start FUN_038057D8 -FUN_038057D8: ;@ 0x038057D8 - stmdb sp!, {r4, r5, r6, lr} - mov r0, r0, lsl #8 - and r0, r0, #32512 ;@ 0x7f00 - orr r2, r0, #32768 ;@ 0x8000 - and r0, r1, #255 ;@ 0xff - orr r6, r2, r0 - mov r5, #5 - mov r4, #0 -_038057F8: - mov r0, r5 - mov r1, r6 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _038057F8 - ldmia sp!, {r4, r5, r6, lr} - bx lr - - arm_func_start FUN_03805818 -FUN_03805818: ;@ 0x03805818 - stmdb sp!, {r4, lr} - cmp r2, #0 - bne _03805944 - and r0, r1, #32512 ;@ 0x7f00 - mov r0, r0, lsl #8 - mov r4, r0, lsr #16 - cmp r4, #41 ;@ 0x29 - addls pc, pc, r4, lsl #2 - b _03805938 - b _038058E4 - b _038058E4 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _03805938 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 - b _038058E4 -_038058E4: - ldr r0, _0380594C ;@ =_0380A03C - ldr r1, [r0, #468] ;@ 0x1d4 - cmp r1, #0 - beq _03805904 - mov r0, r4 - mov r1, #3 - bl FUN_038057D8 - b _03805944 -_03805904: - mov r1, #1 - str r1, [r0, #468] ;@ 0x1d4 - ldr r1, _03805950 ;@ =_0380A13C - strh r4, [r1, #216] ;@ 0xd8 - mov r1, #0 - mov r2, r1 - bl OS_SendMessage - cmp r0, #0 - bne _03805944 - mov r0, r4 - mov r1, #4 - bl FUN_038057D8 - b _03805944 -_03805938: - mov r0, r4 - mov r1, #1 - bl FUN_038057D8 -_03805944: - ldmia sp!, {r4, lr} - bx lr -_0380594C: .word _0380A03C -_03805950: .word _0380A13C - - arm_func_start RTC_Init -RTC_Init: ;@ 0x03805954 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - ldr r0, _03805A28 ;@ =_0380A038 - ldrh r1, [r0] - cmp r1, #0 - bne _03805A1C - mov r1, #1 - strh r1, [r0] - ldr r0, _03805A2C ;@ =_0380A03C - str r1, [r0, #468] ;@ 0x1d4 - bl FUN_03805158 - mov r1, #0 - ldr r0, _03805A2C ;@ =_0380A03C - str r1, [r0, #468] ;@ 0x1d4 - bl PXI_Init - mov r0, #5 - ldr r1, _03805A30 ;@ =FUN_03805818 - bl PXI_SetFifoRecvCallback - ldr r0, _03805A2C ;@ =_0380A03C - ldr r1, _03805A34 ;@ =_0380A05C - mov r2, #4 - bl OS_InitMessageQueue - mov r0, #256 ;@ 0x100 - str r0, [sp] - str r4, [sp, #4] - ldr r0, _03805A38 ;@ =_0380A06C - ldr r1, _03805A3C ;@ =FUN_0380531C - mov r2, #0 - ldr r3, _03805A40 ;@ =_0380A210 - bl OS_CreateThread - ldr r0, _03805A38 ;@ =_0380A06C - bl OS_WakeupThreadDirect - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #64 ;@ 0x40 - mov r1, #0 - bl EXIi_SetBitRcnt0L - mov r0, #256 ;@ 0x100 - mov r1, r0 - bl EXIi_SetBitRcnt0L - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #128 ;@ 0x80 - ldr r1, _03805A44 ;@ =FUN_0380528C - bl OS_SetIrqFunction - mov r0, #128 ;@ 0x80 - bl OS_EnableIrqMask - mov r0, r4 - bl OS_RestoreInterrupts -_03805A1C: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03805A28: .word _0380A038 -_03805A2C: .word _0380A03C -_03805A30: .word FUN_03805818 -_03805A34: .word _0380A05C -_03805A38: .word _0380A06C -_03805A3C: .word FUN_0380531C -_03805A40: .word _0380A210 -_03805A44: .word FUN_0380528C - - arm_func_start FUN_03805A48 -FUN_03805A48: ;@ 0x03805A48 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl RTCi_GpioStart - mov r0, r7 - mov r1, r6 - bl RTCi_GpioSendCommand - cmp r7, #6 - beq _03805A90 - cmp r7, #134 ;@ 0x86 - bne _03805A9C - mov r0, r5 - mov r1, r4 - bl RTCi_GpioReceiveData - b _03805A9C -_03805A90: - mov r0, r5 - mov r1, r4 - bl RTCi_GpioSendData -_03805A9C: - bl RTCi_GpioEnd - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr - - arm_func_start FUN_03805AAC -FUN_03805AAC: ;@ 0x03805AAC - ldr r2, [r0] - mov r1, r2, lsl #18 - mov r3, r1, lsr #26 - cmp r3, #35 ;@ 0x23 - addls pc, pc, r3, lsl #2 - b _03805BA8 - b _03805B54 - b _03805B54 - b _03805B54 - b _03805B54 - b _03805B54 - b _03805B54 - b _03805B54 - b _03805B54 - b _03805B78 - b _03805B78 - b _03805BA8 - b _03805BA8 - b _03805BA8 - b _03805BA8 - b _03805BA8 - b _03805BA8 - b _03805B54 - b _03805B54 - b _03805B9C - b _03805B9C - b _03805B9C - b _03805B9C - b _03805B9C - b _03805B9C - b _03805B9C - b _03805B9C - b _03805BA8 - b _03805BA8 - b _03805BA8 - b _03805BA8 - b _03805BA8 - b _03805BA8 - b _03805B9C - b _03805B9C - b _03805B9C - b _03805B9C -_03805B54: - mov r1, r2, lsl #17 - movs r1, r1, lsr #31 - bxeq lr - bic r2, r2, #16128 ;@ 0x3f00 - add r1, r3, #18 - and r1, r1, #63 ;@ 0x3f - orr r1, r2, r1, lsl #8 - str r1, [r0] - bx lr -_03805B78: - mov r1, r2, lsl #17 - movs r1, r1, lsr #31 - bxeq lr - bic r2, r2, #16128 ;@ 0x3f00 - add r1, r3, #24 - and r1, r1, #63 ;@ 0x3f - orr r1, r2, r1, lsl #8 - str r1, [r0] - bx lr -_03805B9C: - orr r1, r2, #16384 ;@ 0x4000 - str r1, [r0] - bx lr -_03805BA8: - ldr r1, [r0] - bic r1, r1, #16384 ;@ 0x4000 - str r1, [r0] - ldr r1, [r0] - bic r1, r1, #16128 ;@ 0x3f00 - str r1, [r0] - bx lr - - arm_func_start FUN_03805BC4 -FUN_03805BC4: ;@ 0x03805BC4 - ldr r1, [r0] - mov r2, r1, lsl #18 - mov r2, r2, lsr #26 - cmp r2, #35 ;@ 0x23 - addls pc, pc, r2, lsl #2 - b _03805CD0 - b _03805C6C - b _03805C6C - b _03805C6C - b _03805C6C - b _03805C6C - b _03805C6C - b _03805C6C - b _03805C6C - b _03805C6C - b _03805C6C - b _03805CD0 - b _03805CD0 - b _03805CD0 - b _03805CD0 - b _03805CD0 - b _03805CD0 - b _03805C6C - b _03805C6C - b _03805C78 - b _03805C78 - b _03805C78 - b _03805C78 - b _03805C78 - b _03805C78 - b _03805C78 - b _03805C78 - b _03805CD0 - b _03805CD0 - b _03805CD0 - b _03805CD0 - b _03805CD0 - b _03805CD0 - b _03805CA4 - b _03805CA4 - b _03805C78 - b _03805C78 -_03805C6C: - bic r1, r1, #16384 ;@ 0x4000 - str r1, [r0] - bx lr -_03805C78: - orr r1, r1, #16384 ;@ 0x4000 - str r1, [r0] - ldr r1, [r0] - bic r2, r1, #16128 ;@ 0x3f00 - mov r1, r1, lsl #18 - mov r1, r1, lsr #26 - sub r1, r1, #18 - and r1, r1, #63 ;@ 0x3f - orr r1, r2, r1, lsl #8 - str r1, [r0] - bx lr -_03805CA4: - orr r1, r1, #16384 ;@ 0x4000 - str r1, [r0] - ldr r1, [r0] - bic r2, r1, #16128 ;@ 0x3f00 - mov r1, r1, lsl #18 - mov r1, r1, lsr #26 - sub r1, r1, #24 - and r1, r1, #63 ;@ 0x3f - orr r1, r2, r1, lsl #8 - str r1, [r0] - bx lr -_03805CD0: - ldr r1, [r0] - bic r1, r1, #16384 ;@ 0x4000 - str r1, [r0] - ldr r1, [r0] - bic r1, r1, #16128 ;@ 0x3f00 - str r1, [r0] - bx lr - - arm_func_start RTC_WriteFree -RTC_WriteFree: ;@ 0x03805CEC - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #6 - mov r1, #112 ;@ 0x70 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadFree -RTC_ReadFree: ;@ 0x03805D18 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #134 ;@ 0x86 - mov r1, #112 ;@ 0x70 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_WriteAdjust -RTC_WriteAdjust: ;@ 0x03805D44 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #6 - mov r1, #48 ;@ 0x30 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadAdjust -RTC_ReadAdjust: ;@ 0x03805D70 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #134 ;@ 0x86 - mov r1, #48 ;@ 0x30 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_WriteStatus2 -RTC_WriteStatus2: ;@ 0x03805D9C - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #6 - mov r1, #64 ;@ 0x40 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadStatus2 -RTC_ReadStatus2: ;@ 0x03805DC8 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #134 ;@ 0x86 - mov r1, #64 ;@ 0x40 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_WriteStatus1 -RTC_WriteStatus1: ;@ 0x03805DF4 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #6 - mov r1, #0 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadStatus1 -RTC_ReadStatus1: ;@ 0x03805E20 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #134 ;@ 0x86 - mov r1, #0 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_WriteAlarm2 -RTC_WriteAlarm2: ;@ 0x03805E4C - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - add r0, sp, #0 - bl RTC_ReadStatus2 - ldrh r0, [sp] - mov r0, r0, lsl #25 - movs r0, r0, lsr #31 - moveq r0, #0 - beq _03805E8C - mov r0, #6 - mov r1, #80 ;@ 0x50 - mov r2, r4 - mov r3, #3 - bl FUN_03805A48 - mov r0, #1 -_03805E8C: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadAlarm2 -RTC_ReadAlarm2: ;@ 0x03805E98 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - add r0, sp, #0 - bl RTC_ReadStatus2 - ldrh r0, [sp] - mov r0, r0, lsl #25 - movs r0, r0, lsr #31 - moveq r0, #0 - beq _03805ED8 - mov r0, #134 ;@ 0x86 - mov r1, #80 ;@ 0x50 - mov r2, r4 - mov r3, #3 - bl FUN_03805A48 - mov r0, #1 -_03805ED8: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_WriteAlarm1 -RTC_WriteAlarm1: ;@ 0x03805EE4 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - add r0, sp, #0 - bl RTC_ReadStatus2 - ldrh r0, [sp] - mov r0, r0, lsl #28 - mov r0, r0, lsr #28 - cmp r0, #4 - movne r0, #0 - bne _03805F28 - mov r0, #6 - mov r1, #16 - mov r2, r4 - mov r3, #3 - bl FUN_03805A48 - mov r0, #1 -_03805F28: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadAlarm1 -RTC_ReadAlarm1: ;@ 0x03805F34 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - add r0, sp, #0 - bl RTC_ReadStatus2 - ldrh r0, [sp] - mov r0, r0, lsl #28 - mov r0, r0, lsr #28 - cmp r0, #4 - movne r0, #0 - bne _03805F78 - mov r0, #134 ;@ 0x86 - mov r1, #16 - mov r2, r4 - mov r3, #3 - bl FUN_03805A48 - mov r0, #1 -_03805F78: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_WritePulse -RTC_WritePulse: ;@ 0x03805F84 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - add r0, sp, #0 - bl RTC_ReadStatus2 - ldrh r0, [sp] - mov r0, r0, lsl #28 - mov r0, r0, lsr #28 - and r0, r0, #11 - cmp r0, #1 - movne r0, #0 - bne _03805FCC - mov r0, #6 - mov r1, #16 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - mov r0, #1 -_03805FCC: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadPulse -RTC_ReadPulse: ;@ 0x03805FD8 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - add r0, sp, #0 - bl RTC_ReadStatus2 - ldrh r0, [sp] - mov r0, r0, lsl #28 - mov r0, r0, lsr #28 - and r0, r0, #11 - cmp r0, #1 - movne r0, #0 - bne _03806020 - mov r0, #134 ;@ 0x86 - mov r1, #16 - mov r2, r4 - mov r3, #1 - bl FUN_03805A48 - mov r0, #1 -_03806020: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_WriteTime -RTC_WriteTime: ;@ 0x0380602C - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #6 - mov r1, #96 ;@ 0x60 - mov r2, r4 - mov r3, #3 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadTime -RTC_ReadTime: ;@ 0x03806058 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #134 ;@ 0x86 - mov r1, #96 ;@ 0x60 - mov r2, r4 - mov r3, #3 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadDate -RTC_ReadDate: ;@ 0x03806084 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #134 ;@ 0x86 - mov r1, #32 - mov r2, r4 - mov r3, #4 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_WriteDateTime -RTC_WriteDateTime: ;@ 0x038060B0 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #6 - mov r1, #32 - mov r2, r4 - mov r3, #7 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_ReadDateTime -RTC_ReadDateTime: ;@ 0x038060DC - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - mov r0, #134 ;@ 0x86 - mov r1, #32 - mov r2, r4 - mov r3, #7 - bl FUN_03805A48 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start RTC_SetHourFormat -RTC_SetHourFormat: ;@ 0x03806108 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #12 - mov r4, r0 - and r5, r4, #1 - mov r0, r5, lsl #16 - mov r0, r0, lsr #16 - cmp r0, #1 - bne _038061FC - add r0, sp, #0 - bl RTC_ReadStatus1 - ldrh r1, [sp] - mov r0, r1, lsl #30 - mov r2, r0, lsr #31 - mov r0, r5, lsl #16 - cmp r2, r0, lsr #16 - beq _038061FC - and r4, r4, #1 - bic r1, r1, #2 - mov r0, r4, lsl #16 - mov r0, r0, lsr #16 - and r0, r0, #1 - orr r0, r1, r0, lsl #1 - strh r0, [sp] - add r0, sp, #0 - bl RTC_WriteStatus1 - mov r0, #134 ;@ 0x86 - mov r1, #16 - add r2, sp, #4 - mov r3, #3 - bl FUN_03805A48 - mov r0, r4, lsl #16 - movs r0, r0, lsr #16 - bne _03806198 - add r0, sp, #4 - bl FUN_03805BC4 - b _038061A0 -_03806198: - add r0, sp, #4 - bl FUN_03805AAC -_038061A0: - mov r0, #6 - mov r1, #16 - add r2, sp, #4 - mov r3, #3 - bl FUN_03805A48 - mov r0, #134 ;@ 0x86 - mov r1, #80 ;@ 0x50 - add r2, sp, #4 - mov r3, #3 - bl FUN_03805A48 - mov r0, r5, lsl #16 - movs r0, r0, lsr #16 - bne _038061E0 - add r0, sp, #4 - bl FUN_03805BC4 - b _038061E8 -_038061E0: - add r0, sp, #4 - bl FUN_03805AAC -_038061E8: - mov r0, #6 - mov r1, #80 ;@ 0x50 - add r2, sp, #4 - mov r3, #3 - bl FUN_03805A48 -_038061FC: - add sp, sp, #12 - ldmia sp!, {r4, r5, lr} - bx lr - - arm_func_start RTC_Reset -RTC_Reset: ;@ 0x03806208 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #32768 ;@ 0x8000 - bl EXIi_SelectRcnt - ldrh r0, [sp] - bic r0, r0, #1 - orr r0, r0, #1 - strh r0, [sp] - mov r0, #6 - mov r1, #0 - add r2, sp, #0 - mov r3, #1 - bl FUN_03805A48 - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start RTCi_GpioStart -RTCi_GpioStart: ;@ 0x03806248 - mov ip, #67108864 ;@ 0x4000000 - add ip, ip, #312 ;@ 0x138 - ldrh r0, [ip] - bic r0, r0, #119 ;@ 0x77 - orr r0, r0, #114 ;@ 0x72 - strh r0, [ip] - mov r3, #2 -_03806264: - subs r3, r3, #1 - bne _03806264 - bic r0, r0, #4 - orr r0, r0, #4 - strh r0, [ip] - mov r3, #2 -_0380627C: - subs r3, r3, #1 - bne _0380627C - bx lr - - arm_func_start RTCi_GpioEnd -RTCi_GpioEnd: ;@ 0x03806288 - mov ip, #67108864 ;@ 0x4000000 - add ip, ip, #312 ;@ 0x138 - mov r3, #2 -_03806294: - subs r3, r3, #1 - bne _03806294 - ldrh r0, [ip] - bic r0, r0, #4 - orr r0, r0, #0 - strh r0, [ip] - mov r3, #2 -_038062B0: - subs r3, r3, #1 - bne _038062B0 - bx lr - - arm_func_start RTCi_GpioSendCommand -RTCi_GpioSendCommand: ;@ 0x038062BC - mov ip, #67108864 ;@ 0x4000000 - add ip, ip, #312 ;@ 0x138 - orr r1, r0, r1 - ldrh r0, [ip] - bic r0, r0, #119 ;@ 0x77 - orr r0, r0, #116 ;@ 0x74 - mov r2, #0 -_038062D8: - bic r0, r0, #3 - orr r0, r0, #0 - mov r3, #1 - tst r3, r1, lsr r2 - movne r3, #1 - moveq r3, #0 - orr r0, r0, r3 - strh r0, [ip] - mov r3, #9 -_038062FC: - subs r3, r3, #1 - bne _038062FC - bic r0, r0, #2 - orr r0, r0, #2 - strh r0, [ip] - mov r3, #9 -_03806314: - subs r3, r3, #1 - bne _03806314 - add r2, r2, #1 - cmp r2, #8 - bne _038062D8 - bx lr - - arm_func_start RTCi_GpioSendData -RTCi_GpioSendData: ;@ 0x0380632C - mov ip, #67108864 ;@ 0x4000000 - add ip, ip, #312 ;@ 0x138 -_03806334: - stmdb sp!, {r0, r1} - tst r0, #1 - ldreqh r1, [r0] - ldrneh r1, [r0, #-1] - movne r1, r1, lsr #8 - ldrh r0, [ip] - bic r0, r0, #119 ;@ 0x77 - orr r0, r0, #116 ;@ 0x74 - mov r2, #0 -_03806358: - bic r0, r0, #3 - orr r0, r0, #0 - mov r3, #1 - tst r3, r1, lsr r2 - movne r3, #1 - moveq r3, #0 - orr r0, r0, r3 - strh r0, [ip] - mov r3, #9 -_0380637C: - subs r3, r3, #1 - bne _0380637C - bic r0, r0, #2 - orr r0, r0, #2 - strh r0, [ip] - mov r3, #9 -_03806394: - subs r3, r3, #1 - bne _03806394 - add r2, r2, #1 - cmp r2, #8 - bne _03806358 - ldmia sp!, {r0, r1} - add r0, r0, #1 - subs r1, r1, #1 - bne _03806334 - bx lr - - arm_func_start RTCi_GpioReceiveData -RTCi_GpioReceiveData: ;@ 0x038063BC - mov ip, #67108864 ;@ 0x4000000 - add ip, ip, #312 ;@ 0x138 -_038063C4: - stmdb sp!, {r0, r1} - ldrh r0, [ip] - bic r0, r0, #119 ;@ 0x77 - orr r0, r0, #100 ;@ 0x64 - mov r2, #0 - mov r1, #0 -_038063DC: - bic r0, r0, #3 - orr r0, r0, #0 - strh r0, [ip] - mov r3, #9 -_038063EC: - subs r3, r3, #1 - bne _038063EC - ldrh r0, [ip] - and r3, r0, #1 - cmp r3, #1 - moveq r3, #128 ;@ 0x80 - movne r3, #0 - orr r2, r3, r2, lsr #1 - bic r0, r0, #2 - orr r0, r0, #2 - strh r0, [ip] - mov r3, #9 -_0380641C: - subs r3, r3, #1 - bne _0380641C - add r1, r1, #1 - cmp r1, #8 - bne _038063DC - ldmia sp!, {r0, r1} - tst r0, #1 - beq _03806454 - ldrh r3, [r0, #-1] - bic r3, r3, #65280 ;@ 0xff00 - mov r2, r2, lsl #8 - orr r3, r2, r3 - strh r3, [r0, #-1] - b _03806464 -_03806454: - ldrh r3, [r0] - bic r3, r3, #255 ;@ 0xff - orr r3, r3, r2 - strh r3, [r0] -_03806464: - add r0, r0, #1 - subs r1, r1, #1 - bne _038063C4 - bx lr - - arm_func_start FUN_03806474 -FUN_03806474: ;@ 0x03806474 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - ldr r4, _0380665C ;@ =wmspW - ldr r0, _03806660 ;@ =_0601A960 - ldr r0, [r0, #1356] ;@ 0x54c - cmp r0, #0 - beq _038064B0 - add r0, r4, #4096 ;@ 0x1000 - ldr r0, [r0, #1356] ;@ 0x54c - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, #0 - beq _038064B0 - bl FUN_03806668 - bl FUN_03806670 -_038064B0: - add r0, r4, #136 ;@ 0x88 - add r1, sp, #0 - mov r2, #0 - bl OS_ReceiveMessage - cmp r0, #0 - beq _03806520 - add r0, r4, #4096 ;@ 0x1000 - ldr r0, [r0, #1356] ;@ 0x54c - cmp r0, #0 - beq _038064B0 - bl WMSP_GetBuffer4Callback2Wm9 - mov r5, r0 - mov r0, #0 - mov r1, r5 - mov r2, #256 ;@ 0x100 - bl MIi_CpuClear32 - ldr r0, [sp] - ldrh r0, [r0] - strh r0, [r5] - mov r0, #4 - strh r0, [r5, #2] - mov r0, r5 - bl WMSP_ReturnResult2Wm9 - ldr r1, [sp] - ldrh r0, [r1] - orr r0, r0, #32768 ;@ 0x8000 - strh r0, [r1] - b _038064B0 -_03806520: - bl FUN_03806678 - bl FUN_038068BC - cmp r0, #0 - beq _03806548 - add r0, r4, #136 ;@ 0x88 - mov r1, #0 - mov r2, #1 - bl OS_SendMessage - bl FUN_03806678 - bl OS_JoinThread -_03806548: - add r0, r4, #136 ;@ 0x88 - add r1, sp, #0 - mov r2, #0 - bl OS_ReceiveMessage - mov r6, r0 - add r0, r4, #88 ;@ 0x58 - add r1, sp, #0 - mov r2, #0 - bl OS_ReceiveMessage - mov r5, r0 - mov r0, r4 - add r1, sp, #0 - mov r2, #0 - bl OS_ReceiveMessage - orr r1, r6, r5 - orrs r0, r0, r1 - beq _03806590 - bl OS_Terminate -_03806590: - bl FUN_03806680 - add r7, r4, #40 ;@ 0x28 - add r6, sp, #0 - mov r5, #0 -_038065A0: - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl OS_ReceiveMessage - cmp r0, #0 - bne _038065A0 - bl FUN_03806688 - bl FUN_038068BC - cmp r0, #0 - beq _038065E0 - add r0, r4, #40 ;@ 0x28 - mov r1, #0 - mov r2, #1 - bl OS_SendMessage - bl FUN_03806688 - bl OS_JoinThread -_038065E0: - mov r0, #1 - bl PM_SetLEDPattern - mov r0, #1 - bl PMi_SetLED - add r0, r4, #4096 ;@ 0x1000 - ldr r0, [r0, #1356] ;@ 0x54c - cmp r0, #0 - beq _03806614 - ldr r1, [r0] - ldrh r0, [r1] - cmp r0, #0 - movne r0, #0 - strneh r0, [r1] -_03806614: - bl FUN_03806970 - mov r6, #15 - mov r5, #131072 ;@ 0x20000 - mov r4, #0 -_03806624: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _03806624 - bl OS_DisableInterrupts - mov r1, #1 - ldr r0, _03806664 ;@ =_0380A3F0 - strb r1, [r0] - bl OS_ExitThread - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_0380665C: .word wmspW -_03806660: .word _0601A960 -_03806664: .word _0380A3F0 - - arm_func_start FUN_03806668 -FUN_03806668: ;@ 0x03806668 - ldr pc, _0380666C ;@ =WMSP_CancelVAlarm -_0380666C: .word WMSP_CancelVAlarm - - arm_func_start FUN_03806670 -FUN_03806670: ;@ 0x03806670 - ldr pc, _03806674 ;@ =WMSP_CancelAllAlarms -_03806674: .word WMSP_CancelAllAlarms - - arm_func_start FUN_03806678 -FUN_03806678: ;@ 0x03806678 - ldr pc, _0380667C ;@ =WMSP_GetRequestThread -_0380667C: .word WMSP_GetRequestThread - - arm_func_start FUN_03806680 -FUN_03806680: ;@ 0x03806680 - ldr pc, _03806684 ;@ =WL_Terminate -_03806684: .word WL_Terminate - - arm_func_start FUN_03806688 -FUN_03806688: ;@ 0x03806688 - ldr pc, _0380668C ;@ =WMSP_GetIndicateThread -_0380668C: .word WMSP_GetIndicateThread - - arm_func_start FUN_03806690 -FUN_03806690: ;@ 0x03806690 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, _03806738 ;@ =_0380A400 - bl FUN_038068BC - cmp r0, #0 - beq _038066C0 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0 - b _0380672C -_038066C0: - ldr r0, _0380673C ;@ =_0380A3F0 - ldrb r1, [r0] - cmp r1, #3 - beq _038066E0 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0 - b _0380672C -_038066E0: - mov r1, #4 - strb r1, [r0] - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #10 - ldr r1, _03806740 ;@ =FUN_03806920 - bl PXI_SetFifoRecvCallback - mov r0, #1024 ;@ 0x400 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - ldr r0, _03806738 ;@ =_0380A400 - ldr r1, _03806744 ;@ =FUN_03806474 - mov r2, #0 - ldr r3, _03806748 ;@ =_0380AA64 - bl OS_CreateThread - ldr r0, _03806738 ;@ =_0380A400 - bl OS_WakeupThreadDirect - mov r0, #1 -_0380672C: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03806738: .word _0380A400 -_0380673C: .word _0380A3F0 -_03806740: .word FUN_03806920 -_03806744: .word FUN_03806474 -_03806748: .word _0380AA64 - - arm_func_start FUN_0380674C -FUN_0380674C: ;@ 0x0380674C - stmdb sp!, {r4, r5, r6, lr} - bl FUN_038069B0 - ldr r0, _038067A0 ;@ =_0380A3F8 - ldr r0, [r0] - bl FUN_038069EC - mov r6, #15 - mov r5, #65536 ;@ 0x10000 - mov r4, #0 -_0380676C: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _0380676C - bl OS_DisableInterrupts - mov r1, #3 - ldr r0, _038067A4 ;@ =_0380A3F0 - strb r1, [r0] - bl OS_ExitThread - ldmia sp!, {r4, r5, r6, lr} - bx lr -_038067A0: .word _0380A3F8 -_038067A4: .word _0380A3F0 - - arm_func_start FUN_038067A8 -FUN_038067A8: ;@ 0x038067A8 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, _03806844 ;@ =_0380A400 - bl FUN_038068BC - cmp r0, #0 - beq _038067D8 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0 - b _03806838 -_038067D8: - ldr r0, _03806848 ;@ =_0380A3F0 - ldrb r1, [r0] - cmp r1, #1 - beq _038067F8 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0 - b _03806838 -_038067F8: - mov r1, #2 - strb r1, [r0] - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #1024 ;@ 0x400 - str r0, [sp] - mov r0, #10 - str r0, [sp, #4] - ldr r0, _03806844 ;@ =_0380A400 - ldr r1, _0380684C ;@ =FUN_0380674C - mov r2, #0 - ldr r3, _03806850 ;@ =_0380AA64 - bl OS_CreateThread - ldr r0, _03806844 ;@ =_0380A400 - bl OS_WakeupThreadDirect - mov r0, #1 -_03806838: - add sp, sp, #8 - ldmia sp!, {r4, lr} - bx lr -_03806844: .word _0380A400 -_03806848: .word _0380A3F0 -_0380684C: .word FUN_0380674C -_03806850: .word _0380AA64 - - arm_func_start FUN_03806854 -FUN_03806854: ;@ 0x03806854 - stmdb sp!, {r4, lr} - mov r4, r1 - cmp r4, #65536 ;@ 0x10000 - beq _03806870 - cmp r4, #131072 ;@ 0x20000 - beq _03806884 - b _03806898 -_03806870: - bl FUN_038067A8 - cmp r0, #0 - bne _038068B4 - orr r4, r4, #5 - b _0380689C -_03806884: - bl FUN_03806690 - cmp r0, #0 - bne _038068B4 - orr r4, r4, #5 - b _0380689C -_03806898: - orr r4, r4, #7 -_0380689C: - mov r0, #15 - mov r1, r4 - mov r2, #0 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _0380689C -_038068B4: - ldmia sp!, {r4, lr} - bx lr - - arm_func_start FUN_038068BC -FUN_038068BC: ;@ 0x038068BC - cmp r0, #0 - moveq r0, #0 - bxeq lr - ldr r1, _0380691C ;@ =OSi_ThreadInfo - ldr r1, [r1, #8] - b _0380690C -_038068D4: - cmp r1, r0 - bne _03806908 - ldr r0, [r0, #72] ;@ 0x48 - cmp r0, #0 - beq _038068F8 - cmp r0, #1 - beq _038068F8 - cmp r0, #2 - b _03806900 -_038068F8: - mov r0, #1 - bx lr -_03806900: - mov r0, #0 - bx lr -_03806908: - ldr r1, [r1, #76] ;@ 0x4c -_0380690C: - cmp r1, #0 - bne _038068D4 - mov r0, #0 - bx lr -_0380691C: .word OSi_ThreadInfo - - arm_func_start FUN_03806920 -FUN_03806920: ;@ 0x03806920 - stmdb sp!, {r4, r5, r6, lr} - movs r6, r1 - ldrh r4, [r6] - beq _03806968 - mov r0, #0 - mov r2, #256 ;@ 0x100 - bl MIi_CpuClear32 - strh r4, [r6] - mov r0, #4 - strh r0, [r6, #2] - mov r5, #10 - mov r4, #0 -_03806950: - mov r0, r5 - mov r1, r6 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _03806950 -_03806968: - ldmia sp!, {r4, r5, r6, lr} - bx lr - - arm_func_start FUN_03806970 -FUN_03806970: ;@ 0x03806970 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _038069A8 ;@ =_0380A3F4 - ldr r0, [r0] - cmp r0, #0 - beq _0380699C - mov r0, #0 - mov r1, #100663296 ;@ 0x6000000 - ldr r2, _038069AC ;@ =_0380A3FC - ldr r2, [r2] - bl MIi_CpuClearFast -_0380699C: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_038069A8: .word _0380A3F4 -_038069AC: .word _0380A3FC - - arm_func_start FUN_038069B0 -FUN_038069B0: ;@ 0x038069B0 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _038069E4 ;@ =_0380A3F4 - ldr r0, [r0] - cmp r0, #0 - beq _038069D8 - mov r1, #100663296 ;@ 0x6000000 - ldr r2, _038069E8 ;@ =_0380A3FC - ldr r2, [r2] - bl MIi_CpuCopyFast -_038069D8: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_038069E4: .word _0380A3F4 -_038069E8: .word _0380A3FC - - arm_func_start FUN_038069EC -FUN_038069EC: ;@ 0x038069EC - stmfd sp!, {lr} - sub sp, sp, #84 ;@ 0x54 - ldr r1, _03806A84 ;@ =_0380B064 - str r1, [sp] - ldr r1, _03806A88 ;@ =_0380B064 - str r1, [sp, #4] - mov r1, #1536 ;@ 0x600 - str r1, [sp, #8] - mov r3, #4 - str r3, [sp, #12] - mov r1, #0 - str r1, [sp, #32] - mov r2, #8 - str r2, [sp, #36] ;@ 0x24 - str r0, [sp, #40] ;@ 0x28 - ldr r0, _03806A8C ;@ =_0380A4A4 - str r0, [sp, #44] ;@ 0x2c - mov r0, #448 ;@ 0x1c0 - str r0, [sp, #48] ;@ 0x30 - mov r1, #3 - str r1, [sp, #52] ;@ 0x34 - mov r0, #64 ;@ 0x40 - str r0, [sp, #28] - str r1, [sp, #60] ;@ 0x3c - str r3, [sp, #76] ;@ 0x4c - mov r0, #5 - str r0, [sp, #68] ;@ 0x44 - mov r0, #7 - str r0, [sp, #56] ;@ 0x38 - str r2, [sp, #72] ;@ 0x48 - mov r0, #9 - str r0, [sp, #64] ;@ 0x40 - add r0, sp, #0 - add r1, sp, #52 ;@ 0x34 - bl FUN_03806A90 - add sp, sp, #84 ;@ 0x54 - ldmia sp!, {lr} - bx lr -_03806A84: .word _0380B064 -_03806A88: .word _0380B064 -_03806A8C: .word _0380A4A4 - - arm_func_start FUN_03806A90 -FUN_03806A90: ;@ 0x03806A90 - ldr pc, _03806A94 ;@ =WM_sp_init -_03806A94: .word WM_sp_init - - arm_func_start WVR_Shutdown -WVR_Shutdown: ;@ 0x03806A98 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _03806ACC ;@ =0x04000304 - ldrh r0, [r1] - bic r0, r0, #2 - strh r0, [r1] - mov r0, #1 - bl PM_SetLEDPattern - mov r0, #1 - bl PMi_SetLED - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03806ACC: .word 0x04000304 - - arm_func_start WVR_Init -WVR_Init: ;@ 0x03806AD0 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _03806B20 ;@ =_0380A3F8 - str r0, [r1] - mov r1, #1 - ldr r0, _03806B24 ;@ =_0380A3F0 - strb r1, [r0] - ldr r0, _03806B28 ;@ =_0380A400 - mov r1, #0 - mov r2, #164 ;@ 0xa4 - bl MI_CpuFill8 - mov r0, #15 - ldr r1, _03806B2C ;@ =FUN_03806854 - bl PXI_SetFifoRecvCallback - mov r0, #10 - ldr r1, _03806B30 ;@ =FUN_03806920 - bl PXI_SetFifoRecvCallback - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_03806B20: .word _0380A3F8 -_03806B24: .word _0380A3F0 -_03806B28: .word _0380A400 -_03806B2C: .word FUN_03806854 -_03806B30: .word FUN_03806920 - - arm_func_start MATH_CountPopulation -MATH_CountPopulation: ; 0x03806B34 - ldr r1, _03806B6C ;@ =0x55555555 - and r1, r1, r0, lsr #1 - sub r2, r0, r1 - ldr r0, _03806B70 ;@ =0x33333333 - and r1, r2, r0 - and r0, r0, r2, lsr #2 - add r0, r1, r0 - add r1, r0, r0, lsr #4 - ldr r0, _03806B74 ;@ =0x0F0F0F0F - and r0, r1, r0 - add r0, r0, r0, lsr #8 - add r0, r0, r0, lsr #16 - and r0, r0, #255 ;@ 0xff - bx lr -_03806B6C: .word 0x55555555 -_03806B70: .word 0x33333333 -_03806B74: .word 0x0F0F0F0F - - arm_func_start _ll_udiv -_ll_udiv: ;@ 0x03806B78 - stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} - mov r4, #0 - b _03806B8C - - arm_func_start _ull_mod -_ull_mod: ;@ 0x03806B84 - stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} - mov r4, #1 -_03806B8C: - orrs r5, r3, r2 - bne _03806B9C - ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} - bx lr -_03806B9C: - orrs r5, r1, r3 - bne _03806C44 - mov r1, r2 - bl _u32_div_not_0_f - cmp r4, #0 - movne r0, r1 - mov r1, #0 - ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} - bx lr - - arm_func_start _ll_mod -_ll_mod: ;@ 0x03806BC0 - stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} - mov r4, r1 - orr r4, r4, #1 - b _03806BE0 - - arm_func_start _ll_sdiv -_ll_sdiv: ;@ 0x03806BD0 - stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} - eor r4, r1, r3 - mov r4, r4, asr #1 - mov r4, r4, lsl #1 -_03806BE0: - orrs r5, r3, r2 - bne _03806BF0 - ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} - bx lr -_03806BF0: - mov r5, r0, lsr #31 - add r5, r5, r1 - mov r6, r2, lsr #31 - add r6, r6, r3 - orrs r6, r5, r6 - bne _03806C24 - mov r1, r2 - bl _s32_div_f - ands r4, r4, #1 - movne r0, r1 - mov r1, r0, asr #31 - ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} - bx lr -_03806C24: - cmp r1, #0 - bge _03806C34 - rsbs r0, r0, #0 - rsc r1, r1, #0 -_03806C34: - cmp r3, #0 - bge _03806C44 - rsbs r2, r2, #0 - rsc r3, r3, #0 -_03806C44: - orrs r5, r1, r0 - beq _03806D68 - mov r5, #0 - mov r6, #1 - cmp r3, #0 - bmi _03806C70 -_03806C5C: - add r5, r5, #1 - adds r2, r2, r2 - adcs r3, r3, r3 - bpl _03806C5C - add r6, r6, r5 -_03806C70: - cmp r1, #0 - blt _03806C90 -_03806C78: - cmp r6, #1 - beq _03806C90 - sub r6, r6, #1 - adds r0, r0, r0 - adcs r1, r1, r1 - bpl _03806C78 -_03806C90: - mov r7, #0 - mov ip, #0 - mov fp, #0 - b _03806CB8 -_03806CA0: - orr ip, ip, #1 - subs r6, r6, #1 - beq _03806D10 - adds r0, r0, r0 - adcs r1, r1, r1 - adcs r7, r7, r7 -_03806CB8: - subs r0, r0, r2 - sbcs r1, r1, r3 - sbcs r7, r7, #0 - adds ip, ip, ip - adc fp, fp, fp - cmp r7, #0 - bge _03806CA0 -_03806CD4: - subs r6, r6, #1 - beq _03806D08 - adds r0, r0, r0 - adcs r1, r1, r1 - adc r7, r7, r7 - adds r0, r0, r2 - adcs r1, r1, r3 - adc r7, r7, #0 - adds ip, ip, ip - adc fp, fp, fp - cmp r7, #0 - bge _03806CA0 - b _03806CD4 -_03806D08: - adds r0, r0, r2 - adc r1, r1, r3 -_03806D10: - ands r7, r4, #1 - moveq r0, ip - moveq r1, fp - beq _03806D48 - subs r7, r5, #32 - movge r0, r1, lsr r7 - bge _03806D6C - rsb r7, r5, #32 - mov r0, r0, lsr r5 - orr r0, r0, r1, lsl r7 - mov r1, r1, lsr r5 - b _03806D48 - mov r0, r1, lsr r7 - mov r1, #0 -_03806D48: - cmp r4, #0 - blt _03806D58 - ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} - bx lr -_03806D58: - rsbs r0, r0, #0 - rsc r1, r1, #0 - ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} - bx lr -_03806D68: - mov r0, #0 -_03806D6C: - mov r1, #0 - cmp r4, #0 - blt _03806D58 - ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} - bx lr - - arm_func_start _s32_div_f -_s32_div_f: ;@ 0x03806D80 - eor ip, r0, r1 - and ip, ip, #-2147483648 ;@ 0x80000000 - cmp r0, #0 - rsblt r0, r0, #0 - addlt ip, ip, #1 - cmp r1, #0 - rsblt r1, r1, #0 - beq _03806F78 - cmp r0, r1 - movcc r1, r0 - movcc r0, #0 - bcc _03806F78 - mov r2, #28 - mov r3, r0, lsr #4 - cmp r1, r3, lsr #12 - suble r2, r2, #16 - movle r3, r3, lsr #16 - cmp r1, r3, lsr #4 - suble r2, r2, #8 - movle r3, r3, lsr #8 - cmp r1, r3 - suble r2, r2, #4 - movle r3, r3, lsr #4 - mov r0, r0, lsl r2 - rsb r1, r1, #0 - adds r0, r0, r0 - add r2, r2, r2, lsl #1 - add pc, pc, r2, lsl #2 - nop ;@ (mov r0, r0) - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - mov r1, r3 -_03806F78: - ands r3, ip, #-2147483648 ;@ 0x80000000 - rsbne r0, r0, #0 - ands r3, ip, #1 - rsbne r1, r1, #0 - bx lr - - arm_func_start _u32_div_f -_u32_div_f: ;@ 0x03806F8C - cmp r1, #0 - bxeq lr - - arm_func_start _u32_div_not_0_f -_u32_div_not_0_f: ;@ 0x03806F94 - cmp r0, r1 - movcc r1, r0 - movcc r0, #0 - bxcc lr - mov r2, #28 - mov r3, r0, lsr #4 - cmp r1, r3, lsr #12 - suble r2, r2, #16 - movle r3, r3, lsr #16 - cmp r1, r3, lsr #4 - suble r2, r2, #8 - movle r3, r3, lsr #8 - cmp r1, r3 - suble r2, r2, #4 - movle r3, r3, lsr #4 - mov r0, r0, lsl r2 - rsb r1, r1, #0 - adds r0, r0, r0 - add r2, r2, r2, lsl #1 - add pc, pc, r2, lsl #2 - nop ;@ (mov r0, r0) - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - adcs r3, r1, r3, lsl #1 - subcc r3, r3, r1 - adcs r0, r0, r0 - mov r1, r3 - bx lr - - .global _03807170 -_03807170: - .byte 0 - .byte 6 - .byte 12 - .byte 19 - .byte 25 - .byte 31 - .byte 37 - .byte 43 - .byte 49 - .byte 54 - .byte 60 - .byte 65 - .byte 71 - .byte 76 - .byte 81 - .byte 85 - .byte 90 - .byte 94 - .byte 98 - .byte 102 - .byte 106 - .byte 109 - .byte 112 - .byte 115 - .byte 117 - .byte 120 - .byte 122 - .byte 123 - .byte 125 - .byte 126 - .byte 126 - .byte 127 - .byte 127 - .byte 0 - .byte 0 - .byte 0 - - .global SNDi_DecibelSquareTable -SNDi_DecibelSquareTable: - .short -32768 - .short -722 - .short -721 - .short -651 - .short -601 - .short -562 - .short -530 - .short -503 - .short -480 - .short -460 - .short -442 - .short -425 - .short -410 - .short -396 - .short -383 - .short -371 - .short -360 - .short -349 - .short -339 - .short -330 - .short -321 - .short -313 - .short -305 - .short -297 - .short -289 - .short -282 - .short -276 - .short -269 - .short -263 - .short -257 - .short -251 - .short -245 - .short -239 - .short -234 - .short -229 - .short -224 - .short -219 - .short -214 - .short -210 - .short -205 - .short -201 - .short -196 - .short -192 - .short -188 - .short -184 - .short -180 - .short -176 - .short -173 - .short -169 - .short -165 - .short -162 - .short -158 - .short -155 - .short -152 - .short -149 - .short -145 - .short -142 - .short -139 - .short -136 - .short -133 - .short -130 - .short -127 - .short -125 - .short -122 - .short -119 - .short -116 - .short -114 - .short -111 - .short -109 - .short -106 - .short -103 - .short -101 - .short -99 - .short -96 - .short -94 - .short -91 - .short -89 - .short -87 - .short -85 - .short -82 - .short -80 - .short -78 - .short -76 - .short -74 - .short -72 - .short -70 - .short -68 - .short -66 - .short -64 - .short -62 - .short -60 - .short -58 - .short -56 - .short -54 - .short -52 - .short -50 - .short -49 - .short -47 - .short -45 - .short -43 - .short -42 - .short -40 - .short -38 - .short -36 - .short -35 - .short -33 - .short -31 - .short -30 - .short -28 - .short -27 - .short -25 - .short -23 - .short -22 - .short -20 - .short -19 - .short -17 - .short -16 - .short -14 - .short -13 - .short -11 - .short -10 - .short -8 - .short -7 - .short -6 - .short -4 - .short -3 - .short -1 - .short 0 - - .global _03807294 -_03807294: - .byte 0 - .byte 1 - .byte 2 - .byte 4 - - .global _03807298 -_03807298: - .byte 4 - .byte 5 - .byte 6 - .byte 7 - .byte 2 - .byte 0 - .byte 3 - .byte 1 - .byte 8 - .byte 9 - .byte 10 - .byte 11 - .byte 14 - .byte 12 - .byte 15 - .byte 13 - - .global _038072A8 -_038072A8: - .byte 0 - .byte 1 - .byte 5 - .byte 14 - .byte 26 - .byte 38 - .byte 51 - .byte 63 - .byte 73 - .byte 84 - .byte 92 - .byte 100 - .byte 109 - .byte 116 - .byte 123 - .byte 127 - .byte 132 - .byte 137 - .byte 143 - .byte 0 - - .global _038072BC -_038072BC: - .word 0x000000C7 - - .global _038072C0 -_038072C0: - .word 0x00000006 - - .global _038072C4 -_038072C4: - .word 0x00000005 - - .global _038072C8 -_038072C8: - .word 0x00000040 - .word 0x00000006 - .word 0x01000000 - .word 0x00000018 - .word 0x00080000 - .word 0x00000013 - .word 0x00100000 - .word 0x00000014 - .word 0x00040000 - .word 0x00000012 - .word 0x00000008 - .word 0x00000003 - .word 0x00000010 - .word 0x00000004 - .word 0x00000020 - .word 0x00000005 - .word 0x00000100 - .word 0x00000008 - .word 0x00000200 - .word 0x00000009 - .word 0x00000400 - .word 0x0000000A - .word 0x00000800 - .word 0x0000000B - .word 0x00001000 - .word 0x0000000C - .word 0x00002000 - .word 0x0000000D - .word 0x00000002 - .word 0x00000001 - .word 0x00000004 - .word 0x00000002 - .word 0x00000001 - .word 0x00000000 - .word 0x00010000 - .word 0x00000010 - .word 0x00400000 - .word 0x00000016 - .word 0x00000080 - .word 0x00000007 - .word 0x00020000 - .word 0x00000011 - .word 0x00800000 - .word 0x00000017 - - arm_func_start FUN_03807378 -FUN_03807378: ;@ 0x03807378 - mov ip, #67108864 ;@ 0x4000000 - str ip, [ip, #520] ;@ 0x208 - ldr r1, _038073E0 ;@ =0x0380FFFC - mov r0, #0 - str r0, [r1] - ldr r1, _038073E4 ;@ =0x04000180 - mov r0, #256 ;@ 0x100 - strh r0, [r1] -_03807398: - ldrh r0, [r1] - and r0, r0, #15 - cmp r0, #1 - bne _03807398 - ldr r1, _038073E4 ;@ =0x04000180 - mov r0, #0 - strh r0, [r1] -_038073B4: - ldrh r0, [r1] - cmp r0, #1 - beq _038073B4 - ldr r3, _038073E8 ;@ =0x027FFE00 - ldr ip, [r3, #52] ;@ 0x34 - mov lr, ip - mov r0, #0 - mov r1, #0 - mov r2, #0 - mov r3, #0 - bx ip -_038073E0: .word 0x0380FFFC -_038073E4: .word 0x04000180 -_038073E8: .word 0x027FFE00 - - arm_func_start FUN_038073EC -FUN_038073EC: ;@ 0x038073EC - mov r1, #0 - ldr r0, _03807400 ;@ =0x04000208 - strh r1, [r0] - ldr ip, _03807404 ;@ =FUN_03807378 - bx ip -_03807400: .word 0x04000208 -_03807404: .word FUN_03807378 - - arm_func_start WMSP_GetAllowedChannel -WMSP_GetAllowedChannel: ;@ 0x03807408 - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - sub sp, sp, #4 - ldr r1, _03807530 ;@ =0x00001FFF - and r0, r0, r1 - mov r0, r0, lsl #16 - movs r6, r0, lsr #16 - moveq r0, #0 - beq _03807524 - mov r9, #0 - mov r0, #1 - b _03807444 -_03807434: - mov r1, r0, lsl r9 - ands r1, r6, r1 - bne _0380744C - add r9, r9, #1 -_03807444: - cmp r9, #16 - blt _03807434 -_0380744C: - mov sl, #15 - mov r0, #1 - b _03807468 -_03807458: - mov r1, r0, lsl sl - ands r1, r6, r1 - bne _03807470 - sub sl, sl, #1 -_03807468: - cmp sl, #0 - bne _03807458 -_03807470: - sub r5, sl, r9 - cmp r5, #5 - movlt r0, #1 - movlt r0, r0, lsl r9 - movlt r0, r0, lsl #16 - movlt r0, r0, lsr #16 - blt _03807524 - add r0, sl, r9 - mov r1, #2 - bl _s32_div_f - mov r8, r0 - mov r7, #0 - mov fp, #2 - mov r4, #1 - b _038074D4 -_038074AC: - mov r0, r7 - mov r1, fp - bl _s32_div_f - mov r0, r1, lsl #1 - sub r0, r0, #1 - mla r8, r7, r0, r8 - mov r0, r4, lsl r8 - ands r0, r6, r0 - bne _038074DC - add r7, r7, #1 -_038074D4: - cmp r7, r5 - blt _038074AC -_038074DC: - sub r0, sl, r8 - cmp r0, #5 - blt _038074F4 - sub r0, r8, r9 - cmp r0, #5 - bge _0380750C -_038074F4: - mov r0, #1 - mov r1, r0, lsl r9 - orr r0, r1, r0, lsl sl - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - b _03807524 -_0380750C: - mov r1, #1 - mov r0, r1, lsl sl - orr r0, r0, r1, lsl r8 - orr r0, r0, r1, lsl r9 - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 -_03807524: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - bx lr -_03807530: .word 0x00001FFF - - arm_func_start WMSP_GetBuffer4Callback2Wm9 -WMSP_GetBuffer4Callback2Wm9: ;@ 0x03807534 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - ldr r0, _03807584 ;@ =_0601AE88 - bl OS_LockMutex - mov r5, #256 ;@ 0x100 - ldr r4, _03807588 ;@ =0x027FFF96 - b _03807558 -_03807550: - mov r0, r5 - bl FUN_037F8CB4 -_03807558: - ldrh r0, [r4] - ands r1, r0, #1 - bne _03807550 - orr r0, r0, #1 - strh r0, [r4] - ldr r0, _0380758C ;@ =_0601A960 - ldr r0, [r0, #1356] ;@ 0x54c - ldr r0, [r0, #8] - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_03807584: .word _0601AE88 -_03807588: .word 0x027FFF96 -_0380758C: .word _0601A960 - - arm_func_start WMSP_ReturnResult2Wm9 -WMSP_ReturnResult2Wm9: ;@ 0x03807590 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r0 - mov r6, #256 ;@ 0x100 - mov r5, #10 - mov r4, #0 - b _038075B4 -_038075AC: - mov r0, r6 - bl FUN_037F8CB4 -_038075B4: - mov r0, r5 - mov r1, r7 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - blt _038075AC - ldr r0, _038075E0 ;@ =_0601AE88 - bl OS_UnlockMutex - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_038075E0: .word _0601AE88 - .balign 2, 0 ; Don't pad with nop diff --git a/arm7/asm/dtcm_bss.s b/arm7/asm/dtcm_bss.s deleted file mode 100644 index e485943f..00000000 --- a/arm7/asm/dtcm_bss.s +++ /dev/null @@ -1,243 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .bss - - .global _0380912C -_0380912C: ;0x0380912C - .space 0x03809140 - 0x0380912C - - .global cardi_common -cardi_common: ;0x03809140 - .space 0x03809188 - 0x03809140 - - .global _03809188 -_03809188: ;0x03809188 - .space 0x03809760 - 0x03809188 - - .global _03809760 -_03809760: ;0x03809760 - .space 0x03809764 - 0x03809760 - - .global _03809764 -_03809764: ;0x03809764 - .space 0x03809774 - 0x03809764 - - .global cardi_rom_base -cardi_rom_base: ;0x03809774 - .space 0x03809780 - 0x03809774 - - .global rom_stat -rom_stat: ;0x03809780 - .space 0x038099A0 - 0x03809780 - - .global _038099A0 -_038099A0: ;0x038099A0 - .space 0x038099A4 - 0x038099A0 - - .global _038099A4 -_038099A4: ;0x038099A4 - .space 0x038099A8 - 0x038099A4 - - .global _038099A8 -_038099A8: ;0x038099A8 - .space 0x038099AC - 0x038099A8 - - .global _038099AC -_038099AC: ;0x038099AC - .space 0x038099B0 - 0x038099AC - - .global _038099B0 -_038099B0: ;0x038099B0 - .space 0x038099B8 - 0x038099B0 - - .global _038099B8 -_038099B8: ;0x038099B8 - .space 0x03809C5C - 0x038099B8 - - .global _03809C5C -_03809C5C: ;0x03809C5C - .space 0x03809C7C - 0x03809C5C - - .global _03809C7C -_03809C7C: ;0x03809C7C - .space 0x03809CBC - 0x03809C7C - - .global _03809CBC -_03809CBC: ;0x03809CBC - .space 0x03809CC0 - 0x03809CBC - - .global _03809CC0 -_03809CC0: ;0x03809CC0 - .space 0x03809E40 - 0x03809CC0 - - .global _03809E40 -_03809E40: ;0x03809E40 - .space 0x03809E4C - 0x03809E40 - - .global _03809E4C -_03809E4C: ;0x03809E4C - .space 0x03809E50 - 0x03809E4C - - .global _03809E50 -_03809E50: ;0x03809E50 - .space 0x03809E54 - 0x03809E50 - - .global _03809E54 -_03809E54: ;0x03809E54 - .space 0x03809E80 - 0x03809E54 - - .global _03809E80 -_03809E80: ;0x03809E80 - .space 0x03809F28 - 0x03809E80 - - .global _03809F28 -_03809F28: ;0x03809F28 - .space 0x03809F2C - 0x03809F28 - - .global PMi_KeyPattern -PMi_KeyPattern: ;0x03809F2C - .space 0x03809F30 - 0x03809F2C - - .global PMi_TriggerBL -PMi_TriggerBL: ;0x03809F30 - .space 0x03809F34 - 0x03809F30 - - .global PMi_Initialized -PMi_Initialized: ;0x03809F34 - .space 0x03809F38 - 0x03809F34 - - .global PMi_Work -PMi_Work: ;0x03809F38 - .space 0x03809F64 - 0x03809F38 - - .global _03809F64 -_03809F64: ;0x03809F64 - .space 0x03809F68 - 0x03809F64 - - .global PMi_BlinkPatternNo -PMi_BlinkPatternNo: ;0x03809F68 - .space 0x03809F6C - 0x03809F68 - - .global _03809F6C -_03809F6C: ;0x03809F6C - .space 0x03809FA8 - 0x03809F6C - - .global _03809FA8 -_03809FA8: ;0x03809FA8 - .space 0x03809FB8 - 0x03809FA8 - - .global CTRDGi_Work -CTRDGi_Work: ;0x03809FB8 - .space 0x03809FBC - 0x03809FB8 - - .global _03809FBC -_03809FBC: ;0x03809FBC - .space 0x03809FC0 - 0x03809FBC - - .global current_vib -current_vib: ;0x03809FC0 - .space 0x03809FC4 - 0x03809FC0 - - .global _03809FC4 -_03809FC4: ;0x03809FC4 - .space 0x03809FC8 - 0x03809FC4 - - .global _03809FC8 -_03809FC8: ;0x03809FC8 - .space 0x03809FCC - 0x03809FC8 - - .global _03809FCC -_03809FCC: ;0x03809FCC - .space 0x03809FD0 - 0x03809FCC - - .global _03809FD0 -_03809FD0: ;0x03809FD0 - .space 0x03809FD4 - 0x03809FD0 - - .global _03809FD4 -_03809FD4: ;0x03809FD4 - .space 0x03809FEC - 0x03809FD4 - - .global _03809FEC -_03809FEC: ;0x03809FEC - .space 0x0380A018 - 0x03809FEC - - .global _0380A018 -_0380A018: ;0x0380A018 - .space 0x0380A038 - 0x0380A018 - - .global _0380A038 -_0380A038: ;0x0380A038 - .space 0x0380A03C - 0x0380A038 - - .global _0380A03C -_0380A03C: ;0x0380A03C - .space 0x0380A05C - 0x0380A03C - - .global _0380A05C -_0380A05C: ;0x0380A05C - .space 0x0380A06C - 0x0380A05C - - .global _0380A06C -_0380A06C: ;0x0380A06C - .space 0x0380A13C - 0x0380A06C - - .global _0380A13C -_0380A13C: ;0x0380A13C - .space 0x0380A210 - 0x0380A13C - - .global _0380A210 -_0380A210: ;0x0380A210 - .space 0x0380A3F0 - 0x0380A210 - - .global _0380A3F0 -_0380A3F0: ;0x0380A3F0 - .space 0x0380A3F4 - 0x0380A3F0 - - .global _0380A3F4 -_0380A3F4: ;0x0380A3F4 - .space 0x0380A3F8 - 0x0380A3F4 - - .global _0380A3F8 -_0380A3F8: ;0x0380A3F8 - .space 0x0380A3FC - 0x0380A3F8 - - .global _0380A3FC -_0380A3FC: ;0x0380A3FC - .space 0x0380A400 - 0x0380A3FC - - .global _0380A400 -_0380A400: ;0x0380A400 - .space 0x0380A4A4 - 0x0380A400 - - .global _0380A4A4 -_0380A4A4: ;0x0380A4A4 - .space 0x0380AA64 - 0x0380A4A4 - - .global _0380AA64 -_0380AA64: ;0x0380AA64 - .space 0x0380B064 - 0x0380AA64 - - .global _0380B064 -_0380B064: ;0x0380B064 - .space 0x0380B764 - 0x0380B064 - - .global _0380B764 -_0380B764: ;0x0380B764 - .space 0x0380B808 - 0x0380B764 - - .global _0380B808 -_0380B808: ;0x0380B808 - .space 0x0380B8AC - 0x0380B808 - - .global _0380B8AC -_0380B8AC: ;0x0380B8AC - .space 0x0380B8D8 - 0x0380B8AC - - .global _0380B8D8 -_0380B8D8: ;0x0380B8D8 - .space 0x0380B904 - 0x0380B8D8 - - .global _0380B904 -_0380B904: ;0x0380B904 - .space 0x0380B92C - 0x0380B904 diff --git a/arm7/asm/dtcm_data.s b/arm7/asm/dtcm_data.s deleted file mode 100644 index 3802f4c8..00000000 --- a/arm7/asm/dtcm_data.s +++ /dev/null @@ -1,112 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .data - - .global _038075E4 -_038075E4: - .word 0x00090008 - .word 0x000B000A - .word 0x00040003 - .word 0x00060005 - .word 0x00000000 - - .global OS_IRQTable -OS_IRQTable: - .word OSi_IrqVBlank - .word OS_IrqDummy - .word OS_IrqDummy - .word OSi_IrqTimer0 - .word OSi_IrqTimer1 - .word OSi_IrqTimer2 - .word OSi_IrqTimer3 - .word OS_IrqDummy - .word OSi_IrqDma0 - .word OSi_IrqDma1 - .word OSi_IrqDma2 - .word OSi_IrqDma3 - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - .word OS_IrqDummy - - .global sMasterPan -sMasterPan: - .word 0xFFFFFFFF - - .global _03807660 -_03807660: - .word 0x12345678 - - .global cardi_rom_header_addr -cardi_rom_header_addr: - .word 0x027FFE00 - - .global _03807668 -_03807668: - .word 0xFFFFFFFF - - .global _0380766C -_0380766C: - .word 0x00000001 - - .global PMi_LEDStatus -PMi_LEDStatus: - .word 0x00000001 - - .global PMi_BlinkPatternData -PMi_BlinkPatternData: - .word 0x00000000 - .word 0xAA000000 - .word 0x00010008 - .word 0x00000000 - .word 0xCC000000 - .word 0x00010008 - .word 0x00000000 - .word 0xE3800000 - .word 0x0001000C - .word 0x00000000 - .word 0xF0F00000 - .word 0x00010010 - .word 0x00000000 - .word 0xF83E0000 - .word 0x00010014 - .word 0x00000000 - .word 0xFC000000 - .word 0x0001000C - .word 0x00000000 - .word 0xFF000000 - .word 0x00010010 - .word 0x00000000 - .word 0xFFC00000 - .word 0x00010014 - .word 0x00000000 - .word 0xFF000000 - .word 0x00010020 - .word 0x00000000 - .word 0xFF00FF00 - .word 0x00010020 - .word 0x00000000 - .word 0xFFFFFF00 - .word 0x00010020 - .word 0x00000000 - .word 0xC3000000 - .word 0x00020028 - - .global _03807704 -_03807704: - .word 0x00000001 - - .global _03807708 -_03807708: - .word 0xFFFFFFFF - .balign 2, 0 ; Don't pad with nop diff --git a/arm7/asm/wram2.s b/arm7/asm/wram2.s new file mode 100644 index 00000000..57fd39e1 --- /dev/null +++ b/arm7/asm/wram2.s @@ -0,0 +1,7573 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start FUN_03801150 +FUN_03801150: ;@ 0x03801150 + stmfd sp!, {lr} + sub sp, sp, #4 + cmp r2, #0 + bne _038011B4 + sub r0, r0, #4 + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _038011B4 + b _038011AC + b _038011B4 + b _03801188 + b _038011B4 + b _038011A0 + b _03801194 +_03801188: + mov r0, r1 + bl TP_AnalyzeCommand + b _038011B4 +_03801194: + mov r0, r1 + bl MIC_AnalyzeCommand + b _038011B4 +_038011A0: + mov r0, r1 + bl PM_AnalyzeCommand + b _038011B4 +_038011AC: + mov r0, r1 + bl NVRAM_AnalyzeCommand +_038011B4: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_038011C0 +FUN_038011C0: ;@ 0x038011C0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + ldr r6, _03801228 ;@ =_03809C5C + add r5, sp, #0 + mov r4, #1 +_038011D4: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl OS_ReceiveMessage + ldr r0, [sp] + ldr r1, [r0] + cmp r1, #3 + addls pc, pc, r1, lsl #2 + b _038011D4 + b _03801208 + b _03801220 + b _03801210 + b _03801218 +_03801208: + bl TP_ExecuteProcess + b _038011D4 +_03801210: + bl MIC_ExecuteProcess + b _038011D4 +_03801218: + bl PM_ExecuteProcess + b _038011D4 +_03801220: + bl NVRAM_ExecuteProcess + b _038011D4 +_03801228: .word _03809C5C + + arm_func_start SPIi_CheckEntry +SPIi_CheckEntry: ;@ 0x0380122C + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _03801250 ;@ =_03809C5C + add r1, sp, #0 + mov r2, #0 + bl OS_ReadMessage + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03801250: .word _03809C5C + + arm_func_start SPIi_SetEntry +SPIi_SetEntry: ;@ 0x03801254 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + mov r4, r1 + ldrh r0, [sp, #24] + cmp r0, #4 + movhi r0, #0 + bhi _0380130C + bl OS_DisableInterrupts + ldr r2, _03801318 ;@ =_038099B0 + ldr r3, [r2, #1164] ;@ 0x48c + mov r1, #24 + mul ip, r3, r1 + ldr r3, _0380131C ;@ =_03809CBC + str r5, [r3, ip] + ldr r3, [r2, #1164] ;@ 0x48c + mul r5, r3, r1 + ldr r3, _03801320 ;@ =_03809CC0 + str r4, [r3, r5] + add r3, sp, #24 + bic r3, r3, #3 + add r6, r3, #4 + mov lr, #0 + ldrh ip, [sp, #24] + b _038012D4 +_038012B8: + add r6, r6, #4 + ldr r5, [r6, #-4] + ldr r4, [r2, #1164] ;@ 0x48c + mla r3, r4, r1, r2 + add r3, r3, lr, lsl #2 + str r5, [r3, #788] ;@ 0x314 + add lr, lr, #1 +_038012D4: + cmp lr, ip + blt _038012B8 + ldr r1, _03801318 ;@ =_038099B0 + ldr r4, [r1, #1164] ;@ 0x48c + add r2, r4, #1 + and r2, r2, #15 + str r2, [r1, #1164] ;@ 0x48c + bl OS_RestoreInterrupts + ldr r0, _03801324 ;@ =_03809C5C + ldr r2, _0380131C ;@ =_03809CBC + mov r1, #24 + mla r1, r4, r1, r2 + mov r2, #0 + bl OS_SendMessage +_0380130C: + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #16 + bx lr +_03801318: .word _038099B0 +_0380131C: .word _03809CBC +_03801320: .word _03809CC0 +_03801324: .word _03809C5C + + arm_func_start SPIi_ReleaseException +SPIi_ReleaseException: ;@ 0x03801328 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r1, _03801364 ;@ =_038099B0 + ldr r2, [r1, #4] + cmp r2, r0 + bne _03801358 + mov r0, #5 + str r0, [r1, #4] + mov r0, #0 + str r0, [r1] + ldr r0, _03801368 ;@ =_03809E40 + bl OS_WakeupThread +_03801358: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03801364: .word _038099B0 +_03801368: .word _03809E40 + + arm_func_start SPIi_GetException +SPIi_GetException: ;@ 0x0380136C + mov r2, #1 + ldr r1, _03801380 ;@ =_038099B0 + str r2, [r1] + str r0, [r1, #4] + bx lr +_03801380: .word _038099B0 + + arm_func_start SPIi_CheckException +SPIi_CheckException: ;@ 0x03801384 + ldr r0, _0380139C ;@ =_038099B0 + ldr r0, [r0] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + bx lr +_0380139C: .word _038099B0 + + arm_func_start SPIi_ReturnResult +SPIi_ReturnResult: ;@ 0x038013A0 + stmdb sp!, {r4, r5, r6, lr} + and r2, r0, #112 ;@ 0x70 + cmp r2, #48 ;@ 0x30 + bgt _038013E0 + cmp r2, #48 ;@ 0x30 + bge _03801434 + cmp r2, #16 + bgt _038013D4 + cmp r2, #16 + bge _0380141C + cmp r2, #0 + beq _0380141C + b _03801438 +_038013D4: + cmp r2, #32 + beq _03801434 + b _03801438 +_038013E0: + cmp r2, #80 ;@ 0x50 + bgt _038013FC + cmp r2, #80 ;@ 0x50 + bge _03801424 + cmp r2, #64 ;@ 0x40 + beq _03801424 + b _03801438 +_038013FC: + cmp r2, #96 ;@ 0x60 + bgt _03801410 + cmp r2, #96 ;@ 0x60 + beq _0380142C + b _03801438 +_03801410: + cmp r2, #112 ;@ 0x70 + beq _0380142C + b _03801438 +_0380141C: + mov r4, #6 + b _03801438 +_03801424: + mov r4, #9 + b _03801438 +_0380142C: + mov r4, #8 + b _03801438 +_03801434: + mov r4, #4 +_03801438: + and r0, r0, #255 ;@ 0xff + orr r0, r0, #128 ;@ 0x80 + mov r0, r0, lsl #8 + orr r2, r0, #50331648 ;@ 0x3000000 + and r0, r1, #255 ;@ 0xff + orr r6, r2, r0 + mov r5, #0 +_03801454: + mov r0, r4 + mov r1, r6 + mov r2, r5 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _03801454 + ldmia sp!, {r4, r5, r6, lr} + bx lr + + arm_func_start SPI_Unlock +SPI_Unlock: ;@ 0x03801474 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r1, _038014D8 ;@ =_038099B0 + ldr r2, [r1] + cmp r2, #0 + beq _038014CC + ldr r2, [r1, #4] + cmp r2, #4 + bne _038014CC + ldr r1, [r1, #1176] ;@ 0x498 + cmp r1, r0 + bne _038014CC + bl OS_DisableInterrupts + mov r2, #5 + ldr r1, _038014D8 ;@ =_038099B0 + str r2, [r1, #4] + mov r2, #0 + str r2, [r1] + str r2, [r1, #1176] ;@ 0x498 + bl OS_RestoreInterrupts + ldr r0, _038014DC ;@ =_03809E40 + bl OS_WakeupThread +_038014CC: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038014D8: .word _038099B0 +_038014DC: .word _03809E40 + + arm_func_start SPI_Lock +SPI_Lock: ;@ 0x038014E0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + ldr r5, _0380153C ;@ =_03809E40 + ldr r4, _03801540 ;@ =_038099B0 +_038014F4: + bl OS_DisableInterrupts + mov r6, r0 + ldr r1, [r4] + cmp r1, #0 + beq _03801518 + bl OS_RestoreInterrupts + mov r0, r5 + bl OS_SleepThread + b _038014F4 +_03801518: + mov r0, #4 + bl SPIi_GetException + ldr r0, _03801540 ;@ =_038099B0 + str r7, [r0, #1176] ;@ 0x498 + mov r0, r6 + bl OS_RestoreInterrupts + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_0380153C: .word _03809E40 +_03801540: .word _038099B0 + + arm_func_start SPI_Init +SPI_Init: ;@ 0x03801544 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + mov r4, r0 + ldr r0, _03801640 ;@ =_038099AC + ldrh r1, [r0] + cmp r1, #0 + bne _03801634 + mov r1, #1 + strh r1, [r0] + mov r1, #0 + ldr r0, _03801644 ;@ =_038099B0 + str r1, [r0] + mov r1, #5 + str r1, [r0, #4] + bl TP_Init + bl NVRAM_Init + bl MIC_Init + bl PM_Init + bl PXI_Init + mov r0, #6 + ldr r1, _03801648 ;@ =FUN_03801150 + bl PXI_SetFifoRecvCallback + mov r0, #9 + ldr r1, _03801648 ;@ =FUN_03801150 + bl PXI_SetFifoRecvCallback + mov r0, #8 + ldr r1, _03801648 ;@ =FUN_03801150 + bl PXI_SetFifoRecvCallback + mov r0, #4 + ldr r1, _03801648 ;@ =FUN_03801150 + bl PXI_SetFifoRecvCallback + ldr r0, _0380164C ;@ =_03809C5C + ldr r1, _03801650 ;@ =_03809C7C + mov r2, #16 + bl OS_InitMessageQueue + mov r8, #0 + ldr r7, _03801654 ;@ =_03809CBC + mov r6, r8 + mov r5, #24 +_038015E0: + mla r0, r8, r5, r7 + mov r1, r6 + mov r2, r5 + bl MI_CpuFill8 + add r8, r8, #1 + cmp r8, #16 + blt _038015E0 + mov r2, #0 + ldr r0, _03801644 ;@ =_038099B0 + str r2, [r0, #1164] ;@ 0x48c + str r2, [r0, #1172] ;@ 0x494 + str r2, [r0, #1168] ;@ 0x490 + mov r0, #512 ;@ 0x200 + str r0, [sp] + str r4, [sp, #4] + ldr r0, _03801658 ;@ =_038099B8 + ldr r1, _0380165C ;@ =FUN_038011C0 + ldr r3, _0380164C ;@ =_03809C5C + bl OS_CreateThread + ldr r0, _03801658 ;@ =_038099B8 + bl OS_WakeupThreadDirect +_03801634: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr +_03801640: .word _038099AC +_03801644: .word _038099B0 +_03801648: .word FUN_03801150 +_0380164C: .word _03809C5C +_03801650: .word _03809C7C +_03801654: .word _03809CBC +_03801658: .word _038099B8 +_0380165C: .word FUN_038011C0 + + arm_func_start FUN_03801660 +FUN_03801660: ;@ 0x03801660 + stmfd sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + bne _03801680 + mov r0, #3 + mov r1, #2 + bl SPIi_ReturnResult + b _03801698 +_03801680: + ldr r1, _038016A4 ;@ =_03809E54 + str r0, [r1, #36] ;@ 0x24 + str r0, [r1, #40] ;@ 0x28 + mov r0, #3 + mov r1, #0 + bl SPIi_ReturnResult +_03801698: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038016A4: .word _03809E54 + + arm_func_start FUN_038016A8 +FUN_038016A8: ;@ 0x038016A8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + mov r0, #0 + mov r1, #16 + mov r2, #1 + mov r3, r4 + bl SPIi_SetEntry + cmp r0, #0 + bne _0380170C + ldr r0, [sp] + bic r0, r0, #100663296 ;@ 0x6000000 + orr r0, r0, #100663296 ;@ 0x6000000 + str r0, [sp] + ldrh r1, [sp] + ldr r0, _03801718 ;@ =0x027FFFAA + strh r1, [r0] + ldrh r1, [sp, #2] + ldr r0, _0380171C ;@ =0x027FFFAC + strh r1, [r0] + mov r0, #16 + and r1, r4, #255 ;@ 0xff + mov r1, r1, lsl #16 + mov r1, r1, lsr #16 + bl SPIi_ReturnResult +_0380170C: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03801718: .word 0x027FFFAA +_0380171C: .word 0x027FFFAC + + arm_func_start TP_ExecuteProcess +TP_ExecuteProcess: ;@ 0x03801720 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + sub sp, sp, #16 + mov sl, r0 + ldr r1, [sl, #4] + cmp r1, #2 + bhi _03801754 + cmp r1, #0 + beq _0380176C + cmp r1, #1 + beq _03801834 + cmp r1, #2 + beq _038018E0 + b _0380192C +_03801754: + cmp r1, #16 + bne _0380192C + ldr r0, _03801938 ;@ =_03809E54 + ldr r0, [r0, #32] + cmp r0, #2 + bne _0380192C +_0380176C: + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #0 + bl SPIi_CheckException + cmp r0, #0 + bne _038017A4 + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, [sl, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #4 + bl SPIi_ReturnResult + b _0380192C +_038017A4: + mov r0, #0 + bl SPIi_GetException + mov r0, r4 + bl OS_RestoreInterrupts + add r0, sp, #8 + ldr r1, _03801938 ;@ =_03809E54 + ldr r1, [r1, #36] ;@ 0x24 + add r2, sp, #4 + bl TP_ExecSampling + add r0, sp, #8 + ldrh r1, [sp, #4] + bl FUN_03801954 + ldrh r1, [sp, #8] + ldr r0, _0380193C ;@ =0x027FFFAA + strh r1, [r0] + ldrh r1, [sp, #10] + ldr r0, _03801940 ;@ =0x027FFFAC + strh r1, [r0] + ldr r0, [sl, #4] + cmp r0, #0 + bne _0380180C + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #0 + bl SPIi_ReturnResult + b _03801828 +_0380180C: + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + ldr r1, [sl, #8] + and r1, r1, #255 ;@ 0xff + mov r1, r1, lsl #16 + mov r1, r1, lsr #16 + bl SPIi_ReturnResult +_03801828: + mov r0, #0 + bl SPIi_ReleaseException + b _0380192C +_03801834: + ldr r7, _03801938 ;@ =_03809E54 + ldr r0, [r7, #32] + cmp r0, #1 + bne _038018CC + mov r9, #0 + ldr r8, _03801944 ;@ =0x00000107 + ldr r6, _03801948 ;@ =_03809E80 + mov r5, #10 + ldr r4, _0380194C ;@ =FUN_038016A8 + b _0380189C +_0380185C: + mul r0, r9, r8 + bl _u32_div_f + ldr r1, [sl, #12] + add r0, r1, r0 + mov r1, r8 + bl _u32_div_f + add r2, r7, r9, lsl #1 + strh r1, [r2, #204] ;@ 0xcc + str r9, [sp] + mov r0, #40 ;@ 0x28 + mla r0, r9, r0, r6 + ldrsh r1, [r2, #204] ;@ 0xcc + mov r2, r5 + mov r3, r4 + bl OS_SetPeriodicVAlarm + add r9, r9, #1 +_0380189C: + ldr r1, [sl, #8] + cmp r9, r1 + bcc _0380185C + ldr r0, [sl, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #0 + bl SPIi_ReturnResult + mov r1, #2 + ldr r0, _03801938 ;@ =_03809E54 + str r1, [r0, #32] + b _0380192C +_038018CC: + mov r0, r1, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult + b _0380192C +_038018E0: + ldr r0, _03801938 ;@ =_03809E54 + ldr r0, [r0, #32] + cmp r0, #3 + bne _0380191C + ldr r0, _03801950 ;@ =0x54505641 + bl OS_CancelVAlarms + ldr r0, [sl, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #0 + bl SPIi_ReturnResult + mov r1, #0 + ldr r0, _03801938 ;@ =_03809E54 + str r1, [r0, #32] + b _0380192C +_0380191C: + mov r0, r1, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult +_0380192C: + add sp, sp, #16 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + bx lr +_03801938: .word _03809E54 +_0380193C: .word 0x027FFFAA +_03801940: .word 0x027FFFAC +_03801944: .word 0x00000107 +_03801948: .word _03809E80 +_0380194C: .word FUN_038016A8 +_03801950: .word 0x54505641 + + arm_func_start FUN_03801954 +FUN_03801954: ;@ 0x03801954 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, [r0] + mov r2, r0, lsl #7 + movs r2, r2, lsr #31 + bne _03801984 + mov r1, #0 + ldr r0, _03801A3C ;@ =_03809E50 + strb r1, [r0] + ldr r0, _03801A40 ;@ =_03809E4C + strb r1, [r0] + b _03801A30 +_03801984: + mov r0, r0, lsl #5 + movs r0, r0, lsr #30 + beq _038019D4 + mov r2, #0 + ldr r0, _03801A40 ;@ =_03809E4C + strb r2, [r0] + ldr r0, _03801A3C ;@ =_03809E50 + ldrb r1, [r0] + add r1, r1, #1 + strb r1, [r0] + ldrb r1, [r0] + cmp r1, #4 + bcc _03801A30 + strb r2, [r0] + ldr r0, _03801A44 ;@ =_03809E54 + ldr r1, [r0, #36] ;@ 0x24 + cmp r1, #35 ;@ 0x23 + addlt r1, r1, #1 + strlt r1, [r0, #36] ;@ 0x24 + b _03801A30 +_038019D4: + mov lr, #0 + ldr r3, _03801A3C ;@ =_03809E50 + strb lr, [r3] + ldr r2, _03801A44 ;@ =_03809E54 + ldr ip, [r2, #36] ;@ 0x24 + cmp r1, ip, asr #1 + ldrge r0, _03801A40 ;@ =_03809E4C + strgeb lr, [r0] + bge _03801A30 + ldr r0, _03801A40 ;@ =_03809E4C + ldrb r1, [r0] + add r1, r1, #1 + strb r1, [r0] + ldrb r1, [r0] + cmp r1, #4 + bcc _03801A30 + strb lr, [r0] + ldr r0, [r2, #40] ;@ 0x28 + cmp ip, r0 + subgt r0, ip, #1 + strgt r0, [r2, #36] ;@ 0x24 + movgt r0, #3 + strgtb r0, [r3] +_03801A30: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03801A3C: .word _03809E50 +_03801A40: .word _03809E4C +_03801A44: .word _03809E54 + + arm_func_start TP_AnalyzeCommand +TP_AnalyzeCommand: ;@ 0x03801A48 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ands r1, r0, #33554432 ;@ 0x2000000 + beq _03801A78 + mov r4, #0 + mov r3, r4 + ldr r1, _03801C00 ;@ =_03809E54 +_03801A64: + mov r2, r4, lsl #1 + strh r3, [r1, r2] + add r4, r4, #1 + cmp r4, #16 + blt _03801A64 +_03801A78: + and r1, r0, #983040 ;@ 0xf0000 + mov r1, r1, lsr #16 + mov r1, r1, lsl #1 + ldr r2, _03801C00 ;@ =_03809E54 + strh r0, [r2, r1] + ands r0, r0, #16777216 ;@ 0x1000000 + beq _03801BF4 + ldrh r1, [r2] + and r0, r1, #65280 ;@ 0xff00 + mov r0, r0, lsl #8 + mov r4, r0, lsr #16 + cmp r4, #3 + addls pc, pc, r4, lsl #2 + b _03801BE8 + b _03801AD4 + b _03801AFC + b _03801B98 + b _03801AC0 +_03801AC0: + and r0, r1, #255 ;@ 0xff + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + bl FUN_03801660 + b _03801BF4 +_03801AD4: + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SPIi_SetEntry + cmp r0, #0 + bne _03801BF4 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult + b _03801BF4 +_03801AFC: + ldr r0, [r2, #32] + cmp r0, #0 + beq _03801B18 + mov r0, r4 + mov r1, #3 + bl SPIi_ReturnResult + b _03801BF4 +_03801B18: + and r0, r1, #255 ;@ 0xff + mov r0, r0, lsl #16 + movs r3, r0, lsr #16 + beq _03801B30 + cmp r3, #4 + bls _03801B40 +_03801B30: + mov r0, r4 + mov r1, #2 + bl SPIi_ReturnResult + b _03801BF4 +_03801B40: + ldrh r1, [r2, #2] + ldr r0, _03801C04 ;@ =0x00000107 + cmp r1, r0 + bcc _03801B60 + mov r0, r4 + mov r1, #2 + bl SPIi_ReturnResult + b _03801BF4 +_03801B60: + str r1, [sp] + mov r0, #0 + mov r1, r4 + mov r2, #2 + bl SPIi_SetEntry + cmp r0, #0 + movne r1, #1 + ldrne r0, _03801C00 ;@ =_03809E54 + strne r1, [r0, #32] + bne _03801BF4 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult + b _03801BF4 +_03801B98: + ldr r0, [r2, #32] + cmp r0, #2 + beq _03801BB4 + mov r0, r4 + mov r1, #3 + bl SPIi_ReturnResult + b _03801BF4 +_03801BB4: + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SPIi_SetEntry + cmp r0, #0 + movne r1, #3 + ldrne r0, _03801C00 ;@ =_03809E54 + strne r1, [r0, #32] + bne _03801BF4 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult + b _03801BF4 +_03801BE8: + mov r0, r4 + mov r1, #1 + bl SPIi_ReturnResult +_03801BF4: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03801C00: .word _03809E54 +_03801C04: .word 0x00000107 + + arm_func_start TP_Init +TP_Init: ;@ 0x03801C08 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r3, #0 + ldr r0, _03801CFC ;@ =_03809E54 + str r3, [r0, #32] + mov r1, #20 + str r1, [r0, #36] ;@ 0x24 + str r1, [r0, #40] ;@ 0x28 + mov r2, r3 +_03801C28: + mov r1, r3, lsl #1 + strh r2, [r0, r1] + add r3, r3, #1 + cmp r3, #16 + blt _03801C28 + bl OS_IsVAlarmAvailable + cmp r0, #0 + bne _03801C4C + bl OS_InitVAlarm +_03801C4C: + mov r7, #0 + ldr r6, _03801D00 ;@ =_03809E80 + ldr r5, _03801D04 ;@ =0x54505641 + mov r4, #40 ;@ 0x28 +_03801C5C: + mla r8, r7, r4, r6 + mov r0, r8 + bl OS_CreateVAlarm + mov r0, r8 + mov r1, r5 + bl OS_SetVAlarmTag + add r7, r7, #1 + cmp r7, #4 + blt _03801C5C + ldr r1, _03801D08 ;@ =0x040001C0 +_03801C84: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03801C84 + ldr r0, _03801D0C ;@ =0x00008A01 + strh r0, [r1] + mov r1, #132 ;@ 0x84 + ldr r0, _03801D10 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03801D08 ;@ =0x040001C0 +_03801CA8: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03801CA8 + mov r1, #0 + ldr r0, _03801D10 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03801D08 ;@ =0x040001C0 +_03801CC4: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03801CC4 + ldr r0, _03801D14 ;@ =0x00008201 + strh r0, [r1] + mov r1, #0 + ldr r0, _03801D10 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03801D08 ;@ =0x040001C0 +_03801CE8: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03801CE8 + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr +_03801CFC: .word _03809E54 +_03801D00: .word _03809E80 +_03801D04: .word 0x54505641 +_03801D08: .word 0x040001C0 +_03801D0C: .word 0x00008A01 +_03801D10: .word 0x040001C2 +_03801D14: .word 0x00008201 + + arm_func_start TP_ExecSampling +TP_ExecSampling: ;@ 0x03801D18 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #12 + mov r7, r0 + movs r6, r1 + mov r5, r2 + mov r0, #0 + strh r0, [r5] + rsbmi r6, r6, #0 + bl FUN_03802160 + movs r4, r0 + bne _03801D94 + ldr r1, [r7] + mov r0, #4096 ;@ 0x1000 + rsb r0, r0, #0 + and r0, r1, r0 + str r0, [r7] + ldr r1, [r7] + ldr r0, _03801F4C ;@ =0xFF000FFF + and r0, r1, r0 + str r0, [r7] + ldr r0, [r7] + bic r0, r0, #16777216 ;@ 0x1000000 + str r0, [r7] + ldr r0, [r7] + bic r0, r0, #100663296 ;@ 0x6000000 + orr r0, r0, #100663296 ;@ 0x6000000 + str r0, [r7] + mov r1, #0 + ldr r0, _03801F50 ;@ =_03809F28 + strh r1, [r0] + b _03801F40 +_03801D94: + add r0, sp, #0 + mov r1, r6 + mov r2, #0 + add r3, sp, #2 + bl FUN_03801F68 + ldr r1, [r7] + bic r1, r1, #100663296 ;@ 0x6000000 + and r0, r0, #3 + orr r0, r1, r0, lsl #25 + str r0, [r7] + ldr r1, [r7] + mov r0, #4096 ;@ 0x1000 + rsb r0, r0, #0 + and r2, r1, r0 + ldrh r1, [sp] + ldr r0, _03801F54 ;@ =0x00000FFF + and r0, r1, r0 + orr r0, r2, r0 + str r0, [r7] + add r0, sp, #0 + mov r1, r6 + mov r2, #1 + add r3, sp, #4 + bl FUN_03801F68 + cmp r0, #2 + bne _03801E1C + ldr r0, [r7] + bic r1, r0, #100663296 ;@ 0x6000000 + mov r0, r0, lsl #5 + mov r0, r0, lsr #30 + orr r0, r0, #2 + and r0, r0, #3 + orr r0, r1, r0, lsl #25 + str r0, [r7] +_03801E1C: + ldr r1, [r7] + ldr r0, _03801F4C ;@ =0xFF000FFF + and r2, r1, r0 + ldrh r1, [sp] + ldr r0, _03801F54 ;@ =0x00000FFF + and r0, r1, r0 + orr r0, r2, r0, lsl #12 + str r0, [r7] + ldr r0, _03801F58 ;@ =0x00008A01 + ldr r3, _03801F5C ;@ =0x040001C0 + strh r0, [r3] + mov r6, #0 + mov r2, r6 + ldr r1, _03801F60 ;@ =0x040001C2 +_03801E54: + strh r2, [r1] +_03801E58: + ldrh r0, [r3] + ands r0, r0, #128 ;@ 0x80 + bne _03801E58 + add r6, r6, #1 + cmp r6, #12 + blt _03801E54 + ldr r0, _03801F64 ;@ =0x00008201 + strh r0, [r3] + mov r1, #0 + ldr r0, _03801F60 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03801F5C ;@ =0x040001C0 +_03801E88: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03801E88 + cmp r4, #2 + ldreq r0, [r7] + biceq r0, r0, #100663296 ;@ 0x6000000 + orreq r0, r0, #100663296 ;@ 0x6000000 + streq r0, [r7] + bl FUN_03802160 + cmp r0, #0 + beq _03801F20 + cmp r0, #1 + beq _03801EF0 + cmp r0, #2 + bne _03801F3C + ldr r0, [r7] + orr r0, r0, #16777216 ;@ 0x1000000 + str r0, [r7] + ldr r0, [r7] + bic r0, r0, #100663296 ;@ 0x6000000 + orr r0, r0, #100663296 ;@ 0x6000000 + str r0, [r7] + mov r1, #0 + ldr r0, _03801F50 ;@ =_03809F28 + strh r1, [r0] + b _03801F40 +_03801EF0: + ldr r0, [r7] + orr r0, r0, #16777216 ;@ 0x1000000 + str r0, [r7] + mov r1, #1 + ldr r0, _03801F50 ;@ =_03809F28 + strh r1, [r0] + ldrh r0, [sp, #4] + ldrh r1, [sp, #2] + cmp r1, r0 + movcc r1, r0 + strh r1, [r5] + b _03801F40 +_03801F20: + ldr r0, [r7] + bic r0, r0, #16777216 ;@ 0x1000000 + str r0, [r7] + mov r1, #0 + ldr r0, _03801F50 ;@ =_03809F28 + strh r1, [r0] + b _03801F40 +_03801F3C: + bl OS_Terminate +_03801F40: + add sp, sp, #12 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_03801F4C: .word 0xFF000FFF +_03801F50: .word _03809F28 +_03801F54: .word 0x00000FFF +_03801F58: .word 0x00008A01 +_03801F5C: .word 0x040001C0 +_03801F60: .word 0x040001C2 +_03801F64: .word 0x00008201 + + arm_func_start FUN_03801F68 +FUN_03801F68: ;@ 0x03801F68 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + sub sp, sp, #24 + cmp r2, #0 + moveq r5, #209 ;@ 0xd1 + moveq r6, #1 + movne r5, #145 ;@ 0x91 + movne r6, #2 +_03801F84: + ldr r4, _0380214C ;@ =0x040001C0 + ldrh r2, [r4] + ands r2, r2, #128 ;@ 0x80 + bne _03801F84 + ldr r2, _03802150 ;@ =0x00008A01 + strh r2, [r4] + and r5, r5, #255 ;@ 0xff + ldr r2, _03802154 ;@ =0x040001C2 + strh r5, [r2] +_03801FA8: + ldrh r2, [r4] + ands r2, r2, #128 ;@ 0x80 + bne _03801FA8 + mov r7, #0 + ldr ip, _0380214C ;@ =0x040001C0 + ldr lr, _03802154 ;@ =0x040001C2 + add r2, sp, #0 + mov r4, r7 + ldr r9, _03802158 ;@ =0x00007FF8 +_03801FCC: + strh r4, [lr] +_03801FD0: + ldrh r8, [ip] + ands r8, r8, #128 ;@ 0x80 + bne _03801FD0 + ldrh r8, [lr] + and r8, r8, #255 ;@ 0xff + mov r8, r8, lsl #16 + mov r8, r8, lsr #8 + str r8, [r2, r7, lsl #2] + strh r5, [lr] +_03801FF4: + ldrh r8, [ip] + ands r8, r8, #128 ;@ 0x80 + bne _03801FF4 + ldrh r8, [lr] + and r8, r8, #255 ;@ 0xff + mov r8, r8, lsl #16 + ldr sl, [r2, r7, lsl #2] + orr r8, sl, r8, lsr #16 + str r8, [r2, r7, lsl #2] + ldr r8, [r2, r7, lsl #2] + and r8, r8, r9 + mov r8, r8, asr #3 + str r8, [r2, r7, lsl #2] + add r7, r7, #1 + cmp r7, #5 + blt _03801FCC + ldr r2, _0380215C ;@ =0x00008201 + strh r2, [ip] + mov r2, #0 + strh r2, [lr] + ldr r4, _0380214C ;@ =0x040001C0 +_03802048: + ldrh r2, [r4] + ands r2, r2, #128 ;@ 0x80 + bne _03802048 + mov r8, #0 + mov r7, r8 + add r5, sp, #0 +_03802060: + add r9, r7, #1 + ldr r4, [r5, r7, lsl #2] + b _03802084 +_0380206C: + ldr r2, [r5, r9, lsl #2] + subs r2, r4, r2 + rsbmi r2, r2, #0 + cmp r2, r8 + movgt r8, r2 + add r9, r9, #1 +_03802084: + cmp r9, #5 + blt _0380206C + add r7, r7, #1 + cmp r7, #4 + blt _03802060 + strh r8, [r3] + mov r4, #0 + add r2, sp, #0 + b _0380211C +_038020A8: + add r3, r4, #1 + ldr r7, [r2, r4, lsl #2] + b _03802110 +_038020B4: + ldr r8, [r2, r3, lsl #2] + subs r5, r7, r8 + rsbmi r5, r5, #0 + cmp r5, r1 + bgt _0380210C + add r9, r3, #1 + b _03802104 +_038020D0: + ldr r5, [r2, r9, lsl #2] + subs sl, r7, r5 + rsbmi sl, sl, #0 + cmp sl, r1 + bgt _03802100 + add r1, r8, r7, lsl #1 + add r1, r5, r1 + mov r1, r1, asr #2 + bic r1, r1, #7 + strh r1, [r0] + mov r0, #0 + b _03802140 +_03802100: + add r9, r9, #1 +_03802104: + cmp r9, #5 + blt _038020D0 +_0380210C: + add r3, r3, #1 +_03802110: + cmp r3, #4 + blt _038020B4 + add r4, r4, #1 +_0380211C: + cmp r4, #3 + blt _038020A8 + ldr r2, [sp] + ldr r1, [sp, #16] + add r1, r2, r1 + mov r1, r1, asr #1 + bic r1, r1, #7 + strh r1, [r0] + mov r0, r6 +_03802140: + add sp, sp, #24 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + bx lr +_0380214C: .word 0x040001C0 +_03802150: .word 0x00008A01 +_03802154: .word 0x040001C2 +_03802158: .word 0x00007FF8 +_0380215C: .word 0x00008201 + + arm_func_start FUN_03802160 +FUN_03802160: ;@ 0x03802160 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + ldr r1, _038022A4 ;@ =0x040001C0 +_03802174: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03802174 + ldr r0, _038022A8 ;@ =0x00008A01 + strh r0, [r1] + mov r1, #132 ;@ 0x84 + ldr r0, _038022AC ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038022A4 ;@ =0x040001C0 +_03802198: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03802198 + mov r1, #0 + ldr r0, _038022AC ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038022A4 ;@ =0x040001C0 +_038021B4: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038021B4 + ldr r0, _038022B0 ;@ =0x00008201 + strh r0, [r1] + mov r1, #0 + ldr r0, _038022AC ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038022A4 ;@ =0x040001C0 +_038021D8: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038021D8 + ldr r0, _038022B4 ;@ =_03809F28 + ldrh r0, [r0] + cmp r0, #0 + bne _0380220C + ldr r0, _038022B8 ;@ =0x04000136 + ldrh r0, [r0] + ands r0, r0, #64 ;@ 0x40 + moveq r0, #1 + movne r0, #0 + b _03802298 +_0380220C: + ldr r0, _038022B8 ;@ =0x04000136 + ldrh r0, [r0] + ands r0, r0, #64 ;@ 0x40 + moveq r0, #1 + beq _03802298 + ldr r0, _038022A8 ;@ =0x00008A01 + strh r0, [r1] + mov r1, #132 ;@ 0x84 + ldr r0, _038022AC ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038022A4 ;@ =0x040001C0 +_03802238: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03802238 + mov r1, #0 + ldr r0, _038022AC ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038022A4 ;@ =0x040001C0 +_03802254: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03802254 + ldr r0, _038022B0 ;@ =0x00008201 + strh r0, [r1] + mov r1, #0 + ldr r0, _038022AC ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038022A4 ;@ =0x040001C0 +_03802278: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03802278 + ldr r0, _038022B8 ;@ =0x04000136 + ldrh r0, [r0] + ands r0, r0, #64 ;@ 0x40 + movne r0, #0 + moveq r0, #2 +_03802298: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038022A4: .word 0x040001C0 +_038022A8: .word 0x00008A01 +_038022AC: .word 0x040001C2 +_038022B0: .word 0x00008201 +_038022B4: .word _03809F28 +_038022B8: .word 0x04000136 + + arm_func_start PM_ExecuteProcess +PM_ExecuteProcess: ;@ 0x038022BC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + bl OS_DisableInterrupts + mov r5, r0 + mov r0, #3 + bl SPIi_CheckException + cmp r0, #0 + bne _03802300 + mov r0, r5 + bl OS_RestoreInterrupts + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #4 + bl SPIi_ReturnResult + b _0380242C +_03802300: + mov r0, #3 + bl SPIi_GetException + mov r0, r5 + bl OS_RestoreInterrupts + ldr r1, [r4, #4] + sub r0, r1, #97 ;@ 0x61 + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _03802414 + b _0380233C + b _03802414 + b _038023E0 + b _03802368 + b _038023A4 + b _03802408 +_0380233C: + mov r1, #1 + ldr r0, _03802438 ;@ =PMi_Work + str r1, [r0, #32] + ldr r1, [r4, #8] + ldr r0, _0380243C ;@ =PMi_TriggerBL + strh r1, [r0] + ldr r1, [r4, #12] + ldr r0, _03802440 ;@ =PMi_KeyPattern + strh r1, [r0] + bl PMi_DoSleep + b _03802424 +_03802368: + mov r1, #4 + ldr r0, _03802438 ;@ =PMi_Work + str r1, [r0, #32] + ldr r2, [r4, #8] + str r2, [r0, #40] ;@ 0x28 + ldr r1, [r4, #12] + str r1, [r0, #36] ;@ 0x24 + mov r0, r2, lsl #16 + mov r0, r0, lsr #16 + and r1, r1, #255 ;@ 0xff + bl PMi_SetRegister + mov r0, #100 ;@ 0x64 + mov r1, #0 + bl SPIi_ReturnResult + b _03802424 +_038023A4: + mov r1, #3 + ldr r0, _03802438 ;@ =PMi_Work + str r1, [r0, #32] + ldr r1, [r4, #8] + str r1, [r0, #40] ;@ 0x28 + mov r0, r1, lsl #16 + mov r4, r0, lsr #16 + mov r0, r4 + bl PMi_GetRegister + mov r1, r0 + add r0, r4, #112 ;@ 0x70 + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + bl SPIi_ReturnResult + b _03802424 +_038023E0: + mov r0, #2 + ldr r1, _03802438 ;@ =PMi_Work + str r0, [r1, #32] + ldr r0, [r4, #8] + str r0, [r1, #36] ;@ 0x24 + bl PMi_SwitchUtilityProc + mov r0, #99 ;@ 0x63 + mov r1, #0 + bl SPIi_ReturnResult + b _03802424 +_03802408: + ldr r0, [r4, #8] + bl PMi_SetLED + b _03802424 +_03802414: + mov r0, r1, lsl #16 + mov r0, r0, lsr #16 + mov r1, #1 + bl SPIi_ReturnResult +_03802424: + mov r0, #3 + bl SPIi_ReleaseException +_0380242C: + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_03802438: .word PMi_Work +_0380243C: .word PMi_TriggerBL +_03802440: .word PMi_KeyPattern + + arm_func_start PM_AnalyzeCommand +PM_AnalyzeCommand: ;@ 0x03802444 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ands r1, r0, #33554432 ;@ 0x2000000 + beq _03802474 + mov r4, #0 + mov r3, r4 + ldr r1, _03802610 ;@ =PMi_Work +_03802460: + mov r2, r4, lsl #1 + strh r3, [r1, r2] + add r4, r4, #1 + cmp r4, #16 + blt _03802460 +_03802474: + and r1, r0, #983040 ;@ 0xf0000 + mov r1, r1, lsr #16 + mov r1, r1, lsl #1 + ldr ip, _03802610 ;@ =PMi_Work + strh r0, [ip, r1] + ands r0, r0, #16777216 ;@ 0x1000000 + beq _03802604 + ldrh r3, [ip] + and r0, r3, #65280 ;@ 0xff00 + mov r0, r0, lsl #8 + mov r4, r0, lsr #16 + sub r0, r4, #96 ;@ 0x60 + cmp r0, #7 + addls pc, pc, r0, lsl #2 + b _038025F8 + b _038024D0 + b _038024E0 + b _038025F8 + b _03802588 + b _0380251C + b _03802558 + b _038025C4 + b _038025DC +_038024D0: + mov r0, #96 ;@ 0x60 + mov r1, #0 + bl SPIi_ReturnResult + b _03802604 +_038024E0: + ldrh r1, [ip, #2] + ldr r0, _03802614 ;@ =0x0000FFFF + and r0, r1, r0 + str r0, [sp] + mov r0, #3 + mov r1, r4 + mov r2, #2 + and r3, r3, #255 ;@ 0xff + bl SPIi_SetEntry + cmp r0, #0 + bne _03802604 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult + b _03802604 +_0380251C: + ldrh r1, [ip, #2] + ldr r0, _03802614 ;@ =0x0000FFFF + and r0, r1, r0 + str r0, [sp] + mov r0, #3 + mov r1, r4 + mov r2, #2 + and r3, r3, #255 ;@ 0xff + bl SPIi_SetEntry + cmp r0, #0 + bne _03802604 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult + b _03802604 +_03802558: + mov r0, #3 + mov r1, r4 + mov r2, #1 + ldr ip, _03802614 ;@ =0x0000FFFF + and r3, r3, ip + bl SPIi_SetEntry + cmp r0, #0 + bne _03802604 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult + b _03802604 +_03802588: + mov r0, #3 + mov r1, r4 + mov r2, #1 + and lr, r3, #255 ;@ 0xff + ldrh ip, [ip, #2] + ldr r3, _03802614 ;@ =0x0000FFFF + and r3, ip, r3 + orr r3, r3, lr, lsl #16 + bl SPIi_SetEntry + cmp r0, #0 + bne _03802604 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult + b _03802604 +_038025C4: + and r0, r3, #255 ;@ 0xff + bl PM_SetLEDPattern + mov r0, #102 ;@ 0x66 + mov r1, #0 + bl SPIi_ReturnResult + b _03802604 +_038025DC: + bl PM_GetLEDPattern + mov r1, r0 + mov r0, #103 ;@ 0x67 + mov r1, r1, lsl #16 + mov r1, r1, lsr #16 + bl SPIi_ReturnResult + b _03802604 +_038025F8: + mov r0, r4 + mov r1, #1 + bl SPIi_ReturnResult +_03802604: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03802610: .word PMi_Work +_03802614: .word 0x0000FFFF + + arm_func_start PM_Init +PM_Init: ;@ 0x03802618 + mov r1, #1 + ldr r0, _0380264C ;@ =PMi_Initialized + str r1, [r0] + mov r3, #0 + ldr r0, _03802650 ;@ =PMi_Work + str r3, [r0, #32] + mov r2, r3 +_03802634: + mov r1, r3, lsl #1 + strh r2, [r0, r1] + add r3, r3, #1 + cmp r3, #16 + blt _03802634 + bx lr +_0380264C: .word PMi_Initialized +_03802650: .word PMi_Work + + arm_func_start PMi_SendPxiCommand +PMi_SendPxiCommand: ;@ 0x03802654 + ldr r3, _03802678 ;@ =0x0000FFFF + and r3, r2, r3 + and r0, r0, #62914560 ;@ 0x3c00000 + mov r2, r0, lsl #22 + and r0, r1, #4128768 ;@ 0x3f0000 + orr r0, r2, r0, lsl #16 + orr r0, r3, r0 + ldr ip, _0380267C ;@ =PMi_SendPxiData + bx ip +_03802678: .word 0x0000FFFF +_0380267C: .word PMi_SendPxiData + + arm_func_start PMi_SendPxiData +PMi_SendPxiData: ;@ 0x03802680 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, #8 + mov r4, #0 +_03802690: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _03802690 + ldmia sp!, {r4, r5, r6, lr} + bx lr + + arm_func_start PMi_ResetControl +PMi_ResetControl: ;@ 0x038026B0 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0 + bl PMi_GetRegister + mvn r1, r4 + and r0, r0, r1 + and r1, r0, #255 ;@ 0xff + mov r0, #0 + bl PMi_SetRegister + ldmia sp!, {r4, lr} + bx lr + + arm_func_start PMi_SetControl +PMi_SetControl: ;@ 0x038026DC + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0 + bl PMi_GetRegister + orr r1, r0, r4 + mov r0, #0 + bl PMi_SetRegister + ldmia sp!, {r4, lr} + bx lr + + arm_func_start PMi_GetRegister +PMi_GetRegister: ;@ 0x03802700 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r1, _0380278C ;@ =0x040001C0 +_0380270C: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _0380270C + bl FUN_03802808 + mov r0, #1 + bl FUN_03802820 + orr r0, r4, #128 ;@ 0x80 + and r0, r0, #255 ;@ 0xff + and r1, r0, #255 ;@ 0xff + ldr r0, _03802790 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _0380278C ;@ =0x040001C0 +_0380273C: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _0380273C + mov r0, #0 + bl FUN_03802820 + mov r1, #0 + ldr r0, _03802790 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _0380278C ;@ =0x040001C0 +_03802760: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03802760 + ldr r0, _03802790 ;@ =0x040001C2 + ldrh r0, [r0] + and r0, r0, #255 ;@ 0xff + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + and r0, r0, #255 ;@ 0xff + ldmia sp!, {r4, lr} + bx lr +_0380278C: .word 0x040001C0 +_03802790: .word 0x040001C2 + + arm_func_start PMi_SetRegister +PMi_SetRegister: ;@ 0x03802794 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + ldr r1, _03802800 ;@ =0x040001C0 +_038027A8: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038027A8 + bl FUN_03802808 + mov r0, #1 + bl FUN_03802820 + and r0, r5, #255 ;@ 0xff + and r1, r0, #255 ;@ 0xff + ldr r0, _03802804 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03802800 ;@ =0x040001C0 +_038027D4: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038027D4 + mov r0, #0 + bl FUN_03802820 + and r1, r4, #255 ;@ 0xff + ldr r0, _03802804 ;@ =0x040001C2 + strh r1, [r0] + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_03802800: .word 0x040001C0 +_03802804: .word 0x040001C2 + + arm_func_start FUN_03802808 +FUN_03802808: ;@ 0x03802808 + ldr r1, _03802818 ;@ =0x00008202 + ldr r0, _0380281C ;@ =0x040001C0 + strh r1, [r0] + bx lr +_03802818: .word 0x00008202 +_0380281C: .word 0x040001C0 + + arm_func_start FUN_03802820 +FUN_03802820: ;@ 0x03802820 + ldr r1, _03802834 ;@ =0x00008002 + orr r1, r1, r0, lsl #11 + ldr r0, _03802838 ;@ =0x040001C0 + strh r1, [r0] + bx lr +_03802834: .word 0x00008002 +_03802838: .word 0x040001C0 + + arm_func_start PMi_SetLED +PMi_SetLED: ;@ 0x0380283C + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r4, #1 + beq _03802860 + cmp r4, #2 + beq _03802878 + cmp r4, #3 + beq _0380286C + b _0380288C +_03802860: + mov r0, #16 + bl PMi_ResetControl + b _03802890 +_0380286C: + mov r0, #48 ;@ 0x30 + bl PMi_SetControl + b _03802890 +_03802878: + mov r0, #32 + bl PMi_ResetControl + mov r0, #16 + bl PMi_SetControl + b _03802890 +_0380288C: + bl OS_Terminate +_03802890: + ldr r0, _038028A0 ;@ =PMi_LEDStatus + str r4, [r0] + ldmia sp!, {r4, lr} + bx lr +_038028A0: .word PMi_LEDStatus + + arm_func_start PMi_SwitchUtilityProc +PMi_SwitchUtilityProc: ;@ 0x038028A4 + stmfd sp!, {lr} + sub sp, sp, #4 + cmp r0, #15 + addls pc, pc, r0, lsl #2 + b _038029C4 + b _038029C4 + b _038028F8 + b _0380290C + b _03802920 + b _03802934 + b _03802940 + b _0380294C + b _03802958 + b _03802964 + b _03802970 + b _0380297C + b _03802988 + b _03802994 + b _038029A0 + b _038029B8 + b _038029AC +_038028F8: + mov r0, #1 + bl PM_SetLEDPattern + mov r0, #1 + bl PMi_SetLED + b _038029C4 +_0380290C: + mov r0, #3 + bl PM_SetLEDPattern + mov r0, #3 + bl PMi_SetLED + b _038029C4 +_03802920: + mov r0, #2 + bl PM_SetLEDPattern + mov r0, #2 + bl PMi_SetLED + b _038029C4 +_03802934: + mov r0, #4 + bl PMi_SetControl + b _038029C4 +_03802940: + mov r0, #4 + bl PMi_ResetControl + b _038029C4 +_0380294C: + mov r0, #8 + bl PMi_SetControl + b _038029C4 +_03802958: + mov r0, #8 + bl PMi_ResetControl + b _038029C4 +_03802964: + mov r0, #12 + bl PMi_SetControl + b _038029C4 +_03802970: + mov r0, #12 + bl PMi_ResetControl + b _038029C4 +_0380297C: + mov r0, #1 + bl PMi_SetControl + b _038029C4 +_03802988: + mov r0, #1 + bl PMi_ResetControl + b _038029C4 +_03802994: + mov r0, #2 + bl PMi_ResetControl + b _038029C4 +_038029A0: + mov r0, #2 + bl PMi_SetControl + b _038029C4 +_038029AC: + mov r0, #64 ;@ 0x40 + bl PMi_ResetControl + b _038029C4 +_038029B8: + bl SND_BeginSleep + mov r0, #64 ;@ 0x40 + bl PMi_SetControl +_038029C4: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start PMi_DoSleep +PMi_DoSleep: ;@ 0x038029D0 + stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + sub sp, sp, #4 + mov r5, #0 + ldr r0, _03802B94 ;@ =0x04000208 + ldrh r4, [r0] + strh r5, [r0] + bl OS_DisableInterrupts + mov r9, r0 + mvn r0, #-33554432 ;@ 0xfe000000 + bl OS_DisableIrqMask + mov r8, r0 + mov r0, r5 + bl PMi_GetRegister + mov r7, r0 + mov r0, #2 + bl PM_SetLEDPattern + mov r0, #2 + bl PMi_SetLED + mov r0, #2 + bl PMi_SetLED + bl SND_BeginSleep + mov r0, #1 + bl PMi_ResetControl + ldr r0, _03802B98 ;@ =PMi_TriggerBL + ldrh r0, [r0] + ands r0, r0, #1 + beq _03802A58 + ldr r0, _03802B9C ;@ =PMi_KeyPattern + ldrh r0, [r0] + orr r1, r0, #16384 ;@ 0x4000 + ldr r0, _03802BA0 ;@ =0x04000132 + strh r1, [r0] + mov r0, #4096 ;@ 0x1000 + bl OS_EnableIrqMask +_03802A58: + ldr r0, _03802B98 ;@ =PMi_TriggerBL + ldrh r0, [r0] + ands r0, r0, #4 + beq _03802A70 + mov r0, #4194304 ;@ 0x400000 + bl OS_EnableIrqMask +_03802A70: + ldr r0, _03802B98 ;@ =PMi_TriggerBL + ldrh r0, [r0] + ands r0, r0, #2 + beq _03802AB4 + ldr r0, _03802BA4 ;@ =0x04000134 + ldrh r6, [r0] + mov r5, #1 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #64 ;@ 0x40 + mov r1, #0 + bl EXIi_SetBitRcnt0L + mov r0, #256 ;@ 0x100 + mov r1, r0 + bl EXIi_SetBitRcnt0L + mov r0, #128 ;@ 0x80 + bl OS_EnableIrqMask +_03802AB4: + ldr r0, _03802B98 ;@ =PMi_TriggerBL + ldrh r0, [r0] + ands r0, r0, #8 + beq _03802ACC + mov r0, #1048576 ;@ 0x100000 + bl OS_EnableIrqMask +_03802ACC: + ldr r0, _03802B98 ;@ =PMi_TriggerBL + ldrh r0, [r0] + ands r0, r0, #16 + beq _03802AE4 + mov r0, #8192 ;@ 0x2000 + bl OS_EnableIrqMask +_03802AE4: + mov r0, r9 + bl OS_RestoreInterrupts + ldr r1, _03802B94 ;@ =0x04000208 + ldrh r0, [r1] + mov r0, #1 + strh r0, [r1] + bl FUN_03802BAC + mov r0, #0 + mov r1, r7 + bl PMi_SetRegister + ldr r0, _03802B98 ;@ =PMi_TriggerBL + ldrh r1, [r0] + ands r0, r1, #32 + movne r0, #6 + moveq r0, #7 + ands r1, r1, #64 ;@ 0x40 + movne r7, #4 + moveq r7, #5 + bl PMi_SwitchUtilityProc + mov r0, r7 + bl PMi_SwitchUtilityProc + cmp r5, #0 + ldrne r0, _03802BA4 ;@ =0x04000134 + strneh r6, [r0] + mov r0, #1 + bl PMi_SetControl + bl SND_EndSleep + mov r1, #0 + ldr r0, _03802BA8 ;@ =PMi_Work + str r1, [r0, #32] + mov r0, #98 ;@ 0x62 + mov r2, r1 + bl PMi_SendPxiCommand + bl OS_DisableInterrupts + mov r0, r8 + bl OS_SetIrqMask + mov r0, r9 + bl OS_RestoreInterrupts + ldr r1, _03802B94 ;@ =0x04000208 + ldrh r0, [r1] + strh r4, [r1] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, lr} + bx lr +_03802B94: .word 0x04000208 +_03802B98: .word PMi_TriggerBL +_03802B9C: .word PMi_KeyPattern +_03802BA0: .word 0x04000132 +_03802BA4: .word 0x04000134 +_03802BA8: .word PMi_Work + + arm_func_start FUN_03802BAC +FUN_03802BAC: ;@ 0x03802BAC + ldr ip, _03802BB4 ;@ =SVC_Stop + bx ip +_03802BB4: .word SVC_Stop + + arm_func_start PM_GetLEDPattern +PM_GetLEDPattern: ;@ 0x03802BB8 + ldr r0, _03802BC4 ;@ =PMi_BlinkPatternNo + ldr r0, [r0] + bx lr +_03802BC4: .word PMi_BlinkPatternNo + + arm_func_start PM_SetLEDPattern +PM_SetLEDPattern: ;@ 0x03802BC8 + cmp r0, #15 + ldrle r1, _03802BE4 ;@ =PMi_BlinkPatternNo + strle r0, [r1] + movle r1, #0 + ldrle r0, _03802BE8 ;@ =_03809F64 + strle r1, [r0] + bx lr +_03802BE4: .word PMi_BlinkPatternNo +_03802BE8: .word _03809F64 + + arm_func_start PM_SelfBlinkProc +PM_SelfBlinkProc: ;@ 0x03802BEC + stmdb sp!, {r4, r5, r6, lr} + ldr r0, _03802D04 ;@ =PMi_BlinkPatternNo + ldr r3, [r0] + cmp r3, #0 + bne _03802C28 + mov r0, #3 + mov r1, #102 ;@ 0x66 + mov r2, #1 + mov r3, r2 + bl SPIi_SetEntry + cmp r0, #0 + beq _03802CFC + mov r0, #1 + bl PM_SetLEDPattern + b _03802CFC +_03802C28: + cmp r3, #4 + bge _03802C54 + ldr r0, _03802D08 ;@ =PMi_LEDStatus + ldr r0, [r0] + cmp r3, r0 + beq _03802CFC + mov r0, #3 + mov r1, #102 ;@ 0x66 + mov r2, #1 + bl SPIi_SetEntry + b _03802CFC +_03802C54: + ldr r6, _03802D0C ;@ =PMi_BlinkPatternData + sub r1, r3, #4 + mov r0, #12 + mul r5, r1, r0 + add r4, r6, r5 + ldr r0, _03802D10 ;@ =_03809F64 + ldr r0, [r0] + ldrh r1, [r4, #10] + bl _u32_div_f + ldr r5, [r6, r5] + ldr lr, [r4, #4] + mov r3, #0 + mov r2, #-2147483648 ;@ 0x80000000 + mov ip, r3, lsr r0 + rsb r1, r0, #32 + orr ip, ip, r2, lsl r1 + sub r1, r0, #32 + orr ip, ip, r2, lsr r1 + and r0, lr, r2, lsr r0 + and r1, r5, ip + cmp r0, r3 + cmpeq r1, r3 + movne r3, #1 + moveq r3, #2 + ldr r0, _03802D10 ;@ =_03809F64 + ldr r1, [r0] + add ip, r1, #1 + str ip, [r0] + ldrh r2, [r4, #8] + ldrh r1, [r4, #10] + mul r1, r2, r1 + cmp ip, r1 + movcs r1, #0 + strcs r1, [r0] + ldr r0, _03802D08 ;@ =PMi_LEDStatus + ldr r0, [r0] + cmp r3, r0 + beq _03802CFC + mov r0, #3 + mov r1, #102 ;@ 0x66 + mov r2, #1 + bl SPIi_SetEntry +_03802CFC: + ldmia sp!, {r4, r5, r6, lr} + bx lr +_03802D04: .word PMi_BlinkPatternNo +_03802D08: .word PMi_LEDStatus +_03802D0C: .word PMi_BlinkPatternData +_03802D10: .word _03809F64 + + arm_func_start FUN_03802D14 +FUN_03802D14: ;@ 0x03802D14 + stmdb sp!, {r4, r5, r6, r7, lr} + ldr r4, _03802E6C ;@ =_03809F6C + ldrh r5, [r4, #38] ;@ 0x26 + and r0, r5, #4 + cmp r0, #4 + ldrh r6, [r4, #56] ;@ 0x38 + ldrneh r7, [r4, #58] ;@ 0x3a + ldreq r7, _03802E70 ;@ =0x0000FFFF + bl SPIi_CheckEntry + cmp r0, #0 + bne _03802D80 + mov r0, #2 + bl SPIi_CheckException + cmp r0, #0 + beq _03802D80 + and r0, r5, #1 + cmp r0, #1 + bne _03802D70 + bl MIC_ExecSampling12 + tst r5, #2 + moveq r7, r0 + eorne r7, r0, #32768 ;@ 0x8000 + b _03802D80 +_03802D70: + bl MIC_ExecSampling8 + tst r5, #2 + moveq r7, r0 + eorne r7, r0, #128 ;@ 0x80 +_03802D80: + and r0, r5, #1 + ldr r3, _03802E74 ;@ =0x027FFC00 + ldr r1, [r4, #44] ;@ 0x2c + cmp r0, #1 + bne _03802DB0 + ldr r2, [r4, #40] ;@ 0x28 + strh r7, [r2, r1]! + str r2, [r3, #912] ;@ 0x390 + add r3, r3, #916 ;@ 0x394 + strh r7, [r3] + add r1, r1, #2 + b _03802DE8 +_03802DB0: + and r7, r7, #255 ;@ 0xff + tst r1, #1 + bne _03802DC8 + mov r6, r7 + add r1, r1, #1 + b _03802DE8 +_03802DC8: + orr r0, r6, r7, lsl #8 + ldr r2, [r4, #40] ;@ 0x28 + sub r1, r1, #1 + strh r0, [r2, r1]! + str r2, [r3, #912] ;@ 0x390 + add r3, r3, #916 ;@ 0x394 + strh r0, [r3] + add r1, r1, #2 +_03802DE8: + strh r6, [r4, #56] ;@ 0x38 + strh r7, [r4, #58] ;@ 0x3a + ldr r0, [r4, #48] ;@ 0x30 + cmp r1, r0 + movcs r1, #0 + str r1, [r4, #44] ;@ 0x2c + bcc _03802E64 + ldrh r0, [r4, #36] ;@ 0x24 + and r0, r0, #16 + cmp r0, #16 + bne _03802E24 + mov r0, #81 ;@ 0x51 + mov r1, #0 + bl SPIi_ReturnResult + b _03802E64 +_03802E24: + mov r0, #2 + mov r1, #66 ;@ 0x42 + mov r2, #0 + bl SPIi_SetEntry + cmp r0, #0 + bne _03802E4C + mov r0, #81 ;@ 0x51 + mov r1, #4 + bl SPIi_ReturnResult + b _03802E64 +_03802E4C: + mov r0, #4 + str r0, [r4, #32] + ldr r1, _03802E78 ;@ =0x0400010E + ldrh r0, [r1] + bic r0, r0, #128 ;@ 0x80 + strh r0, [r1] +_03802E64: + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_03802E6C: .word _03809F6C +_03802E70: .word 0x0000FFFF +_03802E74: .word 0x027FFC00 +_03802E78: .word 0x0400010E + + arm_func_start FUN_03802E7C +FUN_03802E7C: ;@ 0x03802E7C + stmfd sp!, {lr} + sub sp, sp, #4 + bl FUN_03802D14 + ldr r1, _03802EB0 ;@ =0x0380FFF8 + ldr r0, [r1] + orr r0, r0, #64 ;@ 0x40 + str r0, [r1] + mov r1, #64 ;@ 0x40 + ldr r0, _03802EB4 ;@ =0x04000214 + str r1, [r0] + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03802EB0: .word 0x0380FFF8 +_03802EB4: .word 0x04000214 + + arm_func_start MIC_ExecuteProcess +MIC_ExecuteProcess: ;@ 0x03802EB8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r2, [r5, #4] + cmp r2, #64 ;@ 0x40 + beq _03802EE4 + cmp r2, #65 ;@ 0x41 + beq _03802FB0 + cmp r2, #66 ;@ 0x42 + beq _0380304C + b _038030F0 +_03802EE4: + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #2 + bl SPIi_CheckException + cmp r0, #0 + bne _03802F1C + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, [r5, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #4 + bl SPIi_ReturnResult + b _038030F0 +_03802F1C: + mov r0, #2 + bl SPIi_GetException + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, [r5, #8] + and r0, r0, #1 + cmp r0, #1 + bne _03802F68 + bl MIC_ExecSampling12 + ldr r1, [r5, #8] + ands r1, r1, #2 + eorne r0, r0, #32768 ;@ 0x8000 + movne r0, r0, lsl #16 + movne r0, r0, lsr #16 + ldr r1, _038030FC ;@ =0x027FFF94 + strh r0, [r1] + ldr r0, _03803100 ;@ =0x027FFF90 + str r1, [r0] + b _03802F90 +_03802F68: + bl MIC_ExecSampling8 + ldr r1, [r5, #8] + ands r1, r1, #2 + eorne r0, r0, #128 ;@ 0x80 + movne r0, r0, lsl #16 + movne r0, r0, lsr #16 + ldr r1, _038030FC ;@ =0x027FFF94 + strh r0, [r1] + ldr r0, _03803100 ;@ =0x027FFF90 + str r1, [r0] +_03802F90: + ldr r0, [r5, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #0 + bl SPIi_ReturnResult + mov r0, #2 + bl SPIi_ReleaseException + b _038030F0 +_03802FB0: + ldr r0, _03803104 ;@ =_03809F6C + ldr r1, [r0, #32] + cmp r1, #1 + bne _03803038 + mov r1, #0 + strh r1, [r0, #58] ;@ 0x3a + strh r1, [r0, #56] ;@ 0x38 + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #64 ;@ 0x40 + bl OS_EnableIrqMask + mov r0, #64 ;@ 0x40 + ldr r1, _03803108 ;@ =FUN_03802E7C + bl MIC_SetIrqFunction + bl MIC_EnableMultipleInterrupt + ldr r0, _03803104 ;@ =_03809F6C + ldrh r2, [r0, #52] ;@ 0x34 + ldr r1, _0380310C ;@ =0x0400010C + strh r2, [r1] + ldrh r0, [r0, #54] ;@ 0x36 + orr r1, r0, #192 ;@ 0xc0 + ldr r0, _03803110 ;@ =0x0400010E + strh r1, [r0] + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, [r5, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #0 + bl SPIi_ReturnResult + mov r1, #2 + ldr r0, _03803104 ;@ =_03809F6C + str r1, [r0, #32] + b _038030F0 +_03803038: + mov r0, r2, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult + b _038030F0 +_0380304C: + ldr r0, _03803104 ;@ =_03809F6C + ldr r1, [r0, #32] + sub r0, r1, #3 + cmp r0, #1 + bhi _038030CC + ldr r1, _03803110 ;@ =0x0400010E + ldrh r0, [r1] + bic r0, r0, #128 ;@ 0x80 + strh r0, [r1] + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #64 ;@ 0x40 + mov r1, #0 + bl MIC_SetIrqFunction + bl MIC_DisableMultipleInterrupt + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, _03803104 ;@ =_03809F6C + ldr r0, [r0, #32] + cmp r0, #3 + bne _038030B0 + mov r0, #66 ;@ 0x42 + mov r1, #0 + bl SPIi_ReturnResult + b _038030BC +_038030B0: + mov r0, #81 ;@ 0x51 + mov r1, #0 + bl SPIi_ReturnResult +_038030BC: + mov r1, #0 + ldr r0, _03803104 ;@ =_03809F6C + str r1, [r0, #32] + b _038030F0 +_038030CC: + cmp r1, #3 + bne _038030E4 + mov r0, #66 ;@ 0x42 + mov r1, #3 + bl SPIi_ReturnResult + b _038030F0 +_038030E4: + mov r0, #81 ;@ 0x51 + mov r1, #3 + bl SPIi_ReturnResult +_038030F0: + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_038030FC: .word 0x027FFF94 +_03803100: .word 0x027FFF90 +_03803104: .word _03809F6C +_03803108: .word FUN_03802E7C +_0380310C: .word 0x0400010C +_03803110: .word 0x0400010E + + arm_func_start FUN_03803114 +FUN_03803114: ;@ 0x03803114 + cmp r0, #65536 ;@ 0x10000 + bcs _03803138 + mov r2, #0 + ldr r1, _038031B4 ;@ =_03809F6C + strh r2, [r1, #54] ;@ 0x36 + rsb r0, r0, #65536 ;@ 0x10000 + strh r0, [r1, #52] ;@ 0x34 + mov r0, #1 + bx lr +_03803138: + cmp r0, #4194304 ;@ 0x400000 + bcs _03803160 + mov r2, #1 + ldr r1, _038031B4 ;@ =_03809F6C + strh r2, [r1, #54] ;@ 0x36 + mov r0, r0, lsr #6 + rsb r0, r0, #65536 ;@ 0x10000 + strh r0, [r1, #52] ;@ 0x34 + mov r0, r2 + bx lr +_03803160: + cmp r0, #16777216 ;@ 0x1000000 + bcs _03803188 + mov r2, #2 + ldr r1, _038031B4 ;@ =_03809F6C + strh r2, [r1, #54] ;@ 0x36 + mov r0, r0, lsr #8 + rsb r0, r0, #65536 ;@ 0x10000 + strh r0, [r1, #52] ;@ 0x34 + mov r0, #1 + bx lr +_03803188: + cmp r0, #67108864 ;@ 0x4000000 + movcs r0, #0 + bxcs lr + mov r2, #3 + ldr r1, _038031B4 ;@ =_03809F6C + strh r2, [r1, #54] ;@ 0x36 + mov r0, r0, lsr #10 + rsb r0, r0, #65536 ;@ 0x10000 + strh r0, [r1, #52] ;@ 0x34 + mov r0, #1 + bx lr +_038031B4: .word _03809F6C + + arm_func_start MIC_AnalyzeCommand +MIC_AnalyzeCommand: ;@ 0x038031B8 + stmdb sp!, {r4, lr} + ands r1, r0, #33554432 ;@ 0x2000000 + beq _038031E4 + mov r4, #0 + mov r3, r4 + ldr r1, _03803478 ;@ =_03809F6C +_038031D0: + mov r2, r4, lsl #1 + strh r3, [r1, r2] + add r4, r4, #1 + cmp r4, #16 + blt _038031D0 +_038031E4: + and r1, r0, #983040 ;@ 0xf0000 + mov r1, r1, lsr #16 + mov r2, r1, lsl #1 + ldr r1, _03803478 ;@ =_03809F6C + strh r0, [r1, r2] + ands r0, r0, #16777216 ;@ 0x1000000 + beq _03803470 + ldrh r3, [r1] + and r0, r3, #65280 ;@ 0xff00 + mov r0, r0, lsl #8 + mov r4, r0, lsr #16 + sub r0, r4, #64 ;@ 0x40 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _03803464 + b _03803230 + b _03803270 + b _03803378 + b _038033DC +_03803230: + mov r0, #2 + mov r1, r4 + mov r2, #1 + and r3, r3, #255 ;@ 0xff + bl SPIi_SetEntry + cmp r0, #0 + bne _03803258 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult +_03803258: + mov r1, #0 + ldr r0, _0380347C ;@ =0x027FFF94 + strh r1, [r0] + ldr r0, _03803480 ;@ =0x027FFF90 + str r1, [r0] + b _03803470 +_03803270: + ldr r0, [r1, #32] + cmp r0, #0 + beq _0380328C + mov r0, r4 + mov r1, #3 + bl SPIi_ReturnResult + b _03803470 +_0380328C: + and r0, r3, #255 ;@ 0xff + strh r0, [r1, #36] ;@ 0x24 + ldrh r2, [r1, #2] + ldrh r0, [r1, #4] + orr r3, r0, r2, lsl #16 + cmp r3, #33554432 ;@ 0x2000000 + bcc _038032B0 + cmp r3, #37748736 ;@ 0x2400000 + bcc _038032C0 +_038032B0: + mov r0, r4 + mov r1, #2 + bl SPIi_ReturnResult + b _03803470 +_038032C0: + str r3, [r1, #40] ;@ 0x28 + ldrh r2, [r1, #6] + ldrh r0, [r1, #8] + orr r2, r0, r2, lsl #16 + add r0, r3, r2 + cmp r0, #37748736 ;@ 0x2400000 + bls _038032EC + mov r0, r4 + mov r1, #2 + bl SPIi_ReturnResult + b _03803470 +_038032EC: + str r2, [r1, #48] ;@ 0x30 + ldrh r2, [r1, #10] + ldrh r0, [r1, #12] + orr r0, r0, r2, lsl #16 + bl FUN_03803114 + cmp r0, #0 + bne _03803318 + mov r0, r4 + mov r1, #2 + bl SPIi_ReturnResult + b _03803470 +_03803318: + mov r2, #0 + ldr r0, _03803478 ;@ =_03809F6C + str r2, [r0, #44] ;@ 0x2c + ldrh r1, [r0, #36] ;@ 0x24 + and r1, r1, #7 + strh r1, [r0, #38] ;@ 0x26 + mov r0, #2 + mov r1, r4 + bl SPIi_SetEntry + cmp r0, #0 + bne _03803354 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult + b _03803470 +_03803354: + mov r1, #0 + ldr r0, _0380347C ;@ =0x027FFF94 + strh r1, [r0] + ldr r0, _03803480 ;@ =0x027FFF90 + str r1, [r0] + mov r1, #1 + ldr r0, _03803478 ;@ =_03809F6C + str r1, [r0, #32] + b _03803470 +_03803378: + ldr r0, [r1, #32] + cmp r0, #2 + beq _03803394 + mov r0, r4 + mov r1, #3 + bl SPIi_ReturnResult + b _03803470 +_03803394: + mov r0, #2 + mov r1, r4 + mov r2, #0 + bl SPIi_SetEntry + cmp r0, #0 + bne _038033BC + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult + b _03803470 +_038033BC: + mov r1, #3 + ldr r0, _03803478 ;@ =_03809F6C + str r1, [r0, #32] + ldr r1, _03803484 ;@ =0x0400010E + ldrh r0, [r1] + bic r0, r0, #128 ;@ 0x80 + strh r0, [r1] + b _03803470 +_038033DC: + ldr r0, [r1, #32] + cmp r0, #2 + beq _038033F8 + mov r0, r4 + mov r1, #3 + bl SPIi_ReturnResult + b _03803470 +_038033F8: + ldrh r2, [r1, #2] + ldrh r0, [r1, #4] + orr r0, r0, r2, lsl #16 + bl FUN_03803114 + cmp r0, #0 + bne _03803420 + mov r0, r4 + mov r1, #2 + bl SPIi_ReturnResult + b _03803470 +_03803420: + bl OS_DisableInterrupts + ldr ip, _03803484 ;@ =0x0400010E + ldrh r1, [ip] + bic r1, r1, #128 ;@ 0x80 + strh r1, [ip] + ldr r1, _03803478 ;@ =_03809F6C + ldrh r3, [r1, #52] ;@ 0x34 + ldr r2, _03803488 ;@ =0x0400010C + strh r3, [r2] + ldrh r1, [r1, #54] ;@ 0x36 + orr r1, r1, #192 ;@ 0xc0 + strh r1, [ip] + bl OS_RestoreInterrupts + mov r0, r4 + mov r1, #0 + bl SPIi_ReturnResult + b _03803470 +_03803464: + mov r0, r4 + mov r1, #1 + bl SPIi_ReturnResult +_03803470: + ldmia sp!, {r4, lr} + bx lr +_03803478: .word _03809F6C +_0380347C: .word 0x027FFF94 +_03803480: .word 0x027FFF90 +_03803484: .word 0x0400010E +_03803488: .word 0x0400010C + + arm_func_start MIC_Init +MIC_Init: ;@ 0x0380348C + mov r3, #0 + ldr r0, _038034C4 ;@ =_03809F6C + str r3, [r0, #32] + mov r2, r3 +_0380349C: + mov r1, r3, lsl #1 + strh r2, [r0, r1] + add r3, r3, #1 + cmp r3, #16 + blt _0380349C + ldr r1, _038034C8 ;@ =0x0400010E + ldrh r0, [r1] + bic r0, r0, #128 ;@ 0x80 + strh r0, [r1] + bx lr +_038034C4: .word _03809F6C +_038034C8: .word 0x0400010E + + arm_func_start MIC_ExecSampling12 +MIC_ExecSampling12: ;@ 0x038034CC + ldr r1, _03803580 ;@ =0x040001C0 +_038034D0: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038034D0 + ldr r0, _03803584 ;@ =0x00008A01 + strh r0, [r1] + mov r1, #228 ;@ 0xe4 + ldr r0, _03803588 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03803580 ;@ =0x040001C0 +_038034F4: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038034F4 + mov r1, #0 + ldr r0, _03803588 ;@ =0x040001C2 + strh r1, [r0] + ldr r2, _03803580 ;@ =0x040001C0 +_03803510: + ldrh r0, [r2] + ands r0, r0, #128 ;@ 0x80 + bne _03803510 + ldr r1, _03803588 ;@ =0x040001C2 + ldrh r0, [r1] + and r0, r0, #255 ;@ 0xff + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r0, r0, lsl #24 + mov r3, r0, lsr #16 + ldr r0, _0380358C ;@ =0x00008201 + strh r0, [r2] + mov r0, #0 + strh r0, [r1] + ldr r1, _03803580 ;@ =0x040001C0 +_0380354C: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _0380354C + ldr r0, _03803588 ;@ =0x040001C2 + ldrh r0, [r0] + and r0, r0, #255 ;@ 0xff + mov r0, r0, lsl #16 + orr r1, r3, r0, lsr #16 + ldr r0, _03803590 ;@ =0x00007FF8 + and r0, r1, r0 + mov r0, r0, lsl #17 + mov r0, r0, lsr #16 + bx lr +_03803580: .word 0x040001C0 +_03803584: .word 0x00008A01 +_03803588: .word 0x040001C2 +_0380358C: .word 0x00008201 +_03803590: .word 0x00007FF8 + + arm_func_start MIC_ExecSampling8 +MIC_ExecSampling8: ;@ 0x03803594 + ldr r1, _03803648 ;@ =0x040001C0 +_03803598: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03803598 + ldr r0, _0380364C ;@ =0x00008A01 + strh r0, [r1] + mov r1, #236 ;@ 0xec + ldr r0, _03803650 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03803648 ;@ =0x040001C0 +_038035BC: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038035BC + mov r1, #0 + ldr r0, _03803650 ;@ =0x040001C2 + strh r1, [r0] + ldr r2, _03803648 ;@ =0x040001C0 +_038035D8: + ldrh r0, [r2] + ands r0, r0, #128 ;@ 0x80 + bne _038035D8 + ldr r1, _03803650 ;@ =0x040001C2 + ldrh r0, [r1] + and r0, r0, #255 ;@ 0xff + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r0, r0, lsl #24 + mov r3, r0, lsr #16 + ldr r0, _03803654 ;@ =0x00008201 + strh r0, [r2] + mov r0, #0 + strh r0, [r1] + ldr r1, _03803648 ;@ =0x040001C0 +_03803614: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03803614 + ldr r0, _03803650 ;@ =0x040001C2 + ldrh r0, [r0] + and r0, r0, #255 ;@ 0xff + mov r0, r0, lsl #16 + orr r1, r3, r0, lsr #16 + ldr r0, _03803658 ;@ =0x00007F80 + and r0, r1, r0 + mov r0, r0, lsl #9 + mov r0, r0, lsr #16 + bx lr +_03803648: .word 0x040001C0 +_0380364C: .word 0x00008A01 +_03803650: .word 0x040001C2 +_03803654: .word 0x00008201 +_03803658: .word 0x00007F80 +_0380365C: + mov ip, #67108864 ;@ 0x4000000 + add r1, ip, #520 ;@ 0x208 + ldrh r0, [r1] + tst r0, r0 + bxeq lr + ldr r3, [ip, #528] ;@ 0x210 + ldr r1, [ip, #532] ;@ 0x214 + ands r2, r1, r3 + bxeq lr + ldr r0, _038037C8 ;@ =0x01DF3FFF + tst r2, r0 + streq r2, [ip, #532] ;@ 0x214 + bxeq lr + stmfd sp!, {lr} + mrs r0, SPSR + stmfd sp!, {r0} + stmdb sp, {sp, lr}^ + sub sp, sp, #8 + mov r0, #159 ;@ 0x9f + msr CPSR_c, r0 + ldr r1, _038037CC ;@ =OSi_ThreadInfo + ldrh r0, [r1, #2] + add r0, r0, #1 + strh r0, [r1, #2] + ldr r1, _038037D0 ;@ =_03809FA8 + cmp r0, #1 + moveq r0, sp + ldreq sp, [r1, #4] + streq r0, [r1, #4] + stmfd sp!, {r3} + ldr r1, _038037D4 ;@ =_038072C8 + ldr r0, [r1] + tst r0, r2 + strne r0, [ip, #532] ;@ 0x214 + ldrne r0, [r1, #4] + ldrne r3, _038037D8 ;@ =OS_IRQTable + ldrne r0, [r3, r0, lsl #2] + bne _03803738 + mov r3, #1 +_038036F8: + ldr r0, [r1, r3, lsl #3] + tst r0, r2 + addeq r3, r3, #1 + beq _038036F8 + str r0, [ip, #532] ;@ 0x214 + add r0, r1, r3, lsl #3 + ldr r2, [r0, #4] + ldr r3, _038037D8 ;@ =OS_IRQTable + ldr r0, [r3, r2, lsl #2] + ldr r2, _038037CC ;@ =OSi_ThreadInfo + ldrh r3, [r2, #2] + cmp r3, #1 + ldreq r2, [r1] + streq r2, [ip, #528] ;@ 0x210 + moveq r2, #31 + msreq CPSR_c, r2 +_03803738: + ldr r1, [ip, #528] ;@ 0x210 + stmfd sp!, {r1} + adr lr, _03803748 + bx r0 +_03803748: + mov r0, #159 ;@ 0x9f + msr CPSR_c, r0 + mov ip, #67108864 ;@ 0x4000000 + ldmia sp!, {r0} + ldr r1, [ip, #528] ;@ 0x210 + eor r2, r0, r1 + and r1, r2, r1 + and r0, r2, r0 + ldmia sp!, {r3} + orr r3, r3, r1 + bic r3, r3, r0 + str r3, [ip, #528] ;@ 0x210 + ldr r2, _038037CC ;@ =OSi_ThreadInfo + ldr r3, _038037D0 ;@ =_03809FA8 + ldrh r0, [r2, #2] + subs r1, r0, #1 + strh r1, [r2, #2] + moveq r0, sp + ldreq sp, [r3, #4] + streq r0, [r3, #4] + mov r0, #146 ;@ 0x92 + msr CPSR_c, r0 + ldmia sp, {sp, lr}^ + nop ;@ (mov r0, r0) + add sp, sp, #8 + ldmia sp!, {r0} + msr SPSR_fc, r0 + tst r1, r1 + ldreq r0, _038037DC ;@ =OS_IrqHandler_ThreadSwitch + addeq lr, pc, #0 + bxeq r0 + ldmia sp!, {pc} +_038037C8: .word 0x01DF3FFF +_038037CC: .word OSi_ThreadInfo +_038037D0: .word _03809FA8 +_038037D4: .word _038072C8 +_038037D8: .word OS_IRQTable +_038037DC: .word OS_IrqHandler_ThreadSwitch + + arm_func_start MIC_DisableMultipleInterrupt +MIC_DisableMultipleInterrupt: ;@ 0x038037E0 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _03803820 ;@ =0x0380FFFC + ldr r1, [r0] + ldr r0, _03803824 ;@ =_0380365C + cmp r1, r0 + bne _03803814 + bl OS_DisableInterrupts + ldr r1, _03803828 ;@ =_03809FA8 + ldr r2, [r1, #12] + ldr r1, _03803820 ;@ =0x0380FFFC + str r2, [r1] + bl OS_RestoreInterrupts +_03803814: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03803820: .word 0x0380FFFC +_03803824: .word _0380365C +_03803828: .word _03809FA8 + + arm_func_start MIC_EnableMultipleInterrupt +MIC_EnableMultipleInterrupt: ;@ 0x0380382C + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _03803888 ;@ =0x0380FFFC + ldr r2, [r0] + ldr r0, _0380388C ;@ =_0380365C + cmp r2, r0 + beq _0380387C + mov r1, #0 + ldr r0, _03803890 ;@ =_03809FA8 + str r1, [r0] + ldr r1, _03803894 ;@ =0x0380FE80 + str r1, [r0, #4] + mov r1, #64 ;@ 0x40 + str r1, [r0, #8] + str r2, [r0, #12] + bl OS_DisableInterrupts + ldr r2, _0380388C ;@ =_0380365C + ldr r1, _03803888 ;@ =0x0380FFFC + str r2, [r1] + bl OS_RestoreInterrupts +_0380387C: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03803888: .word 0x0380FFFC +_0380388C: .word _0380365C +_03803890: .word _03809FA8 +_03803894: .word 0x0380FE80 + + arm_func_start MIC_SetIrqFunction +MIC_SetIrqFunction: ;@ 0x03803898 + mov ip, #0 + ldr r2, _038038BC ;@ =OS_IRQTable +_038038A0: + ands r3, r0, #1 + strne r1, [r2, ip, lsl #2] + mov r0, r0, lsr #1 + add ip, ip, #1 + cmp ip, #25 + blt _038038A0 + bx lr +_038038BC: .word OS_IRQTable + + arm_func_start CTRDGi_SendtoPxi +CTRDGi_SendtoPxi: ;@ 0x038038C0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, #1 + mov r5, #13 + mov r4, #0 + b _038038E4 +_038038DC: + mov r0, r6 + bl FUN_037F8CB4 +_038038E4: + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _038038DC + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr + + arm_func_start CTRDGi_UnlockByProcessor +CTRDGi_UnlockByProcessor: ;@ 0x03803908 + stmdb sp!, {r4, lr} + mov r4, r1 + ldr r1, [r4] + cmp r1, #0 + bne _03803920 + bl OS_UnLockCartridge +_03803920: + ldr r0, [r4, #4] + bl OS_RestoreInterrupts + ldmia sp!, {r4, lr} + bx lr + + arm_func_start CTRDGi_LockByProcessor +CTRDGi_LockByProcessor: ;@ 0x03803930 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + bl OS_DisableInterrupts + str r0, [r4, #4] + ldr r0, _0380398C ;@ =0x027FFFE8 + bl OS_ReadOwnerOfLockWord + and r0, r0, #128 ;@ 0x80 + str r0, [r4] + ldr r0, [r4] + cmp r0, #0 + bne _03803974 + mov r0, r5 + bl OS_TryLockCartridge + cmp r0, #0 + bne _0380397C +_03803974: + mov r0, #1 + b _03803980 +_0380397C: + mov r0, #0 +_03803980: + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_0380398C: .word 0x027FFFE8 + + arm_func_start CTRDGi_RestoreAccessCycle +CTRDGi_RestoreAccessCycle: ;@ 0x03803990 + ldr r3, [r0] + ldr r2, _038039C0 ;@ =0x04000204 + ldrh r1, [r2] + bic r1, r1, #12 + orr r1, r1, r3, lsl #2 + strh r1, [r2] + ldr r1, [r0, #4] + ldrh r0, [r2] + bic r0, r0, #16 + orr r0, r0, r1, lsl #4 + strh r0, [r2] + bx lr +_038039C0: .word 0x04000204 + + arm_func_start CTRDGi_ChangeLatestAccessCycle +CTRDGi_ChangeLatestAccessCycle: ;@ 0x038039C4 + ldr r2, _03803A08 ;@ =0x04000204 + ldrh r1, [r2] + and r1, r1, #12 + mov r1, r1, asr #2 + str r1, [r0] + ldrh r1, [r2] + and r1, r1, #16 + mov r1, r1, asr #4 + str r1, [r0, #4] + ldrh r0, [r2] + bic r0, r0, #12 + orr r0, r0, #12 + strh r0, [r2] + ldrh r0, [r2] + bic r0, r0, #16 + strh r0, [r2] + bx lr +_03803A08: .word 0x04000204 + + arm_func_start CTRDG_IsExisting +CTRDG_IsExisting: ;@ 0x03803A0C + stmdb sp!, {r4, lr} + sub sp, sp, #16 + mov r4, #1 + ldr r2, _03803B20 ;@ =0x027FFC30 + ldrh r1, [r2] + ldr r0, _03803B24 ;@ =0x0000FFFF + cmp r1, r0 + moveq r0, #0 + beq _03803B14 + ldrb r0, [r2, #5] + mov r0, r0, lsl #30 + mov r0, r0, lsr #31 + cmp r0, #1 + moveq r0, #0 + beq _03803B14 + ldr r0, _03803B28 ;@ =CTRDGi_Work + ldrh r0, [r0, #2] + add r1, sp, #0 + bl CTRDGi_LockByProcessor + cmp r0, #0 + bne _03803A70 + ldr r0, [sp, #4] + bl OS_RestoreInterrupts + mov r0, r4 + b _03803B14 +_03803A70: + add r0, sp, #8 + bl CTRDGi_ChangeLatestAccessCycle + mov r2, #134217728 ;@ 0x8000000 + ldrb r3, [r2, #178] ;@ 0xb2 + cmp r3, #150 ;@ 0x96 + bne _03803A9C + ldr r0, _03803B20 ;@ =0x027FFC30 + ldrh r1, [r0] + ldrh r0, [r2, #190] ;@ 0xbe + cmp r1, r0 + bne _03803AE4 +_03803A9C: + cmp r3, #150 ;@ 0x96 + beq _03803ABC + ldr r0, _03803B20 ;@ =0x027FFC30 + ldrh r1, [r0] + ldr r0, _03803B2C ;@ =0x0801FFFE + ldrh r0, [r0] + cmp r1, r0 + bne _03803AE4 +_03803ABC: + ldr r2, _03803B20 ;@ =0x027FFC30 + ldr r1, [r2, #8] + mov r0, #134217728 ;@ 0x8000000 + ldr r0, [r0, #172] ;@ 0xac + cmp r1, r0 + beq _03803AF8 + ldrb r0, [r2, #5] + mov r0, r0, lsl #31 + movs r0, r0, lsr #31 + beq _03803AF8 +_03803AE4: + ldr r1, _03803B20 ;@ =0x027FFC30 + ldrb r0, [r1, #5] + orr r0, r0, #2 + strb r0, [r1, #5] + mov r4, #0 +_03803AF8: + add r0, sp, #8 + bl CTRDGi_RestoreAccessCycle + ldr r0, _03803B28 ;@ =CTRDGi_Work + ldrh r0, [r0, #2] + add r1, sp, #0 + bl CTRDGi_UnlockByProcessor + mov r0, r4 +_03803B14: + add sp, sp, #16 + ldmia sp!, {r4, lr} + bx lr +_03803B20: .word 0x027FFC30 +_03803B24: .word 0x0000FFFF +_03803B28: .word CTRDGi_Work +_03803B2C: .word 0x0801FFFE + + arm_func_start CTRDG_IsPulledOut +CTRDG_IsPulledOut: ;@ 0x03803B30 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r2, _03803B80 ;@ =0x027FFC30 + ldrh r1, [r2] + ldr r0, _03803B84 ;@ =0x0000FFFF + cmp r1, r0 + moveq r0, #0 + beq _03803B74 + ldrb r0, [r2, #5] + mov r0, r0, lsl #30 + movs r0, r0, lsr #31 + bne _03803B64 + bl CTRDG_IsExisting +_03803B64: + ldr r0, _03803B80 ;@ =0x027FFC30 + ldrb r0, [r0, #5] + mov r0, r0, lsl #30 + mov r0, r0, lsr #31 +_03803B74: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03803B80: .word 0x027FFC30 +_03803B84: .word 0x0000FFFF + + arm_func_start CTRDGi_InitCommon +CTRDGi_InitCommon: ;@ 0x03803B88 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #0 + str r0, [sp] + add r0, sp, #0 + ldr r1, _03803BC0 ;@ =CTRDGi_Work + ldr r2, _03803BC4 ;@ =0x05000001 + bl FUN_03803BC8 + bl OS_GetLockID + ldr r1, _03803BC0 ;@ =CTRDGi_Work + strh r0, [r1, #2] + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03803BC0: .word CTRDGi_Work +_03803BC4: .word 0x05000001 + + arm_func_start FUN_03803BC8 +FUN_03803BC8: ;@ 0x03803BC8 + ldr ip, _03803BD0 ;@ =SVC_CpuSet + bx ip +_03803BD0: .word SVC_CpuSet + + arm_func_start FUN_03803BD4 +FUN_03803BD4: ;@ 0x03803BD4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + and r0, r1, #63 ;@ 0x3f + cmp r0, #3 + bne _03803C40 + ldr r0, _03803C50 ;@ =0x01FFFFC0 + and r0, r1, r0 + mov r2, r0, lsr #6 + ldr r1, _03803C54 ;@ =0x04000204 + ldrh r0, [r1] + bic r0, r0, #96 ;@ 0x60 + orr r0, r0, r2, lsl #5 + strh r0, [r1] + mov r7, #1 + mov r6, #17 + mov r5, #18 + mov r4, #0 + b _03803C24 +_03803C1C: + mov r0, r7 + bl FUN_037F8CB4 +_03803C24: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _03803C1C + b _03803C44 +_03803C40: + bl OS_Terminate +_03803C44: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_03803C50: .word 0x01FFFFC0 +_03803C54: .word 0x04000204 + + arm_func_start FUN_03803C58 +FUN_03803C58: ;@ 0x03803C58 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #0 + bl CTRDG_VibPulseEdgeUpdate + bl SND_BeginSleep + bl WVR_Shutdown + bl OS_Terminate + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CheckPullOut_Polling +CTRDG_CheckPullOut_Polling: ;@ 0x03803C80 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r1, _03803D80 ;@ =_03807708 + ldr r3, [r1] + mvn r0, #0 + cmp r3, r0 + ldreq r0, _03803D84 ;@ =0x027FFC3C + ldreq r0, [r0] + addeq r0, r0, #10 + streq r0, [r1] + beq _03803D74 + ldr r0, _03803D88 ;@ =_03809FCC + ldr r0, [r0] + cmp r0, #0 + bne _03803D74 + ldr r0, _03803D8C ;@ =_03809FC8 + ldr r0, [r0] + cmp r0, #0 + bne _03803D74 + ldr r2, _03803D84 ;@ =0x027FFC3C + ldr r0, [r2] + cmp r0, r3 + bcc _03803D74 + ldr r0, [r2] + add r0, r0, #10 + str r0, [r1] + bl CTRDG_IsPulledOut + ldr r1, _03803D8C ;@ =_03809FC8 + str r0, [r1] + bl CTRDG_IsExisting + cmp r0, #0 + bne _03803D28 + ldr r0, _03803D90 ;@ =_03807704 + ldr r0, [r0] + cmp r0, #0 + movne r1, #1 + ldrne r0, _03803D88 ;@ =_03809FCC + strne r1, [r0] + bne _03803D74 + mov r1, #1 + ldr r0, _03803D8C ;@ =_03809FC8 + str r1, [r0] +_03803D28: + mov r7, #0 + ldr r0, _03803D90 ;@ =_03807704 + str r7, [r0] + ldr r0, _03803D8C ;@ =_03809FC8 + ldr r0, [r0] + cmp r0, #0 + beq _03803D74 + mov r6, #100 ;@ 0x64 + mov r5, #13 + mov r4, #17 + b _03803D5C +_03803D54: + mov r0, r6 + bl OS_Sleep +_03803D5C: + mov r0, r5 + mov r1, r4 + mov r2, r7 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _03803D54 +_03803D74: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_03803D80: .word _03807708 +_03803D84: .word 0x027FFC3C +_03803D88: .word _03809FCC +_03803D8C: .word _03809FC8 +_03803D90: .word _03807704 + + arm_func_start FUN_03803D94 +FUN_03803D94: ;@ 0x03803D94 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r0 + mov r0, #134217728 ;@ 0x8000000 + add r6, r0, #4 + mov r4, #1 + bl OS_GetLockID + mov r0, r0, lsl #16 + mov r5, r0, lsr #16 + mov r0, r5 + bl OS_LockCartridge + mov r1, #0 + ldr r0, _03803E3C ;@ =0x0000FFFF + eor r2, r0, #3 + mov r2, r2, lsl #16 + mov lr, r2, lsr #16 + eor r2, r0, #132 ;@ 0x84 + mov r2, r2, lsl #16 + mov r8, r2, lsr #16 + b _03803E18 +_03803DE0: + mov ip, r0 + cmp r1, #76 ;@ 0x4c + moveq ip, r8 + beq _03803DF8 + cmp r1, #77 ;@ 0x4d + moveq ip, lr +_03803DF8: + mov r3, r1, lsl #1 + ldrh r2, [r7, r3] + and ip, ip, r2 + ldrh r2, [r6, r3] + cmp ip, r2 + movne r4, #0 + bne _03803E20 + add r1, r1, #1 +_03803E18: + cmp r1, #78 ;@ 0x4e + blt _03803DE0 +_03803E20: + mov r0, r5 + bl OS_UnLockCartridge + mov r0, r5 + bl OS_ReleaseLockID + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr +_03803E3C: .word 0x0000FFFF + + arm_func_start FUN_03803E40 +FUN_03803E40: ;@ 0x03803E40 + ldr r1, _03803E54 ;@ =current_vib + str r0, [r1] + ldr r1, _03803E58 ;@ =0x08001000 + strh r0, [r1] + bx lr +_03803E54: .word current_vib +_03803E58: .word 0x08001000 + + arm_func_start CTRDG_VibPulseEdgeUpdate +CTRDG_VibPulseEdgeUpdate: ;@ 0x03803E5C + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + movs r5, r0 + beq _03803E9C + ldr r0, [r5] + cmp r0, #0 + bne _03803E9C + ldr r0, [r5, #68] ;@ 0x44 + add r0, r0, #1 + str r0, [r5, #68] ;@ 0x44 + ldr r1, [r5, #64] ;@ 0x40 + cmp r1, #0 + beq _03803E9C + ldr r0, [r5, #68] ;@ 0x44 + cmp r0, r1 + movhi r5, #0 +_03803E9C: + cmp r5, #0 + beq _03803EB0 + ldr r0, [r5, #60] ;@ 0x3c + cmp r0, #0 + bne _03803F48 +_03803EB0: + bl OS_DisableInterrupts + mov r9, r0 + ldr r0, _03804068 ;@ =current_vib + ldr r0, [r0] + cmp r0, #2 + bne _03803F34 + mov r8, #0 + ldr r7, _0380406C ;@ =0x027FFFE8 + ldr r4, _03804070 ;@ =_03809FBC + ldr fp, _03804074 ;@ =0x000080E8 + mov r6, r8 + mov r5, #1 + b _03803F2C +_03803EE4: + mov r0, r7 + bl OS_ReadOwnerOfLockWord + ands sl, r0, #128 ;@ 0x80 + bne _03803F04 + ldrh r0, [r4] + bl OS_TryLockCartridge + cmp r0, #0 + bne _03803F24 +_03803F04: + mov r0, r6 + bl FUN_03803E40 + mov r8, r5 + cmp sl, #0 + bne _03803F2C + ldrh r0, [r4] + bl OS_UnlockCartridge + b _03803F2C +_03803F24: + mov r0, fp + bl OS_SpinWait +_03803F2C: + cmp r8, #0 + beq _03803EE4 +_03803F34: + ldr r0, _03804078 ;@ =_03809FEC + bl OS_CancelAlarm + mov r0, r9 + bl OS_RestoreInterrupts + b _0380405C +_03803F48: + cmp r5, #0 + beq _0380405C + ldr r0, _0380406C ;@ =0x027FFFE8 + bl OS_ReadOwnerOfLockWord + ands r4, r0, #128 ;@ 0x80 + bne _03803F74 + ldr r0, _03804070 ;@ =_03809FBC + ldrh r0, [r0] + bl OS_TryLockCartridge + cmp r0, #0 + bne _03804044 +_03803F74: + ldr r1, [r5] + ldr r0, [r5, #4] + cmp r1, r0 + bne _03803FB0 + mov r0, #0 + bl FUN_03803E40 + str r5, [sp] + ldr r0, _03804078 ;@ =_03809FEC + ldr r1, [r5, #8] + mov r2, #0 + ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate + bl OS_SetAlarm + mov r0, #0 + str r0, [r5] + b _0380402C +_03803FB0: + ands r0, r1, #1 + beq _03803FF4 + mov r0, #0 + bl FUN_03803E40 + str r5, [sp] + ldr r0, _03804078 ;@ =_03809FEC + ldr r1, [r5] + mov r1, r1, lsr #1 + add r1, r5, r1, lsl #2 + ldr r1, [r1, #36] ;@ 0x24 + mov r2, #0 + ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate + bl OS_SetAlarm + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0380402C +_03803FF4: + mov r0, #2 + bl FUN_03803E40 + str r5, [sp] + ldr r0, _03804078 ;@ =_03809FEC + ldr r1, [r5] + mov r1, r1, lsr #1 + add r1, r5, r1, lsl #2 + ldr r1, [r1, #12] + mov r2, #0 + ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate + bl OS_SetAlarm + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] +_0380402C: + cmp r4, #0 + bne _0380405C + ldr r0, _03804070 ;@ =_03809FBC + ldrh r0, [r0] + bl OS_UnlockCartridge + b _0380405C +_03804044: + str r5, [sp] + ldr r0, _03804078 ;@ =_03809FEC + ldr r1, _03804080 ;@ =0x0000020B + mov r2, #0 + ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate + bl OS_SetAlarm +_0380405C: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_03804068: .word current_vib +_0380406C: .word 0x027FFFE8 +_03804070: .word _03809FBC +_03804074: .word 0x000080E8 +_03804078: .word _03809FEC +_0380407C: .word CTRDG_VibPulseEdgeUpdate +_03804080: .word 0x0000020B +_03804084: + mov r0, r1 + ldr ip, _03804090 ;@ =CTRDG_VibPulseEdgeUpdate + bx ip +_03804090: .word CTRDG_VibPulseEdgeUpdate + + arm_func_start FUN_03804094 +FUN_03804094: ;@ 0x03804094 + stmfd sp!, {lr} + sub sp, sp, #4 + and r0, r1, #63 ;@ 0x3f + cmp r0, #2 + bne _038040B0 + bl FUN_03803C58 + b _038040B4 +_038040B0: + bl OS_Terminate +_038040B4: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_038040C0 +FUN_038040C0: ;@ 0x038040C0 + stmfd sp!, {lr} + sub sp, sp, #4 + and r0, r1, #63 ;@ 0x3f + cmp r0, #1 + ldreq r0, _038040F4 ;@ =_03809FD4 + streq r1, [r0] + moveq r1, #1 + streq r1, [r0, #16] + beq _038040E8 + bl OS_Terminate +_038040E8: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038040F4: .word _03809FD4 + + arm_func_start CTRDGi_InitModuleInfo +CTRDGi_InitModuleInfo: ;@ 0x038040F8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r0, _038041C8 ;@ =_03809FC4 + ldr r1, [r0] + cmp r1, #0 + bne _038041BC + mov r1, #1 + str r1, [r0] + ldr r0, _038041CC ;@ =0x04000300 + ldrh r0, [r0] + ands r0, r0, #1 + beq _038041BC + mov r0, #262144 ;@ 0x40000 + bl OS_SetIrqMask + mov r5, r0 + ldr r1, _038041D0 ;@ =0x04000208 + ldrh r4, [r1] + mov r0, #1 + strh r0, [r1] + mov r7, #256 ;@ 0x100 + ldr r6, _038041D4 ;@ =_03809FD4 + b _03804158 +_03804150: + mov r0, r7 + bl FUN_037F8CB4 +_03804158: + ldr r0, [r6, #16] + cmp r0, #1 + bne _03804150 + ldr r1, [r6] + ldr r0, _038041D8 ;@ =0x01FFFFC0 + and r0, r1, r0 + mov r0, r0, lsr #6 + mov r0, r0, lsl #5 + add r0, r0, #33554432 ;@ 0x2000000 + add r0, r0, #4 + bl FUN_03803D94 + ldr r2, _038041DC ;@ =0x027FFC30 + ldrb r1, [r2, #5] + bic r1, r1, #1 + and r0, r0, #255 ;@ 0xff + and r0, r0, #1 + orr r0, r1, r0 + strb r0, [r2, #5] + mov r0, #1 + bl CTRDGi_SendtoPxi + ldr r1, _038041D0 ;@ =0x04000208 + ldrh r0, [r1] + strh r4, [r1] + mov r0, r5 + bl OS_SetIrqMask +_038041BC: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_038041C8: .word _03809FC4 +_038041CC: .word 0x04000300 +_038041D0: .word 0x04000208 +_038041D4: .word _03809FD4 +_038041D8: .word 0x01FFFFC0 +_038041DC: .word 0x027FFC30 + + arm_func_start CTRDG_Init +CTRDG_Init: ;@ 0x038041E0 + stmfd sp!, {lr} + sub sp, sp, #4 + bl OS_InitTick + bl OS_InitAlarm + ldr r0, _03804270 ;@ =_03809FEC + bl OS_CreateAlarm + ldr r0, _03804274 ;@ =_03809FD0 + ldr r1, [r0] + cmp r1, #0 + bne _03804264 + mov r1, #1 + str r1, [r0] + bl CTRDGi_InitCommon + bl OS_GetLockID + mvn r1, #2 + cmp r0, r1 + beq _03804264 + ldr r1, _03804278 ;@ =_03809FBC + strh r0, [r1] + bl PXI_Init + mov r0, #13 + ldr r1, _0380427C ;@ =FUN_038040C0 + bl PXI_SetFifoRecvCallback + bl CTRDGi_InitModuleInfo + mov r0, #13 + ldr r1, _03804280 ;@ =FUN_03804094 + bl PXI_SetFifoRecvCallback + mov r0, #16 + ldr r1, _03804284 ;@ =_03804084 + bl PXI_SetFifoRecvCallback + mov r0, #17 + ldr r1, _03804288 ;@ =FUN_03803BD4 + bl PXI_SetFifoRecvCallback +_03804264: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03804270: .word _03809FEC +_03804274: .word _03809FD0 +_03804278: .word _03809FBC +_0380427C: .word FUN_038040C0 +_03804280: .word FUN_03804094 +_03804284: .word _03804084 +_03804288: .word FUN_03803BD4 + + arm_func_start FUN_0380428C +FUN_0380428C: ;@ 0x0380428C + stmfd sp!, {lr} + sub sp, sp, #4 + add r0, sp, #0 + bl NVRAM_ReadStatusRegister + ldrh r1, [sp] + ands r0, r1, #1 + movne r0, #0 + bne _038042B8 + ands r0, r1, #2 + movne r0, #1 + moveq r0, #0 +_038042B8: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_038042C4 +FUN_038042C4: ;@ 0x038042C4 + stmfd sp!, {lr} + sub sp, sp, #4 + add r0, sp, #0 + bl NVRAM_ReadStatusRegister + ldrh r0, [sp] + ands r0, r0, #1 + moveq r0, #1 + movne r0, #0 + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start NVRAM_ExecuteProcess +NVRAM_ExecuteProcess: ;@ 0x038042F0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + bl OS_DisableInterrupts + mov r5, r0 + mov r0, #1 + bl SPIi_CheckException + cmp r0, #0 + bne _03804334 + mov r0, r5 + bl OS_RestoreInterrupts + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #4 + bl SPIi_ReturnResult + b _038045C0 +_03804334: + mov r0, #1 + bl SPIi_GetException + mov r0, r5 + bl OS_RestoreInterrupts + ldr r0, [r4, #4] + sub r0, r0, #32 + cmp r0, #13 + addls pc, pc, r0, lsl #2 + b _03804584 + b _03804390 + b _03804398 + b _038043A0 + b _038043AC + b _038043EC + b _0380442C + b _03804474 + b _038044BC + b _038044F4 + b _0380452C + b _03804534 + b _0380453C + b _03804570 + b _0380457C +_03804390: + bl NVRAM_WriteEnable + b _038045A4 +_03804398: + bl NVRAM_WriteDisable + b _038045A4 +_038043A0: + ldr r0, [r4, #16] + bl NVRAM_ReadStatusRegister + b _038045A4 +_038043AC: + bl FUN_038042C4 + cmp r0, #0 + bne _038043D8 + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult + mov r0, #1 + bl SPIi_ReleaseException + b _038045C0 +_038043D8: + ldr r0, [r4, #8] + ldr r1, [r4, #12] + ldr r2, [r4, #16] + bl NVRAM_ReadDataBytes + b _038045A4 +_038043EC: + bl FUN_038042C4 + cmp r0, #0 + bne _03804418 + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult + mov r0, #1 + bl SPIi_ReleaseException + b _038045C0 +_03804418: + ldr r0, [r4, #8] + ldr r1, [r4, #12] + ldr r2, [r4, #16] + bl NVRAM_ReadDataBytesAtHigherSpeed + b _038045A4 +_0380442C: + bl FUN_0380428C + cmp r0, #0 + bne _03804458 + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult + mov r0, #1 + bl SPIi_ReleaseException + b _038045C0 +_03804458: + ldr r0, [r4, #8] + ldr r1, [r4, #12] + mov r1, r1, lsl #16 + mov r1, r1, lsr #16 + ldr r2, [r4, #16] + bl NVRAM_PageWrite + b _038045A4 +_03804474: + bl FUN_0380428C + cmp r0, #0 + bne _038044A0 + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult + mov r0, #1 + bl SPIi_ReleaseException + b _038045C0 +_038044A0: + ldr r0, [r4, #8] + ldr r1, [r4, #12] + mov r1, r1, lsl #16 + mov r1, r1, lsr #16 + ldr r2, [r4, #16] + bl NVRAM_PageProgram + b _038045A4 +_038044BC: + bl FUN_0380428C + cmp r0, #0 + bne _038044E8 + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult + mov r0, #1 + bl SPIi_ReleaseException + b _038045C0 +_038044E8: + ldr r0, [r4, #8] + bl NVRAM_PageErase + b _038045A4 +_038044F4: + bl FUN_0380428C + cmp r0, #0 + bne _03804520 + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult + mov r0, #1 + bl SPIi_ReleaseException + b _038045C0 +_03804520: + ldr r0, [r4, #8] + bl NVRAM_SectorErase + b _038045A4 +_0380452C: + bl NVRAM_DeepPowerDown + b _038045A4 +_03804534: + bl NVRAM_ReleaseFromDeepPowerDown + b _038045A4 +_0380453C: + bl FUN_0380428C + cmp r0, #0 + bne _03804568 + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #3 + bl SPIi_ReturnResult + mov r0, #1 + bl SPIi_ReleaseException + b _038045C0 +_03804568: + bl NVRAM_ChipErase + b _038045A4 +_03804570: + ldr r0, [r4, #16] + bl NVRAM_ReadSiliconId + b _038045A4 +_0380457C: + bl NVRAM_SoftwareReset + b _038045A4 +_03804584: + mov r0, #1 + bl SPIi_ReleaseException + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #1 + bl SPIi_ReturnResult + b _038045C0 +_038045A4: + ldr r0, [r4, #4] + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + mov r1, #0 + bl SPIi_ReturnResult + mov r0, #1 + bl SPIi_ReleaseException +_038045C0: + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr + + arm_func_start NVRAM_AnalyzeCommand +NVRAM_AnalyzeCommand: ;@ 0x038045CC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #12 + ands r1, r0, #33554432 ;@ 0x2000000 + beq _038045FC + mov r5, #0 + mov lr, r5 + ldr r1, _0380476C ;@ =_0380A018 +_038045E8: + mov r4, r5, lsl #1 + strh lr, [r1, r4] + add r5, r5, #1 + cmp r5, #16 + blt _038045E8 +_038045FC: + and r1, r0, #983040 ;@ 0xf0000 + mov r1, r1, lsr #16 + mov r4, r1, lsl #1 + ldr r1, _0380476C ;@ =_0380A018 + strh r0, [r1, r4] + ands r0, r0, #16777216 ;@ 0x1000000 + beq _03804760 + ldrh r0, [r1] + and r4, r0, #65280 ;@ 0xff00 + mov r4, r4, lsl #8 + mov r4, r4, lsr #16 + sub lr, r4, #34 ;@ 0x22 + cmp lr, #10 + addls pc, pc, lr, lsl #2 + b _03804734 + b _03804664 + b _038046A0 + b _038046A0 + b _038046E8 + b _038046E8 + b _03804728 + b _03804728 + b _03804734 + b _03804734 + b _03804734 + b _03804664 +_03804664: + ldrh ip, [r1, #4] + and lr, ip, #65280 ;@ 0xff00 + and r0, r0, #255 ;@ 0xff + mov ip, r0, lsl #24 + ldrh r0, [r1, #2] + orr r0, ip, r0, lsl #8 + orr ip, r0, lr, lsr #8 + cmp ip, #33554432 ;@ 0x2000000 + bcc _03804690 + cmp ip, #41943040 ;@ 0x2800000 + bcc _03804734 +_03804690: + mov r0, r4 + mov r1, #2 + bl SPIi_ReturnResult + b _03804760 +_038046A0: + ldrh r3, [r1, #8] + ldrh r2, [r1, #10] + orr ip, r2, r3, lsl #16 + cmp ip, #33554432 ;@ 0x2000000 + bcc _038046BC + cmp ip, #41943040 ;@ 0x2800000 + bcc _038046CC +_038046BC: + mov r0, r4 + mov r1, #2 + bl SPIi_ReturnResult + b _03804760 +_038046CC: + and r2, r0, #255 ;@ 0xff + ldrh r0, [r1, #2] + orr r3, r0, r2, lsl #16 + ldrh r2, [r1, #4] + ldrh r0, [r1, #6] + orr r2, r0, r2, lsl #16 + b _03804734 +_038046E8: + ldrh r3, [r1, #6] + ldrh r2, [r1, #8] + orr ip, r2, r3, lsl #16 + cmp ip, #33554432 ;@ 0x2000000 + bcc _03804704 + cmp ip, #41943040 ;@ 0x2800000 + bcc _03804714 +_03804704: + mov r0, r4 + mov r1, #2 + bl SPIi_ReturnResult + b _03804760 +_03804714: + and r2, r0, #255 ;@ 0xff + ldrh r0, [r1, #2] + orr r3, r0, r2, lsl #16 + ldrh r2, [r1, #4] + b _03804734 +_03804728: + and r3, r0, #255 ;@ 0xff + ldrh r0, [r1, #2] + orr r3, r0, r3, lsl #16 +_03804734: + str r2, [sp] + str ip, [sp, #4] + mov r0, #1 + mov r1, r4 + mov r2, #3 + bl SPIi_SetEntry + cmp r0, #0 + bne _03804760 + mov r0, r4 + mov r1, #4 + bl SPIi_ReturnResult +_03804760: + add sp, sp, #12 + ldmia sp!, {r4, r5, lr} + bx lr +_0380476C: .word _0380A018 + + arm_func_start NVRAM_Init +NVRAM_Init: ;@ 0x03804770 + mov r3, #0 + mov r2, r3 + ldr r0, _03804794 ;@ =_0380A018 +_0380477C: + mov r1, r3, lsl #1 + strh r2, [r0, r1] + add r3, r3, #1 + cmp r3, #16 + blt _0380477C + bx lr +_03804794: .word _0380A018 + + arm_func_start NVRAM_SoftwareReset +NVRAM_SoftwareReset: ;@ 0x03804798 + ldr r1, _038047D0 ;@ =0x040001C0 +_0380479C: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _0380479C + mov r0, #33024 ;@ 0x8100 + strh r0, [r1] + mov r1, #255 ;@ 0xff + ldr r0, _038047D4 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038047D0 ;@ =0x040001C0 +_038047C0: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038047C0 + bx lr +_038047D0: .word 0x040001C0 +_038047D4: .word 0x040001C2 + + arm_func_start NVRAM_ReadSiliconId +NVRAM_ReadSiliconId: ;@ 0x038047D8 + ldr r2, _0380486C ;@ =0x040001C0 +_038047DC: + ldrh r1, [r2] + ands r1, r1, #128 ;@ 0x80 + bne _038047DC + mov r1, #35072 ;@ 0x8900 + strh r1, [r2] + mov r2, #159 ;@ 0x9f + ldr r1, _03804870 ;@ =0x040001C2 + strh r2, [r1] + ldr r2, _0380486C ;@ =0x040001C0 +_03804800: + ldrh r1, [r2] + ands r1, r1, #128 ;@ 0x80 + bne _03804800 + mov r2, #0 + ldr r1, _03804870 ;@ =0x040001C2 + strh r2, [r1] + ldr r3, _0380486C ;@ =0x040001C0 +_0380481C: + ldrh r1, [r3] + ands r1, r1, #128 ;@ 0x80 + bne _0380481C + ldr r2, _03804870 ;@ =0x040001C2 + ldrh r1, [r2] + and r1, r1, #255 ;@ 0xff + strb r1, [r0] + mov r1, #33024 ;@ 0x8100 + strh r1, [r3] + mov r1, #0 + strh r1, [r2] + ldr r2, _0380486C ;@ =0x040001C0 +_0380484C: + ldrh r1, [r2] + ands r1, r1, #128 ;@ 0x80 + bne _0380484C + ldr r1, _03804870 ;@ =0x040001C2 + ldrh r1, [r1] + and r1, r1, #255 ;@ 0xff + strb r1, [r0, #1] + bx lr +_0380486C: .word 0x040001C0 +_03804870: .word 0x040001C2 + + arm_func_start NVRAM_ChipErase +NVRAM_ChipErase: ;@ 0x03804874 + ldr r1, _038048AC ;@ =0x040001C0 +_03804878: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03804878 + mov r0, #33024 ;@ 0x8100 + strh r0, [r1] + mov r1, #199 ;@ 0xc7 + ldr r0, _038048B0 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038048AC ;@ =0x040001C0 +_0380489C: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _0380489C + bx lr +_038048AC: .word 0x040001C0 +_038048B0: .word 0x040001C2 + + arm_func_start NVRAM_ReleaseFromDeepPowerDown +NVRAM_ReleaseFromDeepPowerDown: ;@ 0x038048B4 + ldr r1, _038048EC ;@ =0x040001C0 +_038048B8: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038048B8 + mov r0, #33024 ;@ 0x8100 + strh r0, [r1] + mov r1, #171 ;@ 0xab + ldr r0, _038048F0 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038048EC ;@ =0x040001C0 +_038048DC: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038048DC + bx lr +_038048EC: .word 0x040001C0 +_038048F0: .word 0x040001C2 + + arm_func_start NVRAM_DeepPowerDown +NVRAM_DeepPowerDown: ;@ 0x038048F4 + ldr r1, _0380492C ;@ =0x040001C0 +_038048F8: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038048F8 + mov r0, #33024 ;@ 0x8100 + strh r0, [r1] + mov r1, #185 ;@ 0xb9 + ldr r0, _03804930 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _0380492C ;@ =0x040001C0 +_0380491C: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _0380491C + bx lr +_0380492C: .word 0x040001C0 +_03804930: .word 0x040001C2 + + arm_func_start NVRAM_SectorErase +NVRAM_SectorErase: ;@ 0x03804934 + and r1, r0, #16711680 ;@ 0xff0000 + mov r1, r1, lsr #16 + mov r1, r1, lsl #16 + mov r2, r1, lsr #16 + and r1, r0, #65280 ;@ 0xff00 + mov r1, r1, lsl #8 + mov r1, r1, lsr #16 + and r0, r0, #255 ;@ 0xff + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + ldr ip, _038049F0 ;@ =0x040001C0 +_03804960: + ldrh r3, [ip] + ands r3, r3, #128 ;@ 0x80 + bne _03804960 + mov r3, #35072 ;@ 0x8900 + strh r3, [ip] + mov ip, #216 ;@ 0xd8 + ldr r3, _038049F4 ;@ =0x040001C2 + strh ip, [r3] + ldr ip, _038049F0 ;@ =0x040001C0 +_03804984: + ldrh r3, [ip] + ands r3, r3, #128 ;@ 0x80 + bne _03804984 + and r3, r2, #255 ;@ 0xff + ldr r2, _038049F4 ;@ =0x040001C2 + strh r3, [r2] + ldr r3, _038049F0 ;@ =0x040001C0 +_038049A0: + ldrh r2, [r3] + ands r2, r2, #128 ;@ 0x80 + bne _038049A0 + and r2, r1, #255 ;@ 0xff + ldr r1, _038049F4 ;@ =0x040001C2 + strh r2, [r1] + ldr r2, _038049F0 ;@ =0x040001C0 +_038049BC: + ldrh r1, [r2] + ands r1, r1, #128 ;@ 0x80 + bne _038049BC + mov r1, #33024 ;@ 0x8100 + strh r1, [r2] + and r1, r0, #255 ;@ 0xff + ldr r0, _038049F4 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _038049F0 ;@ =0x040001C0 +_038049E0: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _038049E0 + bx lr +_038049F0: .word 0x040001C0 +_038049F4: .word 0x040001C2 + + arm_func_start NVRAM_PageErase +NVRAM_PageErase: ;@ 0x038049F8 + and r1, r0, #16711680 ;@ 0xff0000 + mov r1, r1, lsr #16 + mov r1, r1, lsl #16 + mov r2, r1, lsr #16 + and r1, r0, #65280 ;@ 0xff00 + mov r1, r1, lsl #8 + mov r1, r1, lsr #16 + and r0, r0, #255 ;@ 0xff + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + ldr ip, _03804AB4 ;@ =0x040001C0 +_03804A24: + ldrh r3, [ip] + ands r3, r3, #128 ;@ 0x80 + bne _03804A24 + mov r3, #35072 ;@ 0x8900 + strh r3, [ip] + mov ip, #219 ;@ 0xdb + ldr r3, _03804AB8 ;@ =0x040001C2 + strh ip, [r3] + ldr ip, _03804AB4 ;@ =0x040001C0 +_03804A48: + ldrh r3, [ip] + ands r3, r3, #128 ;@ 0x80 + bne _03804A48 + and r3, r2, #255 ;@ 0xff + ldr r2, _03804AB8 ;@ =0x040001C2 + strh r3, [r2] + ldr r3, _03804AB4 ;@ =0x040001C0 +_03804A64: + ldrh r2, [r3] + ands r2, r2, #128 ;@ 0x80 + bne _03804A64 + and r2, r1, #255 ;@ 0xff + ldr r1, _03804AB8 ;@ =0x040001C2 + strh r2, [r1] + ldr r2, _03804AB4 ;@ =0x040001C0 +_03804A80: + ldrh r1, [r2] + ands r1, r1, #128 ;@ 0x80 + bne _03804A80 + mov r1, #33024 ;@ 0x8100 + strh r1, [r2] + and r1, r0, #255 ;@ 0xff + ldr r0, _03804AB8 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03804AB4 ;@ =0x040001C0 +_03804AA4: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03804AA4 + bx lr +_03804AB4: .word 0x040001C0 +_03804AB8: .word 0x040001C2 + + arm_func_start NVRAM_PageProgram +NVRAM_PageProgram: ;@ 0x03804ABC + stmdb sp!, {r4, lr} + sub sp, sp, #8 + cmp r1, #1 + bcc _03804BD4 + add r3, r0, r1 + sub r3, r3, #1 + mov r3, r3, lsr #8 + cmp r3, r0, lsr #8 + andhi r1, r0, #255 ;@ 0xff + rsbhi r1, r1, #256 ;@ 0x100 + movhi r1, r1, lsl #16 + movhi r1, r1, lsr #16 + and r3, r0, #16711680 ;@ 0xff0000 + mov r3, r3, lsr #16 + strh r3, [sp] + and r3, r0, #65280 ;@ 0xff00 + mov r3, r3, lsr #8 + strh r3, [sp, #2] + and r0, r0, #255 ;@ 0xff + strh r0, [sp, #4] + ldr r3, _03804BE0 ;@ =0x040001C0 +_03804B10: + ldrh r0, [r3] + ands r0, r0, #128 ;@ 0x80 + bne _03804B10 + mov r0, #35072 ;@ 0x8900 + strh r0, [r3] + mov r0, #2 + ldr lr, _03804BE4 ;@ =0x040001C2 + strh r0, [lr] + mov r4, #0 + add r3, sp, #0 + ldr ip, _03804BE0 ;@ =0x040001C0 +_03804B3C: + ldrh r0, [ip] + ands r0, r0, #128 ;@ 0x80 + bne _03804B3C + mov r0, r4, lsl #1 + ldrh r0, [r3, r0] + and r0, r0, #255 ;@ 0xff + strh r0, [lr] + add r4, r4, #1 + cmp r4, #3 + blt _03804B3C + mov ip, #0 + sub lr, r1, #1 + ldr r3, _03804BE0 ;@ =0x040001C0 + ldr r0, _03804BE4 ;@ =0x040001C2 + b _03804B94 +_03804B78: + ldrh r1, [r3] + ands r1, r1, #128 ;@ 0x80 + bne _03804B78 + ldrb r1, [r2, ip] + and r1, r1, #255 ;@ 0xff + strh r1, [r0] + add ip, ip, #1 +_03804B94: + cmp ip, lr + blt _03804B78 + ldr r1, _03804BE0 ;@ =0x040001C0 +_03804BA0: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03804BA0 + mov r0, #33024 ;@ 0x8100 + strh r0, [r1] + ldrb r0, [r2, ip] + and r1, r0, #255 ;@ 0xff + ldr r0, _03804BE4 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03804BE0 ;@ =0x040001C0 +_03804BC8: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03804BC8 +_03804BD4: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03804BE0: .word 0x040001C0 +_03804BE4: .word 0x040001C2 + + arm_func_start NVRAM_PageWrite +NVRAM_PageWrite: ;@ 0x03804BE8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + cmp r1, #1 + bcc _03804D00 + add r3, r0, r1 + sub r3, r3, #1 + mov r3, r3, lsr #8 + cmp r3, r0, lsr #8 + andhi r1, r0, #255 ;@ 0xff + rsbhi r1, r1, #256 ;@ 0x100 + movhi r1, r1, lsl #16 + movhi r1, r1, lsr #16 + and r3, r0, #16711680 ;@ 0xff0000 + mov r3, r3, lsr #16 + strh r3, [sp] + and r3, r0, #65280 ;@ 0xff00 + mov r3, r3, lsr #8 + strh r3, [sp, #2] + and r0, r0, #255 ;@ 0xff + strh r0, [sp, #4] + ldr r3, _03804D0C ;@ =0x040001C0 +_03804C3C: + ldrh r0, [r3] + ands r0, r0, #128 ;@ 0x80 + bne _03804C3C + mov r0, #35072 ;@ 0x8900 + strh r0, [r3] + mov r0, #10 + ldr lr, _03804D10 ;@ =0x040001C2 + strh r0, [lr] + mov r4, #0 + add r3, sp, #0 + ldr ip, _03804D0C ;@ =0x040001C0 +_03804C68: + ldrh r0, [ip] + ands r0, r0, #128 ;@ 0x80 + bne _03804C68 + mov r0, r4, lsl #1 + ldrh r0, [r3, r0] + and r0, r0, #255 ;@ 0xff + strh r0, [lr] + add r4, r4, #1 + cmp r4, #3 + blt _03804C68 + mov ip, #0 + sub lr, r1, #1 + ldr r3, _03804D0C ;@ =0x040001C0 + ldr r0, _03804D10 ;@ =0x040001C2 + b _03804CC0 +_03804CA4: + ldrh r1, [r3] + ands r1, r1, #128 ;@ 0x80 + bne _03804CA4 + ldrb r1, [r2, ip] + and r1, r1, #255 ;@ 0xff + strh r1, [r0] + add ip, ip, #1 +_03804CC0: + cmp ip, lr + blt _03804CA4 + ldr r1, _03804D0C ;@ =0x040001C0 +_03804CCC: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03804CCC + mov r0, #33024 ;@ 0x8100 + strh r0, [r1] + ldrb r0, [r2, ip] + and r1, r0, #255 ;@ 0xff + ldr r0, _03804D10 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _03804D0C ;@ =0x040001C0 +_03804CF4: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03804CF4 +_03804D00: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03804D0C: .word 0x040001C0 +_03804D10: .word 0x040001C2 + + arm_func_start NVRAM_ReadDataBytesAtHigherSpeed +NVRAM_ReadDataBytesAtHigherSpeed: ;@ 0x03804D14 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + cmp r1, #1 + bcc _03804E3C + and r3, r0, #16711680 ;@ 0xff0000 + mov r3, r3, lsr #16 + strh r3, [sp] + and r3, r0, #65280 ;@ 0xff00 + mov r3, r3, lsr #8 + strh r3, [sp, #2] + and r0, r0, #255 ;@ 0xff + strh r0, [sp, #4] + ldr r3, _03804E48 ;@ =0x040001C0 +_03804D48: + ldrh r0, [r3] + ands r0, r0, #128 ;@ 0x80 + bne _03804D48 + mov r0, #35072 ;@ 0x8900 + strh r0, [r3] + mov r0, #11 + ldr ip, _03804E4C ;@ =0x040001C2 + strh r0, [ip] + mov lr, #0 + add r3, sp, #0 + ldr r4, _03804E48 ;@ =0x040001C0 +_03804D74: + ldrh r0, [r4] + ands r0, r0, #128 ;@ 0x80 + bne _03804D74 + mov r0, lr, lsl #1 + ldrh r0, [r3, r0] + and r0, r0, #255 ;@ 0xff + strh r0, [ip] + add lr, lr, #1 + cmp lr, #3 + blt _03804D74 + ldr r3, _03804E48 ;@ =0x040001C0 +_03804DA0: + ldrh r0, [r3] + ands r0, r0, #128 ;@ 0x80 + bne _03804DA0 + mov r3, #0 + ldr r0, _03804E4C ;@ =0x040001C2 + strh r3, [r0] + ldr r3, _03804E48 ;@ =0x040001C0 +_03804DBC: + ldrh r0, [r3] + ands r0, r0, #128 ;@ 0x80 + bne _03804DBC + mov r0, #0 + ldr ip, _03804E48 ;@ =0x040001C0 + mov r4, r0 + ldr lr, _03804E4C ;@ =0x040001C2 + sub r1, r1, #1 + b _03804E00 +_03804DE0: + strh r4, [lr] +_03804DE4: + ldrh r3, [ip] + ands r3, r3, #128 ;@ 0x80 + bne _03804DE4 + ldrh r3, [lr] + and r3, r3, #255 ;@ 0xff + strb r3, [r2, r0] + add r0, r0, #1 +_03804E00: + cmp r0, r1 + bcc _03804DE0 + mov r1, #33024 ;@ 0x8100 + ldr ip, _03804E48 ;@ =0x040001C0 + strh r1, [ip] + mov r3, #0 + ldr r1, _03804E4C ;@ =0x040001C2 + strh r3, [r1] +_03804E20: + ldrh r1, [ip] + ands r1, r1, #128 ;@ 0x80 + bne _03804E20 + ldr r1, _03804E4C ;@ =0x040001C2 + ldrh r1, [r1] + and r1, r1, #255 ;@ 0xff + strb r1, [r2, r0] +_03804E3C: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03804E48: .word 0x040001C0 +_03804E4C: .word 0x040001C2 + + arm_func_start NVRAM_ReadDataBytes +NVRAM_ReadDataBytes: ;@ 0x03804E50 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + cmp r1, #1 + bcc _03804F5C + and r3, r0, #16711680 ;@ 0xff0000 + mov r3, r3, lsr #16 + strh r3, [sp] + and r3, r0, #65280 ;@ 0xff00 + mov r3, r3, lsr #8 + strh r3, [sp, #2] + and r0, r0, #255 ;@ 0xff + strh r0, [sp, #4] + ldr r3, _03804F68 ;@ =0x040001C0 +_03804E84: + ldrh r0, [r3] + ands r0, r0, #128 ;@ 0x80 + bne _03804E84 + mov r0, #35072 ;@ 0x8900 + strh r0, [r3] + mov r0, #3 + ldr ip, _03804F6C ;@ =0x040001C2 + strh r0, [ip] + mov lr, #0 + add r3, sp, #0 + ldr r4, _03804F68 ;@ =0x040001C0 +_03804EB0: + ldrh r0, [r4] + ands r0, r0, #128 ;@ 0x80 + bne _03804EB0 + mov r0, lr, lsl #1 + ldrh r0, [r3, r0] + and r0, r0, #255 ;@ 0xff + strh r0, [ip] + add lr, lr, #1 + cmp lr, #3 + blt _03804EB0 + ldr r3, _03804F68 ;@ =0x040001C0 +_03804EDC: + ldrh r0, [r3] + ands r0, r0, #128 ;@ 0x80 + bne _03804EDC + mov r0, #0 + ldr ip, _03804F68 ;@ =0x040001C0 + mov r4, r0 + ldr lr, _03804F6C ;@ =0x040001C2 + sub r1, r1, #1 + b _03804F20 +_03804F00: + strh r4, [lr] +_03804F04: + ldrh r3, [ip] + ands r3, r3, #128 ;@ 0x80 + bne _03804F04 + ldrh r3, [lr] + and r3, r3, #255 ;@ 0xff + strb r3, [r2, r0] + add r0, r0, #1 +_03804F20: + cmp r0, r1 + bcc _03804F00 + mov r1, #33024 ;@ 0x8100 + ldr ip, _03804F68 ;@ =0x040001C0 + strh r1, [ip] + mov r3, #0 + ldr r1, _03804F6C ;@ =0x040001C2 + strh r3, [r1] +_03804F40: + ldrh r1, [ip] + ands r1, r1, #128 ;@ 0x80 + bne _03804F40 + ldr r1, _03804F6C ;@ =0x040001C2 + ldrh r1, [r1] + and r1, r1, #255 ;@ 0xff + strb r1, [r2, r0] +_03804F5C: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03804F68: .word 0x040001C0 +_03804F6C: .word 0x040001C2 + + arm_func_start NVRAM_ReadStatusRegister +NVRAM_ReadStatusRegister: ;@ 0x03804F70 + ldr r2, _03804FDC ;@ =0x040001C0 +_03804F74: + ldrh r1, [r2] + ands r1, r1, #128 ;@ 0x80 + bne _03804F74 + mov r1, #35072 ;@ 0x8900 + strh r1, [r2] + mov r2, #5 + ldr r1, _03804FE0 ;@ =0x040001C2 + strh r2, [r1] + ldr r2, _03804FDC ;@ =0x040001C0 +_03804F98: + ldrh r1, [r2] + ands r1, r1, #128 ;@ 0x80 + bne _03804F98 + mov r1, #33024 ;@ 0x8100 + strh r1, [r2] + mov r2, #0 + ldr r1, _03804FE0 ;@ =0x040001C2 + strh r2, [r1] + ldr r2, _03804FDC ;@ =0x040001C0 +_03804FBC: + ldrh r1, [r2] + ands r1, r1, #128 ;@ 0x80 + bne _03804FBC + ldr r1, _03804FE0 ;@ =0x040001C2 + ldrh r1, [r1] + and r1, r1, #255 ;@ 0xff + strb r1, [r0] + bx lr +_03804FDC: .word 0x040001C0 +_03804FE0: .word 0x040001C2 + + arm_func_start NVRAM_WriteDisable +NVRAM_WriteDisable: ;@ 0x03804FE4 + ldr r1, _0380501C ;@ =0x040001C0 +_03804FE8: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03804FE8 + mov r0, #33024 ;@ 0x8100 + strh r0, [r1] + mov r1, #4 + ldr r0, _03805020 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _0380501C ;@ =0x040001C0 +_0380500C: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _0380500C + bx lr +_0380501C: .word 0x040001C0 +_03805020: .word 0x040001C2 + + arm_func_start NVRAM_WriteEnable +NVRAM_WriteEnable: ;@ 0x03805024 + ldr r1, _0380505C ;@ =0x040001C0 +_03805028: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _03805028 + mov r0, #33024 ;@ 0x8100 + strh r0, [r1] + mov r1, #6 + ldr r0, _03805060 ;@ =0x040001C2 + strh r1, [r0] + ldr r1, _0380505C ;@ =0x040001C0 +_0380504C: + ldrh r0, [r1] + ands r0, r0, #128 ;@ 0x80 + bne _0380504C + bx lr +_0380505C: .word 0x040001C0 +_03805060: .word 0x040001C2 + + arm_func_start FUN_03805064 +FUN_03805064: ;@ 0x03805064 + stmfd sp!, {lr} + sub sp, sp, #4 + mov lr, #0 + mov r2, lr + b _03805094 +_03805078: + mov r1, r2, lsl #2 + mov r1, r0, lsr r1 + and r1, r1, #15 + cmp r1, #10 + movcs r0, #0 + bcs _038050D0 + add r2, r2, #1 +_03805094: + cmp r2, #8 + blt _03805078 + mov r3, #0 + mov ip, #1 + mov r2, #10 +_038050A8: + mov r1, r3, lsl #2 + mov r1, r0, lsr r1 + and r1, r1, #15 + mla lr, ip, r1, lr + add r3, r3, #1 + mul r1, ip, r2 + mov ip, r1 + cmp r3, #8 + blt _038050A8 + mov r0, lr +_038050D0: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start FUN_038050DC +FUN_038050DC: ;@ 0x038050DC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + sub r0, r7, #1 + cmp r0, #1 + subls r8, r8, #1 + addls r7, r7, #12 + mov r0, r8 + mov r1, #400 ;@ 0x190 + bl _u32_div_f + mov r5, r0 + mov r0, r8 + mov r1, #100 ;@ 0x64 + bl _u32_div_f + mov r4, r0 + mov r0, #13 + mul r0, r7, r0 + add r0, r0, #8 + mov r1, #5 + bl _u32_div_f + add r1, r8, r8, lsr #2 + sub r1, r1, r4 + add r1, r5, r1 + add r0, r1, r0 + add r0, r6, r0 + mov r1, #7 + bl _u32_div_f + mov r0, r1 + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr + + arm_func_start FUN_03805158 +FUN_03805158: ;@ 0x03805158 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + add r0, sp, #0 + bl RTC_ReadStatus1 + add r0, sp, #2 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r1, r0, lsl #24 + movs r1, r1, lsr #31 + bne _0380519C + mov r0, r0, lsl #25 + movs r0, r0, lsr #31 + bne _0380519C + ldrh r0, [sp, #2] + mov r0, r0, lsl #24 + movs r0, r0, lsr #31 + beq _038051B4 +_0380519C: + ldrh r0, [sp] + bic r0, r0, #1 + orr r0, r0, #1 + strh r0, [sp] + add r0, sp, #0 + bl RTC_WriteStatus1 +_038051B4: + ldrh r0, [sp] + mov r1, r0, lsl #27 + movs r1, r1, lsr #31 + bne _038051D0 + mov r0, r0, lsl #26 + movs r0, r0, lsr #31 + beq _038051F0 +_038051D0: + ldrh r0, [sp, #2] + bic r0, r0, #15 + strh r0, [sp, #2] + ldrh r0, [sp, #2] + bic r0, r0, #64 ;@ 0x40 + strh r0, [sp, #2] + add r0, sp, #2 + bl RTC_WriteStatus2 +_038051F0: + ldr r0, _03805288 ;@ =0x027FFDE8 + bl RTC_ReadDateTime + ldr r0, _03805288 ;@ =0x027FFDE8 + ldrb r0, [r0] + bl FUN_03805064 + mov r4, r0 + ldr r0, _03805288 ;@ =0x027FFDE8 + ldr r0, [r0] + mov r0, r0, lsl #19 + mov r0, r0, lsr #27 + bl FUN_03805064 + mov r5, r0 + ldr r0, _03805288 ;@ =0x027FFDE8 + ldr r0, [r0] + mov r0, r0, lsl #10 + mov r0, r0, lsr #26 + bl FUN_03805064 + mov r2, r0 + add r0, r4, #2000 ;@ 0x7d0 + mov r1, r5 + bl FUN_038050DC + ldr r2, _03805288 ;@ =0x027FFDE8 + ldr r1, [r2] + mov r3, r1, lsl #5 + mov r3, r3, lsr #29 + cmp r3, r0 + beq _03805274 + bic r1, r1, #117440512 ;@ 0x7000000 + and r0, r0, #7 + orr r0, r1, r0, lsl #24 + str r0, [r2] + mov r0, r2 + bl RTC_WriteDateTime +_03805274: + mov r0, #1 + bl RTC_SetHourFormat + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_03805288: .word 0x027FFDE8 + + arm_func_start FUN_0380528C +FUN_0380528C: ;@ 0x0380528C + stmdb sp!, {r4, lr} + sub sp, sp, #8 + add r0, sp, #0 + bl RTC_ReadStatus1 + ldrh r0, [sp] + mov r1, r0, lsl #27 + movs r1, r1, lsr #31 + bne _038052B8 + mov r0, r0, lsl #26 + movs r0, r0, lsr #31 + beq _03805310 +_038052B8: + add r0, sp, #2 + bl RTC_ReadStatus2 + mov r4, #0 + ldrh r0, [sp] + mov r0, r0, lsl #27 + movs r0, r0, lsr #31 + orrne r4, r4, #1 + ldrneh r0, [sp, #2] + bicne r0, r0, #15 + strneh r0, [sp, #2] + ldrh r0, [sp] + mov r0, r0, lsl #26 + movs r0, r0, lsr #31 + orrne r4, r4, #2 + ldrneh r0, [sp, #2] + bicne r0, r0, #64 ;@ 0x40 + strneh r0, [sp, #2] + add r0, sp, #2 + bl RTC_WriteStatus2 + mov r0, #48 ;@ 0x30 + mov r1, r4 + bl FUN_038057D8 +_03805310: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start FUN_0380531C +FUN_0380531C: ;@ 0x0380531C + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #76 ;@ 0x4c + ldr r6, _038057CC ;@ =0x027FFDE8 + add r5, r6, #4 + mov r7, #0 + ldr r9, _038057D0 ;@ =_0380A03C + mov r8, #1 + mov r0, #16 + str r0, [sp] + mov r0, #17 + str r0, [sp, #4] + mov r0, #18 + str r0, [sp, #8] + mov sl, #19 + mov r4, #2 + mov fp, #20 + mov r0, #21 + str r0, [sp, #12] + mov r0, #22 + str r0, [sp, #16] + mov r0, #23 + str r0, [sp, #20] + mov r0, #24 + str r0, [sp, #24] + mov r0, #25 + str r0, [sp, #28] + mov r0, #32 + str r0, [sp, #32] + mov r0, #33 ;@ 0x21 + str r0, [sp, #36] ;@ 0x24 + mov r0, #34 ;@ 0x22 + str r0, [sp, #40] ;@ 0x28 + mov r0, #35 ;@ 0x23 + str r0, [sp, #44] ;@ 0x2c + mov r0, #36 ;@ 0x24 + str r0, [sp, #48] ;@ 0x30 + mov r0, #37 ;@ 0x25 + str r0, [sp, #52] ;@ 0x34 + mov r0, #38 ;@ 0x26 + str r0, [sp, #56] ;@ 0x38 + mov r0, #39 ;@ 0x27 + str r0, [sp, #60] ;@ 0x3c + mov r0, #40 ;@ 0x28 + str r0, [sp, #64] ;@ 0x40 + mov r0, #41 ;@ 0x29 + str r0, [sp, #68] ;@ 0x44 +_038053D4: + mov r0, r9 + add r1, sp, #72 ;@ 0x48 + mov r2, r8 + bl OS_ReceiveMessage + ldr r0, _038057D4 ;@ =_0380A13C + ldrh r0, [r0, #216] ;@ 0xd8 + cmp r0, #41 ;@ 0x29 + addls pc, pc, r0, lsl #2 + b _038057BC + b _038054A0 + b _038054B8 + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038054DC + b _038054F8 + b _03805514 + b _03805530 + b _03805568 + b _038055A0 + b _038055D8 + b _038055F4 + b _03805610 + b _0380562C + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _038057BC + b _03805648 + b _03805664 + b _03805688 + b _038056A4 + b _038056DC + b _03805714 + b _0380574C + b _03805768 + b _03805784 + b _038057A0 +_038054A0: + bl RTC_Reset + str r7, [r9, #468] ;@ 0x1d4 + mov r0, r7 + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038054B8: + ldrh r0, [r6] + mov r0, r0, lsl #30 + mov r0, r0, lsr #31 + bl RTC_SetHourFormat + str r7, [r9, #468] ;@ 0x1d4 + mov r0, r8 + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038054DC: + mov r0, r6 + bl RTC_ReadDateTime + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp] + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038054F8: + mov r0, r6 + bl RTC_ReadDate + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #4] + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805514: + add r0, r6, #4 + bl RTC_ReadTime + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #8] + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805530: + mov r0, r5 + bl RTC_ReadPulse + cmp r0, #0 + bne _03805554 + str r7, [r9, #468] ;@ 0x1d4 + mov r0, sl + mov r1, r4 + bl FUN_038057D8 + b _038053D4 +_03805554: + str r7, [r9, #468] ;@ 0x1d4 + mov r0, sl + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805568: + mov r0, r5 + bl RTC_ReadAlarm1 + cmp r0, #0 + bne _0380558C + str r7, [r9, #468] ;@ 0x1d4 + mov r0, fp + mov r1, r4 + bl FUN_038057D8 + b _038053D4 +_0380558C: + str r7, [r9, #468] ;@ 0x1d4 + mov r0, fp + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038055A0: + mov r0, r5 + bl RTC_ReadAlarm2 + cmp r0, #0 + bne _038055C4 + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #12] + mov r1, r4 + bl FUN_038057D8 + b _038053D4 +_038055C4: + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #12] + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038055D8: + mov r0, r6 + bl RTC_ReadStatus1 + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #16] + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038055F4: + add r0, r6, #2 + bl RTC_ReadStatus2 + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #20] + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805610: + add r0, r6, #4 + bl RTC_ReadAdjust + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #24] + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_0380562C: + add r0, r6, #4 + bl RTC_ReadFree + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #28] + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805648: + mov r0, r6 + bl RTC_WriteDateTime + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #32] + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805664: + add r0, r6, #4 + bl RTC_ReadTime + mov r0, r6 + bl RTC_WriteDateTime + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #36] ;@ 0x24 + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805688: + add r0, r6, #4 + bl RTC_WriteTime + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #40] ;@ 0x28 + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038056A4: + mov r0, r5 + bl RTC_WritePulse + cmp r0, #0 + bne _038056C8 + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #44] ;@ 0x2c + mov r1, r4 + bl FUN_038057D8 + b _038053D4 +_038056C8: + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #44] ;@ 0x2c + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038056DC: + mov r0, r5 + bl RTC_WriteAlarm1 + cmp r0, #0 + bne _03805700 + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #48] ;@ 0x30 + mov r1, r4 + bl FUN_038057D8 + b _038053D4 +_03805700: + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #48] ;@ 0x30 + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805714: + mov r0, r5 + bl RTC_WriteAlarm2 + cmp r0, #0 + bne _03805738 + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #52] ;@ 0x34 + mov r1, r4 + bl FUN_038057D8 + b _038053D4 +_03805738: + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #52] ;@ 0x34 + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_0380574C: + mov r0, r6 + bl RTC_WriteStatus1 + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #56] ;@ 0x38 + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805768: + add r0, r6, #2 + bl RTC_WriteStatus2 + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #60] ;@ 0x3c + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_03805784: + add r0, r6, #4 + bl RTC_WriteAdjust + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #64] ;@ 0x40 + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038057A0: + add r0, r6, #4 + bl RTC_WriteFree + str r7, [r9, #468] ;@ 0x1d4 + ldr r0, [sp, #68] ;@ 0x44 + mov r1, r7 + bl FUN_038057D8 + b _038053D4 +_038057BC: + str r7, [r9, #468] ;@ 0x1d4 + mov r1, r8 + bl FUN_038057D8 + b _038053D4 +_038057CC: .word 0x027FFDE8 +_038057D0: .word _0380A03C +_038057D4: .word _0380A13C + + arm_func_start FUN_038057D8 +FUN_038057D8: ;@ 0x038057D8 + stmdb sp!, {r4, r5, r6, lr} + mov r0, r0, lsl #8 + and r0, r0, #32512 ;@ 0x7f00 + orr r2, r0, #32768 ;@ 0x8000 + and r0, r1, #255 ;@ 0xff + orr r6, r2, r0 + mov r5, #5 + mov r4, #0 +_038057F8: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _038057F8 + ldmia sp!, {r4, r5, r6, lr} + bx lr + + arm_func_start FUN_03805818 +FUN_03805818: ;@ 0x03805818 + stmdb sp!, {r4, lr} + cmp r2, #0 + bne _03805944 + and r0, r1, #32512 ;@ 0x7f00 + mov r0, r0, lsl #8 + mov r4, r0, lsr #16 + cmp r4, #41 ;@ 0x29 + addls pc, pc, r4, lsl #2 + b _03805938 + b _038058E4 + b _038058E4 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _03805938 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 + b _038058E4 +_038058E4: + ldr r0, _0380594C ;@ =_0380A03C + ldr r1, [r0, #468] ;@ 0x1d4 + cmp r1, #0 + beq _03805904 + mov r0, r4 + mov r1, #3 + bl FUN_038057D8 + b _03805944 +_03805904: + mov r1, #1 + str r1, [r0, #468] ;@ 0x1d4 + ldr r1, _03805950 ;@ =_0380A13C + strh r4, [r1, #216] ;@ 0xd8 + mov r1, #0 + mov r2, r1 + bl OS_SendMessage + cmp r0, #0 + bne _03805944 + mov r0, r4 + mov r1, #4 + bl FUN_038057D8 + b _03805944 +_03805938: + mov r0, r4 + mov r1, #1 + bl FUN_038057D8 +_03805944: + ldmia sp!, {r4, lr} + bx lr +_0380594C: .word _0380A03C +_03805950: .word _0380A13C + + arm_func_start RTC_Init +RTC_Init: ;@ 0x03805954 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + ldr r0, _03805A28 ;@ =_0380A038 + ldrh r1, [r0] + cmp r1, #0 + bne _03805A1C + mov r1, #1 + strh r1, [r0] + ldr r0, _03805A2C ;@ =_0380A03C + str r1, [r0, #468] ;@ 0x1d4 + bl FUN_03805158 + mov r1, #0 + ldr r0, _03805A2C ;@ =_0380A03C + str r1, [r0, #468] ;@ 0x1d4 + bl PXI_Init + mov r0, #5 + ldr r1, _03805A30 ;@ =FUN_03805818 + bl PXI_SetFifoRecvCallback + ldr r0, _03805A2C ;@ =_0380A03C + ldr r1, _03805A34 ;@ =_0380A05C + mov r2, #4 + bl OS_InitMessageQueue + mov r0, #256 ;@ 0x100 + str r0, [sp] + str r4, [sp, #4] + ldr r0, _03805A38 ;@ =_0380A06C + ldr r1, _03805A3C ;@ =FUN_0380531C + mov r2, #0 + ldr r3, _03805A40 ;@ =_0380A210 + bl OS_CreateThread + ldr r0, _03805A38 ;@ =_0380A06C + bl OS_WakeupThreadDirect + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #64 ;@ 0x40 + mov r1, #0 + bl EXIi_SetBitRcnt0L + mov r0, #256 ;@ 0x100 + mov r1, r0 + bl EXIi_SetBitRcnt0L + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #128 ;@ 0x80 + ldr r1, _03805A44 ;@ =FUN_0380528C + bl OS_SetIrqFunction + mov r0, #128 ;@ 0x80 + bl OS_EnableIrqMask + mov r0, r4 + bl OS_RestoreInterrupts +_03805A1C: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03805A28: .word _0380A038 +_03805A2C: .word _0380A03C +_03805A30: .word FUN_03805818 +_03805A34: .word _0380A05C +_03805A38: .word _0380A06C +_03805A3C: .word FUN_0380531C +_03805A40: .word _0380A210 +_03805A44: .word FUN_0380528C + + arm_func_start FUN_03805A48 +FUN_03805A48: ;@ 0x03805A48 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl RTCi_GpioStart + mov r0, r7 + mov r1, r6 + bl RTCi_GpioSendCommand + cmp r7, #6 + beq _03805A90 + cmp r7, #134 ;@ 0x86 + bne _03805A9C + mov r0, r5 + mov r1, r4 + bl RTCi_GpioReceiveData + b _03805A9C +_03805A90: + mov r0, r5 + mov r1, r4 + bl RTCi_GpioSendData +_03805A9C: + bl RTCi_GpioEnd + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr + + arm_func_start FUN_03805AAC +FUN_03805AAC: ;@ 0x03805AAC + ldr r2, [r0] + mov r1, r2, lsl #18 + mov r3, r1, lsr #26 + cmp r3, #35 ;@ 0x23 + addls pc, pc, r3, lsl #2 + b _03805BA8 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B54 + b _03805B78 + b _03805B78 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805B54 + b _03805B54 + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805BA8 + b _03805B9C + b _03805B9C + b _03805B9C + b _03805B9C +_03805B54: + mov r1, r2, lsl #17 + movs r1, r1, lsr #31 + bxeq lr + bic r2, r2, #16128 ;@ 0x3f00 + add r1, r3, #18 + and r1, r1, #63 ;@ 0x3f + orr r1, r2, r1, lsl #8 + str r1, [r0] + bx lr +_03805B78: + mov r1, r2, lsl #17 + movs r1, r1, lsr #31 + bxeq lr + bic r2, r2, #16128 ;@ 0x3f00 + add r1, r3, #24 + and r1, r1, #63 ;@ 0x3f + orr r1, r2, r1, lsl #8 + str r1, [r0] + bx lr +_03805B9C: + orr r1, r2, #16384 ;@ 0x4000 + str r1, [r0] + bx lr +_03805BA8: + ldr r1, [r0] + bic r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + ldr r1, [r0] + bic r1, r1, #16128 ;@ 0x3f00 + str r1, [r0] + bx lr + + arm_func_start FUN_03805BC4 +FUN_03805BC4: ;@ 0x03805BC4 + ldr r1, [r0] + mov r2, r1, lsl #18 + mov r2, r2, lsr #26 + cmp r2, #35 ;@ 0x23 + addls pc, pc, r2, lsl #2 + b _03805CD0 + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805C6C + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805C6C + b _03805C6C + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805C78 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CD0 + b _03805CA4 + b _03805CA4 + b _03805C78 + b _03805C78 +_03805C6C: + bic r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + bx lr +_03805C78: + orr r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + ldr r1, [r0] + bic r2, r1, #16128 ;@ 0x3f00 + mov r1, r1, lsl #18 + mov r1, r1, lsr #26 + sub r1, r1, #18 + and r1, r1, #63 ;@ 0x3f + orr r1, r2, r1, lsl #8 + str r1, [r0] + bx lr +_03805CA4: + orr r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + ldr r1, [r0] + bic r2, r1, #16128 ;@ 0x3f00 + mov r1, r1, lsl #18 + mov r1, r1, lsr #26 + sub r1, r1, #24 + and r1, r1, #63 ;@ 0x3f + orr r1, r2, r1, lsl #8 + str r1, [r0] + bx lr +_03805CD0: + ldr r1, [r0] + bic r1, r1, #16384 ;@ 0x4000 + str r1, [r0] + ldr r1, [r0] + bic r1, r1, #16128 ;@ 0x3f00 + str r1, [r0] + bx lr + + arm_func_start RTC_WriteFree +RTC_WriteFree: ;@ 0x03805CEC + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #112 ;@ 0x70 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadFree +RTC_ReadFree: ;@ 0x03805D18 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #112 ;@ 0x70 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteAdjust +RTC_WriteAdjust: ;@ 0x03805D44 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #48 ;@ 0x30 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadAdjust +RTC_ReadAdjust: ;@ 0x03805D70 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #48 ;@ 0x30 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteStatus2 +RTC_WriteStatus2: ;@ 0x03805D9C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #64 ;@ 0x40 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadStatus2 +RTC_ReadStatus2: ;@ 0x03805DC8 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #64 ;@ 0x40 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteStatus1 +RTC_WriteStatus1: ;@ 0x03805DF4 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #0 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadStatus1 +RTC_ReadStatus1: ;@ 0x03805E20 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #0 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteAlarm2 +RTC_WriteAlarm2: ;@ 0x03805E4C + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #25 + movs r0, r0, lsr #31 + moveq r0, #0 + beq _03805E8C + mov r0, #6 + mov r1, #80 ;@ 0x50 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #1 +_03805E8C: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadAlarm2 +RTC_ReadAlarm2: ;@ 0x03805E98 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #25 + movs r0, r0, lsr #31 + moveq r0, #0 + beq _03805ED8 + mov r0, #134 ;@ 0x86 + mov r1, #80 ;@ 0x50 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #1 +_03805ED8: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteAlarm1 +RTC_WriteAlarm1: ;@ 0x03805EE4 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #28 + mov r0, r0, lsr #28 + cmp r0, #4 + movne r0, #0 + bne _03805F28 + mov r0, #6 + mov r1, #16 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #1 +_03805F28: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadAlarm1 +RTC_ReadAlarm1: ;@ 0x03805F34 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #28 + mov r0, r0, lsr #28 + cmp r0, #4 + movne r0, #0 + bne _03805F78 + mov r0, #134 ;@ 0x86 + mov r1, #16 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #1 +_03805F78: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WritePulse +RTC_WritePulse: ;@ 0x03805F84 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #28 + mov r0, r0, lsr #28 + and r0, r0, #11 + cmp r0, #1 + movne r0, #0 + bne _03805FCC + mov r0, #6 + mov r1, #16 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + mov r0, #1 +_03805FCC: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadPulse +RTC_ReadPulse: ;@ 0x03805FD8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl RTC_ReadStatus2 + ldrh r0, [sp] + mov r0, r0, lsl #28 + mov r0, r0, lsr #28 + and r0, r0, #11 + cmp r0, #1 + movne r0, #0 + bne _03806020 + mov r0, #134 ;@ 0x86 + mov r1, #16 + mov r2, r4 + mov r3, #1 + bl FUN_03805A48 + mov r0, #1 +_03806020: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteTime +RTC_WriteTime: ;@ 0x0380602C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #96 ;@ 0x60 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadTime +RTC_ReadTime: ;@ 0x03806058 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #96 ;@ 0x60 + mov r2, r4 + mov r3, #3 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadDate +RTC_ReadDate: ;@ 0x03806084 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #32 + mov r2, r4 + mov r3, #4 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_WriteDateTime +RTC_WriteDateTime: ;@ 0x038060B0 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #6 + mov r1, #32 + mov r2, r4 + mov r3, #7 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_ReadDateTime +RTC_ReadDateTime: ;@ 0x038060DC + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + mov r0, #134 ;@ 0x86 + mov r1, #32 + mov r2, r4 + mov r3, #7 + bl FUN_03805A48 + ldmia sp!, {r4, lr} + bx lr + + arm_func_start RTC_SetHourFormat +RTC_SetHourFormat: ;@ 0x03806108 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #12 + mov r4, r0 + and r5, r4, #1 + mov r0, r5, lsl #16 + mov r0, r0, lsr #16 + cmp r0, #1 + bne _038061FC + add r0, sp, #0 + bl RTC_ReadStatus1 + ldrh r1, [sp] + mov r0, r1, lsl #30 + mov r2, r0, lsr #31 + mov r0, r5, lsl #16 + cmp r2, r0, lsr #16 + beq _038061FC + and r4, r4, #1 + bic r1, r1, #2 + mov r0, r4, lsl #16 + mov r0, r0, lsr #16 + and r0, r0, #1 + orr r0, r1, r0, lsl #1 + strh r0, [sp] + add r0, sp, #0 + bl RTC_WriteStatus1 + mov r0, #134 ;@ 0x86 + mov r1, #16 + add r2, sp, #4 + mov r3, #3 + bl FUN_03805A48 + mov r0, r4, lsl #16 + movs r0, r0, lsr #16 + bne _03806198 + add r0, sp, #4 + bl FUN_03805BC4 + b _038061A0 +_03806198: + add r0, sp, #4 + bl FUN_03805AAC +_038061A0: + mov r0, #6 + mov r1, #16 + add r2, sp, #4 + mov r3, #3 + bl FUN_03805A48 + mov r0, #134 ;@ 0x86 + mov r1, #80 ;@ 0x50 + add r2, sp, #4 + mov r3, #3 + bl FUN_03805A48 + mov r0, r5, lsl #16 + movs r0, r0, lsr #16 + bne _038061E0 + add r0, sp, #4 + bl FUN_03805BC4 + b _038061E8 +_038061E0: + add r0, sp, #4 + bl FUN_03805AAC +_038061E8: + mov r0, #6 + mov r1, #80 ;@ 0x50 + add r2, sp, #4 + mov r3, #3 + bl FUN_03805A48 +_038061FC: + add sp, sp, #12 + ldmia sp!, {r4, r5, lr} + bx lr + + arm_func_start RTC_Reset +RTC_Reset: ;@ 0x03806208 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #32768 ;@ 0x8000 + bl EXIi_SelectRcnt + ldrh r0, [sp] + bic r0, r0, #1 + orr r0, r0, #1 + strh r0, [sp] + mov r0, #6 + mov r1, #0 + add r2, sp, #0 + mov r3, #1 + bl FUN_03805A48 + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start RTCi_GpioStart +RTCi_GpioStart: ;@ 0x03806248 + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 + ldrh r0, [ip] + bic r0, r0, #119 ;@ 0x77 + orr r0, r0, #114 ;@ 0x72 + strh r0, [ip] + mov r3, #2 +_03806264: + subs r3, r3, #1 + bne _03806264 + bic r0, r0, #4 + orr r0, r0, #4 + strh r0, [ip] + mov r3, #2 +_0380627C: + subs r3, r3, #1 + bne _0380627C + bx lr + + arm_func_start RTCi_GpioEnd +RTCi_GpioEnd: ;@ 0x03806288 + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 + mov r3, #2 +_03806294: + subs r3, r3, #1 + bne _03806294 + ldrh r0, [ip] + bic r0, r0, #4 + orr r0, r0, #0 + strh r0, [ip] + mov r3, #2 +_038062B0: + subs r3, r3, #1 + bne _038062B0 + bx lr + + arm_func_start RTCi_GpioSendCommand +RTCi_GpioSendCommand: ;@ 0x038062BC + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 + orr r1, r0, r1 + ldrh r0, [ip] + bic r0, r0, #119 ;@ 0x77 + orr r0, r0, #116 ;@ 0x74 + mov r2, #0 +_038062D8: + bic r0, r0, #3 + orr r0, r0, #0 + mov r3, #1 + tst r3, r1, lsr r2 + movne r3, #1 + moveq r3, #0 + orr r0, r0, r3 + strh r0, [ip] + mov r3, #9 +_038062FC: + subs r3, r3, #1 + bne _038062FC + bic r0, r0, #2 + orr r0, r0, #2 + strh r0, [ip] + mov r3, #9 +_03806314: + subs r3, r3, #1 + bne _03806314 + add r2, r2, #1 + cmp r2, #8 + bne _038062D8 + bx lr + + arm_func_start RTCi_GpioSendData +RTCi_GpioSendData: ;@ 0x0380632C + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 +_03806334: + stmdb sp!, {r0, r1} + tst r0, #1 + ldreqh r1, [r0] + ldrneh r1, [r0, #-1] + movne r1, r1, lsr #8 + ldrh r0, [ip] + bic r0, r0, #119 ;@ 0x77 + orr r0, r0, #116 ;@ 0x74 + mov r2, #0 +_03806358: + bic r0, r0, #3 + orr r0, r0, #0 + mov r3, #1 + tst r3, r1, lsr r2 + movne r3, #1 + moveq r3, #0 + orr r0, r0, r3 + strh r0, [ip] + mov r3, #9 +_0380637C: + subs r3, r3, #1 + bne _0380637C + bic r0, r0, #2 + orr r0, r0, #2 + strh r0, [ip] + mov r3, #9 +_03806394: + subs r3, r3, #1 + bne _03806394 + add r2, r2, #1 + cmp r2, #8 + bne _03806358 + ldmia sp!, {r0, r1} + add r0, r0, #1 + subs r1, r1, #1 + bne _03806334 + bx lr + + arm_func_start RTCi_GpioReceiveData +RTCi_GpioReceiveData: ;@ 0x038063BC + mov ip, #67108864 ;@ 0x4000000 + add ip, ip, #312 ;@ 0x138 +_038063C4: + stmdb sp!, {r0, r1} + ldrh r0, [ip] + bic r0, r0, #119 ;@ 0x77 + orr r0, r0, #100 ;@ 0x64 + mov r2, #0 + mov r1, #0 +_038063DC: + bic r0, r0, #3 + orr r0, r0, #0 + strh r0, [ip] + mov r3, #9 +_038063EC: + subs r3, r3, #1 + bne _038063EC + ldrh r0, [ip] + and r3, r0, #1 + cmp r3, #1 + moveq r3, #128 ;@ 0x80 + movne r3, #0 + orr r2, r3, r2, lsr #1 + bic r0, r0, #2 + orr r0, r0, #2 + strh r0, [ip] + mov r3, #9 +_0380641C: + subs r3, r3, #1 + bne _0380641C + add r1, r1, #1 + cmp r1, #8 + bne _038063DC + ldmia sp!, {r0, r1} + tst r0, #1 + beq _03806454 + ldrh r3, [r0, #-1] + bic r3, r3, #65280 ;@ 0xff00 + mov r2, r2, lsl #8 + orr r3, r2, r3 + strh r3, [r0, #-1] + b _03806464 +_03806454: + ldrh r3, [r0] + bic r3, r3, #255 ;@ 0xff + orr r3, r3, r2 + strh r3, [r0] +_03806464: + add r0, r0, #1 + subs r1, r1, #1 + bne _038063C4 + bx lr + + arm_func_start FUN_03806474 +FUN_03806474: ;@ 0x03806474 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r4, _0380665C ;@ =wmspW + ldr r0, _03806660 ;@ =_0601A960 + ldr r0, [r0, #1356] ;@ 0x54c + cmp r0, #0 + beq _038064B0 + add r0, r4, #4096 ;@ 0x1000 + ldr r0, [r0, #1356] ;@ 0x54c + ldr r0, [r0] + ldrh r0, [r0] + cmp r0, #0 + beq _038064B0 + bl FUN_03806668 + bl FUN_03806670 +_038064B0: + add r0, r4, #136 ;@ 0x88 + add r1, sp, #0 + mov r2, #0 + bl OS_ReceiveMessage + cmp r0, #0 + beq _03806520 + add r0, r4, #4096 ;@ 0x1000 + ldr r0, [r0, #1356] ;@ 0x54c + cmp r0, #0 + beq _038064B0 + bl WMSP_GetBuffer4Callback2Wm9 + mov r5, r0 + mov r0, #0 + mov r1, r5 + mov r2, #256 ;@ 0x100 + bl MIi_CpuClear32 + ldr r0, [sp] + ldrh r0, [r0] + strh r0, [r5] + mov r0, #4 + strh r0, [r5, #2] + mov r0, r5 + bl WMSP_ReturnResult2Wm9 + ldr r1, [sp] + ldrh r0, [r1] + orr r0, r0, #32768 ;@ 0x8000 + strh r0, [r1] + b _038064B0 +_03806520: + bl FUN_03806678 + bl FUN_038068BC + cmp r0, #0 + beq _03806548 + add r0, r4, #136 ;@ 0x88 + mov r1, #0 + mov r2, #1 + bl OS_SendMessage + bl FUN_03806678 + bl OS_JoinThread +_03806548: + add r0, r4, #136 ;@ 0x88 + add r1, sp, #0 + mov r2, #0 + bl OS_ReceiveMessage + mov r6, r0 + add r0, r4, #88 ;@ 0x58 + add r1, sp, #0 + mov r2, #0 + bl OS_ReceiveMessage + mov r5, r0 + mov r0, r4 + add r1, sp, #0 + mov r2, #0 + bl OS_ReceiveMessage + orr r1, r6, r5 + orrs r0, r0, r1 + beq _03806590 + bl OS_Terminate +_03806590: + bl FUN_03806680 + add r7, r4, #40 ;@ 0x28 + add r6, sp, #0 + mov r5, #0 +_038065A0: + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl OS_ReceiveMessage + cmp r0, #0 + bne _038065A0 + bl FUN_03806688 + bl FUN_038068BC + cmp r0, #0 + beq _038065E0 + add r0, r4, #40 ;@ 0x28 + mov r1, #0 + mov r2, #1 + bl OS_SendMessage + bl FUN_03806688 + bl OS_JoinThread +_038065E0: + mov r0, #1 + bl PM_SetLEDPattern + mov r0, #1 + bl PMi_SetLED + add r0, r4, #4096 ;@ 0x1000 + ldr r0, [r0, #1356] ;@ 0x54c + cmp r0, #0 + beq _03806614 + ldr r1, [r0] + ldrh r0, [r1] + cmp r0, #0 + movne r0, #0 + strneh r0, [r1] +_03806614: + bl FUN_03806970 + mov r6, #15 + mov r5, #131072 ;@ 0x20000 + mov r4, #0 +_03806624: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _03806624 + bl OS_DisableInterrupts + mov r1, #1 + ldr r0, _03806664 ;@ =_0380A3F0 + strb r1, [r0] + bl OS_ExitThread + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_0380665C: .word wmspW +_03806660: .word _0601A960 +_03806664: .word _0380A3F0 + + arm_func_start FUN_03806668 +FUN_03806668: ;@ 0x03806668 + ldr pc, _0380666C ;@ =WMSP_CancelVAlarm +_0380666C: .word WMSP_CancelVAlarm + + arm_func_start FUN_03806670 +FUN_03806670: ;@ 0x03806670 + ldr pc, _03806674 ;@ =WMSP_CancelAllAlarms +_03806674: .word WMSP_CancelAllAlarms + + arm_func_start FUN_03806678 +FUN_03806678: ;@ 0x03806678 + ldr pc, _0380667C ;@ =WMSP_GetRequestThread +_0380667C: .word WMSP_GetRequestThread + + arm_func_start FUN_03806680 +FUN_03806680: ;@ 0x03806680 + ldr pc, _03806684 ;@ =WL_Terminate +_03806684: .word WL_Terminate + + arm_func_start FUN_03806688 +FUN_03806688: ;@ 0x03806688 + ldr pc, _0380668C ;@ =WMSP_GetIndicateThread +_0380668C: .word WMSP_GetIndicateThread + + arm_func_start FUN_03806690 +FUN_03806690: ;@ 0x03806690 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + bl OS_DisableInterrupts + mov r4, r0 + ldr r0, _03806738 ;@ =_0380A400 + bl FUN_038068BC + cmp r0, #0 + beq _038066C0 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0 + b _0380672C +_038066C0: + ldr r0, _0380673C ;@ =_0380A3F0 + ldrb r1, [r0] + cmp r1, #3 + beq _038066E0 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0 + b _0380672C +_038066E0: + mov r1, #4 + strb r1, [r0] + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #10 + ldr r1, _03806740 ;@ =FUN_03806920 + bl PXI_SetFifoRecvCallback + mov r0, #1024 ;@ 0x400 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + ldr r0, _03806738 ;@ =_0380A400 + ldr r1, _03806744 ;@ =FUN_03806474 + mov r2, #0 + ldr r3, _03806748 ;@ =_0380AA64 + bl OS_CreateThread + ldr r0, _03806738 ;@ =_0380A400 + bl OS_WakeupThreadDirect + mov r0, #1 +_0380672C: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03806738: .word _0380A400 +_0380673C: .word _0380A3F0 +_03806740: .word FUN_03806920 +_03806744: .word FUN_03806474 +_03806748: .word _0380AA64 + + arm_func_start FUN_0380674C +FUN_0380674C: ;@ 0x0380674C + stmdb sp!, {r4, r5, r6, lr} + bl FUN_038069B0 + ldr r0, _038067A0 ;@ =_0380A3F8 + ldr r0, [r0] + bl FUN_038069EC + mov r6, #15 + mov r5, #65536 ;@ 0x10000 + mov r4, #0 +_0380676C: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _0380676C + bl OS_DisableInterrupts + mov r1, #3 + ldr r0, _038067A4 ;@ =_0380A3F0 + strb r1, [r0] + bl OS_ExitThread + ldmia sp!, {r4, r5, r6, lr} + bx lr +_038067A0: .word _0380A3F8 +_038067A4: .word _0380A3F0 + + arm_func_start FUN_038067A8 +FUN_038067A8: ;@ 0x038067A8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + bl OS_DisableInterrupts + mov r4, r0 + ldr r0, _03806844 ;@ =_0380A400 + bl FUN_038068BC + cmp r0, #0 + beq _038067D8 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0 + b _03806838 +_038067D8: + ldr r0, _03806848 ;@ =_0380A3F0 + ldrb r1, [r0] + cmp r1, #1 + beq _038067F8 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0 + b _03806838 +_038067F8: + mov r1, #2 + strb r1, [r0] + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #1024 ;@ 0x400 + str r0, [sp] + mov r0, #10 + str r0, [sp, #4] + ldr r0, _03806844 ;@ =_0380A400 + ldr r1, _0380684C ;@ =FUN_0380674C + mov r2, #0 + ldr r3, _03806850 ;@ =_0380AA64 + bl OS_CreateThread + ldr r0, _03806844 ;@ =_0380A400 + bl OS_WakeupThreadDirect + mov r0, #1 +_03806838: + add sp, sp, #8 + ldmia sp!, {r4, lr} + bx lr +_03806844: .word _0380A400 +_03806848: .word _0380A3F0 +_0380684C: .word FUN_0380674C +_03806850: .word _0380AA64 + + arm_func_start FUN_03806854 +FUN_03806854: ;@ 0x03806854 + stmdb sp!, {r4, lr} + mov r4, r1 + cmp r4, #65536 ;@ 0x10000 + beq _03806870 + cmp r4, #131072 ;@ 0x20000 + beq _03806884 + b _03806898 +_03806870: + bl FUN_038067A8 + cmp r0, #0 + bne _038068B4 + orr r4, r4, #5 + b _0380689C +_03806884: + bl FUN_03806690 + cmp r0, #0 + bne _038068B4 + orr r4, r4, #5 + b _0380689C +_03806898: + orr r4, r4, #7 +_0380689C: + mov r0, #15 + mov r1, r4 + mov r2, #0 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _0380689C +_038068B4: + ldmia sp!, {r4, lr} + bx lr + + arm_func_start FUN_038068BC +FUN_038068BC: ;@ 0x038068BC + cmp r0, #0 + moveq r0, #0 + bxeq lr + ldr r1, _0380691C ;@ =OSi_ThreadInfo + ldr r1, [r1, #8] + b _0380690C +_038068D4: + cmp r1, r0 + bne _03806908 + ldr r0, [r0, #72] ;@ 0x48 + cmp r0, #0 + beq _038068F8 + cmp r0, #1 + beq _038068F8 + cmp r0, #2 + b _03806900 +_038068F8: + mov r0, #1 + bx lr +_03806900: + mov r0, #0 + bx lr +_03806908: + ldr r1, [r1, #76] ;@ 0x4c +_0380690C: + cmp r1, #0 + bne _038068D4 + mov r0, #0 + bx lr +_0380691C: .word OSi_ThreadInfo + + arm_func_start FUN_03806920 +FUN_03806920: ;@ 0x03806920 + stmdb sp!, {r4, r5, r6, lr} + movs r6, r1 + ldrh r4, [r6] + beq _03806968 + mov r0, #0 + mov r2, #256 ;@ 0x100 + bl MIi_CpuClear32 + strh r4, [r6] + mov r0, #4 + strh r0, [r6, #2] + mov r5, #10 + mov r4, #0 +_03806950: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _03806950 +_03806968: + ldmia sp!, {r4, r5, r6, lr} + bx lr + + arm_func_start FUN_03806970 +FUN_03806970: ;@ 0x03806970 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _038069A8 ;@ =_0380A3F4 + ldr r0, [r0] + cmp r0, #0 + beq _0380699C + mov r0, #0 + mov r1, #100663296 ;@ 0x6000000 + ldr r2, _038069AC ;@ =_0380A3FC + ldr r2, [r2] + bl MIi_CpuClearFast +_0380699C: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038069A8: .word _0380A3F4 +_038069AC: .word _0380A3FC + + arm_func_start FUN_038069B0 +FUN_038069B0: ;@ 0x038069B0 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _038069E4 ;@ =_0380A3F4 + ldr r0, [r0] + cmp r0, #0 + beq _038069D8 + mov r1, #100663296 ;@ 0x6000000 + ldr r2, _038069E8 ;@ =_0380A3FC + ldr r2, [r2] + bl MIi_CpuCopyFast +_038069D8: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038069E4: .word _0380A3F4 +_038069E8: .word _0380A3FC + + arm_func_start FUN_038069EC +FUN_038069EC: ;@ 0x038069EC + stmfd sp!, {lr} + sub sp, sp, #84 ;@ 0x54 + ldr r1, _03806A84 ;@ =_0380B064 + str r1, [sp] + ldr r1, _03806A88 ;@ =_0380B064 + str r1, [sp, #4] + mov r1, #1536 ;@ 0x600 + str r1, [sp, #8] + mov r3, #4 + str r3, [sp, #12] + mov r1, #0 + str r1, [sp, #32] + mov r2, #8 + str r2, [sp, #36] ;@ 0x24 + str r0, [sp, #40] ;@ 0x28 + ldr r0, _03806A8C ;@ =_0380A4A4 + str r0, [sp, #44] ;@ 0x2c + mov r0, #448 ;@ 0x1c0 + str r0, [sp, #48] ;@ 0x30 + mov r1, #3 + str r1, [sp, #52] ;@ 0x34 + mov r0, #64 ;@ 0x40 + str r0, [sp, #28] + str r1, [sp, #60] ;@ 0x3c + str r3, [sp, #76] ;@ 0x4c + mov r0, #5 + str r0, [sp, #68] ;@ 0x44 + mov r0, #7 + str r0, [sp, #56] ;@ 0x38 + str r2, [sp, #72] ;@ 0x48 + mov r0, #9 + str r0, [sp, #64] ;@ 0x40 + add r0, sp, #0 + add r1, sp, #52 ;@ 0x34 + bl FUN_03806A90 + add sp, sp, #84 ;@ 0x54 + ldmia sp!, {lr} + bx lr +_03806A84: .word _0380B064 +_03806A88: .word _0380B064 +_03806A8C: .word _0380A4A4 + + arm_func_start FUN_03806A90 +FUN_03806A90: ;@ 0x03806A90 + ldr pc, _03806A94 ;@ =WM_sp_init +_03806A94: .word WM_sp_init + + arm_func_start WVR_Shutdown +WVR_Shutdown: ;@ 0x03806A98 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r1, _03806ACC ;@ =0x04000304 + ldrh r0, [r1] + bic r0, r0, #2 + strh r0, [r1] + mov r0, #1 + bl PM_SetLEDPattern + mov r0, #1 + bl PMi_SetLED + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03806ACC: .word 0x04000304 + + arm_func_start WVR_Init +WVR_Init: ;@ 0x03806AD0 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r1, _03806B20 ;@ =_0380A3F8 + str r0, [r1] + mov r1, #1 + ldr r0, _03806B24 ;@ =_0380A3F0 + strb r1, [r0] + ldr r0, _03806B28 ;@ =_0380A400 + mov r1, #0 + mov r2, #164 ;@ 0xa4 + bl MI_CpuFill8 + mov r0, #15 + ldr r1, _03806B2C ;@ =FUN_03806854 + bl PXI_SetFifoRecvCallback + mov r0, #10 + ldr r1, _03806B30 ;@ =FUN_03806920 + bl PXI_SetFifoRecvCallback + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03806B20: .word _0380A3F8 +_03806B24: .word _0380A3F0 +_03806B28: .word _0380A400 +_03806B2C: .word FUN_03806854 +_03806B30: .word FUN_03806920 + + arm_func_start MATH_CountPopulation +MATH_CountPopulation: ; 0x03806B34 + ldr r1, _03806B6C ;@ =0x55555555 + and r1, r1, r0, lsr #1 + sub r2, r0, r1 + ldr r0, _03806B70 ;@ =0x33333333 + and r1, r2, r0 + and r0, r0, r2, lsr #2 + add r0, r1, r0 + add r1, r0, r0, lsr #4 + ldr r0, _03806B74 ;@ =0x0F0F0F0F + and r0, r1, r0 + add r0, r0, r0, lsr #8 + add r0, r0, r0, lsr #16 + and r0, r0, #255 ;@ 0xff + bx lr +_03806B6C: .word 0x55555555 +_03806B70: .word 0x33333333 +_03806B74: .word 0x0F0F0F0F + + arm_func_start _ll_udiv +_ll_udiv: ;@ 0x03806B78 + stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} + mov r4, #0 + b _03806B8C + + arm_func_start _ull_mod +_ull_mod: ;@ 0x03806B84 + stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} + mov r4, #1 +_03806B8C: + orrs r5, r3, r2 + bne _03806B9C + ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} + bx lr +_03806B9C: + orrs r5, r1, r3 + bne _03806C44 + mov r1, r2 + bl _u32_div_not_0_f + cmp r4, #0 + movne r0, r1 + mov r1, #0 + ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} + bx lr + + arm_func_start _ll_mod +_ll_mod: ;@ 0x03806BC0 + stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} + mov r4, r1 + orr r4, r4, #1 + b _03806BE0 + + arm_func_start _ll_sdiv +_ll_sdiv: ;@ 0x03806BD0 + stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} + eor r4, r1, r3 + mov r4, r4, asr #1 + mov r4, r4, lsl #1 +_03806BE0: + orrs r5, r3, r2 + bne _03806BF0 + ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} + bx lr +_03806BF0: + mov r5, r0, lsr #31 + add r5, r5, r1 + mov r6, r2, lsr #31 + add r6, r6, r3 + orrs r6, r5, r6 + bne _03806C24 + mov r1, r2 + bl _s32_div_f + ands r4, r4, #1 + movne r0, r1 + mov r1, r0, asr #31 + ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} + bx lr +_03806C24: + cmp r1, #0 + bge _03806C34 + rsbs r0, r0, #0 + rsc r1, r1, #0 +_03806C34: + cmp r3, #0 + bge _03806C44 + rsbs r2, r2, #0 + rsc r3, r3, #0 +_03806C44: + orrs r5, r1, r0 + beq _03806D68 + mov r5, #0 + mov r6, #1 + cmp r3, #0 + bmi _03806C70 +_03806C5C: + add r5, r5, #1 + adds r2, r2, r2 + adcs r3, r3, r3 + bpl _03806C5C + add r6, r6, r5 +_03806C70: + cmp r1, #0 + blt _03806C90 +_03806C78: + cmp r6, #1 + beq _03806C90 + sub r6, r6, #1 + adds r0, r0, r0 + adcs r1, r1, r1 + bpl _03806C78 +_03806C90: + mov r7, #0 + mov ip, #0 + mov fp, #0 + b _03806CB8 +_03806CA0: + orr ip, ip, #1 + subs r6, r6, #1 + beq _03806D10 + adds r0, r0, r0 + adcs r1, r1, r1 + adcs r7, r7, r7 +_03806CB8: + subs r0, r0, r2 + sbcs r1, r1, r3 + sbcs r7, r7, #0 + adds ip, ip, ip + adc fp, fp, fp + cmp r7, #0 + bge _03806CA0 +_03806CD4: + subs r6, r6, #1 + beq _03806D08 + adds r0, r0, r0 + adcs r1, r1, r1 + adc r7, r7, r7 + adds r0, r0, r2 + adcs r1, r1, r3 + adc r7, r7, #0 + adds ip, ip, ip + adc fp, fp, fp + cmp r7, #0 + bge _03806CA0 + b _03806CD4 +_03806D08: + adds r0, r0, r2 + adc r1, r1, r3 +_03806D10: + ands r7, r4, #1 + moveq r0, ip + moveq r1, fp + beq _03806D48 + subs r7, r5, #32 + movge r0, r1, lsr r7 + bge _03806D6C + rsb r7, r5, #32 + mov r0, r0, lsr r5 + orr r0, r0, r1, lsl r7 + mov r1, r1, lsr r5 + b _03806D48 + mov r0, r1, lsr r7 + mov r1, #0 +_03806D48: + cmp r4, #0 + blt _03806D58 + ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} + bx lr +_03806D58: + rsbs r0, r0, #0 + rsc r1, r1, #0 + ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} + bx lr +_03806D68: + mov r0, #0 +_03806D6C: + mov r1, #0 + cmp r4, #0 + blt _03806D58 + ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} + bx lr + + arm_func_start _s32_div_f +_s32_div_f: ;@ 0x03806D80 + eor ip, r0, r1 + and ip, ip, #-2147483648 ;@ 0x80000000 + cmp r0, #0 + rsblt r0, r0, #0 + addlt ip, ip, #1 + cmp r1, #0 + rsblt r1, r1, #0 + beq _03806F78 + cmp r0, r1 + movcc r1, r0 + movcc r0, #0 + bcc _03806F78 + mov r2, #28 + mov r3, r0, lsr #4 + cmp r1, r3, lsr #12 + suble r2, r2, #16 + movle r3, r3, lsr #16 + cmp r1, r3, lsr #4 + suble r2, r2, #8 + movle r3, r3, lsr #8 + cmp r1, r3 + suble r2, r2, #4 + movle r3, r3, lsr #4 + mov r0, r0, lsl r2 + rsb r1, r1, #0 + adds r0, r0, r0 + add r2, r2, r2, lsl #1 + add pc, pc, r2, lsl #2 + nop ;@ (mov r0, r0) + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + mov r1, r3 +_03806F78: + ands r3, ip, #-2147483648 ;@ 0x80000000 + rsbne r0, r0, #0 + ands r3, ip, #1 + rsbne r1, r1, #0 + bx lr + + arm_func_start _u32_div_f +_u32_div_f: ;@ 0x03806F8C + cmp r1, #0 + bxeq lr + + arm_func_start _u32_div_not_0_f +_u32_div_not_0_f: ;@ 0x03806F94 + cmp r0, r1 + movcc r1, r0 + movcc r0, #0 + bxcc lr + mov r2, #28 + mov r3, r0, lsr #4 + cmp r1, r3, lsr #12 + suble r2, r2, #16 + movle r3, r3, lsr #16 + cmp r1, r3, lsr #4 + suble r2, r2, #8 + movle r3, r3, lsr #8 + cmp r1, r3 + suble r2, r2, #4 + movle r3, r3, lsr #4 + mov r0, r0, lsl r2 + rsb r1, r1, #0 + adds r0, r0, r0 + add r2, r2, r2, lsl #1 + add pc, pc, r2, lsl #2 + nop ;@ (mov r0, r0) + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #1 + subcc r3, r3, r1 + adcs r0, r0, r0 + mov r1, r3 + bx lr + + .global _03807170 +_03807170: + .byte 0 + .byte 6 + .byte 12 + .byte 19 + .byte 25 + .byte 31 + .byte 37 + .byte 43 + .byte 49 + .byte 54 + .byte 60 + .byte 65 + .byte 71 + .byte 76 + .byte 81 + .byte 85 + .byte 90 + .byte 94 + .byte 98 + .byte 102 + .byte 106 + .byte 109 + .byte 112 + .byte 115 + .byte 117 + .byte 120 + .byte 122 + .byte 123 + .byte 125 + .byte 126 + .byte 126 + .byte 127 + .byte 127 + .byte 0 + .byte 0 + .byte 0 + + .global SNDi_DecibelSquareTable +SNDi_DecibelSquareTable: + .short -32768 + .short -722 + .short -721 + .short -651 + .short -601 + .short -562 + .short -530 + .short -503 + .short -480 + .short -460 + .short -442 + .short -425 + .short -410 + .short -396 + .short -383 + .short -371 + .short -360 + .short -349 + .short -339 + .short -330 + .short -321 + .short -313 + .short -305 + .short -297 + .short -289 + .short -282 + .short -276 + .short -269 + .short -263 + .short -257 + .short -251 + .short -245 + .short -239 + .short -234 + .short -229 + .short -224 + .short -219 + .short -214 + .short -210 + .short -205 + .short -201 + .short -196 + .short -192 + .short -188 + .short -184 + .short -180 + .short -176 + .short -173 + .short -169 + .short -165 + .short -162 + .short -158 + .short -155 + .short -152 + .short -149 + .short -145 + .short -142 + .short -139 + .short -136 + .short -133 + .short -130 + .short -127 + .short -125 + .short -122 + .short -119 + .short -116 + .short -114 + .short -111 + .short -109 + .short -106 + .short -103 + .short -101 + .short -99 + .short -96 + .short -94 + .short -91 + .short -89 + .short -87 + .short -85 + .short -82 + .short -80 + .short -78 + .short -76 + .short -74 + .short -72 + .short -70 + .short -68 + .short -66 + .short -64 + .short -62 + .short -60 + .short -58 + .short -56 + .short -54 + .short -52 + .short -50 + .short -49 + .short -47 + .short -45 + .short -43 + .short -42 + .short -40 + .short -38 + .short -36 + .short -35 + .short -33 + .short -31 + .short -30 + .short -28 + .short -27 + .short -25 + .short -23 + .short -22 + .short -20 + .short -19 + .short -17 + .short -16 + .short -14 + .short -13 + .short -11 + .short -10 + .short -8 + .short -7 + .short -6 + .short -4 + .short -3 + .short -1 + .short 0 + + .global _03807294 +_03807294: + .byte 0 + .byte 1 + .byte 2 + .byte 4 + + .global _03807298 +_03807298: + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 2 + .byte 0 + .byte 3 + .byte 1 + .byte 8 + .byte 9 + .byte 10 + .byte 11 + .byte 14 + .byte 12 + .byte 15 + .byte 13 + + .global _038072A8 +_038072A8: + .byte 0 + .byte 1 + .byte 5 + .byte 14 + .byte 26 + .byte 38 + .byte 51 + .byte 63 + .byte 73 + .byte 84 + .byte 92 + .byte 100 + .byte 109 + .byte 116 + .byte 123 + .byte 127 + .byte 132 + .byte 137 + .byte 143 + .byte 0 + + .global _038072BC +_038072BC: + .word 0x000000C7 + + .global _038072C0 +_038072C0: + .word 0x00000006 + + .global _038072C4 +_038072C4: + .word 0x00000005 + + .global _038072C8 +_038072C8: + .word 0x00000040 + .word 0x00000006 + .word 0x01000000 + .word 0x00000018 + .word 0x00080000 + .word 0x00000013 + .word 0x00100000 + .word 0x00000014 + .word 0x00040000 + .word 0x00000012 + .word 0x00000008 + .word 0x00000003 + .word 0x00000010 + .word 0x00000004 + .word 0x00000020 + .word 0x00000005 + .word 0x00000100 + .word 0x00000008 + .word 0x00000200 + .word 0x00000009 + .word 0x00000400 + .word 0x0000000A + .word 0x00000800 + .word 0x0000000B + .word 0x00001000 + .word 0x0000000C + .word 0x00002000 + .word 0x0000000D + .word 0x00000002 + .word 0x00000001 + .word 0x00000004 + .word 0x00000002 + .word 0x00000001 + .word 0x00000000 + .word 0x00010000 + .word 0x00000010 + .word 0x00400000 + .word 0x00000016 + .word 0x00000080 + .word 0x00000007 + .word 0x00020000 + .word 0x00000011 + .word 0x00800000 + .word 0x00000017 + + arm_func_start FUN_03807378 +FUN_03807378: ;@ 0x03807378 + mov ip, #67108864 ;@ 0x4000000 + str ip, [ip, #520] ;@ 0x208 + ldr r1, _038073E0 ;@ =0x0380FFFC + mov r0, #0 + str r0, [r1] + ldr r1, _038073E4 ;@ =0x04000180 + mov r0, #256 ;@ 0x100 + strh r0, [r1] +_03807398: + ldrh r0, [r1] + and r0, r0, #15 + cmp r0, #1 + bne _03807398 + ldr r1, _038073E4 ;@ =0x04000180 + mov r0, #0 + strh r0, [r1] +_038073B4: + ldrh r0, [r1] + cmp r0, #1 + beq _038073B4 + ldr r3, _038073E8 ;@ =0x027FFE00 + ldr ip, [r3, #52] ;@ 0x34 + mov lr, ip + mov r0, #0 + mov r1, #0 + mov r2, #0 + mov r3, #0 + bx ip +_038073E0: .word 0x0380FFFC +_038073E4: .word 0x04000180 +_038073E8: .word 0x027FFE00 + + arm_func_start FUN_038073EC +FUN_038073EC: ;@ 0x038073EC + mov r1, #0 + ldr r0, _03807400 ;@ =0x04000208 + strh r1, [r0] + ldr ip, _03807404 ;@ =FUN_03807378 + bx ip +_03807400: .word 0x04000208 +_03807404: .word FUN_03807378 + + arm_func_start WMSP_GetAllowedChannel +WMSP_GetAllowedChannel: ;@ 0x03807408 + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + ldr r1, _03807530 ;@ =0x00001FFF + and r0, r0, r1 + mov r0, r0, lsl #16 + movs r6, r0, lsr #16 + moveq r0, #0 + beq _03807524 + mov r9, #0 + mov r0, #1 + b _03807444 +_03807434: + mov r1, r0, lsl r9 + ands r1, r6, r1 + bne _0380744C + add r9, r9, #1 +_03807444: + cmp r9, #16 + blt _03807434 +_0380744C: + mov sl, #15 + mov r0, #1 + b _03807468 +_03807458: + mov r1, r0, lsl sl + ands r1, r6, r1 + bne _03807470 + sub sl, sl, #1 +_03807468: + cmp sl, #0 + bne _03807458 +_03807470: + sub r5, sl, r9 + cmp r5, #5 + movlt r0, #1 + movlt r0, r0, lsl r9 + movlt r0, r0, lsl #16 + movlt r0, r0, lsr #16 + blt _03807524 + add r0, sl, r9 + mov r1, #2 + bl _s32_div_f + mov r8, r0 + mov r7, #0 + mov fp, #2 + mov r4, #1 + b _038074D4 +_038074AC: + mov r0, r7 + mov r1, fp + bl _s32_div_f + mov r0, r1, lsl #1 + sub r0, r0, #1 + mla r8, r7, r0, r8 + mov r0, r4, lsl r8 + ands r0, r6, r0 + bne _038074DC + add r7, r7, #1 +_038074D4: + cmp r7, r5 + blt _038074AC +_038074DC: + sub r0, sl, r8 + cmp r0, #5 + blt _038074F4 + sub r0, r8, r9 + cmp r0, #5 + bge _0380750C +_038074F4: + mov r0, #1 + mov r1, r0, lsl r9 + orr r0, r1, r0, lsl sl + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 + b _03807524 +_0380750C: + mov r1, #1 + mov r0, r1, lsl sl + orr r0, r0, r1, lsl r8 + orr r0, r0, r1, lsl r9 + mov r0, r0, lsl #16 + mov r0, r0, lsr #16 +_03807524: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_03807530: .word 0x00001FFF + + arm_func_start WMSP_GetBuffer4Callback2Wm9 +WMSP_GetBuffer4Callback2Wm9: ;@ 0x03807534 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r0, _03807584 ;@ =_0601AE88 + bl OS_LockMutex + mov r5, #256 ;@ 0x100 + ldr r4, _03807588 ;@ =0x027FFF96 + b _03807558 +_03807550: + mov r0, r5 + bl FUN_037F8CB4 +_03807558: + ldrh r0, [r4] + ands r1, r0, #1 + bne _03807550 + orr r0, r0, #1 + strh r0, [r4] + ldr r0, _0380758C ;@ =_0601A960 + ldr r0, [r0, #1356] ;@ 0x54c + ldr r0, [r0, #8] + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_03807584: .word _0601AE88 +_03807588: .word 0x027FFF96 +_0380758C: .word _0601A960 + + arm_func_start WMSP_ReturnResult2Wm9 +WMSP_ReturnResult2Wm9: ;@ 0x03807590 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, #256 ;@ 0x100 + mov r5, #10 + mov r4, #0 + b _038075B4 +_038075AC: + mov r0, r6 + bl FUN_037F8CB4 +_038075B4: + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + blt _038075AC + ldr r0, _038075E0 ;@ =_0601AE88 + bl OS_UnlockMutex + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_038075E0: .word _0601AE88 + .balign 2, 0 ; Don't pad with nop diff --git a/arm7/asm/wram_bss.s b/arm7/asm/wram_bss.s new file mode 100644 index 00000000..e342bf0c --- /dev/null +++ b/arm7/asm/wram_bss.s @@ -0,0 +1,203 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .bss + + .global _038099AC +_038099AC: ;0x038099AC + .space 0x038099B0 - 0x038099AC + + .global _038099B0 +_038099B0: ;0x038099B0 + .space 0x038099B8 - 0x038099B0 + + .global _038099B8 +_038099B8: ;0x038099B8 + .space 0x03809C5C - 0x038099B8 + + .global _03809C5C +_03809C5C: ;0x03809C5C + .space 0x03809C7C - 0x03809C5C + + .global _03809C7C +_03809C7C: ;0x03809C7C + .space 0x03809CBC - 0x03809C7C + + .global _03809CBC +_03809CBC: ;0x03809CBC + .space 0x03809CC0 - 0x03809CBC + + .global _03809CC0 +_03809CC0: ;0x03809CC0 + .space 0x03809E40 - 0x03809CC0 + + .global _03809E40 +_03809E40: ;0x03809E40 + .space 0x03809E4C - 0x03809E40 + + .global _03809E4C +_03809E4C: ;0x03809E4C + .space 0x03809E50 - 0x03809E4C + + .global _03809E50 +_03809E50: ;0x03809E50 + .space 0x03809E54 - 0x03809E50 + + .global _03809E54 +_03809E54: ;0x03809E54 + .space 0x03809E80 - 0x03809E54 + + .global _03809E80 +_03809E80: ;0x03809E80 + .space 0x03809F28 - 0x03809E80 + + .global _03809F28 +_03809F28: ;0x03809F28 + .space 0x03809F2C - 0x03809F28 + + .global PMi_KeyPattern +PMi_KeyPattern: ;0x03809F2C + .space 0x03809F30 - 0x03809F2C + + .global PMi_TriggerBL +PMi_TriggerBL: ;0x03809F30 + .space 0x03809F34 - 0x03809F30 + + .global PMi_Initialized +PMi_Initialized: ;0x03809F34 + .space 0x03809F38 - 0x03809F34 + + .global PMi_Work +PMi_Work: ;0x03809F38 + .space 0x03809F64 - 0x03809F38 + + .global _03809F64 +_03809F64: ;0x03809F64 + .space 0x03809F68 - 0x03809F64 + + .global PMi_BlinkPatternNo +PMi_BlinkPatternNo: ;0x03809F68 + .space 0x03809F6C - 0x03809F68 + + .global _03809F6C +_03809F6C: ;0x03809F6C + .space 0x03809FA8 - 0x03809F6C + + .global _03809FA8 +_03809FA8: ;0x03809FA8 + .space 0x03809FB8 - 0x03809FA8 + + .global CTRDGi_Work +CTRDGi_Work: ;0x03809FB8 + .space 0x03809FBC - 0x03809FB8 + + .global _03809FBC +_03809FBC: ;0x03809FBC + .space 0x03809FC0 - 0x03809FBC + + .global current_vib +current_vib: ;0x03809FC0 + .space 0x03809FC4 - 0x03809FC0 + + .global _03809FC4 +_03809FC4: ;0x03809FC4 + .space 0x03809FC8 - 0x03809FC4 + + .global _03809FC8 +_03809FC8: ;0x03809FC8 + .space 0x03809FCC - 0x03809FC8 + + .global _03809FCC +_03809FCC: ;0x03809FCC + .space 0x03809FD0 - 0x03809FCC + + .global _03809FD0 +_03809FD0: ;0x03809FD0 + .space 0x03809FD4 - 0x03809FD0 + + .global _03809FD4 +_03809FD4: ;0x03809FD4 + .space 0x03809FEC - 0x03809FD4 + + .global _03809FEC +_03809FEC: ;0x03809FEC + .space 0x0380A018 - 0x03809FEC + + .global _0380A018 +_0380A018: ;0x0380A018 + .space 0x0380A038 - 0x0380A018 + + .global _0380A038 +_0380A038: ;0x0380A038 + .space 0x0380A03C - 0x0380A038 + + .global _0380A03C +_0380A03C: ;0x0380A03C + .space 0x0380A05C - 0x0380A03C + + .global _0380A05C +_0380A05C: ;0x0380A05C + .space 0x0380A06C - 0x0380A05C + + .global _0380A06C +_0380A06C: ;0x0380A06C + .space 0x0380A13C - 0x0380A06C + + .global _0380A13C +_0380A13C: ;0x0380A13C + .space 0x0380A210 - 0x0380A13C + + .global _0380A210 +_0380A210: ;0x0380A210 + .space 0x0380A3F0 - 0x0380A210 + + .global _0380A3F0 +_0380A3F0: ;0x0380A3F0 + .space 0x0380A3F4 - 0x0380A3F0 + + .global _0380A3F4 +_0380A3F4: ;0x0380A3F4 + .space 0x0380A3F8 - 0x0380A3F4 + + .global _0380A3F8 +_0380A3F8: ;0x0380A3F8 + .space 0x0380A3FC - 0x0380A3F8 + + .global _0380A3FC +_0380A3FC: ;0x0380A3FC + .space 0x0380A400 - 0x0380A3FC + + .global _0380A400 +_0380A400: ;0x0380A400 + .space 0x0380A4A4 - 0x0380A400 + + .global _0380A4A4 +_0380A4A4: ;0x0380A4A4 + .space 0x0380AA64 - 0x0380A4A4 + + .global _0380AA64 +_0380AA64: ;0x0380AA64 + .space 0x0380B064 - 0x0380AA64 + + .global _0380B064 +_0380B064: ;0x0380B064 + .space 0x0380B764 - 0x0380B064 + + .global _0380B764 +_0380B764: ;0x0380B764 + .space 0x0380B808 - 0x0380B764 + + .global _0380B808 +_0380B808: ;0x0380B808 + .space 0x0380B8AC - 0x0380B808 + + .global _0380B8AC +_0380B8AC: ;0x0380B8AC + .space 0x0380B8D8 - 0x0380B8AC + + .global _0380B8D8 +_0380B8D8: ;0x0380B8D8 + .space 0x0380B904 - 0x0380B8D8 + + .global _0380B904 +_0380B904: ;0x0380B904 + .space 0x0380B92C - 0x0380B904 diff --git a/arm7/asm/wram_data.s b/arm7/asm/wram_data.s new file mode 100644 index 00000000..05fd5b66 --- /dev/null +++ b/arm7/asm/wram_data.s @@ -0,0 +1,56 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global PMi_LEDStatus +PMi_LEDStatus: + .word 0x00000001 + + .global PMi_BlinkPatternData +PMi_BlinkPatternData: + .word 0x00000000 + .word 0xAA000000 + .word 0x00010008 + .word 0x00000000 + .word 0xCC000000 + .word 0x00010008 + .word 0x00000000 + .word 0xE3800000 + .word 0x0001000C + .word 0x00000000 + .word 0xF0F00000 + .word 0x00010010 + .word 0x00000000 + .word 0xF83E0000 + .word 0x00010014 + .word 0x00000000 + .word 0xFC000000 + .word 0x0001000C + .word 0x00000000 + .word 0xFF000000 + .word 0x00010010 + .word 0x00000000 + .word 0xFFC00000 + .word 0x00010014 + .word 0x00000000 + .word 0xFF000000 + .word 0x00010020 + .word 0x00000000 + .word 0xFF00FF00 + .word 0x00010020 + .word 0x00000000 + .word 0xFFFFFF00 + .word 0x00010020 + .word 0x00000000 + .word 0xC3000000 + .word 0x00020028 + + .global _03807704 +_03807704: + .word 0x00000001 + + .global _03807708 +_03807708: + .word 0xFFFFFFFF + .balign 2, 0 ; Don't pad with nop diff --git a/arm7/global.inc b/arm7/global.inc index c3bad2c7..a732f7df 100644 --- a/arm7/global.inc +++ b/arm7/global.inc @@ -13,7 +13,23 @@ ; .itcm .extern WVR_ShelterExtWram -; .dtcm +; .wram +.extern CARDi_EraseBackupSectorCore +.extern CARDi_EraseChipCore +.extern CARDi_InitCommon +.extern CARDi_InitStatusRegister +.extern CARDi_OnFifoRecv +.extern CARDi_ProgramBackupCore +.extern CARDi_ReadBackupCore +.extern CARDi_ReadRomID +.extern CARDi_ReadRomIDCore +.extern CARDi_TaskThread +.extern CARDi_VerifyBackupCore +.extern CARDi_WriteBackupCore +.extern CARD_GetRomHeader +.extern CARD_Init +.extern CARD_InitPulledOutCallback +.extern FUN_03800E0C .extern OS_IrqHandler_ThreadSwitch .extern OSi_EnterTimerCallback .extern OSi_IrqVBlank -- cgit v1.2.3