mirror of
https://github.com/pret/pokediamond.git
synced 2026-09-10 10:06:32 -05:00
finish OS_spinLock
This commit is contained in:
@@ -457,7 +457,6 @@ SECTIONS {
|
||||
OS_irqHandler.o (.text)
|
||||
OS_irqTable.o (.text)
|
||||
OS_interrupt.o (.text)
|
||||
OS_spinLock_asm.o (.text)
|
||||
OS_spinLock.o (.text)
|
||||
OS_printf.o (.text)
|
||||
OS_thread.o (.text)
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start OS_UnLockCartridge
|
||||
OS_UnLockCartridge: ; 0x020CA094
|
||||
ldr r1, _020CA09C ; =OS_UnlockCartridge
|
||||
bx r1
|
||||
.balign 4
|
||||
_020CA09C: .word OS_UnlockCartridge
|
||||
|
||||
arm_func_start OS_GetLockID
|
||||
OS_GetLockID: ; 0x020CA0A0
|
||||
ldr r3, _020CA0F0 ; =0x027FFFB0
|
||||
ldr r1, [r3, #0x0]
|
||||
clz r2, r1
|
||||
cmp r2, #0x20
|
||||
movne r0, #0x40
|
||||
bne _020CA0D4
|
||||
add r3, r3, #0x4
|
||||
ldr r1, [r3, #0x0]
|
||||
clz r2, r1
|
||||
cmp r2, #0x20
|
||||
ldr r0, _020CA0F4 ; =0xFFFFFFFD
|
||||
bxeq lr
|
||||
mov r0, #0x60
|
||||
_020CA0D4:
|
||||
add r0, r0, r2
|
||||
mov r1, #0x80000000
|
||||
mov r1, r1, lsr r2
|
||||
ldr r2, [r3, #0x0]
|
||||
bic r2, r2, r1
|
||||
str r2, [r3, #0x0]
|
||||
bx lr
|
||||
.balign 4
|
||||
_020CA0F0: .word 0x027FFFB0
|
||||
_020CA0F4: .word 0xFFFFFFFD
|
||||
|
||||
arm_func_start OS_ReleaseLockID
|
||||
OS_ReleaseLockID: ; 0x020CA0F8
|
||||
ldr r3, _020CA124 ; =0x027FFFB0
|
||||
cmp r0, #0x60
|
||||
addpl r3, r3, #0x4
|
||||
subpl r0, r0, #0x60
|
||||
submi r0, r0, #0x40
|
||||
mov r1, #0x80000000
|
||||
mov r1, r1, lsr r0
|
||||
ldr r2, [r3, #0x0]
|
||||
orr r2, r2, r1
|
||||
str r2, [r3, #0x0]
|
||||
bx lr
|
||||
.balign 4
|
||||
_020CA124: .word 0x027FFFB0
|
||||
|
||||
arm_func_start OS_ReadOwnerOfLockWord
|
||||
OS_ReadOwnerOfLockWord: ; 0x020CA128
|
||||
ldrh r0, [r0, #0x4]
|
||||
bx lr
|
||||
|
||||
arm_func_start OSi_FreeCardBus
|
||||
OSi_FreeCardBus: ; 0x020CA130
|
||||
ldr r1, _020CA144 ; =0x04000204
|
||||
ldrh r0, [r1, #0x0]
|
||||
orr r0, r0, #0x800
|
||||
strh r0, [r1, #0x0]
|
||||
bx lr
|
||||
.balign 4
|
||||
_020CA144: .word 0x04000204
|
||||
|
||||
arm_func_start OSi_AllocateCardBus
|
||||
OSi_AllocateCardBus: ; 0x020CA148
|
||||
ldr r1, _020CA15C ; =0x04000204
|
||||
ldrh r0, [r1, #0x0]
|
||||
bic r0, r0, #0x800
|
||||
strh r0, [r1, #0x0]
|
||||
bx lr
|
||||
.balign 4
|
||||
_020CA15C: .word 0x04000204
|
||||
|
||||
arm_func_start OS_UnlockCard
|
||||
OS_UnlockCard: ; 0x020CA160
|
||||
ldr ip, _020CA170 ; =OS_UnlockByWord
|
||||
ldr r1, _020CA174 ; =0x027FFFE0
|
||||
ldr r2, _020CA178 ; =OSi_FreeCardBus
|
||||
bx r12
|
||||
.balign 4
|
||||
_020CA170: .word OS_UnlockByWord
|
||||
_020CA174: .word 0x027FFFE0
|
||||
_020CA178: .word OSi_FreeCardBus
|
||||
|
||||
arm_func_start OS_TryLockCard
|
||||
OS_TryLockCard: ; 0x020CA17C
|
||||
ldr ip, _020CA18C ; =OS_TryLockByWord
|
||||
ldr r1, _020CA190 ; =0x027FFFE0
|
||||
ldr r2, _020CA194 ; =OSi_AllocateCardBus
|
||||
bx r12
|
||||
.balign 4
|
||||
_020CA18C: .word OS_TryLockByWord
|
||||
_020CA190: .word 0x027FFFE0
|
||||
_020CA194: .word OSi_AllocateCardBus
|
||||
@@ -14,12 +14,12 @@ typedef volatile struct OSLockWord {
|
||||
u16 extension;
|
||||
} OSLockWord;
|
||||
|
||||
static inline void OSi_WaitByLoop()
|
||||
static inline void OSi_WaitByLoop(void)
|
||||
{
|
||||
SVC_WaitByLoop(0x1000 / 4);
|
||||
}
|
||||
|
||||
void OS_InitLock();
|
||||
void OS_InitLock(void);
|
||||
s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void),
|
||||
BOOL disableFiq);
|
||||
s32 OS_TryLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void));
|
||||
@@ -31,8 +31,15 @@ s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
|
||||
s32 OS_LockCartridge(u16 lockID);
|
||||
s32 OS_UnlockCartridge(u16 lockID);
|
||||
s32 OS_TryLockCartridge(u16 lockID);
|
||||
void OSi_AllocateCartridgeBus();
|
||||
void OSi_FreeCartridgeBus();
|
||||
void OSi_AllocateCartridgeBus(void);
|
||||
void OSi_FreeCartridgeBus(void);
|
||||
s32 OS_TryLockCard(u16 lockID);
|
||||
s32 OS_UnlockCard(u16 lockID);
|
||||
void OSi_AllocateCardBus(void);
|
||||
void OSi_FreeCardBus(void);
|
||||
u16 OS_ReadOwnerOfLockWord(OSLockWord * lock);
|
||||
s32 OS_UnLockCartridge(u16 lockID);
|
||||
s32 OS_GetLockID(void);
|
||||
void OS_ReleaseLockID(register u16 lockID);
|
||||
|
||||
#endif //POKEDIAMOND_OS_SPINLOCK_H
|
||||
|
||||
@@ -41,6 +41,7 @@ extern u32 SDK_AUTOLOAD_DTCM_START[];
|
||||
|
||||
#define HW_LOCK_ID_FLAG_MAIN (HW_MAIN_MEM + 0x007fffb0)
|
||||
#define HW_SHARED_LOCK_BUF (HW_MAIN_MEM + 0x007fffc0)
|
||||
#define HW_CARD_LOCK_BUF (HW_MAIN_MEM + 0x007fffe0)
|
||||
#define HW_CTRDG_LOCK_BUF (HW_MAIN_MEM + 0x007fffe8)
|
||||
|
||||
#define HW_BUTTON_XY_BUF (HW_MAIN_MEM + 0x007fffa8)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
extern void MIi_CpuClear32(u32 param1, void * addr, u32 length); //not too sure about names
|
||||
extern u32 MI_SwapWord(u32 data, volatile u32* destp);
|
||||
|
||||
ARM_FUNC void OS_InitLock()
|
||||
ARM_FUNC void OS_InitLock(void)
|
||||
{
|
||||
static BOOL isInitialized = FALSE;
|
||||
|
||||
@@ -135,12 +135,83 @@ ARM_FUNC s32 OS_TryLockCartridge(u16 lockID)
|
||||
return OSi_DoTryLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE);
|
||||
}
|
||||
|
||||
ARM_FUNC void OSi_AllocateCartridgeBus()
|
||||
ARM_FUNC void OSi_AllocateCartridgeBus(void)
|
||||
{
|
||||
MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM9);
|
||||
}
|
||||
|
||||
ARM_FUNC void OSi_FreeCartridgeBus()
|
||||
ARM_FUNC void OSi_FreeCartridgeBus(void)
|
||||
{
|
||||
MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM7);
|
||||
}
|
||||
|
||||
ARM_FUNC s32 OS_TryLockCard(u16 lockID)
|
||||
{
|
||||
return OS_TryLockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, OSi_AllocateCardBus);
|
||||
}
|
||||
|
||||
ARM_FUNC s32 OS_UnlockCard(u16 lockID)
|
||||
{
|
||||
return OS_UnlockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, OSi_FreeCardBus);
|
||||
}
|
||||
|
||||
ARM_FUNC void OSi_AllocateCardBus(void)
|
||||
{
|
||||
MIi_SetCardProcessor(MI_PROCESSOR_ARM9);
|
||||
}
|
||||
|
||||
ARM_FUNC void OSi_FreeCardBus(void)
|
||||
{
|
||||
MIi_SetCardProcessor(MI_PROCESSOR_ARM7);
|
||||
}
|
||||
|
||||
ARM_FUNC u16 OS_ReadOwnerOfLockWord(OSLockWord * lock)
|
||||
{
|
||||
return lock->ownerID;
|
||||
}
|
||||
|
||||
ARM_FUNC asm s32 OS_UnLockCartridge(u16 lockID)
|
||||
{
|
||||
ldr r1, =OS_UnlockCartridge
|
||||
bx r1
|
||||
}
|
||||
|
||||
ARM_FUNC asm s32 OS_GetLockID(void)
|
||||
{
|
||||
ldr r3, =HW_LOCK_ID_FLAG_MAIN
|
||||
ldr r1, [r3, #0x0]
|
||||
clz r2, r1
|
||||
cmp r2, #0x20
|
||||
movne r0, #0x40
|
||||
bne _020CA0D4
|
||||
add r3, r3, #0x4
|
||||
ldr r1, [r3, #0x0]
|
||||
clz r2, r1
|
||||
cmp r2, #0x20
|
||||
ldr r0, =0xFFFFFFFD
|
||||
bxeq lr
|
||||
mov r0, #0x60
|
||||
_020CA0D4:
|
||||
add r0, r0, r2
|
||||
mov r1, #0x80000000
|
||||
mov r1, r1, lsr r2
|
||||
ldr r2, [r3, #0x0]
|
||||
bic r2, r2, r1
|
||||
str r2, [r3, #0x0]
|
||||
bx lr
|
||||
}
|
||||
|
||||
ARM_FUNC asm void OS_ReleaseLockID(register u16 lockID)
|
||||
{
|
||||
ldr r3, =HW_LOCK_ID_FLAG_MAIN
|
||||
cmp r0, #0x60
|
||||
addpl r3, r3, #0x4
|
||||
subpl r0, r0, #0x60
|
||||
submi r0, r0, #0x40
|
||||
mov r1, #0x80000000
|
||||
mov r1, r1, lsr r0
|
||||
ldr r2, [r3, #0x0]
|
||||
orr r2, r2, r1
|
||||
str r2, [r3, #0x0]
|
||||
bx lr
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user