mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-20 07:44:54 -05:00
209 lines
3.5 KiB
ArmAsm
209 lines
3.5 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "global.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start OS_ReadMessage
|
|
OS_ReadMessage: ; 0x020CBBE0
|
|
stmdb sp!, {r4-r8,lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r7, r2
|
|
bl OS_DisableInterrupts
|
|
ldr r1, [r6, #0x1c]
|
|
mov r4, r0
|
|
cmp r1, #0x0
|
|
bne _020CBC3C
|
|
and r8, r7, #0x1
|
|
add r7, r6, #0x8
|
|
_020CBC0C:
|
|
cmp r8, #0x0
|
|
bne _020CBC28
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
_020CBC1C:
|
|
mov r0, #0x0
|
|
ldmia sp!, {r4-r8,lr}
|
|
bx lr
|
|
_020CBC28:
|
|
mov r0, r7
|
|
bl OS_SleepThread
|
|
ldr r0, [r6, #0x1c]
|
|
cmp r0, #0x0
|
|
beq _020CBC0C
|
|
_020CBC3C:
|
|
cmp r5, #0x0
|
|
ldrne r1, [r6, #0x10]
|
|
ldrne r0, [r6, #0x18]
|
|
ldrne r0, [r1, r0, lsl #0x2]
|
|
strne r0, [r5, #0x0]
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
mov r0, #0x1
|
|
ldmia sp!, {r4-r8,lr}
|
|
bx lr
|
|
|
|
arm_func_start OS_JamMessage
|
|
OS_JamMessage: ; 0x020CBC64
|
|
stmdb sp!, {r4-r7,lr}
|
|
sub sp, sp, #0x4
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r7, r2
|
|
bl OS_DisableInterrupts
|
|
ldr r1, [r6, #0x14]
|
|
ldr r2, [r6, #0x1c]
|
|
mov r4, r0
|
|
cmp r1, r2
|
|
bgt _020CBCCC
|
|
and r7, r7, #0x1
|
|
_020CBC94:
|
|
cmp r7, #0x0
|
|
bne _020CBCB4
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
add sp, sp, #0x4
|
|
mov r0, #0x0
|
|
ldmia sp!, {r4-r7,lr}
|
|
bx lr
|
|
_020CBCB4:
|
|
mov r0, r6
|
|
bl OS_SleepThread
|
|
ldr r1, [r6, #0x14]
|
|
ldr r0, [r6, #0x1c]
|
|
cmp r1, r0
|
|
ble _020CBC94
|
|
_020CBCCC:
|
|
ldr r0, [r6, #0x18]
|
|
add r0, r0, r1
|
|
sub r0, r0, #0x1
|
|
bl _s32_div_f
|
|
str r1, [r6, #0x18]
|
|
ldr r2, [r6, #0x10]
|
|
ldr r1, [r6, #0x18]
|
|
add r0, r6, #0x8
|
|
str r5, [r2, r1, lsl #0x2]
|
|
ldr r1, [r6, #0x1c]
|
|
add r1, r1, #0x1
|
|
str r1, [r6, #0x1c]
|
|
bl OS_WakeupThread
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
mov r0, #0x1
|
|
add sp, sp, #0x4
|
|
ldmia sp!, {r4-r7,lr}
|
|
bx lr
|
|
|
|
arm_func_start OS_ReceiveMessage
|
|
OS_ReceiveMessage: ; 0x020CBD18
|
|
stmdb sp!, {r4-r8,lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r7, r2
|
|
bl OS_DisableInterrupts
|
|
ldr r1, [r6, #0x1c]
|
|
mov r4, r0
|
|
cmp r1, #0x0
|
|
bne _020CBD74
|
|
and r8, r7, #0x1
|
|
add r7, r6, #0x8
|
|
_020CBD44:
|
|
cmp r8, #0x0
|
|
bne _020CBD60
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
_020CBD54:
|
|
mov r0, #0x0
|
|
ldmia sp!, {r4-r8,lr}
|
|
bx lr
|
|
_020CBD60:
|
|
mov r0, r7
|
|
bl OS_SleepThread
|
|
ldr r0, [r6, #0x1c]
|
|
cmp r0, #0x0
|
|
beq _020CBD44
|
|
_020CBD74:
|
|
cmp r5, #0x0
|
|
ldrne r1, [r6, #0x10]
|
|
ldrne r0, [r6, #0x18]
|
|
ldrne r0, [r1, r0, lsl #0x2]
|
|
strne r0, [r5, #0x0]
|
|
ldr r0, [r6, #0x18]
|
|
ldr r1, [r6, #0x14]
|
|
add r0, r0, #0x1
|
|
bl _s32_div_f
|
|
str r1, [r6, #0x18]
|
|
ldr r1, [r6, #0x1c]
|
|
mov r0, r6
|
|
sub r1, r1, #0x1
|
|
str r1, [r6, #0x1c]
|
|
bl OS_WakeupThread
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
mov r0, #0x1
|
|
ldmia sp!, {r4-r8,lr}
|
|
bx lr
|
|
|
|
arm_func_start OS_SendMessage
|
|
OS_SendMessage: ; 0x020CBDC4
|
|
stmdb sp!, {r4-r7,lr}
|
|
sub sp, sp, #0x4
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r7, r2
|
|
bl OS_DisableInterrupts
|
|
ldr r2, [r6, #0x1c]
|
|
ldr r1, [r6, #0x14]
|
|
mov r4, r0
|
|
cmp r1, r2
|
|
bgt _020CBE2C
|
|
and r7, r7, #0x1
|
|
_020CBDF4:
|
|
cmp r7, #0x0
|
|
bne _020CBE14
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
add sp, sp, #0x4
|
|
mov r0, #0x0
|
|
ldmia sp!, {r4-r7,lr}
|
|
bx lr
|
|
_020CBE14:
|
|
mov r0, r6
|
|
bl OS_SleepThread
|
|
ldr r2, [r6, #0x1c]
|
|
ldr r1, [r6, #0x14]
|
|
cmp r1, r2
|
|
ble _020CBDF4
|
|
_020CBE2C:
|
|
ldr r0, [r6, #0x18]
|
|
add r0, r0, r2
|
|
bl _s32_div_f
|
|
ldr r2, [r6, #0x10]
|
|
add r0, r6, #0x8
|
|
str r5, [r2, r1, lsl #0x2]
|
|
ldr r1, [r6, #0x1c]
|
|
add r1, r1, #0x1
|
|
str r1, [r6, #0x1c]
|
|
bl OS_WakeupThread
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
mov r0, #0x1
|
|
add sp, sp, #0x4
|
|
ldmia sp!, {r4-r7,lr}
|
|
bx lr
|
|
|
|
arm_func_start OS_InitMessageQueue
|
|
OS_InitMessageQueue: ; 0x020CBE6C
|
|
mov r12, #0x0
|
|
str r12, [r0, #0x4]
|
|
ldr r3, [r0, #0x4]
|
|
str r3, [r0, #0x0]
|
|
str r12, [r0, #0xc]
|
|
ldr r3, [r0, #0xc]
|
|
str r3, [r0, #0x8]
|
|
str r1, [r0, #0x10]
|
|
str r2, [r0, #0x14]
|
|
str r12, [r0, #0x18]
|
|
str r12, [r0, #0x1c]
|
|
bx lr
|