mirror of
https://github.com/wiiu-env/MochaPayload.git
synced 2025-02-17 00:26:20 +01:00
Use ipc call to start mcp thread immediately
This commit is contained in:
parent
0de8f77c71
commit
38625d2efe
@ -227,5 +227,6 @@ typedef struct {
|
|||||||
#define IPC_CUSTOM_MEN_RPX_HOOK_COMPLETED 0xFD
|
#define IPC_CUSTOM_MEN_RPX_HOOK_COMPLETED 0xFD
|
||||||
#define IPC_CUSTOM_LOAD_CUSTOM_RPX 0xFC
|
#define IPC_CUSTOM_LOAD_CUSTOM_RPX 0xFC
|
||||||
#define IPC_CUSTOM_META_XML_READ 0xFB
|
#define IPC_CUSTOM_META_XML_READ 0xFB
|
||||||
|
#define IPC_CUSTOM_START_MCP_THREAD 0xFA
|
||||||
|
|
||||||
#define LOAD_FILE_TARGET_SD_CARD 0
|
#define LOAD_FILE_TARGET_SD_CARD 0
|
||||||
|
@ -64,9 +64,7 @@ void instant_patches_setup(void) {
|
|||||||
// fix 10 minute timeout that crashes MCP after 10 minutes of booting
|
// fix 10 minute timeout that crashes MCP after 10 minutes of booting
|
||||||
*(volatile u32 *) (0x05022474 - 0x05000000 + 0x081C0000) = 0xFFFFFFFF; // NEW_TIMEOUT
|
*(volatile u32 *) (0x05022474 - 0x05000000 + 0x081C0000) = 0xFFFFFFFF; // NEW_TIMEOUT
|
||||||
|
|
||||||
// start our MCP thread directly on first title change
|
|
||||||
kernel_memset((void *) (0x050BD000 - 0x05000000 + 0x081C0000), 0, 0x3000);
|
kernel_memset((void *) (0x050BD000 - 0x05000000 + 0x081C0000), 0, 0x3000);
|
||||||
*(volatile u32 *) (0x05054D6C - 0x05000000 + 0x081C0000) = ARM_B(0x05054D6C, _startMainThread);
|
|
||||||
|
|
||||||
// allow custom bootLogoTex and bootMovie.h264
|
// allow custom bootLogoTex and bootMovie.h264
|
||||||
*(volatile u32 *) (0xE0030D68 - 0xE0000000 + 0x12900000) = 0xE3A00000; // mov r0, #0
|
*(volatile u32 *) (0xE0030D68 - 0xE0000000 + 0x12900000) = 0xE3A00000; // mov r0, #0
|
||||||
|
@ -41,8 +41,6 @@ void mcp_run_patches(u32 ios_elf_start) {
|
|||||||
section_write_bss(ios_elf_start, _bss_start, _bss_end - _bss_start);
|
section_write_bss(ios_elf_start, _bss_start, _bss_end - _bss_start);
|
||||||
section_write(ios_elf_start, _text_start, (void *) mcp_get_phys_code_base(), _text_end - _text_start);
|
section_write(ios_elf_start, _text_start, (void *) mcp_get_phys_code_base(), _text_end - _text_start);
|
||||||
|
|
||||||
section_write_word(ios_elf_start, 0x05056718, ARM_BL(0x05056718, _text_start));
|
|
||||||
|
|
||||||
u32 patch_count = (u32) (((u8 *) mcp_patches_table_end) - ((u8 *) mcp_patches_table)) / sizeof(patch_table_t);
|
u32 patch_count = (u32) (((u8 *) mcp_patches_table_end) - ((u8 *) mcp_patches_table)) / sizeof(patch_table_t);
|
||||||
patch_table_entries(ios_elf_start, mcp_patches_table, patch_count);
|
patch_table_entries(ios_elf_start, mcp_patches_table, patch_count);
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
.text 0x05116000 : {
|
.text 0x05116000 : {
|
||||||
_text_start = .;
|
_text_start = .;
|
||||||
build/crt0.o(.init)
|
|
||||||
*(.text*)
|
*(.text*)
|
||||||
*(.rodata*)
|
*(.rodata*)
|
||||||
}
|
}
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
.section ".init"
|
|
||||||
.arm
|
|
||||||
.align 4
|
|
||||||
|
|
||||||
.extern _startMainThread
|
|
||||||
.type _startMainThread, %function
|
|
||||||
|
|
||||||
mcpMainThread_hook:
|
|
||||||
mov r11, r0
|
|
||||||
push {r0-r11,lr}
|
|
||||||
|
|
||||||
bl _startMainThread
|
|
||||||
|
|
||||||
pop {r0-r11,pc}
|
|
@ -217,6 +217,8 @@ int _MCP_ReadCOSXml_patch(uint32_t u1, uint32_t u2, MCPPPrepareTitleInfo *xmlDat
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern int _startMainThread(void);
|
||||||
|
|
||||||
/* RPX replacement! Call this ioctl to replace the next loaded RPX with an arbitrary path.
|
/* RPX replacement! Call this ioctl to replace the next loaded RPX with an arbitrary path.
|
||||||
DO NOT RETURN 0, this affects the codepaths back in the IOSU code */
|
DO NOT RETURN 0, this affects the codepaths back in the IOSU code */
|
||||||
int _MCP_ioctl100_patch(ipcmessage *msg) {
|
int _MCP_ioctl100_patch(ipcmessage *msg) {
|
||||||
@ -294,6 +296,10 @@ int _MCP_ioctl100_patch(ipcmessage *msg) {
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
case IPC_CUSTOM_START_MCP_THREAD: {
|
||||||
|
_startMainThread();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,10 @@ int main(int argc, char **argv) {
|
|||||||
if (mcpFd >= 0) {
|
if (mcpFd >= 0) {
|
||||||
int in = 0xFD;//IPC_CUSTOM_MEN_RPX_HOOK_COMPLETED;
|
int in = 0xFD;//IPC_CUSTOM_MEN_RPX_HOOK_COMPLETED;
|
||||||
int out = 0;
|
int out = 0;
|
||||||
|
IOS_Ioctl(mcpFd, 100, &in, sizeof(in), &out, sizeof(out));
|
||||||
|
|
||||||
|
in = 0xFA;//IPC_CUSTOM_START_MCP_THREAD;
|
||||||
|
out = 0;
|
||||||
IOS_Ioctl(mcpFd, 100, &in, sizeof(in), &out, sizeof(out));
|
IOS_Ioctl(mcpFd, 100, &in, sizeof(in), &out, sizeof(out));
|
||||||
IOS_Close(mcpFd);
|
IOS_Close(mcpFd);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user