diff options
-rw-r--r-- | arm7/arm7.lsf | 5 | ||||
-rw-r--r-- | arm7/asm/OS_arena.s | 149 | ||||
-rw-r--r-- | arm7/asm/OS_context.s | 65 | ||||
-rw-r--r-- | arm7/asm/OS_init.s | 21 | ||||
-rw-r--r-- | arm7/asm/OS_message.s | 147 | ||||
-rw-r--r-- | arm7/asm/OS_mutex.s | 131 | ||||
-rw-r--r-- | arm7/asm/dtcm.s | 493 | ||||
-rw-r--r-- | arm7/global.inc | 2 |
8 files changed, 520 insertions, 493 deletions
diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf index 0f1a6724..3be0b734 100644 --- a/arm7/arm7.lsf +++ b/arm7/arm7.lsf @@ -20,6 +20,11 @@ Autoload WRAM Object OS_interrupt.o Object OS_spinLock.o Object OS_thread.o + Object OS_context.o + Object OS_message.o + Object OS_mutex.o + Object OS_init.o + Object OS_arena.o Object dtcm.o Object libsyscall.o Object dtcm2.o diff --git a/arm7/asm/OS_arena.s b/arm7/asm/OS_arena.s new file mode 100644 index 00000000..3b444cdd --- /dev/null +++ b/arm7/asm/OS_arena.s @@ -0,0 +1,149 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + 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 diff --git a/arm7/asm/OS_context.s b/arm7/asm/OS_context.s new file mode 100644 index 00000000..21479b1f --- /dev/null +++ b/arm7/asm/OS_context.s @@ -0,0 +1,65 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + 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, _037F97E0 + str r0, [r1, #60] ; 0x3c + mov r0, #0 + bx lr + + arm_func_start OS_LoadContext +OS_LoadContext: ; 0x037F97E0 +_037F97E0: ; needed because otherwise it breaks + 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 diff --git a/arm7/asm/OS_init.s b/arm7/asm/OS_init.s new file mode 100644 index 00000000..d0e471bb --- /dev/null +++ b/arm7/asm/OS_init.s @@ -0,0 +1,21 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + 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 diff --git a/arm7/asm/OS_message.s b/arm7/asm/OS_message.s new file mode 100644 index 00000000..ade175de --- /dev/null +++ b/arm7/asm/OS_message.s @@ -0,0 +1,147 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + 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 diff --git a/arm7/asm/OS_mutex.s b/arm7/asm/OS_mutex.s new file mode 100644 index 00000000..981842b8 --- /dev/null +++ b/arm7/asm/OS_mutex.s @@ -0,0 +1,131 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + 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 diff --git a/arm7/asm/dtcm.s b/arm7/asm/dtcm.s index 8f636027..a7b69b3e 100644 --- a/arm7/asm/dtcm.s +++ b/arm7/asm/dtcm.s @@ -2,499 +2,6 @@ .include "global.inc" .section .text - 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, _037F97E0 - str r0, [r1, #60] ; 0x3c - mov r0, #0 - bx lr - - arm_func_start OS_LoadContext -OS_LoadContext: ; 0x037F97E0 -_037F97E0: ; needed because otherwise it breaks - 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} diff --git a/arm7/global.inc b/arm7/global.inc index e14b3ae6..8ef993bc 100644 --- a/arm7/global.inc +++ b/arm7/global.inc @@ -40,9 +40,11 @@ .extern OS_GetProcMode
.extern OS_Init
.extern OS_InitAlloc
+.extern OS_InitArena
.extern OS_InitContext
.extern OS_InitIrqTable
.extern OS_InitLock
+.extern OS_InitReset
.extern OS_InitThread
.extern OS_IsResetOccurred
.extern OS_LoadContext
|