summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-05-27 21:32:48 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-05-27 21:32:48 -0400
commitd43d43f06bd17ac320247bc4e8d58cde2a9d9f70 (patch)
treeefacf95ec792b7c12d13eee670a59b3b4e5535cd
parent35c9f9fc2e2ff3387ff89b956a88e05000d4768a (diff)
parentd42cc73852cdb0cc0684bb87aaa6975d06cae02f (diff)
Merge remote-tracking branch 'origin' into libvct
-rw-r--r--.travis.yml2
-rw-r--r--.travis/calcrom/.gitignore1
-rw-r--r--.travis/calcrom/calcrom.cpp23
-rwxr-xr-x[-rw-r--r--].travis/calcrom/webhook.sh5
-rw-r--r--arm9/asm/OS_ownerInfo.s59
-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
12 files changed, 174 insertions, 75 deletions
diff --git a/.travis.yml b/.travis.yml
index 681bddc5..5ce0b5e9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -33,4 +33,4 @@ notifications:
email: false
after_success:
- - .travis/calcrom/webhook.sh
+ - .travis/calcrom/webhook.sh pokediamond
diff --git a/.travis/calcrom/.gitignore b/.travis/calcrom/.gitignore
index a2e06b56..e4016dbe 100644
--- a/.travis/calcrom/.gitignore
+++ b/.travis/calcrom/.gitignore
@@ -1 +1,2 @@
calcrom
+*.exe
diff --git a/.travis/calcrom/calcrom.cpp b/.travis/calcrom/calcrom.cpp
index 8b43e010..272bcf17 100644
--- a/.travis/calcrom/calcrom.cpp
+++ b/.travis/calcrom/calcrom.cpp
@@ -11,7 +11,12 @@
* - Must be placed in ".travis/calcrom/".
*
* Changelog:
- * - 1.0 (26 May 2020): Initial implementation
+ * - 0.1.0 (26 May 2020):
+ * Initial implementation
+ * - 0.1.1 (26 May 2020):
+ * Allow program to be run from wherever
+ * 0.1.2 (27 May 2020):
+ * Extra security on ELF header
*/
#include <iostream>
@@ -42,11 +47,17 @@ public:
}
};
-int main()
+int main(int argc, char ** argv)
{
fstream elf;
Elf32_Ehdr ehdr;
vector<Elf32_Shdr> shdr;
+ stringstream pattern;
+
+ if (argc < 2) {
+ cout << "usage: calcrom PROJECT_DIR" << endl;
+ throw invalid_argument("missing required argument: PROJECT_DIR\n");
+ }
// Accumulate sizes
// src asm
@@ -55,7 +66,8 @@ int main()
unsigned sizes[2][2] = {{0, 0}, {0, 0}};
char * shstrtab = NULL;
size_t shstrsz = 0;
- for (char const * & fname : Glob("../../arm9/{src,asm,lib/{src,asm},modules/*/{src,asm}}/*.{c,s,cpp}"))
+ pattern << argv[1] << "/arm9/{src,asm,lib/{src,asm},modules/*/{src,asm}}/*.{c,s,cpp}";
+ for (char const * & fname : Glob(pattern.str()))
{
string fname_s(fname);
string ext = fname_s.substr(fname_s.rfind('.'), 4);
@@ -64,7 +76,10 @@ int main()
fname_s = fname_s.replace(fname_s.rfind('.'), 4, ".o");
elf.open(fname_s, ios_base::in | ios_base::binary);
elf.read((char *)&ehdr, sizeof(ehdr));
- if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0) {
+ if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0
+ || ehdr.e_ehsize != sizeof(Elf32_Ehdr)
+ || ehdr.e_shentsize != sizeof(Elf32_Shdr))
+ {
elf.close();
stringstream ss;
ss << "Error validating " << fname_s << " as an ELF file" << endl;
diff --git a/.travis/calcrom/webhook.sh b/.travis/calcrom/webhook.sh
index fc02eef1..90752989 100644..100755
--- a/.travis/calcrom/webhook.sh
+++ b/.travis/calcrom/webhook.sh
@@ -12,8 +12,7 @@ if [ ! -f $map_file ]; then
exit 1
fi
-pushd $(dirname "$0")
-make
-output=$(./calcrom | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
+make -C ${TRAVIS_BUILD_DIR}/.travis/calcrom
+output=$(${TRAVIS_BUILD_DIR}/.travis/calcrom/calcrom ${TRAVIS_BUILD_DIR} | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $CALCROM_DISCORD_WEBHOOK_URL
popd
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/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;
+}