summaryrefslogtreecommitdiff
path: root/arm9/lib
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-05-22 20:30:37 +0100
committerred031000 <rubenru09@aol.com>2020-05-22 20:30:37 +0100
commitd5bff2f511cd2657e62c0ba3fec0e6efd044bd08 (patch)
tree3fbfc8ea8ffe30f419f65aa16f84ff209a7ed5d7 /arm9/lib
parent1a45d65f162615b48fd56d60af37ed5483aa9bba (diff)
bunch of small cartridge funcs
Diffstat (limited to 'arm9/lib')
-rw-r--r--arm9/lib/include/OS_spinLock.h5
-rw-r--r--arm9/lib/include/mmap.h1
-rw-r--r--arm9/lib/src/OS_spinLock.c27
3 files changed, 31 insertions, 2 deletions
diff --git a/arm9/lib/include/OS_spinLock.h b/arm9/lib/include/OS_spinLock.h
index 520b7b2f..eb94a010 100644
--- a/arm9/lib/include/OS_spinLock.h
+++ b/arm9/lib/include/OS_spinLock.h
@@ -28,6 +28,11 @@ s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
s32 OS_UnlockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void));
s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
BOOL disableFiq);
+s32 OS_LockCartridge(u16 lockID);
+s32 OS_UnlockCartridge(u16 lockID);
+s32 OS_TryLockCartridge(u16 lockID);
+void OSi_AllocateCartridgeBus();
+void OSi_FreeCartridgeBus();
s32 OS_GetLockID(void);
#endif //POKEDIAMOND_OS_SPINLOCK_H
diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h
index b316a1fa..b47d88b4 100644
--- a/arm9/lib/include/mmap.h
+++ b/arm9/lib/include/mmap.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_CTRDG_LOCK_BUF (HW_MAIN_MEM + 0x007fffe8)
#define HW_BUTTON_XY_BUF (HW_MAIN_MEM + 0x007fffa8)
diff --git a/arm9/lib/src/OS_spinLock.c b/arm9/lib/src/OS_spinLock.c
index aac5b295..9cda667f 100644
--- a/arm9/lib/src/OS_spinLock.c
+++ b/arm9/lib/src/OS_spinLock.c
@@ -9,8 +9,6 @@
#include "MI_exMemory.h"
extern void MIi_CpuClear32(u32 param1, void * addr, u32 length); //not too sure about names
-extern s32 OSi_DoTryLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void),
- BOOL disableFiq);
extern u32 MI_SwapWord(u32 data, volatile u32* destp);
ARM_FUNC void OS_InitLock()
@@ -121,3 +119,28 @@ ARM_FUNC s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp
return lastLockFlag;
}
+
+ARM_FUNC s32 OS_LockCartridge(u16 lockID)
+{
+ return OSi_DoLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE);
+}
+
+ARM_FUNC s32 OS_UnlockCartridge(u16 lockID)
+{
+ return OSi_DoUnlockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_FreeCartridgeBus, TRUE);
+}
+
+ARM_FUNC s32 OS_TryLockCartridge(u16 lockID)
+{
+ return OSi_DoTryLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE);
+}
+
+ARM_FUNC void OSi_AllocateCartridgeBus()
+{
+ MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM9);
+}
+
+ARM_FUNC void OSi_FreeCartridgeBus()
+{
+ MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM7);
+}