diff options
-rw-r--r-- | arm7/arm7.lsf | 4 | ||||
-rw-r--r-- | arm7/asm/SPI_main.s | 481 | ||||
-rw-r--r-- | arm7/asm/SPI_mic.s | 852 | ||||
-rw-r--r-- | arm7/asm/SPI_pm.s | 847 | ||||
-rw-r--r-- | arm7/asm/SPI_tp.s | 861 | ||||
-rw-r--r-- | arm7/asm/wram2.s | 2888 | ||||
-rw-r--r-- | arm7/asm/wram_bss.s | 84 | ||||
-rw-r--r-- | arm7/asm/wram_data.s | 43 | ||||
-rw-r--r-- | arm7/global.inc | 22 |
9 files changed, 3067 insertions, 3015 deletions
diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf index 46486c4f..55e2a33a 100644 --- a/arm7/arm7.lsf +++ b/arm7/arm7.lsf @@ -63,6 +63,10 @@ Autoload WRAM Object CARD_fifo.o Object CARD_pullOut.o Object libsyscall.o + Object SPI_main.o + Object SPI_tp.o + Object SPI_pm.o + Object SPI_mic.o Object wram2.o Object wram_data.o Object wram_bss.o diff --git a/arm7/asm/SPI_main.s b/arm7/asm/SPI_main.s new file mode 100644 index 00000000..15229ce6 --- /dev/null +++ b/arm7/asm/SPI_main.s @@ -0,0 +1,481 @@ + .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 + + .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 diff --git a/arm7/asm/SPI_mic.s b/arm7/asm/SPI_mic.s new file mode 100644 index 00000000..0178468f --- /dev/null +++ b/arm7/asm/SPI_mic.s @@ -0,0 +1,852 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global _03809F6C +_03809F6C: ;0x03809F6C + .space 0x03809FA8 - 0x03809F6C + + .global _03809FA8 +_03809FA8: ;0x03809FA8 + .space 0x03809FB8 - 0x03809FA8 + + .section .text + + 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 diff --git a/arm7/asm/SPI_pm.s b/arm7/asm/SPI_pm.s new file mode 100644 index 00000000..1960a3cd --- /dev/null +++ b/arm7/asm/SPI_pm.s @@ -0,0 +1,847 @@ + .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 + + .section .bss + + .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 + + .section .text + + 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 diff --git a/arm7/asm/SPI_tp.s b/arm7/asm/SPI_tp.s new file mode 100644 index 00000000..2176bfce --- /dev/null +++ b/arm7/asm/SPI_tp.s @@ -0,0 +1,861 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .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 + + .section .text + + 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 diff --git a/arm7/asm/wram2.s b/arm7/asm/wram2.s index 57fd39e1..513bba1a 100644 --- a/arm7/asm/wram2.s +++ b/arm7/asm/wram2.s @@ -3,2894 +3,6 @@ .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} diff --git a/arm7/asm/wram_bss.s b/arm7/asm/wram_bss.s index e342bf0c..e4322f0a 100644 --- a/arm7/asm/wram_bss.s +++ b/arm7/asm/wram_bss.s @@ -2,90 +2,6 @@ .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 diff --git a/arm7/asm/wram_data.s b/arm7/asm/wram_data.s index 05fd5b66..6b7aa989 100644 --- a/arm7/asm/wram_data.s +++ b/arm7/asm/wram_data.s @@ -3,49 +3,6 @@ .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 diff --git a/arm7/global.inc b/arm7/global.inc index a732f7df..a90c17cb 100644 --- a/arm7/global.inc +++ b/arm7/global.inc @@ -222,13 +222,34 @@ .extern FUN_037FE918
.extern FUN_037FE968
.extern FUN_037FE9B8
+.extern SPIi_CheckEntry
+.extern SPIi_CheckException
+.extern SPIi_GetException
+.extern SPIi_ReleaseException
+.extern SPIi_ReturnResult
+.extern SPIi_SetEntry
.extern SPI_Init
+.extern FUN_03801660
+.extern FUN_038016A8
.extern PMi_ResetControl
.extern PMi_SetControl
+.extern PMi_SetLED
+.extern PM_AnalyzeCommand
+.extern PM_ExecuteProcess
+.extern PM_Init
.extern PM_SelfBlinkProc
+.extern MIC_AnalyzeCommand
+.extern MIC_ExecuteProcess
+.extern MIC_Init
+.extern TP_AnalyzeCommand
+.extern TP_ExecuteProcess
+.extern TP_Init
.extern CTRDG_CheckPullOut_Polling
.extern CTRDG_VibPulseEdgeUpdate
.extern CTRDG_Init
+.extern NVRAM_AnalyzeCommand
+.extern NVRAM_ExecuteProcess
+.extern NVRAM_Init
.extern NVRAM_ReadDataBytes
.extern RTC_Init
.extern WVR_Shutdown
@@ -310,6 +331,7 @@ .extern _038072BC
.extern _038072C0
.extern _038072C4
+.extern _038072C8
.extern SVC_CpuSet
.extern SVC_GetCRC16
.extern SVC_GetPitchTable
|