summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--arm7/asm/OS_thread.s809
2 files changed, 3 insertions, 809 deletions
diff --git a/README.md b/README.md
index 4a02630c..8f47902c 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,8 @@
# Pokémon Diamond
+[![Build Status](https://travis-ci.org/pret/pokediamond.svg?branch=master)](https://travis-ci.org/pret/pokediamond)
+![Docker Image CI](https://github.com/pret/pokediamond/workflows/Docker%20Image%20CI/badge.svg)
+
This is a decompilation of Pokémon Diamond.
It builds the following ROMs:
diff --git a/arm7/asm/OS_thread.s b/arm7/asm/OS_thread.s
deleted file mode 100644
index 027b2130..00000000
--- a/arm7/asm/OS_thread.s
+++ /dev/null
@@ -1,809 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .bss
-
- .global OSi_StackForDestructor
-OSi_StackForDestructor: ;0x03807784
- .space 0x03807788 - 0x03807784
-
- .global OSi_RescheduleCount
-OSi_RescheduleCount: ;0x03807788
- .space 0x0380778C - 0x03807788
-
- .global _0380778C
-_0380778C: ;0x0380778C
- .space 0x03807790 - 0x0380778C
-
- .global OSi_SystemCallbackInSwitchThread
-OSi_SystemCallbackInSwitchThread: ;0x03807790
- .space 0x03807794 - 0x03807790
-
- .global OSi_CurrentThreadPtr
-OSi_CurrentThreadPtr: ;0x03807794
- .space 0x03807798 - 0x03807794
-
- .global OSi_IsThreadInitialized
-OSi_IsThreadInitialized: ;0x03807798
- .space 0x0380779C - 0x03807798
-
- .global OSi_ThreadInfo
-OSi_ThreadInfo: ;0x0380779C
- .space 0x038077A0 - 0x0380779C
-
- .global _038077A0
-_038077A0: ;0x038077A0
- .space 0x038077AC - 0x038077A0
-
- .global OSi_IdleThread
-OSi_IdleThread: ;0x038077AC
- .space 0x03807850 - 0x038077AC
-
- .global OSi_LauncherThread
-OSi_LauncherThread: ;0x03807850
- .space 0x038078F4 - 0x03807850
-
- .section .text
-
- arm_func_start OS_SetThreadDestructor
-OS_SetThreadDestructor: ; 0x037F8D48
- str r1, [r0, #152] ; 0x98
- bx lr
-
- arm_func_start OS_EnableScheduler
-OS_EnableScheduler: ; 0x037F8D50
- stmdb sp!, {r4, lr}
- bl OS_DisableInterrupts
- mov r4, #0
- ldr r1, _037F8D84 ; =OSi_RescheduleCount
- ldr r3, [r1]
- cmp r3, #0
- subne r2, r3, #1
- strne r2, [r1]
- movne r4, r3
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4, lr}
- bx lr
-_037F8D84: .word OSi_RescheduleCount
-
- arm_func_start OS_DisableScheduler
-OS_DisableScheduler: ; 0x037F8D88
- stmdb sp!, {r4, lr}
- bl OS_DisableInterrupts
- ldr r2, _037F8DBC ; =OSi_RescheduleCount
- ldr r3, [r2]
- mvn r1, #0
- cmp r3, r1
- addcc r1, r3, #1
- strcc r1, [r2]
- movcc r4, r3
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4, lr}
- bx lr
-_037F8DBC: .word OSi_RescheduleCount
-
- arm_func_start OS_SetSwitchThreadCallback
-OS_SetSwitchThreadCallback: ; 0x037F8DC0
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _037F8DF0 ; =OSi_ThreadInfo
- ldr r4, [r1, #12]
- str r5, [r1, #12]
- bl OS_RestoreInterrupts
- mov r0, r4
- add sp, sp, #4
- ldmia sp!, {r4, r5, lr}
- bx lr
-_037F8DF0: .word OSi_ThreadInfo
-_037F8DF4:
- ldr r2, [r0]
- mov r1, #0
- str r1, [r0]
- str r1, [r2, #148] ; 0x94
- mov r0, r2
- ldr ip, _037F8E10 ; =OS_WakeupThreadDirect
- bx ip
-_037F8E10: .word OS_WakeupThreadDirect
-
- arm_func_start OS_Sleep
-OS_Sleep: ; 0x037F8E14
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #52 ; 0x34
- mov r5, r0
- add r0, sp, #8
- bl OS_CreateAlarm
- ldr r0, _037F8EAC ; =OSi_CurrentThreadPtr
- ldr r0, [r0]
- ldr r0, [r0]
- str r0, [sp, #4]
- bl OS_DisableInterrupts
- mov r4, r0
- add r0, sp, #8
- ldr r1, [sp, #4]
- str r0, [r1, #148] ; 0x94
- add r1, sp, #4
- str r1, [sp]
- mov r2, #0
- ldr r1, _037F8EB0 ; =0x000082EA
- umull ip, r3, r5, r1
- mla r3, r5, r2, r3
- mla r3, r2, r1, r3
- mov r2, r3, lsr #6
- mov r1, ip, lsr #6
- orr r1, r1, r3, lsl #26
- ldr r3, _037F8EB4 ; =_037F8DF4
- bl OS_SetAlarm
- mov r5, #0
- b _037F8E8C
-_037F8E84:
- mov r0, r5
- bl OS_SleepThread
-_037F8E8C:
- ldr r0, [sp, #4]
- cmp r0, #0
- bne _037F8E84
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #52 ; 0x34
- ldmia sp!, {r4, r5, lr}
- bx lr
-_037F8EAC: .word OSi_CurrentThreadPtr
-_037F8EB0: .word 0x000082EA
-_037F8EB4: .word _037F8DF4
-
- arm_func_start OS_SetThreadPriority
-OS_SetThreadPriority: ; 0x037F8EB8
- stmdb sp!, {r4, r5, r6, r7, r8, lr}
- mov r6, r0
- mov r5, r1
- ldr r0, _037F8F60 ; =OSi_ThreadInfo
- ldr r8, [r0, #8]
- mov r7, #0
- bl OS_DisableInterrupts
- mov r4, r0
- b _037F8EE4
-_037F8EDC:
- mov r7, r8
- ldr r8, [r8, #76] ; 0x4c
-_037F8EE4:
- cmp r8, #0
- beq _037F8EF4
- cmp r8, r6
- bne _037F8EDC
-_037F8EF4:
- cmp r8, #0
- beq _037F8F08
- ldr r0, _037F8F64 ; =OSi_IdleThread
- cmp r8, r0
- bne _037F8F18
-_037F8F08:
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, #0
- b _037F8F58
-_037F8F18:
- ldr r0, [r8, #84] ; 0x54
- cmp r0, r5
- beq _037F8F4C
- cmp r7, #0
- ldreq r1, [r6, #76] ; 0x4c
- ldreq r0, _037F8F60 ; =OSi_ThreadInfo
- streq r1, [r0, #8]
- ldrne r0, [r6, #76] ; 0x4c
- strne r0, [r7, #76] ; 0x4c
- str r5, [r6, #84] ; 0x54
- mov r0, r6
- bl OSi_InsertThreadToList
- bl OSi_RescheduleThread
-_037F8F4C:
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, #1
-_037F8F58:
- ldmia sp!, {r4, r5, r6, r7, r8, lr}
- bx lr
-_037F8F60: .word OSi_ThreadInfo
-_037F8F64: .word OSi_IdleThread
-
- arm_func_start OS_RescheduleThread
-OS_RescheduleThread: ; 0x037F8F68
- stmdb sp!, {r4, lr}
- bl OS_DisableInterrupts
- mov r4, r0
- bl OSi_RescheduleThread
- mov r0, r4
- bl OS_RestoreInterrupts
- ldmia sp!, {r4, lr}
- bx lr
-
- arm_func_start OS_SelectThread
-OS_SelectThread: ; 0x037F8F88
- ldr r0, _037F8FB0 ; =OSi_ThreadInfo
- ldr r0, [r0, #8]
- b _037F8F98
-_037F8F94:
- ldr r0, [r0, #76] ; 0x4c
-_037F8F98:
- cmp r0, #0
- bxeq lr
- ldr r1, [r0, #72] ; 0x48
- cmp r1, #1
- bne _037F8F94
- bx lr
-_037F8FB0: .word OSi_ThreadInfo
-
- arm_func_start OS_WakeupThreadDirect
-OS_WakeupThreadDirect: ; 0x037F8FB4
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- mov r5, r0
- bl OS_DisableInterrupts
- mov r4, r0
- mov r0, #1
- str r0, [r5, #72] ; 0x48
- bl OSi_RescheduleThread
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #4
- ldmia sp!, {r4, r5, lr}
- bx lr
-
- arm_func_start OS_WakeupThread
-OS_WakeupThread: ; 0x037F8FE8
- stmdb sp!, {r4, r5, r6, r7, lr}
- sub sp, sp, #4
- mov r5, r0
- bl OS_DisableInterrupts
- mov r4, r0
- ldr r0, [r5]
- cmp r0, #0
- beq _037F9050
- mov r7, #1
- mov r6, #0
- b _037F9030
-_037F9014:
- mov r0, r5
- bl OSi_RemoveLinkFromQueue
- str r7, [r0, #72] ; 0x48
- str r6, [r0, #92] ; 0x5c
- str r6, [r0, #100] ; 0x64
- ldr r1, [r0, #100] ; 0x64
- str r1, [r0, #96] ; 0x60
-_037F9030:
- ldr r0, [r5]
- cmp r0, #0
- bne _037F9014
- mov r0, #0
- str r0, [r5, #4]
- ldr r0, [r5, #4]
- str r0, [r5]
- bl OSi_RescheduleThread
-_037F9050:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, lr}
- bx lr
-
- arm_func_start OS_SleepThread
-OS_SleepThread: ; 0x037F9064
- stmdb sp!, {r4, r5, r6, lr}
- mov r6, r0
- bl OS_DisableInterrupts
- mov r5, r0
- ldr r0, _037F90B4 ; =OSi_CurrentThreadPtr
- ldr r0, [r0]
- ldr r4, [r0]
- cmp r6, #0
- beq _037F9098
- str r6, [r4, #92] ; 0x5c
- mov r0, r6
- mov r1, r4
- bl OSi_InsertLinkToQueue
-_037F9098:
- mov r0, #0
- str r0, [r4, #72] ; 0x48
- bl OSi_RescheduleThread
- mov r0, r5
- bl OS_RestoreInterrupts
- ldmia sp!, {r4, r5, r6, lr}
- bx lr
-_037F90B4: .word OSi_CurrentThreadPtr
-
- arm_func_start OS_IsThreadTerminated
-OS_IsThreadTerminated: ; 0x037F90B8
- ldr r0, [r0, #72] ; 0x48
- cmp r0, #2
- moveq r0, #1
- movne r0, #0
- bx lr
-
- arm_func_start OS_JoinThread
-OS_JoinThread: ; 0x037F90CC
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- mov r5, r0
- bl OS_DisableInterrupts
- mov r4, r0
- ldr r0, [r5, #72] ; 0x48
- cmp r0, #2
- beq _037F90F4
- add r0, r5, #128 ; 0x80
- bl OS_SleepThread
-_037F90F4:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #4
- ldmia sp!, {r4, r5, lr}
- bx lr
-
- arm_func_start OSi_ExitThread_Destroy
-OSi_ExitThread_Destroy: ; 0x037F9108
- stmdb sp!, {r4, lr}
- ldr r0, _037F9164 ; =OSi_CurrentThreadPtr
- ldr r0, [r0]
- ldr r4, [r0]
- bl OS_DisableScheduler
- mov r0, r4
- bl OSi_UnlockAllMutex
- ldr r0, [r4, #92] ; 0x5c
- cmp r0, #0
- beq _037F9138
- mov r1, r4
- bl OSi_RemoveSpecifiedLinkFromQueue
-_037F9138:
- mov r0, r4
- bl OSi_RemoveThreadFromList
- mov r0, #2
- str r0, [r4, #72] ; 0x48
- add r0, r4, #128 ; 0x80
- bl OS_WakeupThread
- bl OS_EnableScheduler
- bl OS_RescheduleThread
- bl OS_Terminate
- ldmia sp!, {r4, lr}
- bx lr
-_037F9164: .word OSi_CurrentThreadPtr
-
- arm_func_start OSi_ExitThread
-OSi_ExitThread: ; 0x037F9168
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r1, _037F91AC ; =OSi_CurrentThreadPtr
- ldr r1, [r1]
- ldr r3, [r1]
- ldr r2, [r3, #152] ; 0x98
- cmp r2, #0
- beq _037F919C
- mov r1, #0
- str r1, [r3, #152] ; 0x98
- mov lr, pc
- bx r2
- bl OS_DisableInterrupts
-_037F919C:
- bl OSi_ExitThread_Destroy
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_037F91AC: .word OSi_CurrentThreadPtr
-
- arm_func_start OSi_ExitThread_ArgSpecified
-OSi_ExitThread_ArgSpecified: ; 0x037F91B0
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- mov r5, r0
- mov r4, r1
- ldr r1, _037F9210 ; =OSi_StackForDestructor
- ldr r2, [r1]
- cmp r2, #0
- beq _037F91FC
- ldr r1, _037F9214 ; =OSi_ExitThread
- bl OS_InitContext
- str r4, [r5, #4]
- ldr r0, [r5]
- orr r0, r0, #128 ; 0x80
- str r0, [r5]
- mov r0, #1
- str r0, [r5, #72] ; 0x48
- mov r0, r5
- bl OS_LoadContext
- b _037F9204
-_037F91FC:
- mov r0, r4
- bl OSi_ExitThread
-_037F9204:
- add sp, sp, #4
- ldmia sp!, {r4, r5, lr}
- bx lr
-_037F9210: .word OSi_StackForDestructor
-_037F9214: .word OSi_ExitThread
-
- arm_func_start OS_ExitThread
-OS_ExitThread: ; 0x037F9218
- stmfd sp!, {lr}
- sub sp, sp, #4
- bl OS_DisableInterrupts
- ldr r0, _037F9240 ; =OSi_ThreadInfo
- ldr r0, [r0, #4]
- mov r1, #0
- bl OSi_ExitThread_ArgSpecified
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_037F9240: .word OSi_ThreadInfo
-
- arm_func_start OS_CreateThread
-OS_CreateThread: ; 0x037F9244
- stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
- sub sp, sp, #4
- mov r9, r0
- mov r8, r1
- mov r7, r2
- mov r6, r3
- bl OS_DisableInterrupts
- mov r4, r0
- bl OSi_GetUnusedThreadId
- ldr r1, [sp, #36] ; 0x24
- str r1, [r9, #84] ; 0x54
- str r0, [r9, #80] ; 0x50
- mov r0, #0
- str r0, [r9, #72] ; 0x48
- str r0, [r9, #88] ; 0x58
- mov r0, r9
- bl OSi_InsertThreadToList
- str r6, [r9, #120] ; 0x78
- ldr r0, [sp, #32]
- sub r5, r6, r0
- str r5, [r9, #116] ; 0x74
- mov r2, #0
- str r2, [r9, #124] ; 0x7c
- ldr r1, _037F9348 ; =0xD73BFDF7
- ldr r0, [r9, #120] ; 0x78
- str r1, [r0, #-4]
- ldr r1, _037F934C ; =0xFBDD37BB
- ldr r0, [r9, #116] ; 0x74
- str r1, [r0]
- str r2, [r9, #132] ; 0x84
- ldr r0, [r9, #132] ; 0x84
- str r0, [r9, #128] ; 0x80
- mov r0, r9
- mov r1, r8
- sub r2, r6, #4
- bl OS_InitContext
- str r7, [r9, #4]
- ldr r0, _037F9350 ; =OS_ExitThread
- str r0, [r9, #60] ; 0x3c
- mov r0, #0
- add r1, r5, #4
- ldr r2, [sp, #32]
- sub r2, r2, #8
- bl MIi_CpuClear32
- mov r1, #0
- str r1, [r9, #104] ; 0x68
- str r1, [r9, #108] ; 0x6c
- str r1, [r9, #112] ; 0x70
- mov r0, r9
- bl OS_SetThreadDestructor
- mov r0, #0
- str r0, [r9, #92] ; 0x5c
- str r0, [r9, #100] ; 0x64
- ldr r1, [r9, #100] ; 0x64
- str r1, [r9, #96] ; 0x60
- add r1, r9, #136 ; 0x88
- mov r2, #12
- bl MIi_CpuClear32
- mov r0, #0
- str r0, [r9, #148] ; 0x94
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
- bx lr
-_037F9348: .word 0xD73BFDF7
-_037F934C: .word 0xFBDD37BB
-_037F9350: .word OS_ExitThread
-
- arm_func_start OS_InitThread
-OS_InitThread: ; 0x037F9354
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r0, _037F942C ; =OSi_IsThreadInitialized
- ldr r1, [r0]
- cmp r1, #0
- bne _037F9420
- mov r2, #1
- str r2, [r0]
- ldr r1, _037F9430 ; =_038077A0
- ldr r0, _037F9434 ; =OSi_CurrentThreadPtr
- str r1, [r0]
- mov r0, #16
- ldr r1, _037F9438 ; =OSi_LauncherThread
- str r0, [r1, #84] ; 0x54
- mov r0, #0
- str r0, [r1, #80] ; 0x50
- str r2, [r1, #72] ; 0x48
- str r0, [r1, #76] ; 0x4c
- str r0, [r1, #88] ; 0x58
- ldr r0, _037F943C ; =OSi_ThreadInfo
- str r1, [r0, #8]
- str r1, [r0, #4]
- ldr r2, _037F9440 ; =0x00000400
- cmp r2, #0
- ldrle r0, _037F9444 ; =FUN_037F8000
- suble r2, r0, r2
- ldrgt r1, _037F9448 ; =0x00000400
- ldrgt r0, _037F944C ; =0x0380FF80
- subgt r0, r0, r1
- subgt r2, r0, r2
- ldr r1, _037F9448 ; =0x00000400
- ldr r0, _037F944C ; =0x0380FF80
- sub r3, r0, r1
- ldr r1, _037F9438 ; =OSi_LauncherThread
- str r3, [r1, #120] ; 0x78
- str r2, [r1, #116] ; 0x74
- mov r0, #0
- str r0, [r1, #124] ; 0x7c
- ldr r2, _037F9450 ; =0xD73BFDF7
- str r2, [r3, #-4]
- ldr r3, _037F9454 ; =0xFBDD37BB
- ldr r2, [r1, #116] ; 0x74
- str r3, [r2]
- str r0, [r1, #132] ; 0x84
- str r0, [r1, #128] ; 0x80
- ldr r1, _037F943C ; =OSi_ThreadInfo
- strh r0, [r1]
- strh r0, [r1, #2]
- ldr r2, _037F9458 ; =0x027FFFA4
- str r1, [r2]
- bl OS_SetSwitchThreadCallback
-_037F9420:
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_037F942C: .word OSi_IsThreadInitialized
-_037F9430: .word _038077A0
-_037F9434: .word OSi_CurrentThreadPtr
-_037F9438: .word OSi_LauncherThread
-_037F943C: .word OSi_ThreadInfo
-_037F9440: .word 0x00000400
-_037F9444: .word FUN_037F8000
-_037F9448: .word 0x00000400
-_037F944C: .word 0x0380FF80
-_037F9450: .word 0xD73BFDF7
-_037F9454: .word 0xFBDD37BB
-_037F9458: .word 0x027FFFA4
-
- arm_func_start OSi_RescheduleThread
-OSi_RescheduleThread: ; 0x037F945C
- stmdb sp!, {r4, r5, r6, lr}
- ldr r0, _037F952C ; =OSi_RescheduleCount
- ldr r0, [r0]
- cmp r0, #0
- bne _037F9524
- ldr r4, _037F9530 ; =OSi_ThreadInfo
- ldrh r0, [r4, #2]
- cmp r0, #0
- bne _037F948C
- bl OS_GetProcMode
- cmp r0, #18
- bne _037F9498
-_037F948C:
- mov r0, #1
- strh r0, [r4]
- b _037F9524
-_037F9498:
- ldr r0, _037F9534 ; =OSi_CurrentThreadPtr
- ldr r0, [r0]
- ldr r6, [r0]
- bl OS_SelectThread
- mov r5, r0
- cmp r6, r5
- beq _037F9524
- cmp r5, #0
- beq _037F9524
- ldr r0, [r6, #72] ; 0x48
- cmp r0, #2
- beq _037F94D8
- mov r0, r6
- bl OS_SaveContext
- cmp r0, #0
- bne _037F9524
-_037F94D8:
- ldr r0, _037F9538 ; =OSi_SystemCallbackInSwitchThread
- ldr r2, [r0]
- cmp r2, #0
- beq _037F94F8
- mov r0, r6
- mov r1, r5
- mov lr, pc
- bx r2
-_037F94F8:
- ldr r2, [r4, #12]
- cmp r2, #0
- beq _037F9514
- mov r0, r6
- mov r1, r5
- mov lr, pc
- bx r2
-_037F9514:
- ldr r0, _037F9530 ; =OSi_ThreadInfo
- str r5, [r0, #4]
- mov r0, r5
- bl OS_LoadContext
-_037F9524:
- ldmia sp!, {r4, r5, r6, lr}
- bx lr
-_037F952C: .word OSi_RescheduleCount
-_037F9530: .word OSi_ThreadInfo
-_037F9534: .word OSi_CurrentThreadPtr
-_037F9538: .word OSi_SystemCallbackInSwitchThread
-
- arm_func_start OSi_RemoveThreadFromList
-OSi_RemoveThreadFromList: ; 0x037F953C
- ldr r1, _037F9580 ; =OSi_ThreadInfo
- ldr r2, [r1, #8]
- mov r1, #0
- b _037F9554
-_037F954C:
- mov r1, r2
- ldr r2, [r2, #76] ; 0x4c
-_037F9554:
- cmp r2, #0
- beq _037F9564
- cmp r2, r0
- bne _037F954C
-_037F9564:
- cmp r1, #0
- ldreq r1, [r0, #76] ; 0x4c
- ldreq r0, _037F9580 ; =OSi_ThreadInfo
- streq r1, [r0, #8]
- ldrne r0, [r0, #76] ; 0x4c
- strne r0, [r1, #76] ; 0x4c
- bx lr
-_037F9580: .word OSi_ThreadInfo
-
- arm_func_start OSi_InsertThreadToList
-OSi_InsertThreadToList: ; 0x037F9584
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r1, _037F95E8 ; =OSi_ThreadInfo
- ldr r3, [r1, #8]
- mov lr, r3
- mov ip, #0
- b _037F95A8
-_037F95A0:
- mov ip, lr
- ldr lr, [lr, #76] ; 0x4c
-_037F95A8:
- cmp lr, #0
- beq _037F95C0
- ldr r2, [lr, #84] ; 0x54
- ldr r1, [r0, #84] ; 0x54
- cmp r2, r1
- bcc _037F95A0
-_037F95C0:
- cmp ip, #0
- streq r3, [r0, #76] ; 0x4c
- ldreq r1, _037F95E8 ; =OSi_ThreadInfo
- streq r0, [r1, #8]
- ldrne r1, [ip, #76] ; 0x4c
- strne r1, [r0, #76] ; 0x4c
- strne r0, [ip, #76] ; 0x4c
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_037F95E8: .word OSi_ThreadInfo
-
- arm_func_start OSi_RemoveMutexLinkFromQueue
-OSi_RemoveMutexLinkFromQueue: ; 0x037F95EC
- ldr r2, [r0]
- cmp r2, #0
- beq _037F9614
- ldr r1, [r2, #16]
- str r1, [r0]
- cmp r1, #0
- movne r0, #0
- strne r0, [r1, #20]
- moveq r1, #0
- streq r1, [r0, #4]
-_037F9614:
- mov r0, r2
- bx lr
-
- arm_func_start OSi_RemoveSpecifiedLinkFromQueue
-OSi_RemoveSpecifiedLinkFromQueue: ; 0x037F961C
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r2, [r0]
- mov lr, r2
- b _037F9664
-_037F9630:
- ldr ip, [lr, #100] ; 0x64
- cmp lr, r1
- bne _037F9660
- ldr r3, [lr, #96] ; 0x60
- cmp r2, lr
- streq ip, [r0]
- strne ip, [r3, #100] ; 0x64
- ldr r1, [r0, #4]
- cmp r1, lr
- streq r3, [r0, #4]
- strne r3, [ip, #96] ; 0x60
- b _037F966C
-_037F9660:
- mov lr, ip
-_037F9664:
- cmp lr, #0
- bne _037F9630
-_037F966C:
- mov r0, lr
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start OSi_RemoveLinkFromQueue
-OSi_RemoveLinkFromQueue: ; 0x037F967C
- ldr r2, [r0]
- cmp r2, #0
- beq _037F96A8
- ldr r1, [r2, #100] ; 0x64
- str r1, [r0]
- cmp r1, #0
- movne r0, #0
- strne r0, [r1, #96] ; 0x60
- moveq r1, #0
- streq r1, [r0, #4]
- streq r1, [r2, #92] ; 0x5c
-_037F96A8:
- mov r0, r2
- bx lr
-
- arm_func_start OSi_InsertLinkToQueue
-OSi_InsertLinkToQueue: ; 0x037F96B0
- ldr ip, [r0]
- b _037F96C4
-_037F96B8:
- cmp ip, r1
- bxeq lr
- ldr ip, [ip, #100] ; 0x64
-_037F96C4:
- cmp ip, #0
- beq _037F96DC
- ldr r3, [ip, #84] ; 0x54
- ldr r2, [r1, #84] ; 0x54
- cmp r3, r2
- bls _037F96B8
-_037F96DC:
- cmp ip, #0
- bne _037F9708
- ldr r2, [r0, #4]
- cmp r2, #0
- streq r1, [r0]
- strne r1, [r2, #100] ; 0x64
- str r2, [r1, #96] ; 0x60
- mov r2, #0
- str r2, [r1, #100] ; 0x64
- str r1, [r0, #4]
- bx lr
-_037F9708:
- ldr r2, [ip, #96] ; 0x60
- cmp r2, #0
- streq r1, [r0]
- strne r1, [r2, #100] ; 0x64
- str r2, [r1, #96] ; 0x60
- str ip, [r1, #100] ; 0x64
- str r1, [ip, #96] ; 0x60
- bx lr
-
- arm_func_start OSi_GetUnusedThreadId
-OSi_GetUnusedThreadId: ; 0x037F9728
- ldr r1, _037F973C ; =_0380778C
- ldr r0, [r1]
- add r0, r0, #1
- str r0, [r1]
- bx lr
-_037F973C: .word _0380778C