Merge branch 'master' of https://github.com/martmists/pokediamond into pikalax_work

This commit is contained in:
PikalaxALT
2020-05-27 20:32:11 -04:00
8 changed files with 151 additions and 67 deletions

View File

@@ -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

View File

@@ -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_

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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)

View File

@@ -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

View File

@@ -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;
}