diff options
Diffstat (limited to 'arm7/lib/include')
-rw-r--r-- | arm7/lib/include/MI_dma.h | 6 | ||||
-rw-r--r-- | arm7/lib/include/MI_memory.h | 10 | ||||
-rw-r--r-- | arm7/lib/include/OS_alarm.h | 9 | ||||
-rw-r--r-- | arm7/lib/include/OS_context.h | 20 | ||||
-rw-r--r-- | arm7/lib/include/OS_init.h | 4 | ||||
-rw-r--r-- | arm7/lib/include/OS_interrupt.h | 17 | ||||
-rw-r--r-- | arm7/lib/include/OS_mutex.h | 9 | ||||
-rw-r--r-- | arm7/lib/include/OS_spinLock.h | 28 | ||||
-rw-r--r-- | arm7/lib/include/OS_terminate_proc.h | 6 | ||||
-rw-r--r-- | arm7/lib/include/OS_thread.h | 36 | ||||
-rw-r--r-- | arm7/lib/include/consts.h | 2 | ||||
-rw-r--r-- | arm7/lib/include/mmap.h | 3 | ||||
-rw-r--r-- | arm7/lib/include/registers.h | 6 | ||||
-rw-r--r-- | arm7/lib/include/syscall.h | 6 | ||||
-rw-r--r-- | arm7/lib/include/systemWork.h | 7 |
15 files changed, 162 insertions, 7 deletions
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/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 new file mode 100644 index 00000000..b01ccb8b --- /dev/null +++ b/arm7/lib/include/OS_context.h @@ -0,0 +1,20 @@ +#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; + +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_init.h b/arm7/lib/include/OS_init.h index c90740c2..03d64ae1 100644 --- a/arm7/lib/include/OS_init.h +++ b/arm7/lib/include/OS_init.h @@ -6,6 +6,10 @@ #include "OS_arena.h" #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_mutex.h b/arm7/lib/include/OS_mutex.h index 6b8da6a8..216da68c 100644 --- a/arm7/lib/include/OS_mutex.h +++ b/arm7/lib/include/OS_mutex.h @@ -1,9 +1,10 @@ -#ifndef GUARD_OS_MUTEX_H -#define GUARD_OS_MUTEX_H +#ifndef POKEDIAMOND_ARM7_OS_MUTEX_H +#define POKEDIAMOND_ARM7_OS_MUTEX_H +#include "OS_context.h" #include "nitro/OS_mutex_shared.h" -#include "nitro/types.h" void OS_InitMutex(OSMutex* mutex); +void OSi_UnlockAllMutex(OSThread * thread); -#endif +#endif //POKEDIAMOND_ARM7_OS_MUTEX_H 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/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 diff --git a/arm7/lib/include/OS_thread.h b/arm7/lib/include/OS_thread.h new file mode 100644 index 00000000..b1d3a01b --- /dev/null +++ b/arm7/lib/include/OS_thread.h @@ -0,0 +1,36 @@ +#ifndef POKEDIAMOND_ARM7_OS_THREAD_H +#define POKEDIAMOND_ARM7_OS_THREAD_H + +#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 dd297402..a6c4c393 100644 --- a/arm7/lib/include/consts.h +++ b/arm7/lib/include/consts.h @@ -3,5 +3,7 @@ #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/mmap.h b/arm7/lib/include/mmap.h index 24d15ad7..1b403dc5 100644 --- a/arm7/lib/include/mmap.h +++ b/arm7/lib/include/mmap.h @@ -23,4 +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 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 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 |