mirror of
https://github.com/pret/pokediamond.git
synced 2026-09-10 18:16:29 -05:00
171 lines
3.0 KiB
ArmAsm
171 lines
3.0 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "global.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start OSi_DequeueItem
|
|
OSi_DequeueItem: ; 0x020CBE9C
|
|
ldr r2, [r1, #0x10]
|
|
ldr r1, [r1, #0x14]
|
|
cmp r2, #0x0
|
|
streq r1, [r0, #0x8c]
|
|
strne r1, [r2, #0x14]
|
|
cmp r1, #0x0
|
|
streq r2, [r0, #0x88]
|
|
strne r2, [r1, #0x10]
|
|
bx lr
|
|
|
|
arm_func_start OSi_EnqueueTail
|
|
OSi_EnqueueTail: ; 0x020CBEC0
|
|
ldr r2, [r0, #0x8c]
|
|
cmp r2, #0x0
|
|
streq r1, [r0, #0x88]
|
|
strne r1, [r2, #0x10]
|
|
str r2, [r1, #0x14]
|
|
mov r2, #0x0
|
|
str r2, [r1, #0x10]
|
|
str r1, [r0, #0x8c]
|
|
bx lr
|
|
|
|
arm_func_start OS_TryLockMutex
|
|
OS_TryLockMutex: ; 0x020CBEE4
|
|
stmdb sp!, {r4-r6,lr}
|
|
mov r5, r0
|
|
bl OS_DisableInterrupts
|
|
ldr r2, [r5, #0x8]
|
|
ldr r1, _020CBF54 ; =OSi_ThreadInfo
|
|
mov r4, r0
|
|
cmp r2, #0x0
|
|
ldr r0, [r1, #0x4]
|
|
bne _020CBF28
|
|
str r0, [r5, #0x8]
|
|
ldr r2, [r5, #0xc]
|
|
mov r1, r5
|
|
add r2, r2, #0x1
|
|
str r2, [r5, #0xc]
|
|
bl OSi_EnqueueTail
|
|
mov r6, #0x1
|
|
b _020CBF40
|
|
_020CBF28:
|
|
cmp r2, r0
|
|
ldreq r0, [r5, #0xc]
|
|
moveq r6, #0x1
|
|
addeq r0, r0, #0x1
|
|
streq r0, [r5, #0xc]
|
|
movne r6, #0x0
|
|
_020CBF40:
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
mov r0, r6
|
|
ldmia sp!, {r4-r6,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020CBF54: .word OSi_ThreadInfo
|
|
|
|
arm_func_start OSi_UnlockAllMutex
|
|
OSi_UnlockAllMutex: ; 0x020CBF58
|
|
stmdb sp!, {r4-r6,lr}
|
|
mov r6, r0
|
|
ldr r0, [r6, #0x88]
|
|
cmp r0, #0x0
|
|
ldmeqia sp!, {r4-r6,lr}
|
|
bxeq lr
|
|
add r5, r6, #0x88
|
|
mov r4, #0x0
|
|
_020CBF78:
|
|
mov r0, r5
|
|
bl OSi_RemoveMutexLinkFromQueue
|
|
str r4, [r0, #0xc]
|
|
str r4, [r0, #0x8]
|
|
bl OS_WakeupThread
|
|
ldr r0, [r6, #0x88]
|
|
cmp r0, #0x0
|
|
bne _020CBF78
|
|
ldmia sp!, {r4-r6,lr}
|
|
bx lr
|
|
|
|
arm_func_start OS_UnlockMutex
|
|
OS_UnlockMutex: ; 0x020CBFA0
|
|
stmdb sp!, {r4-r5,lr}
|
|
sub sp, sp, #0x4
|
|
mov r5, r0
|
|
bl OS_DisableInterrupts
|
|
ldr r1, _020CC00C ; =OSi_ThreadInfo
|
|
mov r4, r0
|
|
ldr r0, [r1, #0x4]
|
|
ldr r1, [r5, #0x8]
|
|
cmp r1, r0
|
|
bne _020CBFF8
|
|
ldr r1, [r5, #0xc]
|
|
sub r1, r1, #0x1
|
|
str r1, [r5, #0xc]
|
|
ldr r1, [r5, #0xc]
|
|
cmp r1, #0x0
|
|
bne _020CBFF8
|
|
mov r1, r5
|
|
bl OSi_DequeueItem
|
|
mov r1, #0x0
|
|
mov r0, r5
|
|
str r1, [r5, #0x8]
|
|
bl OS_WakeupThread
|
|
_020CBFF8:
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
add sp, sp, #0x4
|
|
ldmia sp!, {r4-r5,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020CC00C: .word OSi_ThreadInfo
|
|
|
|
arm_func_start OS_LockMutex
|
|
OS_LockMutex: ; 0x020CC010
|
|
stmdb sp!, {r4-r7,lr}
|
|
sub sp, sp, #0x4
|
|
mov r5, r0
|
|
bl OS_DisableInterrupts
|
|
ldr r1, _020CC098 ; =OSi_ThreadInfo
|
|
mov r4, r0
|
|
ldr r7, [r1, #0x4]
|
|
mov r6, #0x0
|
|
_020CC030:
|
|
ldr r0, [r5, #0x8]
|
|
cmp r0, #0x0
|
|
bne _020CC05C
|
|
str r7, [r5, #0x8]
|
|
ldr r1, [r5, #0xc]
|
|
mov r0, r7
|
|
add r2, r1, #0x1
|
|
mov r1, r5
|
|
str r2, [r5, #0xc]
|
|
bl OSi_EnqueueTail
|
|
b _020CC084
|
|
_020CC05C:
|
|
cmp r0, r7
|
|
ldreq r0, [r5, #0xc]
|
|
addeq r0, r0, #0x1
|
|
streq r0, [r5, #0xc]
|
|
beq _020CC084
|
|
mov r0, r5
|
|
str r5, [r7, #0x84]
|
|
bl OS_SleepThread
|
|
str r6, [r7, #0x84]
|
|
b _020CC030
|
|
_020CC084:
|
|
mov r0, r4
|
|
bl OS_RestoreInterrupts
|
|
add sp, sp, #0x4
|
|
ldmia sp!, {r4-r7,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020CC098: .word OSi_ThreadInfo
|
|
|
|
arm_func_start OS_InitMutex
|
|
OS_InitMutex: ; 0x020CC09C
|
|
mov r2, #0x0
|
|
str r2, [r0, #0x4]
|
|
ldr r1, [r0, #0x4]
|
|
str r1, [r0, #0x0]
|
|
str r2, [r0, #0x8]
|
|
str r2, [r0, #0xc]
|
|
bx lr
|