Files
pokediamond/arm7/asm/OS_spinLock.s
2020-05-31 16:12:50 +01:00

273 lines
5.1 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start OS_UnLockCartridge
OS_UnLockCartridge: ; 0x037F8A18
ldr r1, _037F8A20 ; =OS_UnlockCartridge
bx r1
_037F8A20: .word OS_UnlockCartridge
arm_func_start OS_GetLockID
OS_GetLockID: ; 0x037F8A24
ldr r3, _037F8AB4 ; =0x027FFFB8
ldr r1, [r3]
mov r2, #0
mov r0, #-2147483648 ; 0x80000000
_037F8A34:
tst r1, r0
bne _037F8A50
add r2, r2, #1
cmp r2, #32
beq _037F8A50
mov r0, r0, lsr #1
b _037F8A34
_037F8A50:
cmp r2, #32
movne r0, #128 ; 0x80
bne _037F8A98
add r3, r3, #4
ldr r1, [r3]
mov r2, #0
mov r0, #-2147483648 ; 0x80000000
_037F8A6C:
tst r1, r0
bne _037F8A88
add r2, r2, #1
cmp r2, #32
beq _037F8A88
mov r0, r0, lsr #1
b _037F8A6C
_037F8A88:
cmp r2, #32
ldr r0, _037F8AB8 ; =0xFFFFFFFD
bxeq lr
mov r0, #160 ; 0xa0
_037F8A98:
add r0, r0, r2
mov r1, #-2147483648 ; 0x80000000
mov r1, r1, lsr r2
ldr r2, [r3]
bic r2, r2, r1
str r2, [r3]
bx lr
_037F8AB4: .word 0x027FFFB8
_037F8AB8: .word 0xFFFFFFFD
arm_func_start OS_ReleaseLockID
OS_ReleaseLockID: ; 0x037F8ABC
ldr r3, _037F8AE8 ; =0x027FFFB8
cmp r0, #160 ; 0xa0
addpl r3, r3, #4
subpl r0, r0, #160 ; 0xa0
submi r0, r0, #128 ; 0x80
mov r1, #-2147483648 ; 0x80000000
mov r1, r1, lsr r0
ldr r2, [r3]
orr r2, r2, r1
str r2, [r3]
bx lr
_037F8AE8: .word 0x027FFFB8
arm_func_start OS_ReadOwnerOfLockWord
OS_ReadOwnerOfLockWord: ; 0x037F8AEC
ldrh r0, [r0, #4]
bx lr
arm_func_start OSi_FreeCartridgeBus
OSi_FreeCartridgeBus: ;0x037F8AF4
bx lr
arm_func_start OSi_AllocateCartridgeBus
OSi_AllocateCartridgeBus: ;0x037F8AF8
bx lr
arm_func_start OS_TryLockCartridge
OS_TryLockCartridge: ; 0x037F8AFC
ldr r1, _037F8B10 ; =0x027FFFE8
ldr r2, _037F8B14 ; =OSi_AllocateCartridgeBus
mov r3, #1
ldr ip, _037F8B18 ; =OSi_DoTryLockByWord
bx ip
_037F8B10: .word 0x027FFFE8
_037F8B14: .word OSi_AllocateCartridgeBus
_037F8B18: .word OSi_DoTryLockByWord
arm_func_start OS_UnlockCartridge
OS_UnlockCartridge: ; 0x037F8B1C
ldr r1, _037F8B30 ; =0x027FFFE8
ldr r2, _037F8B34 ; =OSi_FreeCartridgeBus
mov r3, #1
ldr ip, _037F8B38 ; =OSi_DoUnlockByWord
bx ip
_037F8B30: .word 0x027FFFE8
_037F8B34: .word OSi_FreeCartridgeBus
_037F8B38: .word OSi_DoUnlockByWord
arm_func_start OS_LockCartridge
OS_LockCartridge: ; 0x037F8B3C
ldr r1, _037F8B50 ; =0x027FFFE8
ldr r2, _037F8B54 ; =OSi_AllocateCartridgeBus
mov r3, #1
ldr ip, _037F8B58 ; =OSi_DoLockByWord
bx ip
_037F8B50: .word 0x027FFFE8
_037F8B54: .word OSi_AllocateCartridgeBus
_037F8B58: .word OSi_DoLockByWord
arm_func_start OSi_DoTryLockByWord
OSi_DoTryLockByWord: ; 0x037F8B5C
stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
sub sp, sp, #4
mov r9, r0
mov r8, r1
mov r7, r2
movs r6, r3
beq _037F8B84
bl OS_DisableInterrupts_IrqAndFiq
mov r5, r0
b _037F8B8C
_037F8B84:
bl OS_DisableInterrupts
mov r5, r0
_037F8B8C:
mov r0, r9
mov r1, r8
bl MI_SwapWord
movs r4, r0
bne _037F8BB4
cmp r7, #0
beq _037F8BB0
mov lr, pc
bx r7
_037F8BB0:
strh r9, [r8, #4]
_037F8BB4:
cmp r6, #0
beq _037F8BC8
mov r0, r5
bl OS_RestoreInterrupts_IrqAndFiq
b _037F8BD0
_037F8BC8:
mov r0, r5
bl OS_RestoreInterrupts
_037F8BD0:
mov r0, r4
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
bx lr
arm_func_start OSi_DoUnlockByWord
OSi_DoUnlockByWord: ; 0x037F8BE0
stmdb sp!, {r4, r5, r6, r7, lr}
sub sp, sp, #4
mov r7, r1
mov r6, r2
mov r5, r3
ldrh r1, [r7, #4]
cmp r0, r1
mvnne r0, #1
bne _037F8C60
cmp r5, #0
beq _037F8C18
bl OS_DisableInterrupts_IrqAndFiq
mov r4, r0
b _037F8C20
_037F8C18:
bl OS_DisableInterrupts
mov r4, r0
_037F8C20:
mov r0, #0
strh r0, [r7, #4]
cmp r6, #0
beq _037F8C38
mov lr, pc
bx r6
_037F8C38:
mov r0, #0
str r0, [r7]
cmp r5, #0
beq _037F8C54
mov r0, r4
bl OS_RestoreInterrupts_IrqAndFiq
b _037F8C5C
_037F8C54:
mov r0, r4
bl OS_RestoreInterrupts
_037F8C5C:
mov r0, #0
_037F8C60:
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, lr}
bx lr
arm_func_start OSi_DoLockByWord
OSi_DoLockByWord: ; 0x037F8C6C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r8, r0
mov r7, r1
mov r6, r2
mov r5, r3
mov r4, #1024 ; 0x400
b _037F8C90
_037F8C88:
mov r0, r4
bl FUN_037F8CB4
_037F8C90:
mov r0, r8
mov r1, r7
mov r2, r6
mov r3, r5
bl OSi_DoTryLockByWord
cmp r0, #0
bgt _037F8C88
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
arm_func_start FUN_037F8CB4
FUN_037F8CB4: ; 0x037F8CB4 ;part of the above func?
ldr ip, _037F8CBC ; =SVC_WaitByLoop
bx ip
_037F8CBC: .word SVC_WaitByLoop
arm_func_start OS_InitLock
OS_InitLock: ; 0x037F8CC0
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
ldr r0, _037F8D38 ; =_03807780
ldr r1, [r0]
cmp r1, #0
bne _037F8D2C
mov r1, #1
str r1, [r0]
mov r0, #0
ldr r4, _037F8D3C ; =0x027FFFF0
strh r0, [r4, #6]
mov r5, #1024 ; 0x400
b _037F8CFC
_037F8CF4:
mov r0, r5
bl FUN_037F8CB4
_037F8CFC:
ldrh r0, [r4, #4]
cmp r0, #127 ; 0x7f
bne _037F8CF4
mvn r1, #0
ldr r0, _037F8D40 ; =0x027FFFB8
str r1, [r0]
mov r0, #65536 ; 0x10000
rsb r1, r0, #0
ldr r0, _037F8D44 ; =0x027FFFBC
str r1, [r0]
mov r0, #191 ; 0xbf
strh r0, [r4, #6]
_037F8D2C:
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
_037F8D38: .word _03807780
_037F8D3C: .word 0x027FFFF0
_037F8D40: .word 0x027FFFB8
_037F8D44: .word 0x027FFFBC