summaryrefslogtreecommitdiff
path: root/arm9/lib/src
diff options
context:
space:
mode:
authorMade-s <made111@gmx.de>2020-05-04 17:15:10 +0200
committerMade-s <made111@gmx.de>2020-05-04 17:15:10 +0200
commit88d142a33b9973f35c913b3fdad7f6a4394a05cd (patch)
treec6ad861213ccebb62919e27f6d7f3f1080e1ee76 /arm9/lib/src
parentab28b0b37f2fd9fba6010e48e15bd31170d678d7 (diff)
parentc82690dca094b624944b155e5119631c185bca5c (diff)
Merge branch 'master' of https://github.com/martmists/pokediamond
Diffstat (limited to 'arm9/lib/src')
-rw-r--r--arm9/lib/src/OS_alloc.c4
-rw-r--r--arm9/lib/src/OS_arena.c4
-rw-r--r--arm9/lib/src/OS_entropy.c22
-rw-r--r--arm9/lib/src/OS_init.c38
-rw-r--r--arm9/lib/src/OS_protectionRegion.c27
-rw-r--r--arm9/lib/src/OS_system.c71
6 files changed, 162 insertions, 4 deletions
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_entropy.c b/arm9/lib/src/OS_entropy.c
new file mode 100644
index 00000000..b33781cc
--- /dev/null
+++ b/arm9/lib/src/OS_entropy.c
@@ -0,0 +1,22 @@
+//
+// Created by red031000 on 2020-05-03.
+//
+
+#include "function_target.h"
+#include "consts.h"
+#include "OS_entropy.h"
+
+ARM_FUNC void OS_GetLowEntropyData(u32 * arr)
+{
+ 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));
+}
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_protectionRegion.c b/arm9/lib/src/OS_protectionRegion.c
new file mode 100644
index 00000000..4d6cf974
--- /dev/null
+++ b/arm9/lib/src/OS_protectionRegion.c
@@ -0,0 +1,27 @@
+//
+// Created by red031000 on 2020-04-24.
+//
+
+#include "function_target.h"
+#include "OS_protectionRegion.h"
+
+ARM_FUNC 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
+}
+
+ARM_FUNC asm void OS_SetProtectionRegion1(u32 param)
+{
+ mcr p15, 0x0, r0, c6, c1, 0x0
+ bx lr
+}
+
+ARM_FUNC asm void OS_SetProtectionRegion2(u32 param)
+{
+ mcr p15, 0x0, r0, c6, c2, 0x0
+ bx lr
+}
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);
+}