diff options
Diffstat (limited to 'arm7/asm/dtcm.s')
-rw-r--r-- | arm7/asm/dtcm.s | 2862 |
1 files changed, 0 insertions, 2862 deletions
diff --git a/arm7/asm/dtcm.s b/arm7/asm/dtcm.s index b639598d..a403919a 100644 --- a/arm7/asm/dtcm.s +++ b/arm7/asm/dtcm.s @@ -2,2868 +2,6 @@ .include "global.inc" .section .text - arm_func_start FUN_037F8000 -FUN_037F8000: ; 0x037F8000 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _037F8028 ; =PMi_Initialized - ldr r0, [r0] - cmp r0, #0 - beq _037F801C - bl PM_SelfBlinkProc -_037F801C: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037F8028: .word PMi_Initialized - - arm_func_start FUN_037F802C -FUN_037F802C: ; 0x037F802C - stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - sub sp, sp, #4 - mov sl, r0 - mov r8, #0 - bl FUN_037F81E8 - cmp r0, #0 - beq _037F80F8 - bl FUN_037F81C4 - mov r7, r0 - mov r9, r8 - mov r4, #1 - mov fp, #138 ; 0x8a - mov r5, #112 ; 0x70 -_037F8060: - add r6, sl, r9, lsl #8 - ldr r0, _037F81B4 ; =0x0000FFFF - mov r1, r6 - mov r2, r5 - bl FUN_037F81B8 - mov r2, r6 - ldrh r1, [r2, #114] ; 0x72 - cmp r0, r1 - bne _037F80E0 - ldrh r0, [r2, #112] ; 0x70 - cmp r0, #128 ; 0x80 - bcs _037F80E0 - ldr r0, _037F81B4 ; =0x0000FFFF - add r1, r6, #116 ; 0x74 - mov r2, fp - bl FUN_037F81B8 - mov r3, r6 - ldrh r1, [r3, #254] ; 0xfe - cmp r0, r1 - bne _037F80E0 - ldrh r2, [r3, #118] ; 0x76 - ldrb r0, [r3, #117] ; 0x75 - mov r1, r4, lsl r0 - ands r1, r1, r2 - beq _037F80E0 - ands r1, r7, r2 - ldrneh r1, [r6, #100] ; 0x64 - bicne r1, r1, #7 - andne r0, r0, #7 - orrne r0, r1, r0 - strneh r0, [r6, #100] ; 0x64 - orr r8, r8, r4, lsl r9 -_037F80E0: - add r0, r9, #1 - mov r0, r0, lsl #16 - mov r9, r0, lsr #16 - cmp r9, #2 - bcc _037F8060 - b _037F8158 -_037F80F8: - bl FUN_037F81C4 - cmp r0, #0 - movne r0, #3 - bne _037F81A8 - mov r7, r8 - mov r4, #1 - ldr r6, _037F81B4 ; =0x0000FFFF - mov r5, #112 ; 0x70 -_037F8118: - mov r0, r6 - add r1, sl, r7, lsl #8 - mov r2, r5 - bl FUN_037F81B8 - add r2, sl, r7, lsl #8 - ldrh r1, [r2, #114] ; 0x72 - cmp r0, r1 - bne _037F8144 - ldrh r0, [r2, #112] ; 0x70 - cmp r0, #128 ; 0x80 - orrcc r8, r8, r4, lsl r7 -_037F8144: - add r0, r7, #1 - mov r0, r0, lsl #16 - mov r7, r0, lsr #16 - cmp r7, #2 - bcc _037F8118 -_037F8158: - cmp r8, #1 - beq _037F8174 - cmp r8, #2 - beq _037F8174 - cmp r8, #3 - beq _037F817C - b _037F81A4 -_037F8174: - mov r0, r8 - b _037F81A8 -_037F817C: - ldrh r0, [sl, #112] ; 0x70 - add r0, r0, #1 - and r0, r0, #127 ; 0x7f - and r1, r0, #255 ; 0xff - add r0, sl, #256 ; 0x100 - ldrh r0, [r0, #112] ; 0x70 - cmp r1, r0 - moveq r0, #2 - movne r0, #1 - b _037F81A8 -_037F81A4: - mov r0, #0 -_037F81A8: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - bx lr -_037F81B4: .word 0x0000FFFF - - arm_func_start FUN_037F81B8 -FUN_037F81B8: ; 0x037F81B8 - ldr ip, _037F81C0 ; =SVC_GetCRC16 - bx ip -_037F81C0: .word SVC_GetCRC16 - - arm_func_start FUN_037F81C4 -FUN_037F81C4: ; 0x037F81C4 - mov r0, #0 - ldr r1, _037F81E4 ; =0x027FFE1D - ldrb r1, [r1] - cmp r1, #128 ; 0x80 - orreq r0, r0, #64 ; 0x40 - moveq r0, r0, lsl #16 - moveq r0, r0, lsr #16 - bx lr -_037F81E4: .word 0x027FFE1D - - arm_func_start FUN_037F81E8 -FUN_037F81E8: ; 0x037F81E8 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #29 - mov r1, #1 - add r2, sp, #0 - bl NVRAM_ReadDataBytes - ldrb r0, [sp] - cmp r0, #255 ; 0xff - moveq r0, #0 - beq _037F821C - ands r0, r0, #64 ; 0x40 - movne r0, #1 - moveq r0, #0 -_037F821C: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_037F8228 -FUN_037F8228: ; 0x037F8228 - stmdb sp!, {r4, lr} - sub sp, sp, #528 ; 0x210 - mov r0, #32 - mov r1, #2 - add r2, sp, #4 - bl NVRAM_ReadDataBytes - ldr r0, [sp, #4] - mov r0, r0, lsl #3 - str r0, [sp, #4] - mov r1, #256 ; 0x100 - add r2, sp, #16 - bl NVRAM_ReadDataBytes - ldr r0, [sp, #4] - add r0, r0, #256 ; 0x100 - mov r1, #256 ; 0x100 - add r2, sp, #272 ; 0x110 - bl NVRAM_ReadDataBytes - add r0, sp, #16 - bl FUN_037F802C - cmp r0, #3 - blt _037F8290 - mvn r0, #0 - ldr r1, _037F83A4 ; =0x027FFC80 - mov r2, #116 ; 0x74 - bl MIi_CpuClear32 - b _037F834C -_037F8290: - cmp r0, #0 - beq _037F833C - mov r2, r0, lsl #8 - ldr r1, _037F83A8 ; =0xFFFFFF2A - add r1, sp, r1 - ldrb r1, [r1, r0, lsl #8] - cmp r1, #10 - bcs _037F82DC - mov ip, #10 - mov r3, #0 - add r1, sp, #16 - add r2, r1, r2 - b _037F82D0 -_037F82C4: - add r1, r2, ip, lsl #1 - strh r3, [r1, #-252] ; 0xffffff04 - sub ip, ip, #1 -_037F82D0: - ldrb r1, [r2, #-230] ; 0xffffff1a - cmp ip, r1 - bgt _037F82C4 -_037F82DC: - mov r2, r0, lsl #8 - ldr r1, _037F83AC ; =0xFFFFFF60 - add r1, sp, r1 - ldrb r1, [r1, r0, lsl #8] - cmp r1, #26 - bcs _037F8320 - mov ip, #26 - mov r3, #0 - add r1, sp, #16 - add r2, r1, r2 - b _037F8314 -_037F8308: - add r1, r2, ip, lsl #1 - strh r3, [r1, #-230] ; 0xffffff1a - sub ip, ip, #1 -_037F8314: - ldrb r1, [r2, #-176] ; 0xffffff50 - cmp ip, r1 - bgt _037F8308 -_037F8320: - add r1, sp, #16 - sub r0, r0, #1 - add r0, r1, r0, lsl #8 - ldr r1, _037F83A4 ; =0x027FFC80 - mov r2, #116 ; 0x74 - bl MIi_CpuCopy32 - b _037F834C -_037F833C: - mov r0, #0 - ldr r1, _037F83A4 ; =0x027FFC80 - mov r2, #116 ; 0x74 - bl MIi_CpuClear32 -_037F834C: - mov r0, #54 ; 0x36 - mov r1, #6 - add r2, sp, #8 - bl NVRAM_ReadDataBytes - ldr r0, _037F83A4 ; =0x027FFC80 - add r4, r0, #116 ; 0x74 - add r0, sp, #8 - mov r1, r4 - mov r2, #6 - bl MI_CpuCopy8 - mov r0, #60 ; 0x3c - mov r1, #2 - add r2, sp, #0 - bl NVRAM_ReadDataBytes - ldrh r0, [sp] - mov r0, r0, lsl #15 - mov r0, r0, lsr #16 - bl WMSP_GetAllowedChannel - strh r0, [r4, #6] - add sp, sp, #528 ; 0x210 - ldmia sp!, {r4, lr} - bx lr -_037F83A4: .word 0x027FFC80 -_037F83A8: .word 0xFFFFFF2A -_037F83AC: .word 0xFFFFFF60 - - arm_func_start FUN_037F83B0 -FUN_037F83B0: ; 0x037F83B0 - stmdb sp!, {r4, lr} - mov r0, #8 - bl OS_GetArenaHi - mov r4, r0 - mov r0, #8 - bl OS_GetArenaLo - mov r1, r0 - mov r0, #8 - mov r2, r4 - mov r3, #1 - bl OS_InitAlloc - mov r4, r0 - mov r0, #8 - bl OS_GetArenaHi - mov r2, r0 - mov r0, r4 - mov r1, #0 - sub r2, r2, r4 - bl MI_CpuFill8 - mov r0, #8 - mov r1, r4 - bl OS_SetArenaLo - mov r0, #8 - bl OS_GetArenaHi - mov r4, r0 - mov r0, #8 - bl OS_GetArenaLo - mov r1, r0 - mov r0, #8 - mov r2, r4 - bl OS_CreateHeap - movs r4, r0 - bpl _037F8438 - bl FUN_037FB1F0 -_037F8438: - mov r0, #8 - mov r1, r4 - bl OS_SetCurrentHeap - mov r0, #8 - mov r1, r4 - bl OS_CheckHeap - cmp r0, #8448 ; 0x2100 - bcs _037F845C - bl FUN_037FB1F0 -_037F845C: - mov r0, r4 - ldmia sp!, {r4, lr} - bx lr - - arm_func_start NitroSpMain -NitroSpMain: ; 0x037F8468 - stmdb sp!, {r4, lr} - bl WVR_ShelterExtWram - bl OS_Init - bl OS_InitThread - bl FUN_037F8228 - bl PXI_Init - bl FUN_037F83B0 - mov r4, r0 - mov r0, #6 - bl SND_Init - bl PAD_InitXYButton - mov r0, #1 - ldr r1, _037F8524 ; =FUN_037F8000 - bl OS_SetIrqFunction - mov r0, #1 - bl OS_EnableIrqMask - ldr r1, _037F8528 ; =0x04000004 - ldrh r0, [r1] - ldrh r0, [r1] - orr r0, r0, #8 - strh r0, [r1] - ldr r1, _037F852C ; =0x04000208 - ldrh r0, [r1] - mov r0, #1 - strh r0, [r1] - bl OS_EnableInterrupts - mvn r0, #0 - bl FS_Init - mov r0, #15 - bl CARD_SetThreadPriority - mov r0, #12 - bl RTC_Init - mov r0, r4 - bl WVR_Init - mov r0, #2 - bl SPI_Init - mov r4, #0 -_037F84FC: - bl FUN_037F8530 - bl OS_IsResetOccurred - cmp r0, #0 - beq _037F8518 - mov r0, r4 - bl CTRDG_VibPulseEdgeUpdate - bl OS_ResetSystem -_037F8518: - bl CTRDG_CheckPullOut_Polling - bl CARD_CheckPullOut_Polling - b _037F84FC -_037F8524: .word FUN_037F8000 -_037F8528: .word 0x04000004 -_037F852C: .word 0x04000208 - - arm_func_start FUN_037F8530 -FUN_037F8530: ; 0x037F8530 - ldr ip, _037F8538 ; =SVC_Halt - bx ip -_037F8538: .word SVC_Halt - - arm_func_start OS_IrqHandler -OS_IrqHandler: ; 0x037F853C - stmfd sp!, {lr} - mov ip, #67108864 ; 0x4000000 - add ip, ip, #528 ; 0x210 - ldr r1, [ip, #-8] - cmp r1, #0 - ldmeqfd sp!, {pc} - ldmia ip, {r1, r2} - ands r1, r1, r2 - ldmeqfd sp!, {pc} - mov r3, #1 - mov r0, #0 -_037F8568: - ands r2, r1, r3, lsl r0 - addeq r0, r0, #1 - beq _037F8568 - str r2, [ip, #4] - ldr r1, _037F8588 ; =OS_IRQTable - ldr r0, [r1, r0, lsl #2] - ldr lr, _037F858C ; =OS_IrqHandler_ThreadSwitch - bx r0 -_037F8588: .word OS_IRQTable -_037F858C: .word OS_IrqHandler_ThreadSwitch - - arm_func_start OS_IrqHandler_ThreadSwitch -OS_IrqHandler_ThreadSwitch: - ldr ip, _037F86AC ; =OSi_IrqThreadQueue - mov r3, #0 - ldr ip, [ip] - mov r2, #1 - cmp ip, #0 - beq _037F85E0 -_037F85A8: - str r2, [ip, #72] ; 0x48 - str r3, [ip, #92] ; 0x5c - str r3, [ip, #96] ; 0x60 - ldr r0, [ip, #100] ; 0x64 - str r3, [ip, #100] ; 0x64 - mov ip, r0 - cmp ip, #0 - bne _037F85A8 - ldr ip, _037F86AC ; =OSi_IrqThreadQueue - str r3, [ip] - str r3, [ip, #4] - ldr ip, _037F86B0 ; =OSi_ThreadInfo - mov r1, #1 - strh r1, [ip] -_037F85E0: - ldr ip, _037F86B0 ; =OSi_ThreadInfo - ldrh r1, [ip] - cmp r1, #0 - ldreq pc, [sp], #4 ; (ldreq pc, [sp], #4) - mov r1, #0 - strh r1, [ip] - mov r3, #210 ; 0xd2 - msr CPSR_c, r3 - add r2, ip, #8 - ldr r1, [r2] -_037F8608: - cmp r1, #0 - ldrneh r0, [r1, #72] ; 0x48 - cmpne r0, #1 - ldrne r1, [r1, #76] ; 0x4c - bne _037F8608 - cmp r1, #0 - bne _037F8630 -_037F8624: - mov r3, #146 ; 0x92 - msr CPSR_c, r3 - ldr pc, [sp], #4 -_037F8630: - ldr r0, [ip, #4] - cmp r1, r0 - beq _037F8624 - ldr r3, [ip, #12] - cmp r3, #0 - beq _037F8658 - - arm_func_start FUN_037F8648 -FUN_037F8648: ; 0x037F8648 - stmdb sp!, {r0, r1, ip} - mov lr, pc - bx r3 - ldmia sp!, {r0, r1, ip} -_037F8658: - str r1, [ip, #4] - mrs r2, SPSR - str r2, [r0, #0]! - ldmib sp!, {r2, r3} - stmib r0!, {r2, r3} - ldmib sp!, {r2, r3, ip, lr} - stmib r0!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ - stmib r0!, {lr} - mov r3, #211 ; 0xd3 - msr CPSR_c, r3 - stmib r0!, {sp} - ldr sp, [r1, #68] ; 0x44 - mov r3, #210 ; 0xd2 - msr CPSR_c, r3 - ldr r2, [r1, #0]! - msr SPSR_fc, r2 - ldr lr, [r1, #64] ; 0x40 - ldmib r1!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ - nop ; (mov r0, r0) - stmda sp!, {r0, r1, r2, r3, ip, lr} - ldmia sp!, {pc} -_037F86AC: .word OSi_IrqThreadQueue -_037F86B0: .word OSi_ThreadInfo - - arm_func_start OSi_IrqVBlank -OSi_IrqVBlank: ; 0x037F86B4 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _037F8700 ; =OSi_IrqCallbackInfo - ldr r2, [r0, #96] ; 0x60 - ldr r1, _037F8704 ; =0x027FFC3C - ldr r0, [r1] - add r0, r0, #1 - str r0, [r1] - cmp r2, #0 - beq _037F86E4 - mov lr, pc - bx r2 -_037F86E4: - ldr r1, _037F8708 ; =0x0380FFF8 - ldr r0, [r1] - orr r0, r0, #1 - str r0, [r1] - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037F8700: .word OSi_IrqCallbackInfo -_037F8704: .word 0x027FFC3C -_037F8708: .word 0x0380FFF8 - - arm_func_start OSi_IrqTimer3 -OSi_IrqTimer3: ; 0x037F870C - mov r0, #7 - ldr ip, _037F8718 ; =OSi_IrqCallback - bx ip -_037F8718: .word OSi_IrqCallback - - arm_func_start OSi_IrqTimer2 -OSi_IrqTimer2: ; 0x037F871C - mov r0, #6 - ldr ip, _037F8728 ; =OSi_IrqCallback - bx ip -_037F8728: .word OSi_IrqCallback - - arm_func_start OSi_IrqTimer1 -OSi_IrqTimer1: ; 0x037F872C - mov r0, #5 - ldr ip, _037F8738 ; =OSi_IrqCallback - bx ip -_037F8738: .word OSi_IrqCallback - - arm_func_start OSi_IrqTimer0 -OSi_IrqTimer0: ; 0x037F873C - mov r0, #4 - ldr ip, _037F8748 ; =OSi_IrqCallback - bx ip -_037F8748: .word OSi_IrqCallback - - arm_func_start OSi_IrqDma3 -OSi_IrqDma3: ; 0x037F874C - mov r0, #3 - ldr ip, _037F8758 ; =OSi_IrqCallback - bx ip -_037F8758: .word OSi_IrqCallback - - arm_func_start OSi_IrqDma2 -OSi_IrqDma2: ; 0x037F875C - mov r0, #2 - ldr ip, _037F8768 ; =OSi_IrqCallback - bx ip -_037F8768: .word OSi_IrqCallback - - arm_func_start OSi_IrqDma1 -OSi_IrqDma1: ; 0x037F876C - mov r0, #1 - ldr ip, _037F8778 ; =OSi_IrqCallback - bx ip -_037F8778: .word OSi_IrqCallback - - arm_func_start OSi_IrqDma0 -OSi_IrqDma0: ; 0x037F877C - mov r0, #0 - ldr ip, _037F8788 ; =OSi_IrqCallback - bx ip -_037F8788: .word OSi_IrqCallback - - arm_func_start OSi_IrqCallback -OSi_IrqCallback: ; 0x037F878C - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r3, #1 - mov r2, r0, lsl #1 - ldr r1, _037F880C ; =_038075E4 - ldrh r1, [r1, r2] - mov r5, r3, lsl r1 - mov r1, #12 - mul r4, r0, r1 - ldr r2, _037F8810 ; =OSi_IrqCallbackInfo - ldr r1, [r2, r4] - mov r0, #0 - str r0, [r2, r4] - cmp r1, #0 - beq _037F87D8 - ldr r0, _037F8814 ; =_0380771C - ldr r0, [r0, r4] - mov lr, pc - bx r1 -_037F87D8: - ldr r1, _037F8818 ; =0x0380FFF8 - ldr r0, [r1] - orr r0, r0, r5 - str r0, [r1] - ldr r0, _037F881C ; =_03807718 - ldr r0, [r0, r4] - cmp r0, #0 - bne _037F8800 - mov r0, r5 - bl OS_DisableIrqMask -_037F8800: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037F880C: .word _038075E4 -_037F8810: .word OSi_IrqCallbackInfo -_037F8814: .word _0380771C -_037F8818: .word 0x0380FFF8 -_037F881C: .word _03807718 - - arm_func_start OS_IrqDummy -OS_IrqDummy: ; 0x037F8820 - bx lr - - arm_func_start OS_ResetRequestIrqMask -OS_ResetRequestIrqMask: ; 0x037F8824 - ldr ip, _037F8850 ; =0x04000208 - ldrh r3, [ip] - mov r1, #0 - strh r1, [ip] - ldr r2, _037F8854 ; =0x04000214 - ldr r1, [r2] - str r0, [r2] - ldrh r0, [ip] - strh r3, [ip] - mov r0, r1 - bx lr -_037F8850: .word 0x04000208 -_037F8854: .word 0x04000214 - - arm_func_start OS_DisableIrqMask -OS_DisableIrqMask: ; 0x037F8858 - ldr ip, _037F888C ; =0x04000208 - ldrh r3, [ip] - mov r1, #0 - strh r1, [ip] - ldr r2, _037F8890 ; =0x04000210 - ldr r1, [r2] - mvn r0, r0 - and r0, r1, r0 - str r0, [r2] - ldrh r0, [ip] - strh r3, [ip] - mov r0, r1 - bx lr -_037F888C: .word 0x04000208 -_037F8890: .word 0x04000210 - - arm_func_start OS_EnableIrqMask -OS_EnableIrqMask: ; 0x037F8894 - ldr ip, _037F88C4 ; =0x04000208 - ldrh r3, [ip] - mov r1, #0 - strh r1, [ip] - ldr r2, _037F88C8 ; =0x04000210 - ldr r1, [r2] - orr r0, r1, r0 - str r0, [r2] - ldrh r0, [ip] - strh r3, [ip] - mov r0, r1 - bx lr -_037F88C4: .word 0x04000208 -_037F88C8: .word 0x04000210 - - arm_func_start OS_SetIrqMask -OS_SetIrqMask: ; 0x037F88CC - ldr ip, _037F88F8 ; =0x04000208 - ldrh r3, [ip] - mov r1, #0 - strh r1, [ip] - ldr r2, _037F88FC ; =0x04000210 - ldr r1, [r2] - str r0, [r2] - ldrh r0, [ip] - strh r3, [ip] - mov r0, r1 - bx lr -_037F88F8: .word 0x04000208 -_037F88FC: .word 0x04000210 - - arm_func_start OSi_EnterTimerCallback -OSi_EnterTimerCallback: ; 0x037F8900 - stmdb sp!, {r4, lr} - mov r3, #12 - mul r4, r0, r3 - ldr r3, _037F8940 ; =_03807744 - str r1, [r3, r4] - ldr r1, _037F8944 ; =_0380774C - str r2, [r1, r4] - mov r1, #1 - add r0, r0, #3 - mov r0, r1, lsl r0 - bl OS_EnableIrqMask - mov r1, #1 - ldr r0, _037F8948 ; =_03807748 - str r1, [r0, r4] - ldmia sp!, {r4, lr} - bx lr -_037F8940: .word _03807744 -_037F8944: .word _0380774C -_037F8948: .word _03807748 - - arm_func_start OS_SetIrqFunction -OS_SetIrqFunction: ; 0x037F894C - stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - sub sp, sp, #4 - mov r9, #0 - mov r7, r9 - ldr lr, _037F89E8 ; =OS_IRQTable - ldr r4, _037F89EC ; =_03807774 - ldr r6, _037F89F0 ; =OSi_IrqCallbackInfo - mov ip, r9 - mov r3, #1 - mov r2, #12 -_037F8974: - ands r5, r0, #1 - beq _037F89CC - mov r8, r7 - cmp r9, #8 - blt _037F8998 - cmp r9, #11 - suble r5, r9, #8 - mlale r8, r5, r2, r6 - ble _037F89BC -_037F8998: - cmp r9, #3 - blt _037F89B0 - cmp r9, #6 - addle r5, r9, #1 - mlale r8, r5, r2, r6 - ble _037F89BC -_037F89B0: - cmp r9, #0 - moveq r8, r4 - strne r1, [lr, r9, lsl #2] -_037F89BC: - cmp r8, #0 - strne r1, [r8] - strne ip, [r8, #8] - strne r3, [r8, #4] -_037F89CC: - mov r0, r0, lsr #1 - add r9, r9, #1 - cmp r9, #25 - blt _037F8974 - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, lr} - bx lr -_037F89E8: .word OS_IRQTable -_037F89EC: .word _03807774 -_037F89F0: .word OSi_IrqCallbackInfo - - arm_func_start OS_InitIrqTable -OS_InitIrqTable: ; 0x037F89F4 - mov r1, #0 - ldr r0, _037F8A10 ; =OSi_IrqThreadQueue - str r1, [r0, #4] - str r1, [r0] - ldr r0, _037F8A14 ; =0x027FFC3C - str r1, [r0] - bx lr -_037F8A10: .word OSi_IrqThreadQueue -_037F8A14: .word 0x027FFC3C - - arm_func_start OS_UnLockCartridge -OS_UnLockCartridge: ; 0x037F8A18 - ldr r1, _037F8A20 ; =OS_UnlockCartridge - bx r1 -_037F8A20: .word OS_UnlockCartridge - - arm_func_start OS_GetLockID -OS_GetLockID: ; 0x037F8A24 - ldr r3, _037F8AB4 ; =0x027FFFB8 - ldr r1, [r3] - mov r2, #0 - mov r0, #-2147483648 ; 0x80000000 -_037F8A34: - tst r1, r0 - bne _037F8A50 - add r2, r2, #1 - cmp r2, #32 - beq _037F8A50 - mov r0, r0, lsr #1 - b _037F8A34 -_037F8A50: - cmp r2, #32 - movne r0, #128 ; 0x80 - bne _037F8A98 - add r3, r3, #4 - ldr r1, [r3] - mov r2, #0 - mov r0, #-2147483648 ; 0x80000000 -_037F8A6C: - tst r1, r0 - bne _037F8A88 - add r2, r2, #1 - cmp r2, #32 - beq _037F8A88 - mov r0, r0, lsr #1 - b _037F8A6C -_037F8A88: - cmp r2, #32 - ldr r0, _037F8AB8 ; =0xFFFFFFFD - bxeq lr - mov r0, #160 ; 0xa0 -_037F8A98: - add r0, r0, r2 - mov r1, #-2147483648 ; 0x80000000 - mov r1, r1, lsr r2 - ldr r2, [r3] - bic r2, r2, r1 - str r2, [r3] - bx lr -_037F8AB4: .word 0x027FFFB8 -_037F8AB8: .word 0xFFFFFFFD - - arm_func_start OS_ReleaseLockID -OS_ReleaseLockID: ; 0x037F8ABC - ldr r3, _037F8AE8 ; =0x027FFFB8 - cmp r0, #160 ; 0xa0 - addpl r3, r3, #4 - subpl r0, r0, #160 ; 0xa0 - submi r0, r0, #128 ; 0x80 - mov r1, #-2147483648 ; 0x80000000 - mov r1, r1, lsr r0 - ldr r2, [r3] - orr r2, r2, r1 - str r2, [r3] - bx lr -_037F8AE8: .word 0x027FFFB8 - - arm_func_start OS_ReadOwnerOfLockWord -OS_ReadOwnerOfLockWord: ; 0x037F8AEC - ldrh r0, [r0, #4] - bx lr -_037F8AF4: - bx lr -_037F8AF8: - bx lr - - arm_func_start OS_TryLockCartridge -OS_TryLockCartridge: ; 0x037F8AFC - ldr r1, _037F8B10 ; =0x027FFFE8 - ldr r2, _037F8B14 ; =_037F8AF8 - mov r3, #1 - ldr ip, _037F8B18 ; =FUN_037F8B5C - bx ip -_037F8B10: .word 0x027FFFE8 -_037F8B14: .word _037F8AF8 -_037F8B18: .word FUN_037F8B5C - - arm_func_start OS_UnlockCartridge -OS_UnlockCartridge: ; 0x037F8B1C - ldr r1, _037F8B30 ; =0x027FFFE8 - ldr r2, _037F8B34 ; =_037F8AF4 - mov r3, #1 - ldr ip, _037F8B38 ; =FUN_037F8BE0 - bx ip -_037F8B30: .word 0x027FFFE8 -_037F8B34: .word _037F8AF4 -_037F8B38: .word FUN_037F8BE0 - - arm_func_start OS_LockCartridge -OS_LockCartridge: ; 0x037F8B3C - ldr r1, _037F8B50 ; =0x027FFFE8 - ldr r2, _037F8B54 ; =_037F8AF8 - mov r3, #1 - ldr ip, _037F8B58 ; =FUN_037F8C6C - bx ip -_037F8B50: .word 0x027FFFE8 -_037F8B54: .word _037F8AF8 -_037F8B58: .word FUN_037F8C6C - - arm_func_start FUN_037F8B5C -FUN_037F8B5C: ; 0x037F8B5C - stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - sub sp, sp, #4 - mov r9, r0 - mov r8, r1 - mov r7, r2 - movs r6, r3 - beq _037F8B84 - bl OS_DisableInterrupts_IrqAndFiq - mov r5, r0 - b _037F8B8C -_037F8B84: - bl OS_DisableInterrupts - mov r5, r0 -_037F8B8C: - mov r0, r9 - mov r1, r8 - bl MI_SwapWord - movs r4, r0 - bne _037F8BB4 - cmp r7, #0 - beq _037F8BB0 - mov lr, pc - bx r7 -_037F8BB0: - strh r9, [r8, #4] -_037F8BB4: - cmp r6, #0 - beq _037F8BC8 - mov r0, r5 - bl OS_RestoreInterrupts_IrqAndFiq - b _037F8BD0 -_037F8BC8: - mov r0, r5 - bl OS_RestoreInterrupts -_037F8BD0: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, lr} - bx lr - - arm_func_start FUN_037F8BE0 -FUN_037F8BE0: ; 0x037F8BE0 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r1 - mov r6, r2 - mov r5, r3 - ldrh r1, [r7, #4] - cmp r0, r1 - mvnne r0, #1 - bne _037F8C60 - cmp r5, #0 - beq _037F8C18 - bl OS_DisableInterrupts_IrqAndFiq - mov r4, r0 - b _037F8C20 -_037F8C18: - bl OS_DisableInterrupts - mov r4, r0 -_037F8C20: - mov r0, #0 - strh r0, [r7, #4] - cmp r6, #0 - beq _037F8C38 - mov lr, pc - bx r6 -_037F8C38: - mov r0, #0 - str r0, [r7] - cmp r5, #0 - beq _037F8C54 - mov r0, r4 - bl OS_RestoreInterrupts_IrqAndFiq - b _037F8C5C -_037F8C54: - mov r0, r4 - bl OS_RestoreInterrupts -_037F8C5C: - mov r0, #0 -_037F8C60: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr - - arm_func_start FUN_037F8C6C -FUN_037F8C6C: ; 0x037F8C6C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - mov r4, #1024 ; 0x400 - b _037F8C90 -_037F8C88: - mov r0, r4 - bl FUN_037F8CB4 -_037F8C90: - mov r0, r8 - mov r1, r7 - mov r2, r6 - mov r3, r5 - bl FUN_037F8B5C - cmp r0, #0 - bgt _037F8C88 - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr - - arm_func_start FUN_037F8CB4 -FUN_037F8CB4: ; 0x037F8CB4 - ldr ip, _037F8CBC ; =SVC_WaitByLoop - bx ip -_037F8CBC: .word SVC_WaitByLoop - - arm_func_start OS_InitLock -OS_InitLock: ; 0x037F8CC0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - ldr r0, _037F8D38 ; =_03807780 - ldr r1, [r0] - cmp r1, #0 - bne _037F8D2C - mov r1, #1 - str r1, [r0] - mov r0, #0 - ldr r4, _037F8D3C ; =0x027FFFF0 - strh r0, [r4, #6] - mov r5, #1024 ; 0x400 - b _037F8CFC -_037F8CF4: - mov r0, r5 - bl FUN_037F8CB4 -_037F8CFC: - ldrh r0, [r4, #4] - cmp r0, #127 ; 0x7f - bne _037F8CF4 - mvn r1, #0 - ldr r0, _037F8D40 ; =0x027FFFB8 - str r1, [r0] - mov r0, #65536 ; 0x10000 - rsb r1, r0, #0 - ldr r0, _037F8D44 ; =0x027FFFBC - str r1, [r0] - mov r0, #191 ; 0xbf - strh r0, [r4, #6] -_037F8D2C: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037F8D38: .word _03807780 -_037F8D3C: .word 0x027FFFF0 -_037F8D40: .word 0x027FFFB8 -_037F8D44: .word 0x027FFFBC - - arm_func_start OS_SetThreadDestructor -OS_SetThreadDestructor: ; 0x037F8D48 - str r1, [r0, #152] ; 0x98 - bx lr - - arm_func_start OS_EnableScheduler -OS_EnableScheduler: ; 0x037F8D50 - stmdb sp!, {r4, lr} - bl OS_DisableInterrupts - mov r4, #0 - ldr r1, _037F8D84 ; =OSi_RescheduleCount - ldr r3, [r1] - cmp r3, #0 - subne r2, r3, #1 - strne r2, [r1] - movne r4, r3 - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4, lr} - bx lr -_037F8D84: .word OSi_RescheduleCount - - arm_func_start OS_DisableScheduler -OS_DisableScheduler: ; 0x037F8D88 - stmdb sp!, {r4, lr} - bl OS_DisableInterrupts - ldr r2, _037F8DBC ; =OSi_RescheduleCount - ldr r3, [r2] - mvn r1, #0 - cmp r3, r1 - addcc r1, r3, #1 - strcc r1, [r2] - movcc r4, r3 - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4, lr} - bx lr -_037F8DBC: .word OSi_RescheduleCount - - arm_func_start OS_SetSwitchThreadCallback -OS_SetSwitchThreadCallback: ; 0x037F8DC0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _037F8DF0 ; =OSi_ThreadInfo - ldr r4, [r1, #12] - str r5, [r1, #12] - bl OS_RestoreInterrupts - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037F8DF0: .word OSi_ThreadInfo -_037F8DF4: - ldr r2, [r0] - mov r1, #0 - str r1, [r0] - str r1, [r2, #148] ; 0x94 - mov r0, r2 - ldr ip, _037F8E10 ; =OS_WakeupThreadDirect - bx ip -_037F8E10: .word OS_WakeupThreadDirect - - arm_func_start OS_Sleep -OS_Sleep: ; 0x037F8E14 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #52 ; 0x34 - mov r5, r0 - add r0, sp, #8 - bl OS_CreateAlarm - ldr r0, _037F8EAC ; =OSi_CurrentThreadPtr - ldr r0, [r0] - ldr r0, [r0] - str r0, [sp, #4] - bl OS_DisableInterrupts - mov r4, r0 - add r0, sp, #8 - ldr r1, [sp, #4] - str r0, [r1, #148] ; 0x94 - add r1, sp, #4 - str r1, [sp] - mov r2, #0 - ldr r1, _037F8EB0 ; =0x000082EA - umull ip, r3, r5, r1 - mla r3, r5, r2, r3 - mla r3, r2, r1, r3 - mov r2, r3, lsr #6 - mov r1, ip, lsr #6 - orr r1, r1, r3, lsl #26 - ldr r3, _037F8EB4 ; =_037F8DF4 - bl OS_SetAlarm - mov r5, #0 - b _037F8E8C -_037F8E84: - mov r0, r5 - bl OS_SleepThread -_037F8E8C: - ldr r0, [sp, #4] - cmp r0, #0 - bne _037F8E84 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #52 ; 0x34 - ldmia sp!, {r4, r5, lr} - bx lr -_037F8EAC: .word OSi_CurrentThreadPtr -_037F8EB0: .word 0x000082EA -_037F8EB4: .word _037F8DF4 - - arm_func_start OS_SetThreadPriority -OS_SetThreadPriority: ; 0x037F8EB8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r6, r0 - mov r5, r1 - ldr r0, _037F8F60 ; =OSi_ThreadInfo - ldr r8, [r0, #8] - mov r7, #0 - bl OS_DisableInterrupts - mov r4, r0 - b _037F8EE4 -_037F8EDC: - mov r7, r8 - ldr r8, [r8, #76] ; 0x4c -_037F8EE4: - cmp r8, #0 - beq _037F8EF4 - cmp r8, r6 - bne _037F8EDC -_037F8EF4: - cmp r8, #0 - beq _037F8F08 - ldr r0, _037F8F64 ; =OSi_IdleThread - cmp r8, r0 - bne _037F8F18 -_037F8F08: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0 - b _037F8F58 -_037F8F18: - ldr r0, [r8, #84] ; 0x54 - cmp r0, r5 - beq _037F8F4C - cmp r7, #0 - ldreq r1, [r6, #76] ; 0x4c - ldreq r0, _037F8F60 ; =OSi_ThreadInfo - streq r1, [r0, #8] - ldrne r0, [r6, #76] ; 0x4c - strne r0, [r7, #76] ; 0x4c - str r5, [r6, #84] ; 0x54 - mov r0, r6 - bl FUN_037F9584 - bl FUN_037F945C -_037F8F4C: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #1 -_037F8F58: - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_037F8F60: .word OSi_ThreadInfo -_037F8F64: .word OSi_IdleThread - - arm_func_start OS_RescheduleThread -OS_RescheduleThread: ; 0x037F8F68 - stmdb sp!, {r4, lr} - bl OS_DisableInterrupts - mov r4, r0 - bl FUN_037F945C - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4, lr} - bx lr - - arm_func_start OS_SelectThread -OS_SelectThread: ; 0x037F8F88 - ldr r0, _037F8FB0 ; =OSi_ThreadInfo - ldr r0, [r0, #8] - b _037F8F98 -_037F8F94: - ldr r0, [r0, #76] ; 0x4c -_037F8F98: - cmp r0, #0 - bxeq lr - ldr r1, [r0, #72] ; 0x48 - cmp r1, #1 - bne _037F8F94 - bx lr -_037F8FB0: .word OSi_ThreadInfo - - arm_func_start OS_WakeupThreadDirect -OS_WakeupThreadDirect: ; 0x037F8FB4 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r5, r0 - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #1 - str r0, [r5, #72] ; 0x48 - bl FUN_037F945C - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr - - arm_func_start OS_WakeupThread -OS_WakeupThread: ; 0x037F8FE8 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r5, r0 - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, [r5] - cmp r0, #0 - beq _037F9050 - mov r7, #1 - mov r6, #0 - b _037F9030 -_037F9014: - mov r0, r5 - bl FUN_037F967C - str r7, [r0, #72] ; 0x48 - str r6, [r0, #92] ; 0x5c - str r6, [r0, #100] ; 0x64 - ldr r1, [r0, #100] ; 0x64 - str r1, [r0, #96] ; 0x60 -_037F9030: - ldr r0, [r5] - cmp r0, #0 - bne _037F9014 - mov r0, #0 - str r0, [r5, #4] - ldr r0, [r5, #4] - str r0, [r5] - bl FUN_037F945C -_037F9050: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr - - arm_func_start OS_SleepThread -OS_SleepThread: ; 0x037F9064 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - bl OS_DisableInterrupts - mov r5, r0 - ldr r0, _037F90B4 ; =OSi_CurrentThreadPtr - ldr r0, [r0] - ldr r4, [r0] - cmp r6, #0 - beq _037F9098 - str r6, [r4, #92] ; 0x5c - mov r0, r6 - mov r1, r4 - bl FUN_037F96B0 -_037F9098: - mov r0, #0 - str r0, [r4, #72] ; 0x48 - bl FUN_037F945C - mov r0, r5 - bl OS_RestoreInterrupts - ldmia sp!, {r4, r5, r6, lr} - bx lr -_037F90B4: .word OSi_CurrentThreadPtr - - arm_func_start OS_IsThreadTerminated -OS_IsThreadTerminated: ; 0x037F90B8 - ldr r0, [r0, #72] ; 0x48 - cmp r0, #2 - moveq r0, #1 - movne r0, #0 - bx lr - - arm_func_start OS_JoinThread -OS_JoinThread: ; 0x037F90CC - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r5, r0 - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, [r5, #72] ; 0x48 - cmp r0, #2 - beq _037F90F4 - add r0, r5, #128 ; 0x80 - bl OS_SleepThread -_037F90F4: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr - - arm_func_start FUN_037F9108 -FUN_037F9108: ; 0x037F9108 - stmdb sp!, {r4, lr} - ldr r0, _037F9164 ; =OSi_CurrentThreadPtr - ldr r0, [r0] - ldr r4, [r0] - bl OS_DisableScheduler - mov r0, r4 - bl OSi_UnlockAllMutex - ldr r0, [r4, #92] ; 0x5c - cmp r0, #0 - beq _037F9138 - mov r1, r4 - bl FUN_037F961C -_037F9138: - mov r0, r4 - bl FUN_037F953C - mov r0, #2 - str r0, [r4, #72] ; 0x48 - add r0, r4, #128 ; 0x80 - bl OS_WakeupThread - bl OS_EnableScheduler - bl OS_RescheduleThread - bl FUN_037FB1F0 - ldmia sp!, {r4, lr} - bx lr -_037F9164: .word OSi_CurrentThreadPtr - - arm_func_start FUN_037F9168 -FUN_037F9168: ; 0x037F9168 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _037F91AC ; =OSi_CurrentThreadPtr - ldr r1, [r1] - ldr r3, [r1] - ldr r2, [r3, #152] ; 0x98 - cmp r2, #0 - beq _037F919C - mov r1, #0 - str r1, [r3, #152] ; 0x98 - mov lr, pc - bx r2 - bl OS_DisableInterrupts -_037F919C: - bl FUN_037F9108 - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037F91AC: .word OSi_CurrentThreadPtr - - arm_func_start FUN_037F91B0 -FUN_037F91B0: ; 0x037F91B0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r5, r0 - mov r4, r1 - ldr r1, _037F9210 ; =OSi_StackForDestructor - ldr r2, [r1] - cmp r2, #0 - beq _037F91FC - ldr r1, _037F9214 ; =FUN_037F9168 - bl OS_InitContext - str r4, [r5, #4] - ldr r0, [r5] - orr r0, r0, #128 ; 0x80 - str r0, [r5] - mov r0, #1 - str r0, [r5, #72] ; 0x48 - mov r0, r5 - bl OS_LoadContext - b _037F9204 -_037F91FC: - mov r0, r4 - bl FUN_037F9168 -_037F9204: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037F9210: .word OSi_StackForDestructor -_037F9214: .word FUN_037F9168 - - arm_func_start OS_ExitThread -OS_ExitThread: ; 0x037F9218 - stmfd sp!, {lr} - sub sp, sp, #4 - bl OS_DisableInterrupts - ldr r0, _037F9240 ; =OSi_ThreadInfo - ldr r0, [r0, #4] - mov r1, #0 - bl FUN_037F91B0 - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037F9240: .word OSi_ThreadInfo - - arm_func_start OS_CreateThread -OS_CreateThread: ; 0x037F9244 - stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - sub sp, sp, #4 - mov r9, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - bl OS_DisableInterrupts - mov r4, r0 - bl FUN_037F9728 - ldr r1, [sp, #36] ; 0x24 - str r1, [r9, #84] ; 0x54 - str r0, [r9, #80] ; 0x50 - mov r0, #0 - str r0, [r9, #72] ; 0x48 - str r0, [r9, #88] ; 0x58 - mov r0, r9 - bl FUN_037F9584 - str r6, [r9, #120] ; 0x78 - ldr r0, [sp, #32] - sub r5, r6, r0 - str r5, [r9, #116] ; 0x74 - mov r2, #0 - str r2, [r9, #124] ; 0x7c - ldr r1, _037F9348 ; =0xD73BFDF7 - ldr r0, [r9, #120] ; 0x78 - str r1, [r0, #-4] - ldr r1, _037F934C ; =0xFBDD37BB - ldr r0, [r9, #116] ; 0x74 - str r1, [r0] - str r2, [r9, #132] ; 0x84 - ldr r0, [r9, #132] ; 0x84 - str r0, [r9, #128] ; 0x80 - mov r0, r9 - mov r1, r8 - sub r2, r6, #4 - bl OS_InitContext - str r7, [r9, #4] - ldr r0, _037F9350 ; =OS_ExitThread - str r0, [r9, #60] ; 0x3c - mov r0, #0 - add r1, r5, #4 - ldr r2, [sp, #32] - sub r2, r2, #8 - bl MIi_CpuClear32 - mov r1, #0 - str r1, [r9, #104] ; 0x68 - str r1, [r9, #108] ; 0x6c - str r1, [r9, #112] ; 0x70 - mov r0, r9 - bl OS_SetThreadDestructor - mov r0, #0 - str r0, [r9, #92] ; 0x5c - str r0, [r9, #100] ; 0x64 - ldr r1, [r9, #100] ; 0x64 - str r1, [r9, #96] ; 0x60 - add r1, r9, #136 ; 0x88 - mov r2, #12 - bl MIi_CpuClear32 - mov r0, #0 - str r0, [r9, #148] ; 0x94 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, lr} - bx lr -_037F9348: .word 0xD73BFDF7 -_037F934C: .word 0xFBDD37BB -_037F9350: .word OS_ExitThread - - arm_func_start OS_InitThread -OS_InitThread: ; 0x037F9354 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _037F942C ; =OSi_IsThreadInitialized - ldr r1, [r0] - cmp r1, #0 - bne _037F9420 - mov r2, #1 - str r2, [r0] - ldr r1, _037F9430 ; =_038077A0 - ldr r0, _037F9434 ; =OSi_CurrentThreadPtr - str r1, [r0] - mov r0, #16 - ldr r1, _037F9438 ; =OSi_LauncherThread - str r0, [r1, #84] ; 0x54 - mov r0, #0 - str r0, [r1, #80] ; 0x50 - str r2, [r1, #72] ; 0x48 - str r0, [r1, #76] ; 0x4c - str r0, [r1, #88] ; 0x58 - ldr r0, _037F943C ; =OSi_ThreadInfo - str r1, [r0, #8] - str r1, [r0, #4] - ldr r2, _037F9440 ; =0x00000400 - cmp r2, #0 - ldrle r0, _037F9444 ; =FUN_037F8000 - suble r2, r0, r2 - ldrgt r1, _037F9448 ; =0x00000400 - ldrgt r0, _037F944C ; =0x0380FF80 - subgt r0, r0, r1 - subgt r2, r0, r2 - ldr r1, _037F9448 ; =0x00000400 - ldr r0, _037F944C ; =0x0380FF80 - sub r3, r0, r1 - ldr r1, _037F9438 ; =OSi_LauncherThread - str r3, [r1, #120] ; 0x78 - str r2, [r1, #116] ; 0x74 - mov r0, #0 - str r0, [r1, #124] ; 0x7c - ldr r2, _037F9450 ; =0xD73BFDF7 - str r2, [r3, #-4] - ldr r3, _037F9454 ; =0xFBDD37BB - ldr r2, [r1, #116] ; 0x74 - str r3, [r2] - str r0, [r1, #132] ; 0x84 - str r0, [r1, #128] ; 0x80 - ldr r1, _037F943C ; =OSi_ThreadInfo - strh r0, [r1] - strh r0, [r1, #2] - ldr r2, _037F9458 ; =0x027FFFA4 - str r1, [r2] - bl OS_SetSwitchThreadCallback -_037F9420: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037F942C: .word OSi_IsThreadInitialized -_037F9430: .word _038077A0 -_037F9434: .word OSi_CurrentThreadPtr -_037F9438: .word OSi_LauncherThread -_037F943C: .word OSi_ThreadInfo -_037F9440: .word 0x00000400 -_037F9444: .word FUN_037F8000 -_037F9448: .word 0x00000400 -_037F944C: .word 0x0380FF80 -_037F9450: .word 0xD73BFDF7 -_037F9454: .word 0xFBDD37BB -_037F9458: .word 0x027FFFA4 - - arm_func_start FUN_037F945C -FUN_037F945C: ; 0x037F945C - stmdb sp!, {r4, r5, r6, lr} - ldr r0, _037F952C ; =OSi_RescheduleCount - ldr r0, [r0] - cmp r0, #0 - bne _037F9524 - ldr r4, _037F9530 ; =OSi_ThreadInfo - ldrh r0, [r4, #2] - cmp r0, #0 - bne _037F948C - bl OS_GetProcMode - cmp r0, #18 - bne _037F9498 -_037F948C: - mov r0, #1 - strh r0, [r4] - b _037F9524 -_037F9498: - ldr r0, _037F9534 ; =OSi_CurrentThreadPtr - ldr r0, [r0] - ldr r6, [r0] - bl OS_SelectThread - mov r5, r0 - cmp r6, r5 - beq _037F9524 - cmp r5, #0 - beq _037F9524 - ldr r0, [r6, #72] ; 0x48 - cmp r0, #2 - beq _037F94D8 - mov r0, r6 - bl OS_SaveContext - cmp r0, #0 - bne _037F9524 -_037F94D8: - ldr r0, _037F9538 ; =OSi_SystemCallbackInSwitchThread - ldr r2, [r0] - cmp r2, #0 - beq _037F94F8 - mov r0, r6 - mov r1, r5 - mov lr, pc - bx r2 -_037F94F8: - ldr r2, [r4, #12] - cmp r2, #0 - beq _037F9514 - mov r0, r6 - mov r1, r5 - mov lr, pc - bx r2 -_037F9514: - ldr r0, _037F9530 ; =OSi_ThreadInfo - str r5, [r0, #4] - mov r0, r5 - bl OS_LoadContext -_037F9524: - ldmia sp!, {r4, r5, r6, lr} - bx lr -_037F952C: .word OSi_RescheduleCount -_037F9530: .word OSi_ThreadInfo -_037F9534: .word OSi_CurrentThreadPtr -_037F9538: .word OSi_SystemCallbackInSwitchThread - - arm_func_start FUN_037F953C -FUN_037F953C: ; 0x037F953C - ldr r1, _037F9580 ; =OSi_ThreadInfo - ldr r2, [r1, #8] - mov r1, #0 - b _037F9554 -_037F954C: - mov r1, r2 - ldr r2, [r2, #76] ; 0x4c -_037F9554: - cmp r2, #0 - beq _037F9564 - cmp r2, r0 - bne _037F954C -_037F9564: - cmp r1, #0 - ldreq r1, [r0, #76] ; 0x4c - ldreq r0, _037F9580 ; =OSi_ThreadInfo - streq r1, [r0, #8] - ldrne r0, [r0, #76] ; 0x4c - strne r0, [r1, #76] ; 0x4c - bx lr -_037F9580: .word OSi_ThreadInfo - - arm_func_start FUN_037F9584 -FUN_037F9584: ; 0x037F9584 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _037F95E8 ; =OSi_ThreadInfo - ldr r3, [r1, #8] - mov lr, r3 - mov ip, #0 - b _037F95A8 -_037F95A0: - mov ip, lr - ldr lr, [lr, #76] ; 0x4c -_037F95A8: - cmp lr, #0 - beq _037F95C0 - ldr r2, [lr, #84] ; 0x54 - ldr r1, [r0, #84] ; 0x54 - cmp r2, r1 - bcc _037F95A0 -_037F95C0: - cmp ip, #0 - streq r3, [r0, #76] ; 0x4c - ldreq r1, _037F95E8 ; =OSi_ThreadInfo - streq r0, [r1, #8] - ldrne r1, [ip, #76] ; 0x4c - strne r1, [r0, #76] ; 0x4c - strne r0, [ip, #76] ; 0x4c - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037F95E8: .word OSi_ThreadInfo - - arm_func_start OSi_RemoveMutexLinkFromQueue -OSi_RemoveMutexLinkFromQueue: ; 0x037F95EC - ldr r2, [r0] - cmp r2, #0 - beq _037F9614 - ldr r1, [r2, #16] - str r1, [r0] - cmp r1, #0 - movne r0, #0 - strne r0, [r1, #20] - moveq r1, #0 - streq r1, [r0, #4] -_037F9614: - mov r0, r2 - bx lr - - arm_func_start FUN_037F961C -FUN_037F961C: ; 0x037F961C - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r2, [r0] - mov lr, r2 - b _037F9664 -_037F9630: - ldr ip, [lr, #100] ; 0x64 - cmp lr, r1 - bne _037F9660 - ldr r3, [lr, #96] ; 0x60 - cmp r2, lr - streq ip, [r0] - strne ip, [r3, #100] ; 0x64 - ldr r1, [r0, #4] - cmp r1, lr - streq r3, [r0, #4] - strne r3, [ip, #96] ; 0x60 - b _037F966C -_037F9660: - mov lr, ip -_037F9664: - cmp lr, #0 - bne _037F9630 -_037F966C: - mov r0, lr - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_037F967C -FUN_037F967C: ; 0x037F967C - ldr r2, [r0] - cmp r2, #0 - beq _037F96A8 - ldr r1, [r2, #100] ; 0x64 - str r1, [r0] - cmp r1, #0 - movne r0, #0 - strne r0, [r1, #96] ; 0x60 - moveq r1, #0 - streq r1, [r0, #4] - streq r1, [r2, #92] ; 0x5c -_037F96A8: - mov r0, r2 - bx lr - - arm_func_start FUN_037F96B0 -FUN_037F96B0: ; 0x037F96B0 - ldr ip, [r0] - b _037F96C4 -_037F96B8: - cmp ip, r1 - bxeq lr - ldr ip, [ip, #100] ; 0x64 -_037F96C4: - cmp ip, #0 - beq _037F96DC - ldr r3, [ip, #84] ; 0x54 - ldr r2, [r1, #84] ; 0x54 - cmp r3, r2 - bls _037F96B8 -_037F96DC: - cmp ip, #0 - bne _037F9708 - ldr r2, [r0, #4] - cmp r2, #0 - streq r1, [r0] - strne r1, [r2, #100] ; 0x64 - str r2, [r1, #96] ; 0x60 - mov r2, #0 - str r2, [r1, #100] ; 0x64 - str r1, [r0, #4] - bx lr -_037F9708: - ldr r2, [ip, #96] ; 0x60 - cmp r2, #0 - streq r1, [r0] - strne r1, [r2, #100] ; 0x64 - str r2, [r1, #96] ; 0x60 - str ip, [r1, #100] ; 0x64 - str r1, [ip, #96] ; 0x60 - bx lr - - arm_func_start FUN_037F9728 -FUN_037F9728: ; 0x037F9728 - ldr r1, _037F973C ; =_0380778C - ldr r0, [r1] - add r0, r0, #1 - str r0, [r1] - bx lr -_037F973C: .word _0380778C - - arm_func_start OS_InitContext -OS_InitContext: ; 0x037F9740 - add r1, r1, #4 - str r1, [r0, #64] ; 0x40 - str r2, [r0, #68] ; 0x44 - sub r2, r2, #64 ; 0x40 - tst r2, #4 - subne r2, r2, #4 - str r2, [r0, #56] ; 0x38 - ands r1, r1, #1 - movne r1, #63 ; 0x3f - moveq r1, #31 - str r1, [r0] - mov r1, #0 - str r1, [r0, #4] - str r1, [r0, #8] - str r1, [r0, #12] - str r1, [r0, #16] - str r1, [r0, #20] - str r1, [r0, #24] - str r1, [r0, #28] - str r1, [r0, #32] - str r1, [r0, #36] ; 0x24 - str r1, [r0, #40] ; 0x28 - str r1, [r0, #44] ; 0x2c - str r1, [r0, #48] ; 0x30 - str r1, [r0, #52] ; 0x34 - str r1, [r0, #60] ; 0x3c - bx lr - - arm_func_start OS_SaveContext -OS_SaveContext: ; 0x037F97AC - add r1, r0, #0 - mrs r2, CPSR - str r2, [r1], #4 - mov r0, #211 ; 0xd3 - msr CPSR_c, r0 - str sp, [r1, #64] ; 0x40 - msr CPSR_c, r2 - mov r0, #1 - stmia r1, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr} - adr r0, OS_LoadContext - str r0, [r1, #60] ; 0x3c - mov r0, #0 - bx lr - - arm_func_start OS_LoadContext -OS_LoadContext: ; 0x037F97E0 - mrs r1, CPSR - bic r1, r1, #31 - orr r1, r1, #211 ; 0xd3 - msr CPSR_c, r1 - ldr r1, [r0], #4 - msr SPSR_fsxc, r1 - ldr sp, [r0, #64] ; 0x40 - ldr lr, [r0, #60] ; 0x3c - ldmia r0, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ - nop ; (mov r0, r0) - subs pc, lr, #4 - - arm_func_start OS_ReadMessage -OS_ReadMessage: ; 0x037F980C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - mov r4, r0 - and r8, r7, #1 - add r7, r6, #8 - b _037F9850 -_037F9830: - cmp r8, #0 - bne _037F9848 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0 - b _037F987C -_037F9848: - mov r0, r7 - bl OS_SleepThread -_037F9850: - ldr r0, [r6, #28] - cmp r0, #0 - beq _037F9830 - cmp r5, #0 - ldrne r1, [r6, #16] - ldrne r0, [r6, #24] - ldrne r0, [r1, r0, lsl #2] - strne r0, [r5] - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #1 -_037F987C: - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr - - arm_func_start OS_ReceiveMessage -OS_ReceiveMessage: ; 0x037F9884 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - mov r4, r0 - and r8, r7, #1 - add r7, r6, #8 - b _037F98C8 -_037F98A8: - cmp r8, #0 - bne _037F98C0 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0 - b _037F991C -_037F98C0: - mov r0, r7 - bl OS_SleepThread -_037F98C8: - ldr r0, [r6, #28] - cmp r0, #0 - beq _037F98A8 - cmp r5, #0 - ldrne r1, [r6, #16] - ldrne r0, [r6, #24] - ldrne r0, [r1, r0, lsl #2] - strne r0, [r5] - ldr r0, [r6, #24] - add r0, r0, #1 - ldr r1, [r6, #20] - bl _s32_div_f - str r1, [r6, #24] - ldr r0, [r6, #28] - sub r0, r0, #1 - str r0, [r6, #28] - mov r0, r6 - bl OS_WakeupThread - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #1 -_037F991C: - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr - - arm_func_start OS_SendMessage -OS_SendMessage: ; 0x037F9924 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - mov r4, r0 - and r7, r7, #1 - b _037F9968 -_037F9948: - cmp r7, #0 - bne _037F9960 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0 - b _037F99AC -_037F9960: - mov r0, r6 - bl OS_SleepThread -_037F9968: - ldr r2, [r6, #28] - ldr r1, [r6, #20] - cmp r1, r2 - ble _037F9948 - ldr r0, [r6, #24] - add r0, r0, r2 - bl _s32_div_f - ldr r0, [r6, #16] - str r5, [r0, r1, lsl #2] - ldr r0, [r6, #28] - add r0, r0, #1 - str r0, [r6, #28] - add r0, r6, #8 - bl OS_WakeupThread - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #1 -_037F99AC: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr - - arm_func_start OS_InitMessageQueue -OS_InitMessageQueue: ; 0x037F99B8 - mov ip, #0 - str ip, [r0, #4] - ldr r3, [r0, #4] - str r3, [r0] - str ip, [r0, #12] - ldr r3, [r0, #12] - str r3, [r0, #8] - str r1, [r0, #16] - str r2, [r0, #20] - str ip, [r0, #24] - str ip, [r0, #28] - bx lr - - arm_func_start OSi_DequeueItem -OSi_DequeueItem: ; 0x037F99E8 - ldr r2, [r1, #16] - ldr r1, [r1, #20] - cmp r2, #0 - streq r1, [r0, #112] ; 0x70 - strne r1, [r2, #20] - cmp r1, #0 - streq r2, [r0, #108] ; 0x6c - strne r2, [r1, #16] - bx lr - - arm_func_start OSi_EnqueueTail -OSi_EnqueueTail: ; 0x037F9A0C - ldr r2, [r0, #112] ; 0x70 - cmp r2, #0 - streq r1, [r0, #108] ; 0x6c - strne r1, [r2, #16] - str r2, [r1, #20] - mov r2, #0 - str r2, [r1, #16] - str r1, [r0, #112] ; 0x70 - bx lr - - arm_func_start OSi_UnlockAllMutex -OSi_UnlockAllMutex: ; 0x037F9A30 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - add r5, r6, #108 ; 0x6c - mov r4, #0 - b _037F9A58 -_037F9A44: - mov r0, r5 - bl OSi_RemoveMutexLinkFromQueue - str r4, [r0, #12] - str r4, [r0, #8] - bl OS_WakeupThread -_037F9A58: - ldr r0, [r6, #108] ; 0x6c - cmp r0, #0 - bne _037F9A44 - ldmia sp!, {r4, r5, r6, lr} - bx lr - - arm_func_start OS_UnlockMutex -OS_UnlockMutex: ; 0x037F9A6C - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r5, r0 - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, _037F9AD8 ; =OSi_ThreadInfo - ldr r0, [r0, #4] - ldr r1, [r5, #8] - cmp r1, r0 - bne _037F9AC4 - ldr r1, [r5, #12] - sub r1, r1, #1 - str r1, [r5, #12] - ldr r1, [r5, #12] - cmp r1, #0 - bne _037F9AC4 - mov r1, r5 - bl OSi_DequeueItem - mov r0, #0 - str r0, [r5, #8] - mov r0, r5 - bl OS_WakeupThread -_037F9AC4: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037F9AD8: .word OSi_ThreadInfo - - arm_func_start OS_LockMutex -OS_LockMutex: ; 0x037F9ADC - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r5, r0 - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, _037F9B64 ; =OSi_ThreadInfo - ldr r7, [r0, #4] - mov r6, #0 -_037F9AFC: - ldr r0, [r5, #8] - cmp r0, #0 - bne _037F9B28 - str r7, [r5, #8] - ldr r0, [r5, #12] - add r0, r0, #1 - str r0, [r5, #12] - mov r0, r7 - mov r1, r5 - bl OSi_EnqueueTail - b _037F9B50 -_037F9B28: - cmp r0, r7 - ldreq r0, [r5, #12] - addeq r0, r0, #1 - streq r0, [r5, #12] - beq _037F9B50 - str r5, [r7, #104] ; 0x68 - mov r0, r5 - bl OS_SleepThread - str r6, [r7, #104] ; 0x68 - b _037F9AFC -_037F9B50: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_037F9B64: .word OSi_ThreadInfo - - arm_func_start OS_InitMutex -OS_InitMutex: ; 0x037F9B68 - mov r2, #0 - str r2, [r0, #4] - ldr r1, [r0, #4] - str r1, [r0] - str r2, [r0, #8] - str r2, [r0, #12] - bx lr - - arm_func_start OS_Init -OS_Init: ; 0x037F9B84 - stmfd sp!, {lr} - sub sp, sp, #4 - bl OS_InitArena - bl PXI_Init - bl OS_InitLock - bl OS_InitIrqTable - bl OS_InitTick - bl OS_InitAlarm - bl OS_InitThread - bl OS_InitReset - bl CTRDG_Init - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start OS_SetArenaLo -OS_SetArenaLo: ; 0x037F9BBC - mov r0, r0, lsl #2 - add r0, r0, #40894464 ; 0x2700000 - add r0, r0, #1044480 ; 0xff000 - str r1, [r0, #3488] ; 0xda0 - bx lr - - arm_func_start OS_SetArenaHi -OS_SetArenaHi: ; 0x037F9BD0 - mov r0, r0, lsl #2 - add r0, r0, #40894464 ; 0x2700000 - add r0, r0, #1044480 ; 0xff000 - str r1, [r0, #3524] ; 0xdc4 - bx lr - - arm_func_start OS_GetInitArenaLo -OS_GetInitArenaLo: ; 0x037F9BE4 - cmp r0, #1 - beq _037F9C00 - cmp r0, #7 - beq _037F9C08 - cmp r0, #8 - beq _037F9C18 - b _037F9C2C -_037F9C00: - ldr r0, _037F9C34 ; =0x027FAFCC - bx lr -_037F9C08: - ldr r0, _037F9C38 ; =0x0380B92C - cmp r0, #58720256 ; 0x03800000 - movhi r0, #58720256 ; 0x03800000 - bx lr -_037F9C18: - mov r0, #58720256 ; 0x03800000 - ldr r1, _037F9C38 ; =0x0380B92C - cmp r1, #58720256 ; 0x03800000 - movhi r0, r1 - bx lr -_037F9C2C: - mov r0, #0 - bx lr -_037F9C34: .word 0x027FAFCC -_037F9C38: .word 0x0380B92C - - arm_func_start OS_GetInitArenaHi -OS_GetInitArenaHi: ; 0x037F9C3C - cmp r0, #1 - beq _037F9C58 - cmp r0, #7 - beq _037F9C60 - cmp r0, #8 - beq _037F9C68 - b _037F9CA0 -_037F9C58: - ldr r0, _037F9CA8 ; =0x027FF000 - bx lr -_037F9C60: - mov r0, #58720256 ; 0x03800000 - bx lr -_037F9C68: - ldr r1, _037F9CAC ; =0x00000400 - ldr r0, _037F9CB0 ; =0x0380FF80 - sub r2, r0, r1 - mov r0, #58720256 ; 0x03800000 - ldr r1, _037F9CB4 ; =0x0380B92C - cmp r1, #58720256 ; 0x03800000 - movhi r0, r1 - ldr r1, _037F9CB8 ; =0x00000400 - cmp r1, #0 - bxeq lr - cmp r1, #0 - sublt r0, r0, r1 - subge r0, r2, r1 - bx lr -_037F9CA0: - mov r0, #0 - bx lr -_037F9CA8: .word 0x027FF000 -_037F9CAC: .word 0x00000400 -_037F9CB0: .word 0x0380FF80 -_037F9CB4: .word 0x0380B92C -_037F9CB8: .word 0x00000400 - - arm_func_start OS_GetArenaLo -OS_GetArenaLo: ; 0x037F9CBC - mov r0, r0, lsl #2 - add r0, r0, #40894464 ; 0x2700000 - add r0, r0, #1044480 ; 0xff000 - ldr r0, [r0, #3488] ; 0xda0 - bx lr - - arm_func_start OS_GetArenaHi -OS_GetArenaHi: ; 0x037F9CD0 - mov r0, r0, lsl #2 - add r0, r0, #40894464 ; 0x2700000 - add r0, r0, #1044480 ; 0xff000 - ldr r0, [r0, #3524] ; 0xdc4 - bx lr - - arm_func_start OS_InitArena -OS_InitArena: ; 0x037F9CE4 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _037F9D84 ; =_038078F4 - ldr r0, [r1] - cmp r0, #0 - bne _037F9D78 - mov r0, #1 - str r0, [r1] - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #1 - bl OS_SetArenaHi - mov r0, #1 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #1 - bl OS_SetArenaLo - mov r0, #7 - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #7 - bl OS_SetArenaHi - mov r0, #7 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #7 - bl OS_SetArenaLo - mov r0, #8 - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #8 - bl OS_SetArenaHi - mov r0, #8 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #8 - bl OS_SetArenaLo -_037F9D78: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037F9D84: .word _038078F4 - - arm_func_start OS_CheckHeap -OS_CheckHeap: ; 0x037F9D88 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - mov r7, r1 - mov r6, #0 - mov r5, r6 - mvn r4, #0 - bl OS_DisableInterrupts - ldr r1, _037F9F34 ; =OSiHeapInfo - ldr ip, [r1, r8, lsl #2] - mov r1, r4 - cmp r7, r1 - ldreq r7, [ip] - ldr r2, [ip, #16] - cmp r2, #0 - beq _037F9F24 - cmp r7, #0 - blt _037F9F24 - ldr r1, [ip, #4] - cmp r7, r1 - bge _037F9F24 - mov r1, #12 - mul r1, r7, r1 - add r3, r2, r1 - ldr r2, [r2, r1] - cmp r2, #0 - blt _037F9F24 - ldr r1, [r3, #8] - cmp r1, #0 - beq _037F9E70 - ldr r7, [r1] - cmp r7, #0 - bne _037F9F24 - b _037F9E70 -_037F9E0C: - ldr r7, [ip, #8] - cmp r7, r1 - bhi _037F9F24 - ldr r7, [ip, #12] - cmp r1, r7 - bcs _037F9F24 - ands r7, r1, #31 - bne _037F9F24 - ldr lr, [r1, #4] - cmp lr, #0 - beq _037F9E44 - ldr r7, [lr] - cmp r7, r1 - bne _037F9F24 -_037F9E44: - ldr r7, [r1, #8] - cmp r7, #64 ; 0x40 - bcc _037F9F24 - ands r1, r7, #31 - bne _037F9F24 - add r6, r6, r7 - cmp r6, #0 - ble _037F9F24 - cmp r6, r2 - bgt _037F9F24 - mov r1, lr -_037F9E70: - cmp r1, #0 - bne _037F9E0C - ldr r1, [r3, #4] - cmp r1, #0 - beq _037F9F14 - ldr r3, [r1] - cmp r3, #0 - bne _037F9F24 - b _037F9F14 -_037F9E94: - ldr r3, [ip, #8] - cmp r3, r1 - bhi _037F9F24 - ldr r3, [ip, #12] - cmp r1, r3 - bcs _037F9F24 - ands r3, r1, #31 - bne _037F9F24 - ldr lr, [r1, #4] - cmp lr, #0 - beq _037F9ECC - ldr r3, [lr] - cmp r3, r1 - bne _037F9F24 -_037F9ECC: - ldr r7, [r1, #8] - cmp r7, #64 ; 0x40 - bcc _037F9F24 - ands r3, r7, #31 - bne _037F9F24 - cmp lr, #0 - beq _037F9EF4 - add r1, r1, r7 - cmp r1, lr - bcs _037F9F24 -_037F9EF4: - add r6, r6, r7 - sub r1, r7, #32 - add r5, r5, r1 - cmp r6, #0 - ble _037F9F24 - cmp r6, r2 - bgt _037F9F24 - mov r1, lr -_037F9F14: - cmp r1, #0 - bne _037F9E94 - cmp r6, r2 - moveq r4, r5 -_037F9F24: - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_037F9F34: .word OSiHeapInfo - - arm_func_start OS_CreateHeap -OS_CreateHeap: ; 0x037F9F38 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r4, r0 - mov r6, r1 - mov r5, r2 - bl OS_DisableInterrupts - ldr r1, _037F9FDC ; =OSiHeapInfo - ldr r7, [r1, r4, lsl #2] - add r1, r6, #31 - bic r6, r1, #31 - bic r5, r5, #31 - mov r4, #0 - ldr lr, [r7, #4] - mov r1, #12 - b _037F9FC0 -_037F9F74: - ldr r3, [r7, #16] - mul r2, r4, r1 - add ip, r3, r2 - ldr r2, [r3, r2] - cmp r2, #0 - bge _037F9FBC - sub r1, r5, r6 - str r1, [ip] - mov r2, #0 - str r2, [r6] - str r2, [r6, #4] - ldr r1, [ip] - str r1, [r6, #8] - str r6, [ip, #4] - str r2, [ip, #8] - bl OS_RestoreInterrupts - mov r0, r4 - b _037F9FD0 -_037F9FBC: - add r4, r4, #1 -_037F9FC0: - cmp r4, lr - blt _037F9F74 - bl OS_RestoreInterrupts - mvn r0, #0 -_037F9FD0: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_037F9FDC: .word OSiHeapInfo - - arm_func_start OS_InitAlloc -OS_InitAlloc: ; 0x037F9FE0 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r0 - mov r5, r1 - mov r4, r2 - mov r6, r3 - bl OS_DisableInterrupts - ldr r1, _037FA084 ; =OSiHeapInfo - str r5, [r1, r7, lsl #2] - mov r2, #12 - mul r1, r6, r2 - add r3, r5, #20 - str r3, [r5, #16] - str r6, [r5, #4] - mov r8, #0 - mvn lr, #0 - mov ip, r8 - b _037FA044 -_037FA024: - ldr r6, [r5, #16] - mul r3, r8, r2 - add r7, r6, r3 - str lr, [r6, r3] - str ip, [r7, #8] - ldr r3, [r7, #8] - str r3, [r7, #4] - add r8, r8, #1 -_037FA044: - ldr r3, [r5, #4] - cmp r8, r3 - blt _037FA024 - mvn r2, #0 - str r2, [r5] - ldr r2, [r5, #16] - add r1, r2, r1 - add r1, r1, #31 - bic r1, r1, #31 - str r1, [r5, #8] - bic r1, r4, #31 - str r1, [r5, #12] - bl OS_RestoreInterrupts - ldr r0, [r5, #8] - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_037FA084: .word OSiHeapInfo - - arm_func_start OS_SetCurrentHeap -OS_SetCurrentHeap: ; 0x037FA088 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r4, r0 - mov r5, r1 - bl OS_DisableInterrupts - ldr r1, _037FA0C0 ; =OSiHeapInfo - ldr r1, [r1, r4, lsl #2] - ldr r4, [r1] - str r5, [r1] - bl OS_RestoreInterrupts - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037FA0C0: .word OSiHeapInfo - - arm_func_start OS_FreeToHeap -OS_FreeToHeap: ; 0x037FA0C4 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r0 - mov r4, r1 - mov r6, r2 - bl OS_DisableInterrupts - mov r5, r0 - ldr r0, _037FA134 ; =OSiHeapInfo - ldr r0, [r0, r7, lsl #2] - cmp r4, #0 - ldrlt r4, [r0] - sub r6, r6, #32 - ldr r1, [r0, #16] - mov r0, #12 - mla r7, r4, r0, r1 - ldr r0, [r7, #8] - mov r1, r6 - bl FUN_037FA304 - str r0, [r7, #8] - ldr r0, [r7, #4] - mov r1, r6 - bl FUN_037FA250 - str r0, [r7, #4] - mov r0, r5 - bl OS_RestoreInterrupts - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_037FA134: .word OSiHeapInfo - - arm_func_start OS_AllocFromHeap -OS_AllocFromHeap: ; 0x037FA138 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - mov r4, r0 - ldr r1, _037FA24C ; =OSiHeapInfo - ldr r1, [r1, r6, lsl #2] - cmp r1, #0 - bne _037FA170 - bl OS_RestoreInterrupts - mov r0, #0 - b _037FA240 -_037FA170: - cmp r5, #0 - ldrlt r5, [r1] - ldr r1, [r1, #16] - mov r0, #12 - mla r6, r5, r0, r1 - add r0, r7, #32 - add r0, r0, #31 - bic r7, r0, #31 - ldr r0, [r6, #4] - mov r5, r0 - b _037FA1AC -_037FA19C: - ldr r1, [r5, #8] - cmp r7, r1 - ble _037FA1B4 - ldr r5, [r5, #4] -_037FA1AC: - cmp r5, #0 - bne _037FA19C -_037FA1B4: - cmp r5, #0 - bne _037FA1CC - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0 - b _037FA240 -_037FA1CC: - ldr r1, [r5, #8] - sub r1, r1, r7 - cmp r1, #64 ; 0x40 - bcs _037FA1EC - mov r1, r5 - bl FUN_037FA304 - str r0, [r6, #4] - b _037FA224 -_037FA1EC: - str r7, [r5, #8] - add r2, r5, r7 - str r1, [r2, #8] - ldr r0, [r5] - str r0, [r5, r7] - ldr r0, [r5, #4] - str r0, [r2, #4] - ldr r0, [r2, #4] - cmp r0, #0 - strne r2, [r0] - ldr r0, [r2] - cmp r0, #0 - strne r2, [r0, #4] - streq r2, [r6, #4] -_037FA224: - ldr r0, [r6, #8] - mov r1, r5 - bl FUN_037FA32C - str r0, [r6, #8] - mov r0, r4 - bl OS_RestoreInterrupts - add r0, r5, #32 -_037FA240: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr -_037FA24C: .word OSiHeapInfo - - arm_func_start FUN_037FA250 -FUN_037FA250: ; 0x037FA250 - stmfd sp!, {lr} - sub sp, sp, #4 - mov ip, r0 - mov lr, #0 - b _037FA274 -_037FA264: - cmp r1, ip - bls _037FA27C - mov lr, ip - ldr ip, [ip, #4] -_037FA274: - cmp ip, #0 - bne _037FA264 -_037FA27C: - str ip, [r1, #4] - str lr, [r1] - cmp ip, #0 - beq _037FA2BC - str r1, [ip] - ldr r3, [r1, #8] - add r2, r1, r3 - cmp r2, ip - bne _037FA2BC - ldr r2, [ip, #8] - add r2, r3, r2 - str r2, [r1, #8] - ldr ip, [ip, #4] - str ip, [r1, #4] - cmp ip, #0 - strne r1, [ip] -_037FA2BC: - cmp lr, #0 - beq _037FA2F4 - str r1, [lr, #4] - ldr r2, [lr, #8] - add r3, lr, r2 - cmp r3, r1 - bne _037FA2F8 - ldr r1, [r1, #8] - add r1, r2, r1 - str r1, [lr, #8] - str ip, [lr, #4] - cmp ip, #0 - strne lr, [ip] - b _037FA2F8 -_037FA2F4: - mov r0, r1 -_037FA2F8: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_037FA304 -FUN_037FA304: ; 0x037FA304 - ldr r3, [r1, #4] - cmp r3, #0 - ldrne r2, [r1] - strne r2, [r3] - ldr r2, [r1] - cmp r2, #0 - ldreq r0, [r1, #4] - ldrne r1, [r1, #4] - strne r1, [r2, #4] - bx lr - - arm_func_start FUN_037FA32C -FUN_037FA32C: ; 0x037FA32C - str r0, [r1, #4] - mov r2, #0 - str r2, [r1] - cmp r0, #0 - strne r1, [r0] - mov r0, r1 - bx lr - - arm_func_start OSi_SetTimerReserved -OSi_SetTimerReserved: ; 0x037FA348 - ldr r1, _037FA360 ; =_0380791C - ldrh r3, [r1] - mov r2, #1 - orr r0, r3, r2, lsl r0 - strh r0, [r1] - bx lr -_037FA360: .word _0380791C - - arm_func_start OS_GetTick -OS_GetTick: ; 0x037FA364 - stmfd sp!, {lr} - sub sp, sp, #12 - bl OS_DisableInterrupts - ldr r1, _037FA404 ; =0x04000100 - ldrh r1, [r1] - strh r1, [sp] - ldr r1, _037FA408 ; =OSi_TickCounter - ldr ip, [r1] - ldr r3, [r1, #4] - ldr r2, _037FA40C ; =0x0000FFFF - mvn r1, #0 - and r2, r3, r2 - and r1, ip, r1 - str r1, [sp, #4] - str r2, [sp, #8] - ldr r1, _037FA410 ; =0x04000214 - ldr r1, [r1] - ands r1, r1, #8 - beq _037FA3D8 - ldrh r1, [sp] - ands r1, r1, #32768 ; 0x8000 - bne _037FA3D8 - ldr r3, [sp, #4] - ldr r2, [sp, #8] - mov r1, #1 - adds r3, r3, r1 - adc r1, r2, #0 - str r3, [sp, #4] - str r1, [sp, #8] -_037FA3D8: - bl OS_RestoreInterrupts - ldr r2, [sp, #4] - ldr r0, [sp, #8] - mov r1, r0, lsl #16 - orr r1, r1, r2, lsr #16 - ldrh r0, [sp] - orr r1, r1, r0, asr #31 - orr r0, r0, r2, lsl #16 - add sp, sp, #12 - ldmia sp!, {lr} - bx lr -_037FA404: .word 0x04000100 -_037FA408: .word OSi_TickCounter -_037FA40C: .word 0x0000FFFF -_037FA410: .word 0x04000214 - - arm_func_start FUN_037FA414 -FUN_037FA414: ; 0x037FA414 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _037FA488 ; =OSi_TickCounter - ldr ip, [r1] - ldr r2, [r1, #4] - mov r3, #0 - mov r0, #1 - adds ip, ip, r0 - adc r0, r2, #0 - str ip, [r1] - str r0, [r1, #4] - ldr r0, _037FA48C ; =OSi_NeedResetTimer - ldr r1, [r0] - cmp r1, #0 - beq _037FA46C - ldr r2, _037FA490 ; =0x04000102 - strh r3, [r2] - ldr r1, _037FA494 ; =0x04000100 - strh r3, [r1] - mov r1, #193 ; 0xc1 - strh r1, [r2] - str r3, [r0] -_037FA46C: - mov r0, #0 - ldr r1, _037FA498 ; =FUN_037FA414 - mov r2, r0 - bl OSi_EnterTimerCallback - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037FA488: .word OSi_TickCounter -_037FA48C: .word OSi_NeedResetTimer -_037FA490: .word 0x04000102 -_037FA494: .word 0x04000100 -_037FA498: .word FUN_037FA414 - - arm_func_start OS_IsTickAvailable -OS_IsTickAvailable: ; 0x037FA49C - ldr r0, _037FA4A8 ; =_03807920 - ldrh r0, [r0] - bx lr -_037FA4A8: .word _03807920 - - arm_func_start OS_InitTick -OS_InitTick: ; 0x037FA4AC - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _037FA528 ; =_03807920 - ldrh r1, [r0] - cmp r1, #0 - bne _037FA51C - mov r1, #1 - strh r1, [r0] - mov r0, #0 - bl OSi_SetTimerReserved - mov r2, #0 - ldr r0, _037FA52C ; =OSi_TickCounter - str r2, [r0] - str r2, [r0, #4] - ldr r1, _037FA530 ; =0x04000102 - strh r2, [r1] - ldr r0, _037FA534 ; =0x04000100 - strh r2, [r0] - mov r0, #193 ; 0xc1 - strh r0, [r1] - mov r0, #8 - ldr r1, _037FA538 ; =FUN_037FA414 - bl OS_SetIrqFunction - mov r0, #8 - bl OS_EnableIrqMask - mov r1, #0 - ldr r0, _037FA53C ; =OSi_NeedResetTimer - str r1, [r0] -_037FA51C: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037FA528: .word _03807920 -_037FA52C: .word OSi_TickCounter -_037FA530: .word 0x04000102 -_037FA534: .word 0x04000100 -_037FA538: .word FUN_037FA414 -_037FA53C: .word OSi_NeedResetTimer - arm_func_start FUN_037FA540 FUN_037FA540: ; 0x037FA540 stmdb sp!, {r0, lr} |