finish OS_spinLock

This commit is contained in:
red031000
2020-05-22 23:56:59 +01:00
parent d5bff2f511
commit 565fa0f53a
5 changed files with 86 additions and 109 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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
}