diff options
author | red031000 <rubenru09@aol.com> | 2020-06-01 23:29:20 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-06-01 23:29:20 +0100 |
commit | 1fef9c43196e1fc8f87f52c4208dcca13663cf5d (patch) | |
tree | 0e405f9c077ac4d074f3784c07aa8c50fefde053 | |
parent | 65a29a0733b1139728d0adc20c75c1f6e9799727 (diff) |
alloc, tick, and timer
-rw-r--r-- | arm7/arm7.lsf | 3 | ||||
-rw-r--r-- | arm7/asm/OS_alloc.s | 427 | ||||
-rw-r--r-- | arm7/asm/OS_tick.s | 138 | ||||
-rw-r--r-- | arm7/asm/OS_timer.s | 14 | ||||
-rw-r--r-- | arm7/asm/dtcm.s | 567 | ||||
-rw-r--r-- | arm7/global.inc | 2 |
6 files changed, 584 insertions, 567 deletions
diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf index 3be0b734..e047081a 100644 --- a/arm7/arm7.lsf +++ b/arm7/arm7.lsf @@ -25,6 +25,9 @@ Autoload WRAM Object OS_mutex.o Object OS_init.o Object OS_arena.o + Object OS_alloc.o + Object OS_timer.o + Object OS_tick.o Object dtcm.o Object libsyscall.o Object dtcm2.o diff --git a/arm7/asm/OS_alloc.s b/arm7/asm/OS_alloc.s new file mode 100644 index 00000000..43372371 --- /dev/null +++ b/arm7/asm/OS_alloc.s @@ -0,0 +1,427 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + 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 DLExtract + str r0, [r7, #8] + ldr r0, [r7, #4] + mov r1, r6 + bl DLInsert + 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 DLExtract + 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 DLAddFront + 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 DLInsert +DLInsert: ; 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 DLExtract +DLExtract: ; 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 DLAddFront +DLAddFront: ; 0x037FA32C + str r0, [r1, #4] + mov r2, #0 + str r2, [r1] + cmp r0, #0 + strne r1, [r0] + mov r0, r1 + bx lr diff --git a/arm7/asm/OS_tick.s b/arm7/asm/OS_tick.s new file mode 100644 index 00000000..40589867 --- /dev/null +++ b/arm7/asm/OS_tick.s @@ -0,0 +1,138 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + 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 OSi_CountUpTick +OSi_CountUpTick: ; 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 ; =OSi_CountUpTick + 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 OSi_CountUpTick + + 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 ; =OSi_CountUpTick + 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 OSi_CountUpTick +_037FA53C: .word OSi_NeedResetTimer diff --git a/arm7/asm/OS_timer.s b/arm7/asm/OS_timer.s new file mode 100644 index 00000000..5794046e --- /dev/null +++ b/arm7/asm/OS_timer.s @@ -0,0 +1,14 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + 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 diff --git a/arm7/asm/dtcm.s b/arm7/asm/dtcm.s index a7b69b3e..a403919a 100644 --- a/arm7/asm/dtcm.s +++ b/arm7/asm/dtcm.s @@ -2,573 +2,6 @@ .include "global.inc" .section .text - 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} diff --git a/arm7/global.inc b/arm7/global.inc index 8ef993bc..fc925f6c 100644 --- a/arm7/global.inc +++ b/arm7/global.inc @@ -26,6 +26,7 @@ .extern OSi_IrqDma1
.extern OSi_IrqDma0
.extern OSi_RemoveMutexLinkFromQueue
+.extern OSi_SetTimerReserved
.extern OSi_UnlockAllMutex
.extern OS_IrqDummy
.extern OS_CheckHeap
@@ -47,6 +48,7 @@ .extern OS_InitReset
.extern OS_InitThread
.extern OS_IsResetOccurred
+.extern OS_IsTickAvailable
.extern OS_LoadContext
.extern OS_ResetRequestIrqMask
.extern OS_ResetSystem
|