From f04501a417999dddd7ec5963b90ab2e152ac3477 Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 1 May 2020 17:54:04 +0100 Subject: match OS_protectionRegion --- arm9/lib/src/OS_alloc.c | 4 ++-- arm9/lib/src/OS_arena.c | 4 ++-- arm9/lib/src/OS_protectionRegion.c | 26 ++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 arm9/lib/src/OS_protectionRegion.c (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/OS_alloc.c b/arm9/lib/src/OS_alloc.c index 242c5571..e883656e 100644 --- a/arm9/lib/src/OS_alloc.c +++ b/arm9/lib/src/OS_alloc.c @@ -2,9 +2,9 @@ // Created by mart on 4/23/20. // #include "function_target.h" -#include "os_alloc.h" +#include "OS_alloc.h" #include "consts.h" -#include "os_system.h" +#include "OS_system.h" void* OSiHeapInfo[OS_ARENA_MAX]; diff --git a/arm9/lib/src/OS_arena.c b/arm9/lib/src/OS_arena.c index 58b338f1..eb04e60b 100644 --- a/arm9/lib/src/OS_arena.c +++ b/arm9/lib/src/OS_arena.c @@ -3,8 +3,8 @@ // #include "function_target.h" #include "consts.h" -#include "os_arena.h" -#include "os_protectionRegion.h" +#include "OS_arena.h" +#include "OS_protectionRegion.h" extern u32 OS_GetConsoleType(); extern BOOL OSi_MainExArenaEnabled; diff --git a/arm9/lib/src/OS_protectionRegion.c b/arm9/lib/src/OS_protectionRegion.c new file mode 100644 index 00000000..382310d9 --- /dev/null +++ b/arm9/lib/src/OS_protectionRegion.c @@ -0,0 +1,26 @@ +// +// Created by red031000 on 2020-04-24. +// + +#include "OS_protectionRegion.h" + +asm void OS_SetDPermissionsForProtectionRegion(register u32 setMask, register u32 flags) +{ + mrc p15, 0x0, r2, c5, c0, 0x2 + bic r2, r2, r0 + orr r2, r2, r1 + mcr p15, 0x0, r2, c5, c0, 0x2 + bx lr +} + +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 -- cgit v1.2.3 From cfbc21f1c80061a2d211dc5da2e0d0eb0d532c5c Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 1 May 2020 17:56:36 +0100 Subject: newline at end of file --- arm9/lib/src/OS_protectionRegion.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/OS_protectionRegion.c b/arm9/lib/src/OS_protectionRegion.c index 382310d9..230f8403 100644 --- a/arm9/lib/src/OS_protectionRegion.c +++ b/arm9/lib/src/OS_protectionRegion.c @@ -23,4 +23,4 @@ asm void OS_SetProtectionRegion2(u32 param) { mcr p15, 0x0, r0, c6, c2, 0x0 bx lr -} \ No newline at end of file +} -- cgit v1.2.3 From fa332326543d03fe6afdc0dcd04f0a666450955b Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 1 May 2020 18:31:26 +0100 Subject: ARM_FUNC --- arm9/lib/src/OS_protectionRegion.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/OS_protectionRegion.c b/arm9/lib/src/OS_protectionRegion.c index 230f8403..4d6cf974 100644 --- a/arm9/lib/src/OS_protectionRegion.c +++ b/arm9/lib/src/OS_protectionRegion.c @@ -2,9 +2,10 @@ // Created by red031000 on 2020-04-24. // +#include "function_target.h" #include "OS_protectionRegion.h" -asm void OS_SetDPermissionsForProtectionRegion(register u32 setMask, register u32 flags) +ARM_FUNC asm void OS_SetDPermissionsForProtectionRegion(register u32 setMask, register u32 flags) { mrc p15, 0x0, r2, c5, c0, 0x2 bic r2, r2, r0 @@ -13,13 +14,13 @@ asm void OS_SetDPermissionsForProtectionRegion(register u32 setMask, register u3 bx lr } -asm void OS_SetProtectionRegion1(u32 param) +ARM_FUNC asm void OS_SetProtectionRegion1(u32 param) { mcr p15, 0x0, r0, c6, c1, 0x0 bx lr } -asm void OS_SetProtectionRegion2(u32 param) +ARM_FUNC asm void OS_SetProtectionRegion2(u32 param) { mcr p15, 0x0, r0, c6, c2, 0x0 bx lr -- cgit v1.2.3 From 7b3404b932a8fadddb44774407b22127b0f02115 Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 1 May 2020 20:10:48 +0100 Subject: remove include/nitro and shift everything to arm9/lib --- arm9/lib/src/OS_init.c | 38 ++++++++++++++++++++++++++ arm9/lib/src/OS_system.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 arm9/lib/src/OS_init.c create mode 100644 arm9/lib/src/OS_system.c (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/OS_init.c b/arm9/lib/src/OS_init.c new file mode 100644 index 00000000..90b01ffa --- /dev/null +++ b/arm9/lib/src/OS_init.c @@ -0,0 +1,38 @@ +// +// Created by mart on 4/12/20. +// + +#include "function_target.h" +#include "OS_init.h" + +extern void PXI_Init(); +extern void OS_InitLock(); +extern void OS_InitIrqTable(); +extern void OS_SetIrqStackChecker(); +extern void OS_InitException(); +extern void MI_Init(); +extern void OS_InitVAlarm(); +extern void OSi_InitVramExclusive(); +extern void OS_InitThread(); +extern void OS_InitReset(); +extern void CTRDG_Init(); +extern void CARD_Init(); +extern void PM_Init(); + +ARM_FUNC void OS_Init(void) { + OS_InitArena(); + PXI_Init(); + OS_InitLock(); + OS_InitArenaEx(); + OS_InitIrqTable(); + OS_SetIrqStackChecker(); + OS_InitException(); + MI_Init(); + OS_InitVAlarm(); + OSi_InitVramExclusive(); + OS_InitThread(); + OS_InitReset(); + CTRDG_Init(); + 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..5e891ad9 --- /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(register 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(register 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); +} -- cgit v1.2.3 From 527b257015fa32ac4007b1d7e9198ac37d8e1542 Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 1 May 2020 20:38:36 +0100 Subject: macro and register --- arm9/lib/src/OS_system.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/OS_system.c b/arm9/lib/src/OS_system.c index 5e891ad9..c2b08681 100644 --- a/arm9/lib/src/OS_system.c +++ b/arm9/lib/src/OS_system.c @@ -21,7 +21,7 @@ ARM_FUNC asm OSIntrMode OS_DisableInterrupts() { bx lr } -ARM_FUNC asm OSIntrMode OS_RestoreInterrupts(register OSIntrMode state) { +ARM_FUNC asm OSIntrMode OS_RestoreInterrupts(OSIntrMode state) { mrs r1, cpsr bic r2, r1, #HW_PSR_DISABLE_IRQ orr r2, r2, r0 @@ -38,7 +38,7 @@ ARM_FUNC asm OSIntrMode OS_DisableInterrupts_IrqAndFiq() { bx lr } -ARM_FUNC asm OSIntrMode OS_RestoreInterrupts_IrqAndFiq(register OSIntrMode state) { +ARM_FUNC asm OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state) { mrs r1, cpsr bic r2, r1, #HW_PSR_DISABLE_IRQ_FIQ orr r2, r2, r0 -- cgit v1.2.3 From 2ee7030776461ee835dbbd44149f90ae79e7d4c5 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 3 May 2020 01:42:55 +0100 Subject: temp OS_entropy --- arm9/lib/src/OS_entropy.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 arm9/lib/src/OS_entropy.c (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/OS_entropy.c b/arm9/lib/src/OS_entropy.c new file mode 100644 index 00000000..bfc95882 --- /dev/null +++ b/arm9/lib/src/OS_entropy.c @@ -0,0 +1,28 @@ +// +// Created by red031000 on 2020-05-03. +// + +#include "function_target.h" +#include "consts.h" +#include "OS_entropy.h" + +u32 * const HW_REG_006 = (u32 *) 0x04000006; +u32 * const HW_REG_130 = (u32 *) 0x04000130; +u32 * const HW_REG_600 = (u32 *) 0x04000600; + +u32 * const OSi_TickCounter = (u32 *) 0x021D37B4; + +ARM_FUNC void OS_GetLowEntropyData(u32 * arr) +{ + OSSystemWork* work = OS_GetSystemWork(); + u16 x = *((u16 *)HW_REG_006); + u8 * nvramUserInfo = work->nvramUserInfo; + u8 r5 = nvramUserInfo[0x74]; + arr[0] = (OS_GetTickLo()<<0x10) | x ; + arr[1] = (OSi_TickCounter[0]<<0x10) ^ r5[2]; + u32 what = OSi_TickCounter[0]; + what = OSi_TickCounter[1]; + arr[2] = *((u32 *)r4) ^ what ^ *(u32 *)((u8 *)work+0x3c); + arr[2] ^= *HW_REG_600; + // ... +} \ No newline at end of file -- cgit v1.2.3 From 4f6c75ac8381a7a3c2902c97870066ee90f1d320 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 3 May 2020 19:22:26 +0100 Subject: match OS_GetLowEntropyData --- arm9/lib/src/OS_entropy.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/OS_entropy.c b/arm9/lib/src/OS_entropy.c index bfc95882..b33781cc 100644 --- a/arm9/lib/src/OS_entropy.c +++ b/arm9/lib/src/OS_entropy.c @@ -6,23 +6,17 @@ #include "consts.h" #include "OS_entropy.h" -u32 * const HW_REG_006 = (u32 *) 0x04000006; -u32 * const HW_REG_130 = (u32 *) 0x04000130; -u32 * const HW_REG_600 = (u32 *) 0x04000600; - -u32 * const OSi_TickCounter = (u32 *) 0x021D37B4; - ARM_FUNC void OS_GetLowEntropyData(u32 * arr) { - OSSystemWork* work = OS_GetSystemWork(); - u16 x = *((u16 *)HW_REG_006); - u8 * nvramUserInfo = work->nvramUserInfo; - u8 r5 = nvramUserInfo[0x74]; - arr[0] = (OS_GetTickLo()<<0x10) | x ; - arr[1] = (OSi_TickCounter[0]<<0x10) ^ r5[2]; - u32 what = OSi_TickCounter[0]; - what = OSi_TickCounter[1]; - arr[2] = *((u32 *)r4) ^ what ^ *(u32 *)((u8 *)work+0x3c); - arr[2] ^= *HW_REG_600; - // ... -} \ No newline at end of file + const OSSystemWork* work = OS_GetSystemWork(); + const u8 * macAddress = (u8 *)((u32)(work->nvramUserInfo) + ((sizeof(NVRAMConfig) + 3) & ~3)); + arr[0] = (u32)((GX_GetVCount() << 16) | OS_GetTickLo()); + arr[1] = (u32)(*(u16 *)(macAddress + 4) << 16) ^ (u32)(OSi_TickCounter); + arr[2] = (u32)(OSi_TickCounter >> 32) ^ *(u32 *)macAddress ^ work->vblankCount; + arr[2] ^= reg_G3X_GXSTAT; + arr[3] = *(u32 *)(&work->real_time_clock[0]); + arr[4] = *(u32 *)(&work->real_time_clock[4]); + arr[5] = (((u32)work->mic_sampling_data) << 16) ^ work->mic_last_address; + arr[6] = (u32) ((*(u16 *)(&work->touch_panel[0]) << 16) | *(u16 *)(&work->touch_panel[2])); + arr[7] = (u32)((work->wm_rssi_pool << 16) | (reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF)); +} -- cgit v1.2.3