mirror of
https://github.com/pret/pokediamond.git
synced 2026-10-02 13:26:47 -05:00
alloc, tick, and timer
This commit is contained in:
@@ -25,6 +25,9 @@ Autoload WRAM
|
||||
Object OS_mutex.o
|
||||
Object OS_init.o
|
||||
Object OS_arena.o
|
||||
Object OS_alloc.o
|
||||
Object OS_timer.o
|
||||
Object OS_tick.o
|
||||
Object dtcm.o
|
||||
Object libsyscall.o
|
||||
Object dtcm2.o
|
||||
|
||||
427
arm7/asm/OS_alloc.s
Normal file
427
arm7/asm/OS_alloc.s
Normal file
@@ -0,0 +1,427 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_CheckHeap
|
||||
OS_CheckHeap: ; 0x037F9D88
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r8, r0
|
||||
mov r7, r1
|
||||
mov r6, #0
|
||||
mov r5, r6
|
||||
mvn r4, #0
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037F9F34 ; =OSiHeapInfo
|
||||
ldr ip, [r1, r8, lsl #2]
|
||||
mov r1, r4
|
||||
cmp r7, r1
|
||||
ldreq r7, [ip]
|
||||
ldr r2, [ip, #16]
|
||||
cmp r2, #0
|
||||
beq _037F9F24
|
||||
cmp r7, #0
|
||||
blt _037F9F24
|
||||
ldr r1, [ip, #4]
|
||||
cmp r7, r1
|
||||
bge _037F9F24
|
||||
mov r1, #12
|
||||
mul r1, r7, r1
|
||||
add r3, r2, r1
|
||||
ldr r2, [r2, r1]
|
||||
cmp r2, #0
|
||||
blt _037F9F24
|
||||
ldr r1, [r3, #8]
|
||||
cmp r1, #0
|
||||
beq _037F9E70
|
||||
ldr r7, [r1]
|
||||
cmp r7, #0
|
||||
bne _037F9F24
|
||||
b _037F9E70
|
||||
_037F9E0C:
|
||||
ldr r7, [ip, #8]
|
||||
cmp r7, r1
|
||||
bhi _037F9F24
|
||||
ldr r7, [ip, #12]
|
||||
cmp r1, r7
|
||||
bcs _037F9F24
|
||||
ands r7, r1, #31
|
||||
bne _037F9F24
|
||||
ldr lr, [r1, #4]
|
||||
cmp lr, #0
|
||||
beq _037F9E44
|
||||
ldr r7, [lr]
|
||||
cmp r7, r1
|
||||
bne _037F9F24
|
||||
_037F9E44:
|
||||
ldr r7, [r1, #8]
|
||||
cmp r7, #64 ; 0x40
|
||||
bcc _037F9F24
|
||||
ands r1, r7, #31
|
||||
bne _037F9F24
|
||||
add r6, r6, r7
|
||||
cmp r6, #0
|
||||
ble _037F9F24
|
||||
cmp r6, r2
|
||||
bgt _037F9F24
|
||||
mov r1, lr
|
||||
_037F9E70:
|
||||
cmp r1, #0
|
||||
bne _037F9E0C
|
||||
ldr r1, [r3, #4]
|
||||
cmp r1, #0
|
||||
beq _037F9F14
|
||||
ldr r3, [r1]
|
||||
cmp r3, #0
|
||||
bne _037F9F24
|
||||
b _037F9F14
|
||||
_037F9E94:
|
||||
ldr r3, [ip, #8]
|
||||
cmp r3, r1
|
||||
bhi _037F9F24
|
||||
ldr r3, [ip, #12]
|
||||
cmp r1, r3
|
||||
bcs _037F9F24
|
||||
ands r3, r1, #31
|
||||
bne _037F9F24
|
||||
ldr lr, [r1, #4]
|
||||
cmp lr, #0
|
||||
beq _037F9ECC
|
||||
ldr r3, [lr]
|
||||
cmp r3, r1
|
||||
bne _037F9F24
|
||||
_037F9ECC:
|
||||
ldr r7, [r1, #8]
|
||||
cmp r7, #64 ; 0x40
|
||||
bcc _037F9F24
|
||||
ands r3, r7, #31
|
||||
bne _037F9F24
|
||||
cmp lr, #0
|
||||
beq _037F9EF4
|
||||
add r1, r1, r7
|
||||
cmp r1, lr
|
||||
bcs _037F9F24
|
||||
_037F9EF4:
|
||||
add r6, r6, r7
|
||||
sub r1, r7, #32
|
||||
add r5, r5, r1
|
||||
cmp r6, #0
|
||||
ble _037F9F24
|
||||
cmp r6, r2
|
||||
bgt _037F9F24
|
||||
mov r1, lr
|
||||
_037F9F14:
|
||||
cmp r1, #0
|
||||
bne _037F9E94
|
||||
cmp r6, r2
|
||||
moveq r4, r5
|
||||
_037F9F24:
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
_037F9F34: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_CreateHeap
|
||||
OS_CreateHeap: ; 0x037F9F38
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r4, r0
|
||||
mov r6, r1
|
||||
mov r5, r2
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037F9FDC ; =OSiHeapInfo
|
||||
ldr r7, [r1, r4, lsl #2]
|
||||
add r1, r6, #31
|
||||
bic r6, r1, #31
|
||||
bic r5, r5, #31
|
||||
mov r4, #0
|
||||
ldr lr, [r7, #4]
|
||||
mov r1, #12
|
||||
b _037F9FC0
|
||||
_037F9F74:
|
||||
ldr r3, [r7, #16]
|
||||
mul r2, r4, r1
|
||||
add ip, r3, r2
|
||||
ldr r2, [r3, r2]
|
||||
cmp r2, #0
|
||||
bge _037F9FBC
|
||||
sub r1, r5, r6
|
||||
str r1, [ip]
|
||||
mov r2, #0
|
||||
str r2, [r6]
|
||||
str r2, [r6, #4]
|
||||
ldr r1, [ip]
|
||||
str r1, [r6, #8]
|
||||
str r6, [ip, #4]
|
||||
str r2, [ip, #8]
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
b _037F9FD0
|
||||
_037F9FBC:
|
||||
add r4, r4, #1
|
||||
_037F9FC0:
|
||||
cmp r4, lr
|
||||
blt _037F9F74
|
||||
bl OS_RestoreInterrupts
|
||||
mvn r0, #0
|
||||
_037F9FD0:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037F9FDC: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_InitAlloc
|
||||
OS_InitAlloc: ; 0x037F9FE0
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r7, r0
|
||||
mov r5, r1
|
||||
mov r4, r2
|
||||
mov r6, r3
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037FA084 ; =OSiHeapInfo
|
||||
str r5, [r1, r7, lsl #2]
|
||||
mov r2, #12
|
||||
mul r1, r6, r2
|
||||
add r3, r5, #20
|
||||
str r3, [r5, #16]
|
||||
str r6, [r5, #4]
|
||||
mov r8, #0
|
||||
mvn lr, #0
|
||||
mov ip, r8
|
||||
b _037FA044
|
||||
_037FA024:
|
||||
ldr r6, [r5, #16]
|
||||
mul r3, r8, r2
|
||||
add r7, r6, r3
|
||||
str lr, [r6, r3]
|
||||
str ip, [r7, #8]
|
||||
ldr r3, [r7, #8]
|
||||
str r3, [r7, #4]
|
||||
add r8, r8, #1
|
||||
_037FA044:
|
||||
ldr r3, [r5, #4]
|
||||
cmp r8, r3
|
||||
blt _037FA024
|
||||
mvn r2, #0
|
||||
str r2, [r5]
|
||||
ldr r2, [r5, #16]
|
||||
add r1, r2, r1
|
||||
add r1, r1, #31
|
||||
bic r1, r1, #31
|
||||
str r1, [r5, #8]
|
||||
bic r1, r4, #31
|
||||
str r1, [r5, #12]
|
||||
bl OS_RestoreInterrupts
|
||||
ldr r0, [r5, #8]
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
_037FA084: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_SetCurrentHeap
|
||||
OS_SetCurrentHeap: ; 0x037FA088
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
mov r4, r0
|
||||
mov r5, r1
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037FA0C0 ; =OSiHeapInfo
|
||||
ldr r1, [r1, r4, lsl #2]
|
||||
ldr r4, [r1]
|
||||
str r5, [r1]
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
_037FA0C0: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_FreeToHeap
|
||||
OS_FreeToHeap: ; 0x037FA0C4
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r7, r0
|
||||
mov r4, r1
|
||||
mov r6, r2
|
||||
bl OS_DisableInterrupts
|
||||
mov r5, r0
|
||||
ldr r0, _037FA134 ; =OSiHeapInfo
|
||||
ldr r0, [r0, r7, lsl #2]
|
||||
cmp r4, #0
|
||||
ldrlt r4, [r0]
|
||||
sub r6, r6, #32
|
||||
ldr r1, [r0, #16]
|
||||
mov r0, #12
|
||||
mla r7, r4, r0, r1
|
||||
ldr r0, [r7, #8]
|
||||
mov r1, r6
|
||||
bl DLExtract
|
||||
str r0, [r7, #8]
|
||||
ldr r0, [r7, #4]
|
||||
mov r1, r6
|
||||
bl DLInsert
|
||||
str r0, [r7, #4]
|
||||
mov r0, r5
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037FA134: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_AllocFromHeap
|
||||
OS_AllocFromHeap: ; 0x037FA138
|
||||
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
|
||||
ldr r1, _037FA24C ; =OSiHeapInfo
|
||||
ldr r1, [r1, r6, lsl #2]
|
||||
cmp r1, #0
|
||||
bne _037FA170
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037FA240
|
||||
_037FA170:
|
||||
cmp r5, #0
|
||||
ldrlt r5, [r1]
|
||||
ldr r1, [r1, #16]
|
||||
mov r0, #12
|
||||
mla r6, r5, r0, r1
|
||||
add r0, r7, #32
|
||||
add r0, r0, #31
|
||||
bic r7, r0, #31
|
||||
ldr r0, [r6, #4]
|
||||
mov r5, r0
|
||||
b _037FA1AC
|
||||
_037FA19C:
|
||||
ldr r1, [r5, #8]
|
||||
cmp r7, r1
|
||||
ble _037FA1B4
|
||||
ldr r5, [r5, #4]
|
||||
_037FA1AC:
|
||||
cmp r5, #0
|
||||
bne _037FA19C
|
||||
_037FA1B4:
|
||||
cmp r5, #0
|
||||
bne _037FA1CC
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037FA240
|
||||
_037FA1CC:
|
||||
ldr r1, [r5, #8]
|
||||
sub r1, r1, r7
|
||||
cmp r1, #64 ; 0x40
|
||||
bcs _037FA1EC
|
||||
mov r1, r5
|
||||
bl DLExtract
|
||||
str r0, [r6, #4]
|
||||
b _037FA224
|
||||
_037FA1EC:
|
||||
str r7, [r5, #8]
|
||||
add r2, r5, r7
|
||||
str r1, [r2, #8]
|
||||
ldr r0, [r5]
|
||||
str r0, [r5, r7]
|
||||
ldr r0, [r5, #4]
|
||||
str r0, [r2, #4]
|
||||
ldr r0, [r2, #4]
|
||||
cmp r0, #0
|
||||
strne r2, [r0]
|
||||
ldr r0, [r2]
|
||||
cmp r0, #0
|
||||
strne r2, [r0, #4]
|
||||
streq r2, [r6, #4]
|
||||
_037FA224:
|
||||
ldr r0, [r6, #8]
|
||||
mov r1, r5
|
||||
bl DLAddFront
|
||||
str r0, [r6, #8]
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add r0, r5, #32
|
||||
_037FA240:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037FA24C: .word OSiHeapInfo
|
||||
|
||||
arm_func_start DLInsert
|
||||
DLInsert: ; 0x037FA250
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
mov ip, r0
|
||||
mov lr, #0
|
||||
b _037FA274
|
||||
_037FA264:
|
||||
cmp r1, ip
|
||||
bls _037FA27C
|
||||
mov lr, ip
|
||||
ldr ip, [ip, #4]
|
||||
_037FA274:
|
||||
cmp ip, #0
|
||||
bne _037FA264
|
||||
_037FA27C:
|
||||
str ip, [r1, #4]
|
||||
str lr, [r1]
|
||||
cmp ip, #0
|
||||
beq _037FA2BC
|
||||
str r1, [ip]
|
||||
ldr r3, [r1, #8]
|
||||
add r2, r1, r3
|
||||
cmp r2, ip
|
||||
bne _037FA2BC
|
||||
ldr r2, [ip, #8]
|
||||
add r2, r3, r2
|
||||
str r2, [r1, #8]
|
||||
ldr ip, [ip, #4]
|
||||
str ip, [r1, #4]
|
||||
cmp ip, #0
|
||||
strne r1, [ip]
|
||||
_037FA2BC:
|
||||
cmp lr, #0
|
||||
beq _037FA2F4
|
||||
str r1, [lr, #4]
|
||||
ldr r2, [lr, #8]
|
||||
add r3, lr, r2
|
||||
cmp r3, r1
|
||||
bne _037FA2F8
|
||||
ldr r1, [r1, #8]
|
||||
add r1, r2, r1
|
||||
str r1, [lr, #8]
|
||||
str ip, [lr, #4]
|
||||
cmp ip, #0
|
||||
strne lr, [ip]
|
||||
b _037FA2F8
|
||||
_037FA2F4:
|
||||
mov r0, r1
|
||||
_037FA2F8:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start DLExtract
|
||||
DLExtract: ; 0x037FA304
|
||||
ldr r3, [r1, #4]
|
||||
cmp r3, #0
|
||||
ldrne r2, [r1]
|
||||
strne r2, [r3]
|
||||
ldr r2, [r1]
|
||||
cmp r2, #0
|
||||
ldreq r0, [r1, #4]
|
||||
ldrne r1, [r1, #4]
|
||||
strne r1, [r2, #4]
|
||||
bx lr
|
||||
|
||||
arm_func_start DLAddFront
|
||||
DLAddFront: ; 0x037FA32C
|
||||
str r0, [r1, #4]
|
||||
mov r2, #0
|
||||
str r2, [r1]
|
||||
cmp r0, #0
|
||||
strne r1, [r0]
|
||||
mov r0, r1
|
||||
bx lr
|
||||
138
arm7/asm/OS_tick.s
Normal file
138
arm7/asm/OS_tick.s
Normal file
@@ -0,0 +1,138 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_GetTick
|
||||
OS_GetTick: ; 0x037FA364
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #12
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037FA404 ; =0x04000100
|
||||
ldrh r1, [r1]
|
||||
strh r1, [sp]
|
||||
ldr r1, _037FA408 ; =OSi_TickCounter
|
||||
ldr ip, [r1]
|
||||
ldr r3, [r1, #4]
|
||||
ldr r2, _037FA40C ; =0x0000FFFF
|
||||
mvn r1, #0
|
||||
and r2, r3, r2
|
||||
and r1, ip, r1
|
||||
str r1, [sp, #4]
|
||||
str r2, [sp, #8]
|
||||
ldr r1, _037FA410 ; =0x04000214
|
||||
ldr r1, [r1]
|
||||
ands r1, r1, #8
|
||||
beq _037FA3D8
|
||||
ldrh r1, [sp]
|
||||
ands r1, r1, #32768 ; 0x8000
|
||||
bne _037FA3D8
|
||||
ldr r3, [sp, #4]
|
||||
ldr r2, [sp, #8]
|
||||
mov r1, #1
|
||||
adds r3, r3, r1
|
||||
adc r1, r2, #0
|
||||
str r3, [sp, #4]
|
||||
str r1, [sp, #8]
|
||||
_037FA3D8:
|
||||
bl OS_RestoreInterrupts
|
||||
ldr r2, [sp, #4]
|
||||
ldr r0, [sp, #8]
|
||||
mov r1, r0, lsl #16
|
||||
orr r1, r1, r2, lsr #16
|
||||
ldrh r0, [sp]
|
||||
orr r1, r1, r0, asr #31
|
||||
orr r0, r0, r2, lsl #16
|
||||
add sp, sp, #12
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037FA404: .word 0x04000100
|
||||
_037FA408: .word OSi_TickCounter
|
||||
_037FA40C: .word 0x0000FFFF
|
||||
_037FA410: .word 0x04000214
|
||||
|
||||
arm_func_start OSi_CountUpTick
|
||||
OSi_CountUpTick: ; 0x037FA414
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r1, _037FA488 ; =OSi_TickCounter
|
||||
ldr ip, [r1]
|
||||
ldr r2, [r1, #4]
|
||||
mov r3, #0
|
||||
mov r0, #1
|
||||
adds ip, ip, r0
|
||||
adc r0, r2, #0
|
||||
str ip, [r1]
|
||||
str r0, [r1, #4]
|
||||
ldr r0, _037FA48C ; =OSi_NeedResetTimer
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
beq _037FA46C
|
||||
ldr r2, _037FA490 ; =0x04000102
|
||||
strh r3, [r2]
|
||||
ldr r1, _037FA494 ; =0x04000100
|
||||
strh r3, [r1]
|
||||
mov r1, #193 ; 0xc1
|
||||
strh r1, [r2]
|
||||
str r3, [r0]
|
||||
_037FA46C:
|
||||
mov r0, #0
|
||||
ldr r1, _037FA498 ; =OSi_CountUpTick
|
||||
mov r2, r0
|
||||
bl OSi_EnterTimerCallback
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037FA488: .word OSi_TickCounter
|
||||
_037FA48C: .word OSi_NeedResetTimer
|
||||
_037FA490: .word 0x04000102
|
||||
_037FA494: .word 0x04000100
|
||||
_037FA498: .word OSi_CountUpTick
|
||||
|
||||
arm_func_start OS_IsTickAvailable
|
||||
OS_IsTickAvailable: ; 0x037FA49C
|
||||
ldr r0, _037FA4A8 ; =_03807920
|
||||
ldrh r0, [r0]
|
||||
bx lr
|
||||
_037FA4A8: .word _03807920
|
||||
|
||||
arm_func_start OS_InitTick
|
||||
OS_InitTick: ; 0x037FA4AC
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r0, _037FA528 ; =_03807920
|
||||
ldrh r1, [r0]
|
||||
cmp r1, #0
|
||||
bne _037FA51C
|
||||
mov r1, #1
|
||||
strh r1, [r0]
|
||||
mov r0, #0
|
||||
bl OSi_SetTimerReserved
|
||||
mov r2, #0
|
||||
ldr r0, _037FA52C ; =OSi_TickCounter
|
||||
str r2, [r0]
|
||||
str r2, [r0, #4]
|
||||
ldr r1, _037FA530 ; =0x04000102
|
||||
strh r2, [r1]
|
||||
ldr r0, _037FA534 ; =0x04000100
|
||||
strh r2, [r0]
|
||||
mov r0, #193 ; 0xc1
|
||||
strh r0, [r1]
|
||||
mov r0, #8
|
||||
ldr r1, _037FA538 ; =OSi_CountUpTick
|
||||
bl OS_SetIrqFunction
|
||||
mov r0, #8
|
||||
bl OS_EnableIrqMask
|
||||
mov r1, #0
|
||||
ldr r0, _037FA53C ; =OSi_NeedResetTimer
|
||||
str r1, [r0]
|
||||
_037FA51C:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037FA528: .word _03807920
|
||||
_037FA52C: .word OSi_TickCounter
|
||||
_037FA530: .word 0x04000102
|
||||
_037FA534: .word 0x04000100
|
||||
_037FA538: .word OSi_CountUpTick
|
||||
_037FA53C: .word OSi_NeedResetTimer
|
||||
14
arm7/asm/OS_timer.s
Normal file
14
arm7/asm/OS_timer.s
Normal file
@@ -0,0 +1,14 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OSi_SetTimerReserved
|
||||
OSi_SetTimerReserved: ; 0x037FA348
|
||||
ldr r1, _037FA360 ; =_0380791C
|
||||
ldrh r3, [r1]
|
||||
mov r2, #1
|
||||
orr r0, r3, r2, lsl r0
|
||||
strh r0, [r1]
|
||||
bx lr
|
||||
_037FA360: .word _0380791C
|
||||
567
arm7/asm/dtcm.s
567
arm7/asm/dtcm.s
@@ -2,573 +2,6 @@
|
||||
.include "global.inc"
|
||||
|
||||
.section .text
|
||||
arm_func_start OS_CheckHeap
|
||||
OS_CheckHeap: ; 0x037F9D88
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r8, r0
|
||||
mov r7, r1
|
||||
mov r6, #0
|
||||
mov r5, r6
|
||||
mvn r4, #0
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037F9F34 ; =OSiHeapInfo
|
||||
ldr ip, [r1, r8, lsl #2]
|
||||
mov r1, r4
|
||||
cmp r7, r1
|
||||
ldreq r7, [ip]
|
||||
ldr r2, [ip, #16]
|
||||
cmp r2, #0
|
||||
beq _037F9F24
|
||||
cmp r7, #0
|
||||
blt _037F9F24
|
||||
ldr r1, [ip, #4]
|
||||
cmp r7, r1
|
||||
bge _037F9F24
|
||||
mov r1, #12
|
||||
mul r1, r7, r1
|
||||
add r3, r2, r1
|
||||
ldr r2, [r2, r1]
|
||||
cmp r2, #0
|
||||
blt _037F9F24
|
||||
ldr r1, [r3, #8]
|
||||
cmp r1, #0
|
||||
beq _037F9E70
|
||||
ldr r7, [r1]
|
||||
cmp r7, #0
|
||||
bne _037F9F24
|
||||
b _037F9E70
|
||||
_037F9E0C:
|
||||
ldr r7, [ip, #8]
|
||||
cmp r7, r1
|
||||
bhi _037F9F24
|
||||
ldr r7, [ip, #12]
|
||||
cmp r1, r7
|
||||
bcs _037F9F24
|
||||
ands r7, r1, #31
|
||||
bne _037F9F24
|
||||
ldr lr, [r1, #4]
|
||||
cmp lr, #0
|
||||
beq _037F9E44
|
||||
ldr r7, [lr]
|
||||
cmp r7, r1
|
||||
bne _037F9F24
|
||||
_037F9E44:
|
||||
ldr r7, [r1, #8]
|
||||
cmp r7, #64 ; 0x40
|
||||
bcc _037F9F24
|
||||
ands r1, r7, #31
|
||||
bne _037F9F24
|
||||
add r6, r6, r7
|
||||
cmp r6, #0
|
||||
ble _037F9F24
|
||||
cmp r6, r2
|
||||
bgt _037F9F24
|
||||
mov r1, lr
|
||||
_037F9E70:
|
||||
cmp r1, #0
|
||||
bne _037F9E0C
|
||||
ldr r1, [r3, #4]
|
||||
cmp r1, #0
|
||||
beq _037F9F14
|
||||
ldr r3, [r1]
|
||||
cmp r3, #0
|
||||
bne _037F9F24
|
||||
b _037F9F14
|
||||
_037F9E94:
|
||||
ldr r3, [ip, #8]
|
||||
cmp r3, r1
|
||||
bhi _037F9F24
|
||||
ldr r3, [ip, #12]
|
||||
cmp r1, r3
|
||||
bcs _037F9F24
|
||||
ands r3, r1, #31
|
||||
bne _037F9F24
|
||||
ldr lr, [r1, #4]
|
||||
cmp lr, #0
|
||||
beq _037F9ECC
|
||||
ldr r3, [lr]
|
||||
cmp r3, r1
|
||||
bne _037F9F24
|
||||
_037F9ECC:
|
||||
ldr r7, [r1, #8]
|
||||
cmp r7, #64 ; 0x40
|
||||
bcc _037F9F24
|
||||
ands r3, r7, #31
|
||||
bne _037F9F24
|
||||
cmp lr, #0
|
||||
beq _037F9EF4
|
||||
add r1, r1, r7
|
||||
cmp r1, lr
|
||||
bcs _037F9F24
|
||||
_037F9EF4:
|
||||
add r6, r6, r7
|
||||
sub r1, r7, #32
|
||||
add r5, r5, r1
|
||||
cmp r6, #0
|
||||
ble _037F9F24
|
||||
cmp r6, r2
|
||||
bgt _037F9F24
|
||||
mov r1, lr
|
||||
_037F9F14:
|
||||
cmp r1, #0
|
||||
bne _037F9E94
|
||||
cmp r6, r2
|
||||
moveq r4, r5
|
||||
_037F9F24:
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
_037F9F34: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_CreateHeap
|
||||
OS_CreateHeap: ; 0x037F9F38
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r4, r0
|
||||
mov r6, r1
|
||||
mov r5, r2
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037F9FDC ; =OSiHeapInfo
|
||||
ldr r7, [r1, r4, lsl #2]
|
||||
add r1, r6, #31
|
||||
bic r6, r1, #31
|
||||
bic r5, r5, #31
|
||||
mov r4, #0
|
||||
ldr lr, [r7, #4]
|
||||
mov r1, #12
|
||||
b _037F9FC0
|
||||
_037F9F74:
|
||||
ldr r3, [r7, #16]
|
||||
mul r2, r4, r1
|
||||
add ip, r3, r2
|
||||
ldr r2, [r3, r2]
|
||||
cmp r2, #0
|
||||
bge _037F9FBC
|
||||
sub r1, r5, r6
|
||||
str r1, [ip]
|
||||
mov r2, #0
|
||||
str r2, [r6]
|
||||
str r2, [r6, #4]
|
||||
ldr r1, [ip]
|
||||
str r1, [r6, #8]
|
||||
str r6, [ip, #4]
|
||||
str r2, [ip, #8]
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
b _037F9FD0
|
||||
_037F9FBC:
|
||||
add r4, r4, #1
|
||||
_037F9FC0:
|
||||
cmp r4, lr
|
||||
blt _037F9F74
|
||||
bl OS_RestoreInterrupts
|
||||
mvn r0, #0
|
||||
_037F9FD0:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037F9FDC: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_InitAlloc
|
||||
OS_InitAlloc: ; 0x037F9FE0
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r7, r0
|
||||
mov r5, r1
|
||||
mov r4, r2
|
||||
mov r6, r3
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037FA084 ; =OSiHeapInfo
|
||||
str r5, [r1, r7, lsl #2]
|
||||
mov r2, #12
|
||||
mul r1, r6, r2
|
||||
add r3, r5, #20
|
||||
str r3, [r5, #16]
|
||||
str r6, [r5, #4]
|
||||
mov r8, #0
|
||||
mvn lr, #0
|
||||
mov ip, r8
|
||||
b _037FA044
|
||||
_037FA024:
|
||||
ldr r6, [r5, #16]
|
||||
mul r3, r8, r2
|
||||
add r7, r6, r3
|
||||
str lr, [r6, r3]
|
||||
str ip, [r7, #8]
|
||||
ldr r3, [r7, #8]
|
||||
str r3, [r7, #4]
|
||||
add r8, r8, #1
|
||||
_037FA044:
|
||||
ldr r3, [r5, #4]
|
||||
cmp r8, r3
|
||||
blt _037FA024
|
||||
mvn r2, #0
|
||||
str r2, [r5]
|
||||
ldr r2, [r5, #16]
|
||||
add r1, r2, r1
|
||||
add r1, r1, #31
|
||||
bic r1, r1, #31
|
||||
str r1, [r5, #8]
|
||||
bic r1, r4, #31
|
||||
str r1, [r5, #12]
|
||||
bl OS_RestoreInterrupts
|
||||
ldr r0, [r5, #8]
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, lr}
|
||||
bx lr
|
||||
_037FA084: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_SetCurrentHeap
|
||||
OS_SetCurrentHeap: ; 0x037FA088
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
sub sp, sp, #4
|
||||
mov r4, r0
|
||||
mov r5, r1
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037FA0C0 ; =OSiHeapInfo
|
||||
ldr r1, [r1, r4, lsl #2]
|
||||
ldr r4, [r1]
|
||||
str r5, [r1]
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r4
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, lr}
|
||||
bx lr
|
||||
_037FA0C0: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_FreeToHeap
|
||||
OS_FreeToHeap: ; 0x037FA0C4
|
||||
stmdb sp!, {r4, r5, r6, r7, lr}
|
||||
sub sp, sp, #4
|
||||
mov r7, r0
|
||||
mov r4, r1
|
||||
mov r6, r2
|
||||
bl OS_DisableInterrupts
|
||||
mov r5, r0
|
||||
ldr r0, _037FA134 ; =OSiHeapInfo
|
||||
ldr r0, [r0, r7, lsl #2]
|
||||
cmp r4, #0
|
||||
ldrlt r4, [r0]
|
||||
sub r6, r6, #32
|
||||
ldr r1, [r0, #16]
|
||||
mov r0, #12
|
||||
mla r7, r4, r0, r1
|
||||
ldr r0, [r7, #8]
|
||||
mov r1, r6
|
||||
bl FUN_037FA304
|
||||
str r0, [r7, #8]
|
||||
ldr r0, [r7, #4]
|
||||
mov r1, r6
|
||||
bl FUN_037FA250
|
||||
str r0, [r7, #4]
|
||||
mov r0, r5
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037FA134: .word OSiHeapInfo
|
||||
|
||||
arm_func_start OS_AllocFromHeap
|
||||
OS_AllocFromHeap: ; 0x037FA138
|
||||
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
|
||||
ldr r1, _037FA24C ; =OSiHeapInfo
|
||||
ldr r1, [r1, r6, lsl #2]
|
||||
cmp r1, #0
|
||||
bne _037FA170
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037FA240
|
||||
_037FA170:
|
||||
cmp r5, #0
|
||||
ldrlt r5, [r1]
|
||||
ldr r1, [r1, #16]
|
||||
mov r0, #12
|
||||
mla r6, r5, r0, r1
|
||||
add r0, r7, #32
|
||||
add r0, r0, #31
|
||||
bic r7, r0, #31
|
||||
ldr r0, [r6, #4]
|
||||
mov r5, r0
|
||||
b _037FA1AC
|
||||
_037FA19C:
|
||||
ldr r1, [r5, #8]
|
||||
cmp r7, r1
|
||||
ble _037FA1B4
|
||||
ldr r5, [r5, #4]
|
||||
_037FA1AC:
|
||||
cmp r5, #0
|
||||
bne _037FA19C
|
||||
_037FA1B4:
|
||||
cmp r5, #0
|
||||
bne _037FA1CC
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, #0
|
||||
b _037FA240
|
||||
_037FA1CC:
|
||||
ldr r1, [r5, #8]
|
||||
sub r1, r1, r7
|
||||
cmp r1, #64 ; 0x40
|
||||
bcs _037FA1EC
|
||||
mov r1, r5
|
||||
bl FUN_037FA304
|
||||
str r0, [r6, #4]
|
||||
b _037FA224
|
||||
_037FA1EC:
|
||||
str r7, [r5, #8]
|
||||
add r2, r5, r7
|
||||
str r1, [r2, #8]
|
||||
ldr r0, [r5]
|
||||
str r0, [r5, r7]
|
||||
ldr r0, [r5, #4]
|
||||
str r0, [r2, #4]
|
||||
ldr r0, [r2, #4]
|
||||
cmp r0, #0
|
||||
strne r2, [r0]
|
||||
ldr r0, [r2]
|
||||
cmp r0, #0
|
||||
strne r2, [r0, #4]
|
||||
streq r2, [r6, #4]
|
||||
_037FA224:
|
||||
ldr r0, [r6, #8]
|
||||
mov r1, r5
|
||||
bl FUN_037FA32C
|
||||
str r0, [r6, #8]
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
add r0, r5, #32
|
||||
_037FA240:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r4, r5, r6, r7, lr}
|
||||
bx lr
|
||||
_037FA24C: .word OSiHeapInfo
|
||||
|
||||
arm_func_start FUN_037FA250
|
||||
FUN_037FA250: ; 0x037FA250
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
mov ip, r0
|
||||
mov lr, #0
|
||||
b _037FA274
|
||||
_037FA264:
|
||||
cmp r1, ip
|
||||
bls _037FA27C
|
||||
mov lr, ip
|
||||
ldr ip, [ip, #4]
|
||||
_037FA274:
|
||||
cmp ip, #0
|
||||
bne _037FA264
|
||||
_037FA27C:
|
||||
str ip, [r1, #4]
|
||||
str lr, [r1]
|
||||
cmp ip, #0
|
||||
beq _037FA2BC
|
||||
str r1, [ip]
|
||||
ldr r3, [r1, #8]
|
||||
add r2, r1, r3
|
||||
cmp r2, ip
|
||||
bne _037FA2BC
|
||||
ldr r2, [ip, #8]
|
||||
add r2, r3, r2
|
||||
str r2, [r1, #8]
|
||||
ldr ip, [ip, #4]
|
||||
str ip, [r1, #4]
|
||||
cmp ip, #0
|
||||
strne r1, [ip]
|
||||
_037FA2BC:
|
||||
cmp lr, #0
|
||||
beq _037FA2F4
|
||||
str r1, [lr, #4]
|
||||
ldr r2, [lr, #8]
|
||||
add r3, lr, r2
|
||||
cmp r3, r1
|
||||
bne _037FA2F8
|
||||
ldr r1, [r1, #8]
|
||||
add r1, r2, r1
|
||||
str r1, [lr, #8]
|
||||
str ip, [lr, #4]
|
||||
cmp ip, #0
|
||||
strne lr, [ip]
|
||||
b _037FA2F8
|
||||
_037FA2F4:
|
||||
mov r0, r1
|
||||
_037FA2F8:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start FUN_037FA304
|
||||
FUN_037FA304: ; 0x037FA304
|
||||
ldr r3, [r1, #4]
|
||||
cmp r3, #0
|
||||
ldrne r2, [r1]
|
||||
strne r2, [r3]
|
||||
ldr r2, [r1]
|
||||
cmp r2, #0
|
||||
ldreq r0, [r1, #4]
|
||||
ldrne r1, [r1, #4]
|
||||
strne r1, [r2, #4]
|
||||
bx lr
|
||||
|
||||
arm_func_start FUN_037FA32C
|
||||
FUN_037FA32C: ; 0x037FA32C
|
||||
str r0, [r1, #4]
|
||||
mov r2, #0
|
||||
str r2, [r1]
|
||||
cmp r0, #0
|
||||
strne r1, [r0]
|
||||
mov r0, r1
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_SetTimerReserved
|
||||
OSi_SetTimerReserved: ; 0x037FA348
|
||||
ldr r1, _037FA360 ; =_0380791C
|
||||
ldrh r3, [r1]
|
||||
mov r2, #1
|
||||
orr r0, r3, r2, lsl r0
|
||||
strh r0, [r1]
|
||||
bx lr
|
||||
_037FA360: .word _0380791C
|
||||
|
||||
arm_func_start OS_GetTick
|
||||
OS_GetTick: ; 0x037FA364
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #12
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _037FA404 ; =0x04000100
|
||||
ldrh r1, [r1]
|
||||
strh r1, [sp]
|
||||
ldr r1, _037FA408 ; =OSi_TickCounter
|
||||
ldr ip, [r1]
|
||||
ldr r3, [r1, #4]
|
||||
ldr r2, _037FA40C ; =0x0000FFFF
|
||||
mvn r1, #0
|
||||
and r2, r3, r2
|
||||
and r1, ip, r1
|
||||
str r1, [sp, #4]
|
||||
str r2, [sp, #8]
|
||||
ldr r1, _037FA410 ; =0x04000214
|
||||
ldr r1, [r1]
|
||||
ands r1, r1, #8
|
||||
beq _037FA3D8
|
||||
ldrh r1, [sp]
|
||||
ands r1, r1, #32768 ; 0x8000
|
||||
bne _037FA3D8
|
||||
ldr r3, [sp, #4]
|
||||
ldr r2, [sp, #8]
|
||||
mov r1, #1
|
||||
adds r3, r3, r1
|
||||
adc r1, r2, #0
|
||||
str r3, [sp, #4]
|
||||
str r1, [sp, #8]
|
||||
_037FA3D8:
|
||||
bl OS_RestoreInterrupts
|
||||
ldr r2, [sp, #4]
|
||||
ldr r0, [sp, #8]
|
||||
mov r1, r0, lsl #16
|
||||
orr r1, r1, r2, lsr #16
|
||||
ldrh r0, [sp]
|
||||
orr r1, r1, r0, asr #31
|
||||
orr r0, r0, r2, lsl #16
|
||||
add sp, sp, #12
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037FA404: .word 0x04000100
|
||||
_037FA408: .word OSi_TickCounter
|
||||
_037FA40C: .word 0x0000FFFF
|
||||
_037FA410: .word 0x04000214
|
||||
|
||||
arm_func_start FUN_037FA414
|
||||
FUN_037FA414: ; 0x037FA414
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r1, _037FA488 ; =OSi_TickCounter
|
||||
ldr ip, [r1]
|
||||
ldr r2, [r1, #4]
|
||||
mov r3, #0
|
||||
mov r0, #1
|
||||
adds ip, ip, r0
|
||||
adc r0, r2, #0
|
||||
str ip, [r1]
|
||||
str r0, [r1, #4]
|
||||
ldr r0, _037FA48C ; =OSi_NeedResetTimer
|
||||
ldr r1, [r0]
|
||||
cmp r1, #0
|
||||
beq _037FA46C
|
||||
ldr r2, _037FA490 ; =0x04000102
|
||||
strh r3, [r2]
|
||||
ldr r1, _037FA494 ; =0x04000100
|
||||
strh r3, [r1]
|
||||
mov r1, #193 ; 0xc1
|
||||
strh r1, [r2]
|
||||
str r3, [r0]
|
||||
_037FA46C:
|
||||
mov r0, #0
|
||||
ldr r1, _037FA498 ; =FUN_037FA414
|
||||
mov r2, r0
|
||||
bl OSi_EnterTimerCallback
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037FA488: .word OSi_TickCounter
|
||||
_037FA48C: .word OSi_NeedResetTimer
|
||||
_037FA490: .word 0x04000102
|
||||
_037FA494: .word 0x04000100
|
||||
_037FA498: .word FUN_037FA414
|
||||
|
||||
arm_func_start OS_IsTickAvailable
|
||||
OS_IsTickAvailable: ; 0x037FA49C
|
||||
ldr r0, _037FA4A8 ; =_03807920
|
||||
ldrh r0, [r0]
|
||||
bx lr
|
||||
_037FA4A8: .word _03807920
|
||||
|
||||
arm_func_start OS_InitTick
|
||||
OS_InitTick: ; 0x037FA4AC
|
||||
stmfd sp!, {lr}
|
||||
sub sp, sp, #4
|
||||
ldr r0, _037FA528 ; =_03807920
|
||||
ldrh r1, [r0]
|
||||
cmp r1, #0
|
||||
bne _037FA51C
|
||||
mov r1, #1
|
||||
strh r1, [r0]
|
||||
mov r0, #0
|
||||
bl OSi_SetTimerReserved
|
||||
mov r2, #0
|
||||
ldr r0, _037FA52C ; =OSi_TickCounter
|
||||
str r2, [r0]
|
||||
str r2, [r0, #4]
|
||||
ldr r1, _037FA530 ; =0x04000102
|
||||
strh r2, [r1]
|
||||
ldr r0, _037FA534 ; =0x04000100
|
||||
strh r2, [r0]
|
||||
mov r0, #193 ; 0xc1
|
||||
strh r0, [r1]
|
||||
mov r0, #8
|
||||
ldr r1, _037FA538 ; =FUN_037FA414
|
||||
bl OS_SetIrqFunction
|
||||
mov r0, #8
|
||||
bl OS_EnableIrqMask
|
||||
mov r1, #0
|
||||
ldr r0, _037FA53C ; =OSi_NeedResetTimer
|
||||
str r1, [r0]
|
||||
_037FA51C:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_037FA528: .word _03807920
|
||||
_037FA52C: .word OSi_TickCounter
|
||||
_037FA530: .word 0x04000102
|
||||
_037FA534: .word 0x04000100
|
||||
_037FA538: .word FUN_037FA414
|
||||
_037FA53C: .word OSi_NeedResetTimer
|
||||
|
||||
arm_func_start FUN_037FA540
|
||||
FUN_037FA540: ; 0x037FA540
|
||||
stmdb sp!, {r0, lr}
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
.extern OSi_IrqDma1
|
||||
.extern OSi_IrqDma0
|
||||
.extern OSi_RemoveMutexLinkFromQueue
|
||||
.extern OSi_SetTimerReserved
|
||||
.extern OSi_UnlockAllMutex
|
||||
.extern OS_IrqDummy
|
||||
.extern OS_CheckHeap
|
||||
@@ -47,6 +48,7 @@
|
||||
.extern OS_InitReset
|
||||
.extern OS_InitThread
|
||||
.extern OS_IsResetOccurred
|
||||
.extern OS_IsTickAvailable
|
||||
.extern OS_LoadContext
|
||||
.extern OS_ResetRequestIrqMask
|
||||
.extern OS_ResetSystem
|
||||
|
||||
Reference in New Issue
Block a user