mirror of
https://github.com/pret/pokediamond.git
synced 2026-09-30 23:27:17 -04:00
Merge remote-tracking branch 'origin' into libvct
This commit is contained in:
+1
-1
@@ -33,4 +33,4 @@ notifications:
|
||||
email: false
|
||||
|
||||
after_success:
|
||||
- .travis/calcrom/webhook.sh
|
||||
- .travis/calcrom/webhook.sh pokediamond
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
calcrom
|
||||
*.exe
|
||||
|
||||
@@ -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;
|
||||
|
||||
Regular → Executable
+2
-3
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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_
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user