summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/OS_ownerInfo.s59
-rw-r--r--arm9/asm/libVCT.s115
-rw-r--r--arm9/lib/include/MI_memory.h1
-rw-r--r--arm9/lib/include/OS_entropy.h7
-rw-r--r--arm9/lib/include/OS_ownerInfo.h28
-rw-r--r--arm9/lib/include/gx.h2
-rw-r--r--arm9/lib/include/mmap.h2
-rw-r--r--arm9/lib/include/userInfo.h92
-rw-r--r--arm9/lib/src/OS_ownerInfo.c27
9 files changed, 221 insertions, 112 deletions
diff --git a/arm9/asm/OS_ownerInfo.s b/arm9/asm/OS_ownerInfo.s
deleted file mode 100644
index 0abf080b..00000000
--- a/arm9/asm/OS_ownerInfo.s
+++ /dev/null
@@ -1,59 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- arm_func_start OS_GetOwnerRtcOffset
-OS_GetOwnerRtcOffset: ; 0x020CD510
- ldr r1, _020CD520 ; =0x027FFC80
- ldr r0, [r1, #0x68]
- ldr r1, [r1, #0x6c]
- bx lr
- .balign 4
-_020CD520: .word 0x027FFC80
-
- arm_func_start OS_GetOwnerInfo
-OS_GetOwnerInfo: ; 0x020CD524
- stmdb sp!, {r4,lr}
- ldr ip, _020CD59C ; =0x027FFC80
- mov r4, r0
- ldrh r2, [r12, #0x64]
- add r0, r12, #0x6
- add r1, r4, #0x4
- mov r2, r2, lsl #0x1d
- mov r2, r2, lsr #0x1d
- strb r2, [r4, #0x0]
- ldrb r3, [r12, #0x2]
- mov r2, #0x14
- mov r3, r3, lsl #0x1c
- mov r3, r3, lsr #0x1c
- strb r3, [r4, #0x1]
- ldrb r3, [r12, #0x3]
- strb r3, [r4, #0x2]
- ldrb r3, [r12, #0x4]
- strb r3, [r4, #0x3]
- ldrb r3, [r12, #0x1a]
- strh r3, [r4, #0x18]
- ldrb r3, [r12, #0x50]
- strh r3, [r4, #0x4e]
- bl MIi_CpuCopy16
- ldr r0, _020CD59C ; =0x027FFC80
- add r1, r4, #0x1a
- add r0, r0, #0x1c
- mov r2, #0x34
- bl MIi_CpuCopy16
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CD59C: .word 0x027FFC80
-
- arm_func_start OS_GetMacAddress
-OS_GetMacAddress: ; 0x020CD5A0
- ldr ip, _020CD5B4 ; =MI_CpuCopy8
- mov r1, r0
- ldr r0, _020CD5B8 ; =0x027FFCF4
- mov r2, #0x6
- bx r12
- .balign 4
-_020CD5B4: .word MI_CpuCopy8
-_020CD5B8: .word 0x027FFCF4
diff --git a/arm9/asm/libVCT.s b/arm9/asm/libVCT.s
index ee05bcce..892f57bb 100644
--- a/arm9/asm/libVCT.s
+++ b/arm9/asm/libVCT.s
@@ -17,28 +17,39 @@ cAdpcmIndexTable4: ; 0x020FF5C4
.global cAdpcmStepSizeTable
cAdpcmStepSizeTable: ; 0x020FF5D4
- .byte 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x0E, 0x00
- .byte 0x10, 0x00, 0x11, 0x00, 0x13, 0x00, 0x15, 0x00, 0x17, 0x00, 0x19, 0x00, 0x1C, 0x00, 0x1F, 0x00
- .byte 0x22, 0x00, 0x25, 0x00, 0x29, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x37, 0x00, 0x3C, 0x00, 0x42, 0x00
- .byte 0x49, 0x00, 0x50, 0x00, 0x58, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x76, 0x00, 0x82, 0x00, 0x8F, 0x00
- .byte 0x9D, 0x00, 0xAD, 0x00, 0xBE, 0x00, 0xD1, 0x00, 0xE6, 0x00, 0xFD, 0x00, 0x17, 0x01, 0x33, 0x01
- .byte 0x51, 0x01, 0x73, 0x01, 0x98, 0x01, 0xC1, 0x01, 0xEE, 0x01, 0x20, 0x02, 0x56, 0x02, 0x92, 0x02
- .byte 0xD4, 0x02, 0x1C, 0x03, 0x6C, 0x03, 0xC3, 0x03, 0x24, 0x04, 0x8E, 0x04, 0x02, 0x05, 0x83, 0x05
- .byte 0x10, 0x06, 0xAB, 0x06, 0x56, 0x07, 0x12, 0x08, 0xE0, 0x08, 0xC3, 0x09, 0xBD, 0x0A, 0xD0, 0x0B
- .byte 0xFF, 0x0C, 0x4C, 0x0E, 0xBA, 0x0F, 0x4C, 0x11, 0x07, 0x13, 0xEE, 0x14, 0x06, 0x17, 0x54, 0x19
- .byte 0xDC, 0x1B, 0xA5, 0x1E, 0xB6, 0x21, 0x15, 0x25, 0xCA, 0x28, 0xDF, 0x2C, 0x5B, 0x31, 0x4B, 0x36
- .byte 0xB9, 0x3B, 0xB2, 0x41, 0x44, 0x48, 0x7E, 0x4F, 0x71, 0x57, 0x2F, 0x60, 0xCE, 0x69, 0x62, 0x74
- .byte 0xFF, 0x7F, 0x00, 0x00
+ .short 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E
+ .short 0x0010, 0x0011, 0x0013, 0x0015, 0x0017, 0x0019, 0x001C, 0x001F
+ .short 0x0022, 0x0025, 0x0029, 0x002D, 0x0032, 0x0037, 0x003C, 0x0042
+ .short 0x0049, 0x0050, 0x0058, 0x0061, 0x006B, 0x0076, 0x0082, 0x008F
+ .short 0x009D, 0x00AD, 0x00BE, 0x00D1, 0x00E6, 0x00FD, 0x0117, 0x0133
+ .short 0x0151, 0x0173, 0x0198, 0x01C1, 0x01EE, 0x0220, 0x0256, 0x0292
+ .short 0x02D4, 0x031C, 0x036C, 0x03C3, 0x0424, 0x048E, 0x0502, 0x0583
+ .short 0x0610, 0x06AB, 0x0756, 0x0812, 0x08E0, 0x09C3, 0x0ABD, 0x0BD0
+ .short 0x0CFF, 0x0E4C, 0x0FBA, 0x114C, 0x1307, 0x14EE, 0x1706, 0x1954
+ .short 0x1BDC, 0x1EA5, 0x21B6, 0x2515, 0x28CA, 0x2CDF, 0x315B, 0x364B
+ .short 0x3BB9, 0x41B2, 0x4844, 0x4F7E, 0x5771, 0x602F, 0x69CE, 0x7462
+ .short 0x7FFF, 0x0000
.global sCodecInfo
sCodecInfo: ; 0x020FF688
- .byte 0x08, 0x00, 0x08, 0x00, 0x02, 0x04, 0x03, 0x04, 0x04, 0x04, 0x00, 0x00
+ .byte 0x08, 0x00
+ .byte 0x08, 0x00
+ .byte 0x02, 0x04
+ .byte 0x03, 0x04
+ .byte 0x04, 0x04
+ .balign 4, 0
.global UNK_020FF694
UNK_020FF694: ; 0x020FF694
- .byte 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02
- .byte 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00
-
+ .byte 0x01, 0x00, 0x00
+ .byte 0x01, 0x01, 0x00
+ .byte 0x01, 0x01, 0x01
+ .byte 0x01, 0x01, 0x02
+ .byte 0x01, 0x02, 0x02
+ .byte 0x02, 0x02, 0x02
+ .byte 0x02, 0x02, 0x03
+
+ .balign 4, 0
.global UNK_020FF6AC
UNK_020FF6AC: ; 0x020FF6AC
.byte 0x01, 0x08, 0x04, 0x0A, 0x00, 0x00, 0x00, 0x00
@@ -49,58 +60,72 @@ UNK_020FF6B4: ; 0x020FF6B4
.global UNK_020FF6BC
UNK_020FF6BC: ; 0x020FF6BC
- .byte 0x04, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF
- .byte 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
- .byte 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x05, 0xFE
- .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFF, 0xFF
- .byte 0x00, 0xFF, 0x00, 0x00
-
+ .byte 0x04, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+ .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00
+ .byte 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+ .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+ .byte 0xFE, 0xFE, 0x05, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+ .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF
+
+ .balign 4, 0
.global UNK_020FF700
UNK_020FF700: ; 0x020FF700
- .byte 0xFE, 0xFE, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF
- .byte 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
- .byte 0xFF, 0xFE, 0x00, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD
- .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0x00, 0x00, 0xFF, 0xFF
- .byte 0x00, 0xFF, 0x00, 0x00
-
+ .byte 0xFE, 0xFE, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF
+ .byte 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00
+ .byte 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+ .byte 0xFE, 0x00, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+ .byte 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+ .byte 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF
+
+ .balign 4, 0
.global UNK_020FF744
UNK_020FF744: ; 0x020FF744
- .byte 0x01, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE
- .byte 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE
- .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
- .byte 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE
- .byte 0x00, 0xFE, 0x00, 0x00
-
+ .byte 0x01, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE
+ .byte 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
+ .byte 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
+ .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
+ .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x00
+ .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xFE
+
+ .balign 4, 0
.global UNK_020FF788
UNK_020FF788: ; 0x020FF788
- .byte 0xFE, 0xFE, 0xFE, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0x05, 0x05, 0xFE, 0xFF
- .byte 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE
- .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
- .byte 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFE
- .byte 0x00, 0xFE, 0x00, 0x00
+ .byte 0xFE, 0xFE, 0xFE, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE
+ .byte 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
+ .byte 0xFE, 0x05, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
+ .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
+ .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x00
+ .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xFE
.section .data
.global UNK_0210646C
UNK_0210646C: ; 0x0210646C
- .byte 0x01, 0x00, 0x00, 0x00
+ .word 1
.global UNK_02106470
UNK_02106470: ; 0x02106470
- .byte 0x3F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00
- .byte 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00
+ .word 0x0000003F
+ .word 0x0000007F
+ .word 0x000000FF
+ .word 0x000001FF
+ .word 0x000003FF
+ .word 0x000007FF
+ .word 0x00000FFF
+ .word 0x00001FFF
.global UNK_02106490
UNK_02106490: ; 0x02106490
- .byte 0xF7, 0xB5, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00
+ ; u64
+ .word 15709687, 0
.global UNK_02106498
UNK_02106498: ; 0x02106498
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00
+ .word 0x00000000, 0x00000000, 0x0000000F, 0x000003FC
.global UNK_021064A8
UNK_021064A8: ; 0x021064A8
- .byte 0xFB, 0xE9, 0x3D, 0x40, 0xBC, 0xC7, 0xD1, 0x2C, 0x2A, 0xD0, 0x7C, 0x03, 0xF0, 0x08, 0x93, 0xF5
+ .short 0xE9FB, 0x403D, 0xC7BC, 0x2CD1, 0xD02A, 0x037C, 0x08F0, 0xF593
.bss
diff --git a/arm9/lib/include/MI_memory.h b/arm9/lib/include/MI_memory.h
index d9935a5f..0ebb3560 100644
--- a/arm9/lib/include/MI_memory.h
+++ b/arm9/lib/include/MI_memory.h
@@ -6,5 +6,6 @@ void MI_CpuCopy8(void const *src, void *dest, u32 size);
static inline void MI_CpuClear8(void *dest, u32 size) {
MI_CpuFill8(dest, 0, size);
}
+void MIi_CpuCopy16(const void *src, void *dst, u32 size);
#endif //NITRO_MI_MEMORY_H_
diff --git a/arm9/lib/include/OS_entropy.h b/arm9/lib/include/OS_entropy.h
index 78ac71b7..b0f2781a 100644
--- a/arm9/lib/include/OS_entropy.h
+++ b/arm9/lib/include/OS_entropy.h
@@ -6,15 +6,10 @@
#define POKEDIAMOND_OS_ENTROPY_H
#include "consts.h"
+#include "userInfo.h"
void OS_GetLowEntropyData(u32 * arr);
-typedef struct NVRAMConfig{
- u8 ncd[110]; // todo: typeof NVRAMConfigData
- u16 saveCount;
- u16 rc16;
-} NVRAMConfig;
-
extern vu64 OSi_TickCounter;
extern u16 OS_GetTickLo(void);
diff --git a/arm9/lib/include/OS_ownerInfo.h b/arm9/lib/include/OS_ownerInfo.h
new file mode 100644
index 00000000..13bae06e
--- /dev/null
+++ b/arm9/lib/include/OS_ownerInfo.h
@@ -0,0 +1,28 @@
+#ifndef POKEDIAMOND_OS_OWNERINFO_H
+#define POKEDIAMOND_OS_OWNERINFO_H
+
+#include "consts.h"
+#include "userInfo.h"
+
+typedef struct OSBirthday
+{
+ u8 month;
+ u8 day;
+} OSBirthday;
+
+typedef struct OSOwnerInfo
+{
+ u8 language;
+ u8 favoriteColour;
+ OSBirthday birthday;
+ u16 nickName[10]; //either 10 or 8
+ u16 nickNameLength;
+ u16 comment[26];
+ u16 commentLength;
+} OSOwnerInfo;
+
+void OS_GetMacAddress(u8 *macAddress);
+void OS_GetOwnerInfo(OSOwnerInfo* info);
+s64 OS_GetOwnerRtcOffset(void);
+
+#endif //POKEDIAMOND_OS_OWNERINFO_H
diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h
index 8abe4e40..79b707fc 100644
--- a/arm9/lib/include/gx.h
+++ b/arm9/lib/include/gx.h
@@ -2,6 +2,7 @@
#define GUARD_GX_H
#include "fx.h"
+#include "MI_memory.h"
//temporary while other files aren't decompiled
@@ -14,7 +15,6 @@ void MI_Copy64B(void *src, void *dst);
void MI_WaitDma(u32);
void MI_DmaCopy32Async(u32, const void *, void *, u32, void *, void *);
void MI_DmaCopy16(u32 unk, const void *src, void *dst, u32 size);
-void MIi_CpuCopy16(const void *src, void *dst, u32 size);
void MI_DmaCopy32(u32 unk, const void *src, void *dst, u32 size);
void MIi_CpuCopy32(const void *src, void *dst, u32 size);
void OSi_UnlockVram(u16, u16);
diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h
index 207e0509..65b93e1e 100644
--- a/arm9/lib/include/mmap.h
+++ b/arm9/lib/include/mmap.h
@@ -98,7 +98,7 @@ typedef struct {
u16 mmem_checker_subp; // 3fa-3fb: 2bytes MainMomory Size Checker for Sub processor
u8 padding4[2]; // 3fc-3fd: (2bytes)
u16 command_area; // 3fe-3ff: 2bytes Command Area
-} OSSystemWork;
+} OSSystemWork; //0x027FFC00
#define OS_GetSystemWork() ((OSSystemWork *)HW_MAIN_MEM_SYSTEM)
diff --git a/arm9/lib/include/userInfo.h b/arm9/lib/include/userInfo.h
new file mode 100644
index 00000000..690dcf54
--- /dev/null
+++ b/arm9/lib/include/userInfo.h
@@ -0,0 +1,92 @@
+#ifndef POKEDIAMOND_USERINFO_H
+#define POKEDIAMOND_USERINFO_H
+
+typedef struct NVRAMConfigDate
+{
+ u8 month; //0x00
+ u8 day; //0x01
+} NVRAMConfigDate; //0x02
+
+typedef struct NVRAMConfigNickname
+{
+ u16 str[10]; //0x00
+ u8 length; //0x14
+ u8 rsv; //0x15
+} NVRAMConfigNickname; //0x16
+
+typedef struct NVRAMConfigComment
+{
+ u16 str[26]; //0x00
+ u8 length; //0x34
+ u8 rsv; //0x35
+} NVRAMConfigComment; //0x36
+
+typedef struct NVRAMConfigOwnerInfo
+{
+ u8 favouriteColour:4; //0x00 (0-3)
+ u8 rsv:4; //0x00 (4-7)
+ NVRAMConfigDate birthday; //0x01
+ u8 pad; //0x03
+ NVRAMConfigNickname nickname; //0x04
+ NVRAMConfigComment comment; //0x1a
+} NVRAMConfigOwnerInfo; //0x50
+
+typedef struct NVRAMConfigAlarm
+{
+ u8 hour; //0x00
+ u8 minute; //0x01
+ u8 second; //0x02
+ u8 pad; //0x03
+ u16 enableWeek:7; //0x04 (0-6)
+ u16 alarmOn:1; //0x04 (7)
+ u16 rsv:8; //0x04 (8-15)
+} NVRAMConfigAlarm; //0x06
+
+typedef struct NVRAMConfigTpCalibData
+{
+ u16 raw_x1; //0x00
+ u16 raw_y1; //0x02
+ u8 dx1; //0x04
+ u8 dy1; //0x05
+ u16 raw_x2; //0x06
+ u16 raw_y2; //0x08
+ u8 dx2; //0x0a
+ u8 dy2; //0x0b
+} NVRAMConfigTpCalibData; //0x0c
+
+typedef struct NVRAMConfigOption
+{
+ u16 language:3; //0x00 (0-2)
+ u16 agbLcd:1; //0x00 (3)
+ u16 detectPullOutCardFlag:1; //0x00 (4)
+ u16 detectPullOutCtrdgFlag:1; //0x00 (5)
+ u16 autoBootFlag:1; //0x00 (6)
+ u16 rsv:4; //0x00 (7-10)
+ u16 input_favouriteColour:1; //0x00 (11)
+ u16 input_tp:1; //0x00 (12)
+ u16 input_language:1; //0x00 (13)
+ u16 input_rtc:1; //0x00 (14)
+ u16 input_nickname:1; //0x00 (15)
+ u8 timeZone; //0x02
+ u8 rtcClockAdjust; //0x03
+ s64 rtcOffset; //0x04
+} NVRAMConfigOption; //0x0c
+
+typedef struct NVRAMConfigData
+{
+ u8 version; //0x00
+ u8 pad; //0x01
+ NVRAMConfigOwnerInfo owner; //0x02
+ NVRAMConfigAlarm alarm; //0x52
+ NVRAMConfigTpCalibData tp; //0x58
+ NVRAMConfigOption option; //0x64
+} NVRAMConfigData; //0x70
+
+typedef struct NVRAMConfig
+{
+ NVRAMConfigData ncd; //0x00
+ u16 saveCount; //0x70
+ u16 crc16; //0x72
+} NVRAMConfig; //0x74
+
+#endif //POKEDIAMOND_USERINFO_H
diff --git a/arm9/lib/src/OS_ownerInfo.c b/arm9/lib/src/OS_ownerInfo.c
new file mode 100644
index 00000000..10a638fb
--- /dev/null
+++ b/arm9/lib/src/OS_ownerInfo.c
@@ -0,0 +1,27 @@
+#include "function_target.h"
+#include "OS_ownerInfo.h"
+#include "MI_memory.h"
+
+ARM_FUNC void OS_GetMacAddress(u8 *macAddress)
+{
+ MI_CpuCopy8((void *)0x027FFCF4, macAddress, 0x6);
+}
+
+ARM_FUNC void OS_GetOwnerInfo(OSOwnerInfo* info)
+{
+ NVRAMConfig *src = (NVRAMConfig *)OS_GetSystemWork()->nvramUserInfo;
+ info->language = (u8)src->ncd.option.language;
+ info->favoriteColour = (u8)src->ncd.owner.favouriteColour;
+ info->birthday.month = (u8)src->ncd.owner.birthday.month;
+ info->birthday.day = (u8)src->ncd.owner.birthday.day;
+ info->nickNameLength = (u16)src->ncd.owner.nickname.length;
+ info->commentLength = (u16)src->ncd.owner.comment.length;
+ MIi_CpuCopy16(src->ncd.owner.nickname.str, info->nickName, 10 * sizeof(u16));
+ MIi_CpuCopy16(src->ncd.owner.comment.str, info->comment, 26 * sizeof(u16));
+}
+
+ARM_FUNC s64 OS_GetOwnerRtcOffset(void)
+{
+ NVRAMConfig *src = (NVRAMConfig *)OS_GetSystemWork()->nvramUserInfo;
+ return src->ncd.option.rtcOffset;
+}