2020-04-28 15:07:52 +02:00
|
|
|
#pragma once
|
|
|
|
|
2021-01-01 18:54:51 +01:00
|
|
|
#include <assert.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
|
|
|
|
#define CHECK_SIZE(Type, Size) \
|
|
|
|
static_assert(sizeof(Type) == Size, \
|
|
|
|
#Type " must be " #Size " bytes")
|
|
|
|
|
|
|
|
#define CHECK_OFFSET(Type, Offset, Field) \
|
|
|
|
static_assert(offsetof(Type, Field) == Offset, \
|
|
|
|
#Type "::" #Field " must be at offset " #Offset)
|
2021-09-23 18:52:20 +02:00
|
|
|
|
2020-04-28 15:07:52 +02:00
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
uint64_t title_id;
|
|
|
|
uint64_t boss_id;
|
|
|
|
uint64_t os_version;
|
|
|
|
uint64_t app_size;
|
|
|
|
uint64_t common_save_size;
|
|
|
|
uint64_t account_save_size;
|
|
|
|
uint64_t common_boss_size;
|
|
|
|
uint64_t account_boss_size;
|
|
|
|
uint64_t join_game_mode_mask;
|
|
|
|
uint32_t version;
|
|
|
|
char product_code[32];
|
|
|
|
char content_platform[32];
|
|
|
|
char company_code[8];
|
|
|
|
char mastering_date[32];
|
|
|
|
uint32_t logo_type;
|
|
|
|
uint32_t app_launch_type;
|
|
|
|
uint32_t invisible_flag;
|
|
|
|
uint32_t no_managed_flag;
|
|
|
|
uint32_t no_event_log;
|
|
|
|
uint32_t no_icon_database;
|
|
|
|
uint32_t launching_flag;
|
|
|
|
uint32_t install_flag;
|
|
|
|
uint32_t closing_msg;
|
|
|
|
uint32_t title_version;
|
|
|
|
uint32_t group_id;
|
|
|
|
uint32_t save_no_rollback;
|
|
|
|
uint32_t bg_daemon_enable;
|
|
|
|
uint32_t join_game_id;
|
|
|
|
uint32_t olv_accesskey;
|
|
|
|
uint32_t wood_tin;
|
|
|
|
uint32_t e_manual;
|
|
|
|
uint32_t e_manual_version;
|
|
|
|
uint32_t region;
|
|
|
|
uint32_t pc_cero;
|
|
|
|
uint32_t pc_esrb;
|
|
|
|
uint32_t pc_bbfc;
|
|
|
|
uint32_t pc_usk;
|
|
|
|
uint32_t pc_pegi_gen;
|
|
|
|
uint32_t pc_pegi_fin;
|
|
|
|
uint32_t pc_pegi_prt;
|
|
|
|
uint32_t pc_pegi_bbfc;
|
|
|
|
uint32_t pc_cob;
|
|
|
|
uint32_t pc_grb;
|
|
|
|
uint32_t pc_cgsrr;
|
|
|
|
uint32_t pc_oflc;
|
|
|
|
uint32_t pc_reserved0;
|
|
|
|
uint32_t pc_reserved1;
|
|
|
|
uint32_t pc_reserved2;
|
|
|
|
uint32_t pc_reserved3;
|
|
|
|
uint32_t ext_dev_nunchaku;
|
|
|
|
uint32_t ext_dev_classic;
|
|
|
|
uint32_t ext_dev_urcc;
|
|
|
|
uint32_t ext_dev_board;
|
|
|
|
uint32_t ext_dev_usb_keyboard;
|
|
|
|
uint32_t ext_dev_etc;
|
|
|
|
char ext_dev_etc_name[512];
|
|
|
|
uint32_t eula_version;
|
|
|
|
uint32_t drc_use;
|
|
|
|
uint32_t network_use;
|
|
|
|
uint32_t online_account_use;
|
|
|
|
uint32_t direct_boot;
|
|
|
|
uint32_t reserved_flag0;
|
|
|
|
uint32_t reserved_flag1;
|
|
|
|
uint32_t reserved_flag2;
|
|
|
|
uint32_t reserved_flag3;
|
|
|
|
uint32_t reserved_flag4;
|
|
|
|
uint32_t reserved_flag5;
|
|
|
|
uint32_t reserved_flag6;
|
|
|
|
uint32_t reserved_flag7;
|
|
|
|
char longname_ja[512];
|
|
|
|
char longname_en[512];
|
|
|
|
char longname_fr[512];
|
|
|
|
char longname_de[512];
|
|
|
|
char longname_it[512];
|
|
|
|
char longname_es[512];
|
|
|
|
char longname_zhs[512];
|
|
|
|
char longname_ko[512];
|
|
|
|
char longname_nl[512];
|
|
|
|
char longname_pt[512];
|
|
|
|
char longname_ru[512];
|
|
|
|
char longname_zht[512];
|
|
|
|
char shortname_ja[256];
|
|
|
|
char shortname_en[256];
|
|
|
|
char shortname_fr[256];
|
|
|
|
char shortname_de[256];
|
|
|
|
char shortname_it[256];
|
|
|
|
char shortname_es[256];
|
|
|
|
char shortname_zhs[256];
|
|
|
|
char shortname_ko[256];
|
|
|
|
char shortname_nl[256];
|
|
|
|
char shortname_pt[256];
|
|
|
|
char shortname_ru[256];
|
|
|
|
char shortname_zht[256];
|
|
|
|
char publisher_ja[256];
|
|
|
|
char publisher_en[256];
|
|
|
|
char publisher_fr[256];
|
|
|
|
char publisher_de[256];
|
|
|
|
char publisher_it[256];
|
|
|
|
char publisher_es[256];
|
|
|
|
char publisher_zhs[256];
|
|
|
|
char publisher_ko[256];
|
|
|
|
char publisher_nl[256];
|
|
|
|
char publisher_pt[256];
|
|
|
|
char publisher_ru[256];
|
|
|
|
char publisher_zht[256];
|
|
|
|
uint32_t add_on_unique_id[32];
|
|
|
|
} ACPMetaXml;
|
|
|
|
|
2021-01-01 18:54:51 +01:00
|
|
|
typedef struct __attribute__((packed)) {
|
2020-04-28 15:07:52 +02:00
|
|
|
uint32_t group;
|
|
|
|
uint64_t mask;
|
2021-01-01 18:54:51 +01:00
|
|
|
} Permission;
|
2020-04-28 15:07:52 +02:00
|
|
|
|
2020-06-20 23:38:28 +02:00
|
|
|
typedef struct __attribute__((packed)) {
|
2021-01-01 18:54:51 +01:00
|
|
|
|
2020-04-28 15:07:52 +02:00
|
|
|
uint32_t version;
|
|
|
|
char unkn1[8];
|
|
|
|
uint64_t titleId;
|
|
|
|
uint32_t groupId;
|
|
|
|
uint32_t cmdFlags;
|
|
|
|
char argstr[4096];
|
2021-09-23 18:52:20 +02:00
|
|
|
char *argv[64];
|
2020-04-28 15:07:52 +02:00
|
|
|
uint32_t max_size;
|
|
|
|
uint32_t avail_size;
|
|
|
|
uint32_t codegen_size;
|
|
|
|
uint32_t codegen_core;
|
|
|
|
uint32_t max_codesize;
|
|
|
|
uint32_t overlay_arena;
|
|
|
|
uint32_t num_workarea_heap_blocks;
|
|
|
|
uint32_t num_codearea_heap_blocks;
|
2021-01-01 18:54:51 +01:00
|
|
|
Permission permissions[19];
|
2020-04-28 15:07:52 +02:00
|
|
|
uint32_t default_stack0_size;
|
|
|
|
uint32_t default_stack1_size;
|
|
|
|
uint32_t default_stack2_size;
|
|
|
|
uint32_t default_redzone0_size;
|
|
|
|
uint32_t default_redzone1_size;
|
|
|
|
uint32_t default_redzone2_size;
|
|
|
|
uint32_t exception_stack0_size;
|
|
|
|
uint32_t exception_stack1_size;
|
|
|
|
uint32_t exception_stack2_size;
|
|
|
|
uint32_t sdkVersion;
|
|
|
|
uint32_t titleVersion;
|
|
|
|
char unknwn2[0x1270 - 0x124C];
|
|
|
|
} MCPPPrepareTitleInfo;
|
2021-01-01 18:54:51 +01:00
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x00, version);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x0C, titleId);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x14, groupId);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x18, cmdFlags);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1C, argstr);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x101C, argv);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x111C, max_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1120, avail_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1124, codegen_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1128, codegen_core);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x112C, max_codesize);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1130, overlay_arena);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1134, num_workarea_heap_blocks);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1138, num_codearea_heap_blocks);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x113C, permissions);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1220, default_stack0_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1224, default_stack1_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1228, default_stack2_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x122C, default_redzone0_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1230, default_redzone1_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1234, default_redzone2_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1238, exception_stack0_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x123C, exception_stack1_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1240, exception_stack2_size);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1244, sdkVersion);
|
|
|
|
CHECK_OFFSET(MCPPPrepareTitleInfo, 0x1248, titleVersion);
|
|
|
|
CHECK_SIZE(MCPPPrepareTitleInfo, 0x1270);
|
2020-04-28 15:07:52 +02:00
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
uint32_t version;
|
|
|
|
uint64_t os_version;
|
|
|
|
uint64_t titleId;
|
|
|
|
uint32_t titleVersion;
|
|
|
|
uint32_t sdkVersion;
|
|
|
|
uint32_t groupid;
|
|
|
|
uint32_t app_type;
|
|
|
|
uint32_t common_id;
|
|
|
|
} MCPAppXml;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
//Load from the process's code directory (process title id)/code/%s
|
|
|
|
LOAD_FILE_PROCESS_CODE = 0,
|
|
|
|
//Load from the CafeOS directory (00050010-1000400A)/code/%s
|
|
|
|
LOAD_FILE_CAFE_OS = 1,
|
|
|
|
//Load from a system data title's content directory (0005001B-x)/content/%s
|
|
|
|
LOAD_FILE_SYS_DATA_CONTENT = 2,
|
|
|
|
//Load from a system data title's code directory (0005001B-x)/content/%s
|
|
|
|
LOAD_FILE_SYS_DATA_CODE = 3,
|
|
|
|
|
|
|
|
LOAD_FILE_FORCE_SIZE = 0xFFFFFFFF,
|
|
|
|
} MCPFileType;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
unsigned char unk[0x10];
|
|
|
|
|
|
|
|
unsigned int pos;
|
|
|
|
MCPFileType type;
|
|
|
|
unsigned int cafe_pid;
|
|
|
|
|
|
|
|
unsigned char unk2[0xC];
|
|
|
|
|
|
|
|
char name[0x40];
|
|
|
|
|
|
|
|
unsigned char unk3[0x12D8 - 0x68];
|
|
|
|
} MCPLoadFileRequest;
|
|
|
|
|
2021-04-04 23:51:23 +02:00
|
|
|
#define IPC_CUSTOM_START_MCP_THREAD 0xFE
|
2020-04-28 15:07:52 +02:00
|
|
|
#define IPC_CUSTOM_MEN_RPX_HOOK_COMPLETED 0xFD
|
|
|
|
#define IPC_CUSTOM_LOAD_CUSTOM_RPX 0xFC
|
|
|
|
#define IPC_CUSTOM_META_XML_READ 0xFB
|
2021-10-31 16:20:42 +01:00
|
|
|
#define IPC_CUSTOM_START_USB_LOGGING 0xFA
|
2021-12-28 15:30:53 +01:00
|
|
|
#define IPC_CUSTOM_COPY_ENVIRONMENT_PATH 0xF9
|
2020-04-28 15:07:52 +02:00
|
|
|
|
|
|
|
#define LOAD_FILE_TARGET_SD_CARD 0
|