diff options
27 files changed, 99 insertions, 1286 deletions
@@ -82,7 +82,7 @@ OBJCOPY := $(CROSS)objcopy # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o ASFLAGS = -proc arm5te -CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -ir include -ir include-mw +CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -ir include -ir include-mw -ir arm9/lib/include LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start ####################### Other Tools ######################### diff --git a/arm7/Makefile b/arm7/Makefile index 6be0f66a..c2a518a5 100644 --- a/arm7/Makefile +++ b/arm7/Makefile @@ -83,7 +83,7 @@ OBJCOPY := $(CROSS)objcopy # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm7_thumb.s -o arm7.o ASFLAGS = -proc arm4t -i .. -CFLAGS = -O4,p -proc v4t -fp soft -lang c99 -Cpp_exceptions off -ir ../include -ir ../include-mw +CFLAGS = -O4,p -proc v4t -fp soft -lang c99 -Cpp_exceptions off -ir ../include -ir ../include-mw -ir ../arm9/lib/include # temporary fix while arm7 libos hasn't been decomped LDFLAGS = -map -nodead -w off -proc v4t -interworking -map -symtab -m _start ####################### Other Tools ######################### diff --git a/arm9/Makefile b/arm9/Makefile index d84513a4..30a6f10f 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -88,7 +88,7 @@ OBJCOPY := $(CROSS)objcopy # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o ASFLAGS = -proc arm5te -i .. -CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -ir ../include -ir ../include-mw -interworking +CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -ir ../include -ir ../include-mw -ir lib/include -interworking LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start ####################### Other Tools ######################### diff --git a/arm9/asm/OS_init.s b/arm9/asm/OS_init.s deleted file mode 100644 index 8ee35fe0..00000000 --- a/arm9/asm/OS_init.s +++ /dev/null @@ -1,27 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start OS_Init -OS_Init: ; 0x020CC1B4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_InitArena - bl PXI_Init - bl OS_InitLock - bl OS_InitArenaEx - bl OS_InitIrqTable - bl OS_SetIrqStackChecker - bl OS_InitException - bl MI_Init - bl OS_InitVAlarm - bl OSi_InitVramExclusive - bl OS_InitThread - bl OS_InitReset - bl CTRDG_Init - bl CARD_Init - bl PM_Init - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr diff --git a/arm9/asm/OS_system.s b/arm9/asm/OS_system.s deleted file mode 100644 index 3801b8e7..00000000 --- a/arm9/asm/OS_system.s +++ /dev/null @@ -1,77 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start OS_EnableInterrupts -OS_EnableInterrupts: ; 0x020CD2FC - mrs r0, cpsr - bic r1, r0, #0x80 - msr cpsr_c, r1 - and r0, r0, #0x80 - bx lr - - arm_func_start OS_DisableInterrupts -OS_DisableInterrupts: - mrs r0, cpsr - orr r1, r0, #0x80 - msr cpsr_c, r1 - and r0, r0, #0x80 - bx lr - - arm_func_start OS_RestoreInterrupts -OS_RestoreInterrupts: - mrs r1, cpsr - bic r2, r1, #0x80 - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #0x80 - bx lr - - arm_func_start OS_DisableInterrupts_IrqAndFiq -OS_DisableInterrupts_IrqAndFiq: ; 0x020CD33C - mrs r0, cpsr - orr r1, r0, #0xc0 - msr cpsr_c, r1 - and r0, r0, #0xc0 - bx lr - - arm_func_start OS_RestoreInterrupts_IrqAndFiq -OS_RestoreInterrupts_IrqAndFiq: ; 0x020CD350 - mrs r1, cpsr - bic r2, r1, #0xc0 - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #0xc0 - bx lr - - arm_func_start OS_GetCpsrIrq -OS_GetCpsrIrq: ; 0x020CD368 - mrs r0, cpsr - and r0, r0, #0x80 - bx lr - - arm_func_start OS_GetProcMode -OS_GetProcMode: ; 0x020CD374 - mrs r0, cpsr - and r0, r0, #0x1f - bx lr - - arm_func_start OS_SpinWait -OS_SpinWait: - subs r0, r0, #0x4 - bhs OS_SpinWait - bx lr - - arm_func_start OS_WaitVBlankIntr -OS_WaitVBlankIntr: ; 0x020CD38C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0x1 - blx SVC_WaitByLoop - mov r0, #0x1 - mov r1, r0 - bl OS_WaitIrq - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr diff --git a/arm9/lib/include/OS.h b/arm9/lib/include/OS_init.h index b152dfb8..c556253a 100644 --- a/arm9/lib/include/OS.h +++ b/arm9/lib/include/OS_init.h @@ -2,8 +2,8 @@ // Created by mart on 4/12/20. // -#ifndef POKEDIAMOND_OS_H -#define POKEDIAMOND_OS_H +#ifndef POKEDIAMOND_OS_INIT_H +#define POKEDIAMOND_OS_INIT_H #include "types.h" #include "consts.h" @@ -14,4 +14,4 @@ void OS_Init(); -#endif //POKEDIAMOND_OS_H +#endif //POKEDIAMOND_OS_INIT_H diff --git a/arm9/lib/include/OS_system.h b/arm9/lib/include/OS_system.h index c7f121bd..93903315 100644 --- a/arm9/lib/include/OS_system.h +++ b/arm9/lib/include/OS_system.h @@ -17,17 +17,22 @@ typedef enum { OS_PROCMODE_SYS=31 } OSProcMode; +ENUMS_ALWAYS_INT_ON typedef enum { - OS_INTRMODE_DISABLE = HW_PSR_IRQ_DISABLE, + OS_INTRMODE_DISABLE_IRQ = HW_PSR_DISABLE_IRQ, + OS_INTRMODE_DISABLE_FIQ = HW_PSR_DISABLE_FIQ, OS_INTRMODE_ENABLE = 0 } OSIntrMode; +ENUMS_ALWAYS_INT_RESET OSIntrMode OS_EnableInterrupts(); OSIntrMode OS_DisableInterrupts(); OSIntrMode OS_RestoreInterrupts(OSIntrMode state); OSIntrMode OS_DisableInterrupts_IrqAndFiq(); OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state); +OSIntrMode OS_GetCpsrIrq(); OSProcMode OS_GetProcMode(); - +void OS_SpinWait(); +void OS_WaitVBlankIntr(); #endif //POKEDIAMOND_OS_SYSTEM_H diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h index 6fc71be2..930f9af5 100644 --- a/arm9/lib/include/consts.h +++ b/arm9/lib/include/consts.h @@ -9,9 +9,9 @@ #define HW_PSR_CPU_MODE_MASK 0x1f // CPU mode -#define HW_PSR_FIQ_DISABLE 0x40 // Disable FIQ -#define HW_PSR_IRQ_DISABLE 0x80 // Disable IRQ -#define HW_PSR_IRQ_FIQ_DISABLE 0xc0 // Disable FIQ and IRQ +#define HW_PSR_DISABLE_FIQ 0x40 // Disable FIQ +#define HW_PSR_DISABLE_IRQ 0x80 // Disable IRQ +#define HW_PSR_DISABLE_IRQ_FIQ 0xc0 // Disable FIQ and IRQ #define HW_C6_PR_4KB 0x16 #define HW_C6_PR_8KB 0x18 @@ -42,4 +42,6 @@ #define OSi_TRUNC(n, a) (((u32) (n)) & ~((a) - 1)) #define OSi_ROUND(n, a) (((u32) (n) + (a) - 1) & ~((a) - 1)) +#define OS_IE_V_BLANK (1UL << 0) + #endif //POKEDIAMOND_CONSTS_H diff --git a/arm9/lib/include/nitro.h b/arm9/lib/include/nitro.h index 8d875653..f7397fb0 100644 --- a/arm9/lib/include/nitro.h +++ b/arm9/lib/include/nitro.h @@ -8,7 +8,7 @@ extern "C" { // Include all nitro files #include "types.h" #include "consts.h" -#include "OS.h" +#include "OS_init.h" #include "mmap.h" #ifdef __cplusplus diff --git a/include/nitro/os.c b/arm9/lib/src/OS_init.c index 2531a636..90b01ffa 100644 --- a/include/nitro/os.c +++ b/arm9/lib/src/OS_init.c @@ -2,7 +2,8 @@ // Created by mart on 4/12/20. // -#include "os.h" +#include "function_target.h" +#include "OS_init.h" extern void PXI_Init(); extern void OS_InitLock(); @@ -18,7 +19,7 @@ extern void CTRDG_Init(); extern void CARD_Init(); extern void PM_Init(); -void OS_Init(void) { +ARM_FUNC void OS_Init(void) { OS_InitArena(); PXI_Init(); OS_InitLock(); @@ -35,4 +36,3 @@ void OS_Init(void) { CARD_Init(); PM_Init(); } - diff --git a/arm9/lib/src/OS_system.c b/arm9/lib/src/OS_system.c new file mode 100644 index 00000000..c2b08681 --- /dev/null +++ b/arm9/lib/src/OS_system.c @@ -0,0 +1,71 @@ +// +// Created by mart on 4/23/20. +// + +#include "function_target.h" +#include "OS_system.h" + +ARM_FUNC asm OSIntrMode OS_EnableInterrupts() { + mrs r0, cpsr + bic r1, r0, #HW_PSR_DISABLE_IRQ + msr cpsr_c, r1 + and r0, r0, #HW_PSR_DISABLE_IRQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_DisableInterrupts() { + mrs r0, cpsr + orr r1, r0, #HW_PSR_DISABLE_IRQ + msr cpsr_c, r1 + and r0, r0, #HW_PSR_DISABLE_IRQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_RestoreInterrupts(OSIntrMode state) { + mrs r1, cpsr + bic r2, r1, #HW_PSR_DISABLE_IRQ + orr r2, r2, r0 + msr cpsr_c, r2 + and r0, r1, #HW_PSR_DISABLE_IRQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_DisableInterrupts_IrqAndFiq() { + mrs r0, cpsr + orr r1, r0, #HW_PSR_DISABLE_IRQ_FIQ + msr cpsr_c, r1 + and r0, r0, #HW_PSR_DISABLE_IRQ_FIQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state) { + mrs r1, cpsr + bic r2, r1, #HW_PSR_DISABLE_IRQ_FIQ + orr r2, r2, r0 + msr cpsr_c, r2 + and r0, r1, #HW_PSR_DISABLE_IRQ_FIQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_GetCpsrIrq() { + mrs r0, cpsr + and r0, r0, #HW_PSR_DISABLE_IRQ + bx lr +} + +ARM_FUNC asm OSProcMode OS_GetProcMode() { + mrs r0, cpsr + and r0, r0, #HW_PSR_CPU_MODE_MASK + bx lr +} + +ARM_FUNC asm void OS_SpinWait() { + subs r0, r0, #0x4 + bhs OS_SpinWait + bx lr +} + +ARM_FUNC void OS_WaitVBlankIntr() { + SVC_WaitByLoop(0x1); + OS_WaitIrq(TRUE, OS_IE_V_BLANK); +} diff --git a/include-mw/function_target.h b/include-mw/function_target.h index 2aaee87e..f37095f9 100644 --- a/include-mw/function_target.h +++ b/include-mw/function_target.h @@ -4,4 +4,8 @@ #define ARM_FUNC _Pragma("thumb off") #define THUMB_FUNC _Pragma("thumb on") +#define ENUMS_ALWAYS_INT_ON _Pragma("enumsalwaysint on") +#define ENUMS_ALWAYS_INT_OFF _Pragma("enumsalwaysint off") +#define ENUMS_ALWAYS_INT_RESET _Pragma("enumsalwaysint reset") + #endif //GUARD_FUNCTION_TARGET_H
\ No newline at end of file diff --git a/include/global.h b/include/global.h index ba6a7337..54397f45 100644 --- a/include/global.h +++ b/include/global.h @@ -2,6 +2,6 @@ #define GUARD_GLOBAL_H #include "function_target.h" -#include "nitro/nitro.h" +#include "nitro.h" #endif //GUARD_GLOBAL_H diff --git a/include/nitro/consts.h b/include/nitro/consts.h deleted file mode 100644 index 6fc71be2..00000000 --- a/include/nitro/consts.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// Created by mart on 4/15/20. -// - -#ifndef POKEDIAMOND_CONSTS_H -#define POKEDIAMOND_CONSTS_H - -#include "mmap.h" - -#define HW_PSR_CPU_MODE_MASK 0x1f // CPU mode - -#define HW_PSR_FIQ_DISABLE 0x40 // Disable FIQ -#define HW_PSR_IRQ_DISABLE 0x80 // Disable IRQ -#define HW_PSR_IRQ_FIQ_DISABLE 0xc0 // Disable FIQ and IRQ - -#define HW_C6_PR_4KB 0x16 -#define HW_C6_PR_8KB 0x18 -#define HW_C6_PR_16KB 0x1a -#define HW_C6_PR_32KB 0x1c -#define HW_C6_PR_64KB 0x1e -#define HW_C6_PR_128KB 0x20 -#define HW_C6_PR_256KB 0x22 -#define HW_C6_PR_512KB 0x24 -#define HW_C6_PR_1MB 0x26 -#define HW_C6_PR_2MB 0x28 -#define HW_C6_PR_4MB 0x2a -#define HW_C6_PR_8MB 0x2c -#define HW_C6_PR_16MB 0x2e -#define HW_C6_PR_32MB 0x30 -#define HW_C6_PR_64MB 0x32 -#define HW_C6_PR_128MB 0x34 -#define HW_C6_PR_256MB 0x36 -#define HW_C6_PR_512MB 0x38 -#define HW_C6_PR_1GB 0x3a -#define HW_C6_PR_2GB 0x3c -#define HW_C6_PR_4GB 0x3e - -#define OS_CONSOLE_SIZE_MASK 0x00000003 -#define OS_CONSOLE_SIZE_4MB 0x00000001 - -#define OSi_GetArenaInfo() (*(OSArenaInfo*)HW_ARENA_INFO_BUF) -#define OSi_TRUNC(n, a) (((u32) (n)) & ~((a) - 1)) -#define OSi_ROUND(n, a) (((u32) (n) + (a) - 1) & ~((a) - 1)) - -#endif //POKEDIAMOND_CONSTS_H diff --git a/include/nitro/mmap.h b/include/nitro/mmap.h deleted file mode 100644 index 14820c39..00000000 --- a/include/nitro/mmap.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef NITRO_MMAP_H -#define NITRO_MMAP_H - -#include "types.h" - -extern u32 SDK_AUTOLOAD_DTCM_START[]; - -#define HW_MAIN_MEM 0x02000000 -#define HW_MAIN_MEM_SIZE 0x00400000 -#define HW_MAIN_MEM_EX_SIZE 0x00800000 -#define HW_MAIN_MEM_MAIN_SIZE 0x003E0000 -#define HW_MAIN_MEM_SHARED_SIZE 0x00001000 -#define HW_MAIN_MEM_DEBUGGER_OFFSET 0x00700000 - -#define HW_ITCM 0x01FF8000 -#define HW_ITCM_SIZE 0x00008000 - -#define HW_WRAM 0x037F8000 - -#define HW_DTCM ((u32)SDK_AUTOLOAD_DTCM_START) -#define HW_DTCM_SIZE 0x00004000 - -#define HW_CARD_ROM_HEADER_SIZE 0x00000160 -#define HW_DOWNLOAD_PARAMETER_SIZE 0x00000020 - -#define HW_ARENA_INFO_BUF (HW_MAIN_MEM + 0x007ffda0) // Arena data structure -#define HW_ROM_HEADER_BUF (HW_MAIN_MEM + 0x007ffe00) // ROM registration area data buffer -#define HW_RED_RESERVED (HW_MAIN_MEM + 0x007ff800) // Some kind of reserved data for shared memory -#define HW_MAIN_MEM_MAIN_END (HW_MAIN_MEM + HW_MAIN_MEM_MAIN_SIZE) -#define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE) -#define HW_MAIN_MEM_SHARED (HW_MAIN_MEM_EX_END - HW_MAIN_MEM_SHARED_SIZE) -#define HW_DTCM_SVC_STACK_END (HW_DTCM + 0x00003fc0) -#define HW_SVC_STACK_SIZE 0x00000040 -#define HW_DTCM_SVC_STACK (HW_DTCM_SVC_STACK_END - HW_SVC_STACK_SIZE) -#define HW_DTCM_IRQ_STACK_END (HW_DTCM_SVC_STACK) - -#define OSi_MAIN_ARENA_HI_DEFAULT (HW_MAIN_MEM_MAIN_END) -#define OSi_MAINEX_ARENA_HI_DEFAULT (HW_MAIN_MEM + HW_MAIN_MEM_DEBUGGER_OFFSET) -#define HW_ITCM_ARENA_HI_DEFAULT (HW_ITCM + HW_ITCM_SIZE) -#define HW_SHARED_ARENA_HI_DEFAULT (HW_RED_RESERVED - HW_CARD_ROM_HEADER_SIZE - HW_DOWNLOAD_PARAMETER_SIZE) -#define HW_SHARED_ARENA_LO_DEFAULT (HW_MAIN_MEM_SHARED) -#define OSi_WRAM_MAIN_ARENA_HI_DEFAULT (HW_WRAM) -#define OSi_WRAM_MAIN_ARENA_LO_DEFAULT (HW_WRAM) - -#endif
\ No newline at end of file diff --git a/include/nitro/nitro.h b/include/nitro/nitro.h deleted file mode 100644 index 8cf603f5..00000000 --- a/include/nitro/nitro.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef POKEDIAMOND_NITRO_H -#define POKEDIAMOND_NITRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -// Include all nitro files -#include "types.h" -#include "consts.h" -#include "os.h" -#include "mmap.h" - -#ifdef __cplusplus -}; -#endif - -#endif //POKEDIAMOND_NITRO_H diff --git a/include/nitro/os.h b/include/nitro/os.h deleted file mode 100644 index 591d8db0..00000000 --- a/include/nitro/os.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// Created by mart on 4/12/20. -// - -#ifndef POKEDIAMOND_OS_H -#define POKEDIAMOND_OS_H - -#include "types.h" -#include "consts.h" -#include "os_protectionRegion.h" -#include "os_arena.h" -#include "os_alloc.h" -#include "os_system.h" - -void OS_Init(); - -#endif //POKEDIAMOND_OS_H diff --git a/include/nitro/os_alloc.c b/include/nitro/os_alloc.c deleted file mode 100644 index 9ba92e18..00000000 --- a/include/nitro/os_alloc.c +++ /dev/null @@ -1,257 +0,0 @@ -// -// Created by mart on 4/23/20. -// - -#include "os_alloc.h" -#include "consts.h" -#include "os_system.h" - -extern Cell* DLInsert(Cell* list, Cell* cell); -extern Cell* DLAddFront(Cell* list, Cell* cell); - -void* OSiHeapInfo[OS_ARENA_MAX] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL -}; - -#ifdef MATCH_ASM -asm static Cell* DLExtract(Cell* list, Cell* cell) -{ - ldr r3, [r1, #0x4] - cmp r3, #0x0 - ldrne r2, [r1, #0x0] - strne r2, [r3, #0x0] - ldr r2, [r1, #0x0] - cmp r2, #0x0 - ldreq r0, [r1, #0x4] - ldrne r1, [r1, #0x4] - strne r1, [r2, #0x4] - bx lr -} -#else -static Cell* DLExtract(Cell* list, Cell* cell) -{ - if (cell->next) { - cell->prev = cell->next->prev; - } - if (cell->prev) { - cell->prev->next = cell->next; - return list; - } - else { - return cell->next; - } -} -#endif - -#define HEADERSIZE OSi_ROUND(sizeof(Cell), 32) -#define MINOBJSIZE (HEADERSIZE+32) - -#ifdef MATCH_ASM -asm void OS_FreeToHeap(OSArenaId id, OSHeapHandle heap, void* ptr) { - stmdb sp!, {r4-r7, lr} - sub sp,sp,#0x4 - mov r7,r0 - mov r5,r1 - mov r4,r2 - bl OS_DisableInterrupts - ldr r1,=OSiHeapInfo - mov r6,r0 - ldr r0,[r1,r7,lsl #0x2] - cmp r5,#0x0 - ldrlt r5,[r0,#0x0] - ldr r1,[r0,#0x10] - mov r0,#0xc - mla r7,r5,r0,r1 - sub r4,r4,#0x20 - ldr r0,[r7,#0x8] - mov r1,r4 - bl DLExtract - str r0,[r7,#0x8] - ldr r0,[r7,#0x4] - mov r1,r4 - bl DLInsert - str r0,[r7,#0x4] - mov r0,r6 - bl OS_RestoreInterrupts - add sp,sp,#0x4 - ldmia sp!,{ r4-r7, lr } - bx lr -} -#else -void OS_FreeToHeap(OSArenaId id, OSHeapHandle heap, void* ptr) { - OSHeapInfo *heapInfo; - HeapDesc *hd; - Cell *cell; - - OSIntrMode enabled = OS_DisableInterrupts(); - heapInfo = OSiHeapInfo[id]; - - if (heap < 0) { - heap = heapInfo->currentHeap; - } - - cell = (Cell *) ((char *)ptr - HEADERSIZE); - hd = &heapInfo->heapArray[heap]; - - hd->allocated = DLExtract(hd->allocated, cell); - hd->free = DLInsert(hd->free, cell); - - OS_RestoreInterrupts(enabled); -} -#endif - -#ifdef MATCH_ASM -asm void* OS_AllocFromHeap(OSArenaId id, OSHeapHandle heap, u32 size) { - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - ldr r1, =OSiHeapInfo - mov r4, r0 - ldr r1, [r1, r6, lsl #0x2] - cmp r1, #0x0 - bne _020CC7AC - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020CC7AC: - cmp r5, #0x0 - ldrlt r5, [r1, #0x0] - ldr r1, [r1, #0x10] - mov r0, #0xc - mla r6, r5, r0, r1 - ldr r0, [r6, #0x4] - add r1, r7, #0x20 - add r1, r1, #0x1f - mov r5, r0 - cmp r0, #0x0 - bic r7, r1, #0x1f - beq _020CC7F4 -_020CC7DC: - ldr r1, [r5, #0x8] - cmp r7, r1 - ble _020CC7F4 - ldr r5, [r5, #0x4] - cmp r5, #0x0 - bne _020CC7DC -_020CC7F4: - cmp r5, #0x0 - bne _020CC814 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020CC814: - ldr r1, [r5, #0x8] - sub r1, r1, r7 - cmp r1, #0x40 - bhs _020CC834 - mov r1, r5 - bl DLExtract - str r0, [r6, #0x4] - b _020CC86C -_020CC834: - str r7, [r5, #0x8] - add r2, r5, r7 - str r1, [r2, #0x8] - ldr r0, [r5, #0x0] - str r0, [r5, r7] - ldr r0, [r5, #0x4] - str r0, [r2, #0x4] - ldr r0, [r2, #0x4] - cmp r0, #0x0 - strne r2, [r0, #0x0] - ldr r0, [r2, #0x0] - cmp r0, #0x0 - strne r2, [r0, #0x4] - streq r2, [r6, #0x4] -_020CC86C: - ldr r0, [r6, #0x8] - mov r1, r5 - bl DLAddFront - str r0, [r6, #0x8] - mov r0, r4 - bl OS_RestoreInterrupts - add r0, r5, #0x20 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr -} -#else -void* OS_AllocFromHeap(OSArenaId id, OSHeapHandle heap, u32 size) { - OSHeapInfo* heapInfo; - HeapDesc* hd; - Cell* cell; - Cell* newCell; - long leftoverSize; - - OSIntrMode enabled = OS_DisableInterrupts(); - heapInfo = OSiHeapInfo[id]; - if (!heapInfo) { - OS_RestoreInterrupts(enabled); - return NULL; - } - - if (heap < 0) { - heap = heapInfo->currentHeap; - } - - hd = &heapInfo->heapArray[heap]; - - size += HEADERSIZE; - size = OSi_ROUND(size, 32); - - for (cell = hd->free; cell != NULL; cell = cell->next) { - if ((long)size <= cell->size) { - break; - } - } - - if (cell == NULL) { - OS_RestoreInterrupts(enabled); - return NULL; - } - - leftoverSize = cell->size - (long)size; - if (leftoverSize < MINOBJSIZE) { - hd->free = DLExtract(hd->free, cell); - } else { - cell->size = (long)size; - - newCell = (Cell *) ((char *)cell + size); - newCell->size = leftoverSize; - - newCell->prev = cell->prev; - newCell->next = cell->next; - - if (newCell->next != NULL) { - newCell->next->prev = newCell; - } - - if (newCell->prev != NULL) { - newCell->prev->next = newCell; - } else { - hd->free = newCell; - } - } - - hd->allocated = DLAddFront(hd->allocated, cell); - - OS_RestoreInterrupts(enabled); - return (void *)((char *)cell + HEADERSIZE); -} -#endif
\ No newline at end of file diff --git a/include/nitro/os_alloc.h b/include/nitro/os_alloc.h deleted file mode 100644 index 1c4b6122..00000000 --- a/include/nitro/os_alloc.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// Created by mart on 4/23/20. -// - -#ifndef POKEDIAMOND_OS_ALLOC_H -#define POKEDIAMOND_OS_ALLOC_H - -#include "types.h" -#include "os_arena.h" - -typedef int OSHeapHandle; - -typedef struct Cell Cell; - -struct Cell { - Cell* prev; - Cell* next; - long size; -}; - -typedef struct { - long size; - Cell *free; - Cell *allocated; -} HeapDesc; - -typedef struct { - volatile OSHeapHandle currentHeap; - int numHeaps; - void* arenaStart; - void* arenaEnd; - HeapDesc* heapArray; -} OSHeapInfo; - -void OS_FreeToHeap(OSArenaId id, OSHeapHandle heap, void *ptr); -void* OS_AllocFromHeap(OSArenaId id, OSHeapHandle heap, u32 size); - -#endif //POKEDIAMOND_OS_ALLOC_H diff --git a/include/nitro/os_arena.c b/include/nitro/os_arena.c deleted file mode 100644 index 31d66289..00000000 --- a/include/nitro/os_arena.c +++ /dev/null @@ -1,539 +0,0 @@ -// -// Created by red031000 on 2020-04-27. -// - -#include "consts.h" -#include "os_arena.h" -#include "os_protectionRegion.h" - -extern u32 OS_GetConsoleType(); -extern BOOL OSi_MainExArenaEnabled; -extern BOOL OSi_Initialized; // TODO: located at 0x021d36f0 -void SDK_MAIN_ARENA_LO(); // TODO: technically this should be defined in the lcf -extern void SDK_SECTION_ARENA_EX_START(); // TODO: technically this should be defined in the lcf -extern void SDK_SECTION_ARENA_ITCM_START(); // TODO: technically this should be defined in the lcf -extern void SDK_SECTION_ARENA_DTCM_START(); // TODO: technically this should be defined in the lcf -extern void SDK_IRQ_STACKSIZE(); // TODO: technically this should be defined in the lcf -extern void SDK_SYS_STACKSIZE(); // TODO: technically this should be defined in the lcf - -#ifdef MATCH_ASM -asm void OS_InitArena() { - stmdb sp!,{ lr } - sub sp,sp,#0x4 - ldr r1, =OSi_Initialized - ldr r0,[r1,#0x0] - cmp r0,#0x0 - addne sp,sp,#0x4 - ldmneia sp!,{ lr } - bxne lr - mov r2,#0x1 - mov r0,#0x0 - str r2,[r1,#0x0] - bl OS_GetInitArenaHi - mov r1,r0 - mov r0,#0x0 - bl OS_SetArenaHi - mov r0,#0x0 - bl OS_GetInitArenaLo - mov r1,r0 - mov r0,#0x0 - bl OS_SetArenaLo - mov r0,#0x2 - mov r1,#0x0 - bl OS_SetArenaLo - mov r0,#0x2 - mov r1,#0x0 - bl OS_SetArenaHi - mov r0,#0x3 - bl OS_GetInitArenaHi - mov r1,r0 - mov r0,#0x3 - bl OS_SetArenaHi - mov r0,#0x3 - bl OS_GetInitArenaLo - mov r1,r0 - mov r0,#0x3 - bl OS_SetArenaLo - mov r0,#0x4 - bl OS_GetInitArenaHi - mov r1,r0 - mov r0,#0x4 - bl OS_SetArenaHi - mov r0,#0x4 - bl OS_GetInitArenaLo - mov r1,r0 - mov r0,#0x4 - bl OS_SetArenaLo - mov r0,#0x5 - bl OS_GetInitArenaHi - mov r1,r0 - mov r0,#0x5 - bl OS_SetArenaHi - mov r0,#0x5 - bl OS_GetInitArenaLo - mov r1,r0 - mov r0,#0x5 - bl OS_SetArenaLo - mov r0,#0x6 - bl OS_GetInitArenaHi - mov r1,r0 - mov r0,#0x6 - bl OS_SetArenaHi - mov r0,#0x6 - bl OS_GetInitArenaLo - mov r1,r0 - mov r0,#0x6 - bl OS_SetArenaLo - add sp,sp,#0x4 - ldmia sp!,{ lr } - bx lr -} -#else -void OS_InitArena() { - if (OSi_Initialized) { - return; - } - OSi_Initialized = TRUE; - - OS_SetArenaHi(OS_ARENA_MAIN, OS_GetInitArenaHi(OS_ARENA_MAIN)); - OS_SetArenaLo(OS_ARENA_MAIN, OS_GetInitArenaLo(OS_ARENA_MAIN)); - - OS_SetArenaLo(OS_ARENA_MAINEX, (void *)0); - OS_SetArenaHi(OS_ARENA_MAINEX, (void *)0); - - OS_SetArenaHi(OS_ARENA_ITCM, OS_GetInitArenaHi(OS_ARENA_ITCM)); - OS_SetArenaLo(OS_ARENA_ITCM, OS_GetInitArenaLo(OS_ARENA_ITCM)); - - OS_SetArenaHi(OS_ARENA_DTCM, OS_GetInitArenaHi(OS_ARENA_DTCM)); - OS_SetArenaLo(OS_ARENA_DTCM, OS_GetInitArenaLo(OS_ARENA_DTCM)); - - OS_SetArenaHi(OS_ARENA_SHARED, OS_GetInitArenaHi(OS_ARENA_SHARED)); - OS_SetArenaLo(OS_ARENA_SHARED, OS_GetInitArenaLo(OS_ARENA_SHARED)); - - OS_SetArenaHi(OS_ARENA_WRAM_MAIN, OS_GetInitArenaHi(OS_ARENA_WRAM_MAIN)); - OS_SetArenaLo(OS_ARENA_WRAM_MAIN, OS_GetInitArenaLo(OS_ARENA_WRAM_MAIN)); -} -#endif - -#ifdef MATCH_ASM -asm void OS_InitArenaEx() { - stmdb sp!,{ lr } - sub sp,sp,#0x4 - mov r0,#0x2 - bl OS_GetInitArenaHi - mov r1,r0 - mov r0,#0x2 - bl OS_SetArenaHi - mov r0,#0x2 - bl OS_GetInitArenaLo - mov r1,r0 - mov r0,#0x2 - bl OS_SetArenaLo - ldr r0, =OSi_MainExArenaEnabled - ldr r0,[r0,#0x0] - cmp r0,#0x0 - beq _020CC5B8 - bl OS_GetConsoleType - and r0,r0,#0x3 - cmp r0,#0x1 - addne sp,sp,#0x4 - ldmneia sp!,{ lr } - bxne lr -_020CC5B8: - ldr r0, =0x0200002b - bl OS_SetProtectionRegion1 - ldr r0, =0x023e0021 - bl OS_SetProtectionRegion2 - add sp,sp,#0x4 - ldmia sp!,{ lr } - bx lr -} -#else -void OS_InitArenaEx() { - OS_SetArenaHi(2, OS_GetInitArenaHi(OS_ARENA_MAINEX)); - OS_SetArenaLo(2, OS_GetInitArenaLo(OS_ARENA_MAINEX)); - - if (!OSi_MainExArenaEnabled || (OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB) { - OS_SetProtectionRegion(1, HW_MAIN_MEM, 4MB); - OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 128KB); - } -} -#endif - -#ifdef MATCH_ASM -asm void* OS_GetArenaHi(OSArenaId id) { - mov r0,r0, lsl #0x2 - add r0,r0,#0x2700000 - add r0,r0,#0xff000 - ldr r0,[r0,#0xdc4] - bx lr -} -#else -void* OS_GetArenaHi(OSArenaId id) { - return OSi_GetArenaInfo().hi[id]; -} -#endif - -#ifdef MATCH_ASM -asm void* OS_GetArenaLo(OSArenaId id) { - mov r0,r0, lsl #0x2 - add r0,r0,#0x2700000 - add r0,r0,#0xff000 - ldr r0,[r0,#0xda0] - bx lr -} -#else -void* OS_GetArenaLo(OSArenaId id) { - return OSi_GetArenaInfo().lo[id]; -} -#endif - -#ifdef MATCH_ASM -asm void* OS_GetInitArenaHi(OSArenaId id) { - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x6 - addls pc, pc, r0, lsl #0x2 - b _020CC508 -_020CC41C: - b _020CC438 - b _020CC508 - b _020CC448 - b _020CC488 - b _020CC498 - b _020CC4E8 - b _020CC4F8 -_020CC438: - add sp, sp, #0x4 - ldr r0, =OSi_MAIN_ARENA_HI_DEFAULT - ldmfd sp!, {lr} - bx lr -_020CC448: - ldr r0, =OSi_MainExArenaEnabled - ldr r0, [r0] - cmp r0, #0x0 - beq _020CC468 - bl OS_GetConsoleType - and r0, r0, #0x3 - cmp r0, #0x1 - bne _020CC478 -_020CC468: - add sp, sp, #0x4 - mov r0, #0x0 - ldmfd sp!, {lr} - bx lr -_020CC478: - add sp, sp, #0x4 - mov r0, #OSi_MAINEX_ARENA_HI_DEFAULT - ldmfd sp!, {lr} - bx lr -_020CC488: - add sp, sp, #0x4 - mov r0, #HW_ITCM_ARENA_HI_DEFAULT - ldmfd sp!, {lr} - bx lr -_020CC498: - ldr r0, =0x027E0000 - ldr r1, =0x00000000 - ldr r2, =0x00000400 - add r3, r0, #0x3f80 - cmp r1, #0x0 - sub r2, r3, r2 - bne _020CC4CC - ldr r1, =0x027E0080 - add sp, sp, #0x4 - cmp r0, r1 - movcc r0, r1 - ldmfd sp!, {lr} - bx lr -_020CC4CC: - cmp r1, #0x0 - ldrlt r0, =0x027E0080 - add sp, sp, #0x4 - sublt r0, r0, r1 - subge r0, r2, r1 - ldmfd sp!, {lr} - bx lr -_020CC4E8: - add sp, sp, #0x4 - ldr r0, =HW_SHARED_ARENA_HI_DEFAULT - ldmfd sp!, {lr} - bx lr -_020CC4F8: - add sp, sp, #0x4 - ldr r0, =OSi_WRAM_MAIN_ARENA_HI_DEFAULT; - ldmfd sp!, {lr} - bx lr -_020CC508: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -} -#else -void* OS_GetInitArenaHi(OSArenaId id) { - switch (id) { - case OS_ARENA_MAIN: - return (void *)OSi_MAIN_ARENA_HI_DEFAULT; - case OS_ARENA_MAINEX: - if (!OSi_MainExArenaEnabled || (OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB) { - return (void *)0; - } else { - return (void *)OSi_MAINEX_ARENA_HI_DEFAULT; - } - case OS_ARENA_ITCM: - return (void *)HW_ITCM_ARENA_HI_DEFAULT; - case OS_ARENA_DTCM: - u32 irqStackLo = (u32)HW_DTCM_IRQ_STACK_END - (s32)SDK_IRQ_STACKSIZE; - u32 sysStackLo; - - if (!(s32)SDK_SYS_STACKSIZE) { - sysStackLo = HW_DTCM; - if (sysStackLo < (u32)SDK_SECTION_ARENA_DTCM_START) { - sysStackLo = (u32)SDK_SECTION_ARENA_DTCM_START; - } - } - else if ((s32)SDK_SYS_STACKSIZE < 0) { - sysStackLo = (u32)SDK_SECTION_ARENA_DTCM_START - (s32)SDK_SYS_STACKSIZE; - } - else { - sysStackLo = irqStackLo - (s32)SDK_SYS_STACKSIZE; - } - return (void*)sysStackLo; - case OS_ARENA_SHARED: - return (void *)HW_SHARED_ARENA_HI_DEFAULT; - case OS_ARENA_WRAM_MAIN: - return (void *)OSi_WRAM_MAIN_ARENA_HI_DEFAULT; - default: - return NULL; - } -} -#endif - -#ifdef MATCH_ASM -asm void* OS_GetInitArenaLo(OSArenaId id) { - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x6 - addls pc, pc, r0, lsl #0x2 - b _020CC3DC -_020CC330: - b _020CC34C - b _020CC3DC - b _020CC35C - b _020CC39C - b _020CC3AC - b _020CC3BC - b _020CC3CC -_020CC34C: - add sp, sp, #0x4 - ldr r0, =SDK_MAIN_ARENA_LO - ldmfd sp!, {lr} - bx lr -_020CC35C: - ldr r0, =OSi_MainExArenaEnabled - ldr r0, [r0] - cmp r0, #0x0 - beq _020CC37C - bl OS_GetConsoleType - and r0, r0, #0x3 - cmp r0, #0x1 - bne _020CC38C -_020CC37C: - add sp, sp, #0x4 - mov r0, #0x0 - ldmfd sp!, {lr} - bx lr -_020CC38C: - add sp, sp, #0x4 - ldr r0, =SDK_SECTION_ARENA_EX_START - ldmfd sp!, {lr} - bx lr -_020CC39C: - add sp, sp, #0x4 - ldr r0, =SDK_SECTION_ARENA_ITCM_START - ldmfd sp!, {lr} - bx lr -_020CC3AC: - add sp, sp, #0x4 - ldr r0, =SDK_SECTION_ARENA_DTCM_START - ldmfd sp!, {lr} - bx lr -_020CC3BC: - add sp, sp, #0x4 - ldr r0, =HW_SHARED_ARENA_LO_DEFAULT - ldmfd sp!, {lr} - bx lr -_020CC3CC: - add sp, sp, #0x4 - ldr r0, =OSi_WRAM_MAIN_ARENA_LO_DEFAULT - ldmfd sp!, {lr} - bx lr -_020CC3DC: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -} -#else -void* OS_GetInitArenaLo(OSArenaId id) { - switch (id) { - case OS_ARENA_MAIN: - return (void *)SDK_MAIN_ARENA_LO; - case OS_ARENA_MAINEX: - if (!OSi_MainExArenaEnabled || (OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB) { - return NULL; - } else { - return (void *)SDK_SECTION_ARENA_EX_START; - } - case OS_ARENA_ITCM: - return (void *)SDK_SECTION_ARENA_ITCM_START; - case OS_ARENA_DTCM: - return (void *)SDK_SECTION_ARENA_DTCM_START; - case OS_ARENA_SHARED: - return (void *)HW_SHARED_ARENA_LO_DEFAULT; - case OS_ARENA_WRAM_MAIN: - return (void *)OSi_WRAM_MAIN_ARENA_LO_DEFAULT; - default: - return NULL; - } -} -#endif - -#ifdef MATCH_ASM -asm void OS_SetArenaHi(OSArenaId id, void* newHi) { - mov r0,r0, lsl #0x2 - add r0,r0,#0x2700000 - add r0,r0,#0xff000 - str r1,[r0,#0xdc4] - bx lr -} -#else -void OS_SetArenaHi(OSArenaId id, void* newHi) { - OSi_GetArenaInfo().hi[id] = newHi; -} -#endif - -#ifdef MATCH_ASM -asm void OS_SetArenaLo(OSArenaId id, void* newLo) { - mov r0,r0, lsl #0x2 - add r0,r0,#0x2700000 - add r0,r0,#0xff000 - str r1,[r0,#0xda0] - bx lr -} -#else -void OS_SetArenaLo(OSArenaId id, void* newLo) { - OSi_GetArenaInfo().lo[id] = newLo; -} -#endif - -#ifdef MATCH_ASM -asm void* OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align) { - stmdb sp!,{ r4-r7, lr } - sub sp,sp,#0x4 - mov r7,r0 - mov r6,r1 - mov r5,r2 - bl OS_GetArenaLo - cmp r0,#0x0 - addeq sp,sp,#0x4 - moveq r0,#0x0 - ldmeqia sp!,{ r4-r7, lr } - bxeq lr - add r0,r0,r5 - sub r1,r5,#0x1 - mvn r2,r1 - sub r0,r0,#0x1 - and r4,r2,r0 - add r0,r4,r6 - add r0,r0,r5 - sub r1,r0,#0x1 - mov r0,r7 - and r5,r2,r1 - bl OS_GetArenaHi - cmp r5,r0 - addhi sp,sp,#0x4 - movhi r0,#0x0 - ldmhiia sp!,{ r4-r7, lr } - bxhi lr - mov r0,r7 - mov r1,r5 - bl OS_SetArenaLo - mov r0,r4 - add sp,sp,#0x4 - ldmia sp!,{ r4-r7, lr } - bx lr -} -#else -void* OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align) { - void* ptr; - u8* arenaLo; - ptr = OS_GetArenaLo(id); - if (!ptr) { - return NULL; - } - arenaLo = ptr = (void *)OSi_ROUND(ptr, align); - arenaLo += size; - arenaLo = (u8 *)OSi_ROUND(arenaLo, align); - if (arenaLo > (u8*)OS_GetArenaHi(id)) { - return NULL; - } - OS_SetArenaLo(id, arenaLo); - - return ptr; -} -#endif - -#ifdef MATCH_ASM -asm void* OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align) { - stmdb sp!,{ r4-r6, lr } - mov r4,r0 - mov r6,r1 - mov r5,r2 - bl OS_GetArenaHi - cmp r0,#0x0 - moveq r0,#0x0 - ldmeqia sp!,{ r4-r6, lr } - bxeq lr - sub r1,r5,#0x1 - mvn r2,r1 - and r0,r0,r2 - sub r1,r0,r6 - mov r0,r4 - and r5,r1,r2 - bl OS_GetArenaLo - cmp r5,r0 - movcc r0,#0x0 - ldmccia sp!,{ r4-r6, lr } - bxcc lr - mov r0,r4 - mov r1,r5 - bl OS_SetArenaHi - mov r0,r5 - ldmia sp!,{ r4-r6, lr } - bx lr -} -#else -void* OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align) { - void* ptr; - u8* arenaHi; - - arenaHi = OS_GetArenaHi(id); - if (!arenaHi) { - return NULL; - } - - arenaHi = (u8 *)OSi_TRUNC(arenaHi, align); - arenaHi -= size; - arenaHi = ptr = (void *)OSi_TRUNC(arenaHi, align); - - if (arenaHi < (u8*)OS_GetArenaLo(id)) { - return NULL; - } - - OS_SetArenaHi(id, arenaHi); - - return ptr; -} -#endif
\ No newline at end of file diff --git a/include/nitro/os_arena.h b/include/nitro/os_arena.h deleted file mode 100644 index f1893a3d..00000000 --- a/include/nitro/os_arena.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// Created by red031000 on 2020-04-27. -// - -#ifndef POKEDIAMOND_OS_ARENA_H -#define POKEDIAMOND_OS_ARENA_H - -#include "types.h" - -typedef enum { - OS_ARENA_MAIN = 0, - OS_ARENA_MAIN_SUBPRIV = 1, - OS_ARENA_MAINEX = 2, - OS_ARENA_ITCM = 3, - OS_ARENA_DTCM = 4, - OS_ARENA_SHARED = 5, - OS_ARENA_WRAM_MAIN = 6, - OS_ARENA_WRAM_SUB = 7, - OS_ARENA_WRAM_SUBPRIV = 8, - OS_ARENA_MAX = 9 -} OSArenaId; - -typedef struct { - void* lo[OS_ARENA_MAX]; - void* hi[OS_ARENA_MAX]; - u16 initialized; - u8 padding[2]; -} OSArenaInfo; - -void OS_InitArena(); -void OS_InitArenaEx(); -void* OS_GetArenaHi(OSArenaId id); -void* OS_GetArenaLo(OSArenaId id); -void* OS_GetInitArenaHi(OSArenaId id); -void* OS_GetInitArenaLo(OSArenaId id); -void OS_SetArenaHi(OSArenaId id, void *newHi); -void OS_SetArenaLo(OSArenaId id, void *newLo); -void* OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align); -void* OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align); - -#endif //POKEDIAMOND_OS_ARENA_H diff --git a/include/nitro/os_protectionRegion.c b/include/nitro/os_protectionRegion.c deleted file mode 100644 index b70f9056..00000000 --- a/include/nitro/os_protectionRegion.c +++ /dev/null @@ -1,17 +0,0 @@ -// -// Created by red031000 on 2020-04-24. -// - -#include "os_protectionRegion.h" - -asm void OS_SetProtectionRegion1(u32 param) -{ - mcr p15, 0x0, r0, c6, c1, 0x0 - bx lr -} - -asm void OS_SetProtectionRegion2(u32 param) -{ - mcr p15, 0x0, r0, c6, c2, 0x0 - bx lr -}
\ No newline at end of file diff --git a/include/nitro/os_protectionRegion.h b/include/nitro/os_protectionRegion.h deleted file mode 100644 index 7b212934..00000000 --- a/include/nitro/os_protectionRegion.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// Created by red031000 on 2020-04-24. -// - -#ifndef POKEDIAMOND_OS_PROTECTIONREGION_H -#define POKEDIAMOND_OS_PROTECTIONREGION_H - -#include "types.h" -#include "consts.h" - -void OS_SetProtectionRegion1(u32 param); -void OS_SetProtectionRegion2(u32 param); - -typedef enum -{ - OSi_PR_BASE_MASK_4KB = 0xfffff000, - OSi_PR_BASE_MASK_8KB = 0xffffe000, - OSi_PR_BASE_MASK_16KB = 0xffffc000, - OSi_PR_BASE_MASK_32KB = 0xffff8000, - OSi_PR_BASE_MASK_64KB = 0xffff0000, - OSi_PR_BASE_MASK_128KB = 0xfffe0000, - OSi_PR_BASE_MASK_256KB = 0xfffc0000, - OSi_PR_BASE_MASK_512KB = 0xfff80000, - OSi_PR_BASE_MASK_1MB = 0xfff00000, - OSi_PR_BASE_MASK_2MB = 0xffe00000, - OSi_PR_BASE_MASK_4MB = 0xffc00000, - OSi_PR_BASE_MASK_8MB = 0xff800000, - OSi_PR_BASE_MASK_16MB = 0xff000000, - OSi_PR_BASE_MASK_32MB = 0xfe000000, - OSi_PR_BASE_MASK_64MB = 0xfc000000, - OSi_PR_BASE_MASK_128MB = 0xf8000000, - OSi_PR_BASE_MASK_256MB = 0xf0000000, - OSi_PR_BASE_MASK_512MB = 0xe0000000, - OSi_PR_BASE_MASK_1GB = 0xc0000000, - OSi_PR_BASE_MASK_2GB = 0x80000000, - OSi_PR_BASE_MASK_4GB = 0x00000000 -} OSiProtectionRegionBaseMask; - -static inline u32 OSi_CalcPRParam(u32 address, u32 size, OSiProtectionRegionBaseMask mask) { - return ((address & mask) | size); -} - -#define OS_SetProtectionRegion(regionNo, address, sizeStr) \ - OS_SetProtectionRegion##regionNo(OSi_CalcPRParam(address, HW_C6_PR_##sizeStr, OSi_PR_BASE_MASK_##sizeStr) \ - | 1) - -#endif //POKEDIAMOND_OS_PROTECTIONREGION_H diff --git a/include/nitro/os_system.c b/include/nitro/os_system.c deleted file mode 100644 index 2ccb7fc1..00000000 --- a/include/nitro/os_system.c +++ /dev/null @@ -1,28 +0,0 @@ -// -// Created by mart on 4/23/20. -// - -#include "os_system.h" - -asm OSIntrMode OS_DisableInterrupts() { - mrs r0, cpsr - orr r1, r0, #HW_PSR_IRQ_DISABLE - msr cpsr_c, r1 - and r0, r0, #HW_PSR_IRQ_DISABLE - bx lr -} - -asm OSIntrMode OS_RestoreInterrupts(OSIntrMode state) { - mrs r1, cpsr - bic r2, r1, #HW_PSR_IRQ_DISABLE - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #HW_PSR_IRQ_DISABLE - bx lr -} - -asm OSProcMode OS_GetProcMode() { - mrs r0, cpsr - and r0, r0, #HW_PSR_CPU_MODE_MASK - bx lr -}
\ No newline at end of file diff --git a/include/nitro/os_system.h b/include/nitro/os_system.h deleted file mode 100644 index c7f121bd..00000000 --- a/include/nitro/os_system.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Created by mart on 4/23/20. -// - -#ifndef POKEDIAMOND_OS_SYSTEM_H -#define POKEDIAMOND_OS_SYSTEM_H - -#include "consts.h" - -typedef enum { - OS_PROCMODE_USER=16, - OS_PROCMODE_FIQ=17, - OS_PROCMODE_IRQ=18, - OS_PROCMODE_SVC=19, - OS_PROCMODE_ABORT=23, - OS_PROCMODE_UNDEF=27, - OS_PROCMODE_SYS=31 -} OSProcMode; - -typedef enum { - OS_INTRMODE_DISABLE = HW_PSR_IRQ_DISABLE, - OS_INTRMODE_ENABLE = 0 -} OSIntrMode; - -OSIntrMode OS_EnableInterrupts(); -OSIntrMode OS_DisableInterrupts(); -OSIntrMode OS_RestoreInterrupts(OSIntrMode state); -OSIntrMode OS_DisableInterrupts_IrqAndFiq(); -OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state); -OSProcMode OS_GetProcMode(); - - -#endif //POKEDIAMOND_OS_SYSTEM_H diff --git a/include/nitro/types.h b/include/nitro/types.h deleted file mode 100644 index 5ad2c75e..00000000 --- a/include/nitro/types.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef POKEDIAMOND_NITRO_TYPES_H -#define POKEDIAMOND_NITRO_TYPES_H - -typedef unsigned char u8; -typedef unsigned short int u16; -typedef unsigned long u32; - -typedef signed char s8; -typedef signed short int s16; -typedef signed long s32; - -typedef unsigned long long int u64; -typedef signed long long int s64; - -typedef volatile u8 vu8; -typedef volatile u16 vu16; -typedef volatile u32 vu32; -typedef volatile u64 vu64; - -typedef volatile s8 vs8; -typedef volatile s16 vs16; -typedef volatile s32 vs32; -typedef volatile s64 vs64; - -typedef float f32; -typedef volatile f32 vf32; - -typedef int BOOL; -#define TRUE 1 -#define FALSE 0 - -#ifndef NULL -#ifdef __cplusplus -#define NULL 0 -#else // __cplusplus -#define NULL ((void *)0) -#endif // __cplusplus -#endif - -#endif //POKEDIAMOND_NITRO_TYPES_H diff --git a/include/pokemon.h b/include/pokemon.h index b466a11c..a350d1a1 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -1,7 +1,7 @@ #ifndef POKEDIAMOND_POKEMON_H #define POKEDIAMOND_POKEMON_H -#include "nitro/types.h" +#include "types.h" // Enums |