From 91db1083cc248734e934ff9e1c93a27c2b448250 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 13 Jun 2020 20:12:27 +0100 Subject: arm7 OS_terminate_proc --- arm7/lib/include/OS_init.h | 1 + arm7/lib/include/OS_terminate_proc.h | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 arm7/lib/include/OS_terminate_proc.h (limited to 'arm7/lib/include') diff --git a/arm7/lib/include/OS_init.h b/arm7/lib/include/OS_init.h index c90740c2..c4e1ca37 100644 --- a/arm7/lib/include/OS_init.h +++ b/arm7/lib/include/OS_init.h @@ -6,6 +6,7 @@ #include "OS_arena.h" #include "OS_alloc.h" #include "OS_reset.h" +#include "OS_terminate_proc.h" void OS_Init(void); diff --git a/arm7/lib/include/OS_terminate_proc.h b/arm7/lib/include/OS_terminate_proc.h new file mode 100644 index 00000000..ea2273c8 --- /dev/null +++ b/arm7/lib/include/OS_terminate_proc.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_ARM7_OS_TERMINATE_PROC_H +#define POKEDIAMOND_ARM7_OS_TERMINATE_PROC_H + +void OS_Terminate(void); + +#endif //POKEDIAMOND_ARM7_OS_TERMINATE_PROC_H -- cgit v1.2.3 From 7a7bce2bc77bf7886916787cb09f6d39704818c3 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 14 Jun 2020 17:32:24 +0100 Subject: arm7 OS_spinLock --- arm7/lib/include/MI_dma.h | 6 +++--- arm7/lib/include/OS_spinLock.h | 28 ++++++++++++++++++++++++++++ arm7/lib/include/mmap.h | 2 ++ arm7/lib/include/syscall.h | 6 ++++++ 4 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 arm7/lib/include/OS_spinLock.h create mode 100644 arm7/lib/include/syscall.h (limited to 'arm7/lib/include') diff --git a/arm7/lib/include/MI_dma.h b/arm7/lib/include/MI_dma.h index b728f814..e65f0b89 100644 --- a/arm7/lib/include/MI_dma.h +++ b/arm7/lib/include/MI_dma.h @@ -1,7 +1,7 @@ -#ifndef GUARD_MI_DMA_H -#define GUARD_MI_DMA_H +#ifndef POKEDIAMOND_ARM7_MI_DMA_H +#define POKEDIAMOND_ARM7_MI_DMA_H -#include "nitro/dma.h" +#include "nitro/MI_dma_shared.h" #include "nitro/types.h" void MI_StopDma(u32 channel); diff --git a/arm7/lib/include/OS_spinLock.h b/arm7/lib/include/OS_spinLock.h new file mode 100644 index 00000000..f7366d1f --- /dev/null +++ b/arm7/lib/include/OS_spinLock.h @@ -0,0 +1,28 @@ +#ifndef POKEDIAMOND_ARM7_OS_SPINLOCK_H +#define POKEDIAMOND_ARM7_OS_SPINLOCK_H + +#include "consts.h" +#include "nitro/OS_spinLock_shared.h" +#include "syscall.h" + +void OS_InitLock(void); +void FUN_037F8CB4(s32 ct); +s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), BOOL disableFiq); +s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), BOOL disableFIQ); +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); +void OSi_FreeCartridgeBus(void); +u16 OS_ReadOwnerOfLockWord(OSLockWord * lock); +s32 OS_UnLockCartridge(u16 lockID); +s32 OS_GetLockID(void); +void OS_ReleaseLockID(register u16 lockID); + +static inline void OSi_WaitByLoop(void) +{ + FUN_037F8CB4(0x1000 / 4); +} + +#endif //POKEDIAMOND_ARM7_OS_SPINLOCK_H diff --git a/arm7/lib/include/mmap.h b/arm7/lib/include/mmap.h index 24d15ad7..064938e2 100644 --- a/arm7/lib/include/mmap.h +++ b/arm7/lib/include/mmap.h @@ -23,4 +23,6 @@ #define HW_PRV_WRAM_SYSRV (HW_PRV_WRAM + HW_PRV_WRAM_SIZE - HW_PRV_WRAM_SYSRV_SIZE) +#define HW_LOCK_ID_FLAG_SUB (HW_MAIN_MEM + 0x007fffb8) + #endif //POKEDIAMOND_ARM7_MMAP_H diff --git a/arm7/lib/include/syscall.h b/arm7/lib/include/syscall.h new file mode 100644 index 00000000..55462cc7 --- /dev/null +++ b/arm7/lib/include/syscall.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_ARM7_SYSCALL_H +#define POKEDIAMOND_ARM7_SYSCALL_H + +void SVC_WaitByLoop(u32 ct); + +#endif //POKEDIAMOND_ARM7_SYSCALL_H -- cgit v1.2.3 From c734347a8fed09aff1aacaad89eb7db831a00a3c Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 14 Jun 2020 21:47:39 +0100 Subject: arm7 OS_interrupt --- arm7/lib/include/OS_context.h | 16 ++++++++++++++++ arm7/lib/include/OS_init.h | 3 +++ arm7/lib/include/OS_interrupt.h | 17 +++++++++++++++++ arm7/lib/include/OS_thread.h | 7 +++++++ arm7/lib/include/consts.h | 1 + arm7/lib/include/mmap.h | 1 + arm7/lib/include/registers.h | 6 ++++++ 7 files changed, 51 insertions(+) create mode 100644 arm7/lib/include/OS_context.h create mode 100644 arm7/lib/include/OS_thread.h create mode 100644 arm7/lib/include/registers.h (limited to 'arm7/lib/include') diff --git a/arm7/lib/include/OS_context.h b/arm7/lib/include/OS_context.h new file mode 100644 index 00000000..7819e29c --- /dev/null +++ b/arm7/lib/include/OS_context.h @@ -0,0 +1,16 @@ +#ifndef POKEDIAMOND_ARM7_OS_CONTEXT_H +#define POKEDIAMOND_ARM7_OS_CONTEXT_H + +#include "nitro/types.h" + +typedef struct OSContext +{ + u32 cpsr; + u32 r[13]; + u32 sp; + u32 lr; + u32 pc_plus4; + u32 sp_svc; +} OSContext; + +#endif //POKEDIAMOND_ARM7_OS_CONTEXT_H diff --git a/arm7/lib/include/OS_init.h b/arm7/lib/include/OS_init.h index c4e1ca37..03d64ae1 100644 --- a/arm7/lib/include/OS_init.h +++ b/arm7/lib/include/OS_init.h @@ -7,6 +7,9 @@ #include "OS_alloc.h" #include "OS_reset.h" #include "OS_terminate_proc.h" +#include "OS_spinLock.h" +#include "OS_context.h" +#include "OS_interrupt.h" void OS_Init(void); diff --git a/arm7/lib/include/OS_interrupt.h b/arm7/lib/include/OS_interrupt.h index afcb9b5f..fb869483 100644 --- a/arm7/lib/include/OS_interrupt.h +++ b/arm7/lib/include/OS_interrupt.h @@ -2,5 +2,22 @@ #define POKEDIAMOND_ARM7_OS_INTERRUPT_H #include "nitro/OS_interrupt_shared.h" +#include "consts.h" + +extern OSIrqFunction OS_IRQTable[]; +extern OSIrqCallbackInfo OSi_IrqCallbackInfo[9]; + +static inline void OSi_SetVBlankCount(u32 count) +{ + *(u32 *)HW_VBLANK_COUNT_BUF = count; +} + +void OS_InitIrqTable(void); +void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function); +void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), void *arg); +OSIrqMask OS_SetIrqMask(OSIrqMask mask); +OSIrqMask OS_EnableIrqMask(OSIrqMask mask); +OSIrqMask OS_DisableIrqMask(OSIrqMask mask); +OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask); #endif //POKEDIAMOND_ARM7_OS_INTERRUPT_H diff --git a/arm7/lib/include/OS_thread.h b/arm7/lib/include/OS_thread.h new file mode 100644 index 00000000..04e4fdcb --- /dev/null +++ b/arm7/lib/include/OS_thread.h @@ -0,0 +1,7 @@ +#ifndef POKEDIAMOND_ARM7_OS_THREAD_H +#define POKEDIAMOND_ARM7_OS_THREAD_H + +#include "OS_context.h" +#include "nitro/OS_thread_shared.h" + +#endif //POKEDIAMOND_ARM7_OS_THREAD_H diff --git a/arm7/lib/include/consts.h b/arm7/lib/include/consts.h index dd297402..966b5a4b 100644 --- a/arm7/lib/include/consts.h +++ b/arm7/lib/include/consts.h @@ -3,5 +3,6 @@ #include "nitro/consts_shared.h" #include "mmap.h" +#include "registers.h" #endif //POKEDIAMOND_ARM7_CONSTS_H diff --git a/arm7/lib/include/mmap.h b/arm7/lib/include/mmap.h index 064938e2..1b403dc5 100644 --- a/arm7/lib/include/mmap.h +++ b/arm7/lib/include/mmap.h @@ -23,6 +23,7 @@ #define HW_PRV_WRAM_SYSRV (HW_PRV_WRAM + HW_PRV_WRAM_SIZE - HW_PRV_WRAM_SYSRV_SIZE) +#define HW_VBLANK_COUNT_BUF (HW_MAIN_MEM + 0x007ffc3c) #define HW_LOCK_ID_FLAG_SUB (HW_MAIN_MEM + 0x007fffb8) #endif //POKEDIAMOND_ARM7_MMAP_H diff --git a/arm7/lib/include/registers.h b/arm7/lib/include/registers.h new file mode 100644 index 00000000..4ef8bdfb --- /dev/null +++ b/arm7/lib/include/registers.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_ARM7_REGISTERS_H +#define POKEDIAMOND_ARM7_REGISTERS_H + +#include "nitro/registers_shared.h" + +#endif //POKEDIAMOND_ARM7_REGISTERS_H -- cgit v1.2.3 From e19270f9b3523dfe68b5010e7735fc7896e568d7 Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 19 Jun 2020 19:07:34 +0100 Subject: arm7 OS_thread --- arm7/lib/include/MI_memory.h | 10 ++++++++++ arm7/lib/include/OS_alarm.h | 9 +++++++++ arm7/lib/include/OS_context.h | 4 ++++ arm7/lib/include/OS_mutex.h | 9 +++++++++ arm7/lib/include/OS_thread.h | 29 +++++++++++++++++++++++++++++ arm7/lib/include/consts.h | 1 + arm7/lib/include/systemWork.h | 7 +++++++ 7 files changed, 69 insertions(+) create mode 100644 arm7/lib/include/OS_alarm.h create mode 100644 arm7/lib/include/OS_mutex.h create mode 100644 arm7/lib/include/systemWork.h (limited to 'arm7/lib/include') diff --git a/arm7/lib/include/MI_memory.h b/arm7/lib/include/MI_memory.h index cb0c53fc..53398ec5 100644 --- a/arm7/lib/include/MI_memory.h +++ b/arm7/lib/include/MI_memory.h @@ -12,4 +12,14 @@ void MIi_CpuCopyFast(register u32 * src, register u32 * dst, register u32 size); void MI_CpuFill8(register u8 value, register u8 * dst, register u32 size); void MI_CpuCopy8(register u8 * src, register u8 * dst, register u32 size); +static inline void MI_CpuFill32(void *dest, u32 data, u32 size) +{ + MIi_CpuClear32(data, dest, size); +} + +static inline void MI_CpuClear32(void *dest, u32 size) +{ + MI_CpuFill32(dest, 0, size); +} + #endif diff --git a/arm7/lib/include/OS_alarm.h b/arm7/lib/include/OS_alarm.h new file mode 100644 index 00000000..8ae89e97 --- /dev/null +++ b/arm7/lib/include/OS_alarm.h @@ -0,0 +1,9 @@ +#ifndef POKEDIAMOND_ARM7_OS_ALARM_H +#define POKEDIAMOND_ARM7_OS_ALARM_H + +#include "nitro/OS_alarm_shared.h" + +void OS_CreateAlarm(OSAlarm *alarm); +void OS_SetAlarm(OSAlarm *alarm, OSTick tick, OSAlarmHandler handler, void *arg); + +#endif //POKEDIAMOND_ARM7_OS_ALARM_H diff --git a/arm7/lib/include/OS_context.h b/arm7/lib/include/OS_context.h index 7819e29c..b01ccb8b 100644 --- a/arm7/lib/include/OS_context.h +++ b/arm7/lib/include/OS_context.h @@ -13,4 +13,8 @@ typedef struct OSContext u32 sp_svc; } OSContext; +extern u32 OS_SaveContext(OSContext *context); +extern void OS_LoadContext(OSContext *context); +extern void OS_InitContext(OSContext *context, u32 func, u32 stack); + #endif //POKEDIAMOND_ARM7_OS_CONTEXT_H diff --git a/arm7/lib/include/OS_mutex.h b/arm7/lib/include/OS_mutex.h new file mode 100644 index 00000000..b41ac9f8 --- /dev/null +++ b/arm7/lib/include/OS_mutex.h @@ -0,0 +1,9 @@ +#ifndef POKEDIAMOND_ARM7_OS_MUTEX_H +#define POKEDIAMOND_ARM7_OS_MUTEX_H + +#include "OS_context.h" +#include "nitro/OS_mutex_shared.h" + +void OSi_UnlockAllMutex(OSThread * thread); + +#endif //POKEDIAMOND_ARM7_OS_MUTEX_H diff --git a/arm7/lib/include/OS_thread.h b/arm7/lib/include/OS_thread.h index 04e4fdcb..b1d3a01b 100644 --- a/arm7/lib/include/OS_thread.h +++ b/arm7/lib/include/OS_thread.h @@ -4,4 +4,33 @@ #include "OS_context.h" #include "nitro/OS_thread_shared.h" +static s32 OSi_GetUnusedThreadId(void); +static void OSi_InsertLinkToQueue(OSThreadQueue *queue, OSThread *thread); +static OSThread *OSi_RemoveLinkFromQueue(OSThreadQueue *queue); +static OSThread *OSi_RemoveSpecifiedLinkFromQueue(OSThreadQueue *queue, OSThread *thread); +OSMutex *OSi_RemoveMutexLinkFromQueue(OSMutexQueue *queue); +static void OSi_InsertThreadToList(OSThread *thread); +static void OSi_RemoveThreadFromList(OSThread *thread); +static void OSi_RescheduleThread(void); +void OS_InitThread(void); +void OS_CreateThread(OSThread *thread, void (*func) (void *), void *arg, void *stack, u32 stackSize, u32 prio); +void OS_ExitThread(void); +static void OSi_ExitThread_ArgSpecified(OSThread *thread, void *arg); +static void OSi_ExitThread(void *arg); +static void OSi_ExitThread_Destroy(void); +void OS_JoinThread(OSThread *thread); +BOOL OS_IsThreadTerminated(const OSThread *thread); +void OS_SleepThread(OSThreadQueue *queue); +void OS_WakeupThread(OSThreadQueue *queue); +void OS_WakeupThreadDirect(OSThread *thread); +OSThread *OS_SelectThread(void); +void OS_RescheduleThread(void); +BOOL OS_SetThreadPriority(OSThread *thread, u32 prio); +void OS_Sleep(u32 msec); +static void OSi_SleepAlarmCallback(void *arg); +OSSwitchThreadCallback OS_SetSwitchThreadCallback(OSSwitchThreadCallback callback); +u32 OS_DisableScheduler(void); +u32 OS_EnableScheduler(void); +void OS_SetThreadDestructor(OSThread *thread, OSThreadDestructor dtor); + #endif //POKEDIAMOND_ARM7_OS_THREAD_H diff --git a/arm7/lib/include/consts.h b/arm7/lib/include/consts.h index 966b5a4b..a6c4c393 100644 --- a/arm7/lib/include/consts.h +++ b/arm7/lib/include/consts.h @@ -4,5 +4,6 @@ #include "nitro/consts_shared.h" #include "mmap.h" #include "registers.h" +#include "systemWork.h" #endif //POKEDIAMOND_ARM7_CONSTS_H diff --git a/arm7/lib/include/systemWork.h b/arm7/lib/include/systemWork.h new file mode 100644 index 00000000..95a17845 --- /dev/null +++ b/arm7/lib/include/systemWork.h @@ -0,0 +1,7 @@ +#ifndef POKEDIAMOND_ARM7_SYSTEMWORK_H +#define POKEDIAMOND_ARM7_SYSTEMWORK_H + +#include "OS_context.h" +#include "nitro/OS_systemWork_shared.h" + +#endif //POKEDIAMOND_ARM7_SYSTEMWORK_H -- cgit v1.2.3