mirror of
https://github.com/pret/pokediamond.git
synced 2026-09-26 21:35:08 -04:00
273 lines
5.1 KiB
ArmAsm
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
|