diff options
author | red031000 <rubenru09@aol.com> | 2020-06-01 18:54:43 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-06-01 18:54:43 +0100 |
commit | 65a29a0733b1139728d0adc20c75c1f6e9799727 (patch) | |
tree | 7dabdc0fdfba68d421402d43cf4e9936fdff3322 /arm7/asm/OS_message.s | |
parent | 1cc951b5c1369ee182602e60089d0e0476f4c9ab (diff) |
more splits of ARM7
Diffstat (limited to 'arm7/asm/OS_message.s')
-rw-r--r-- | arm7/asm/OS_message.s | 147 |
1 files changed, 147 insertions, 0 deletions
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 |