Skip to content

Commit 5cbb0e8

Browse files
committed
Removed unwanted USB modules from kernel forging
Hiidra now handles proper HID module loading to make titles that uses HIDv4 work (like MH3)
1 parent ae33076 commit 5cbb0e8

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

main/source/hiidra.cpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
#define ES_IOCTL_ENABLEVGA 0x63
4141
#define ES_IOCTL_ENABLEGC2WIIMOTE 0x64
4242

43+
#define DIP_IOCTL_DVDLoadGame 0xF0
44+
4345
static char moduleSHA[0x1C] ALIGNED(32);
4446
static char modulePath[1024] ALIGNED(32);
4547
#define MODULE_BUFFER_SIZE 0x1000
@@ -573,6 +575,7 @@ int loadIOSModules(void) {
573575
DCFlushRange(modulePath, sizeof(modulePath));
574576

575577
FILE* fp = NULL;
578+
576579
if (!memcmp((char*)(moduleSHA+8), EHCI_SHA1, 0x14)) {
577580
fp = fopen("/rvloader/Hiidra/IOS58/EHCI.app", "rb");
578581
if (fp) {
@@ -883,7 +886,6 @@ static void* bootHiidraThread(void* arg) {
883886
HIIDRA_CFG hcfg = *(HIIDRA_CFG*)arg;
884887
u32 gameIDU32 = *(u32*)(arg + sizeof(HIIDRA_CFG));
885888

886-
static char __usbfs[] ATTRIBUTE_ALIGN(32) = "/dev/usbfs";
887889
static char __di[] ATTRIBUTE_ALIGN(32) = "/dev/di";
888890
static char __bt[] ATTRIBUTE_ALIGN(32) = "/dev/usb/oh1/57e/305";
889891

@@ -892,8 +894,8 @@ static void* bootHiidraThread(void* arg) {
892894
uint8_t* kernelModule;
893895
uint8_t* usbfsModule;
894896
uint8_t* fspluginModule;
895-
uint8_t* modulesUSB[6];
896-
u32 modulesUSBSize[6];
897+
uint8_t* modulesUSB[4];
898+
u32 modulesUSBSize[4];
897899
char* kernelAddress;
898900
u32 totalUSBSize = 0;
899901

@@ -970,15 +972,13 @@ static void* bootHiidraThread(void* arg) {
970972
readFile("/rvloader/Hiidra/IOS58/EHCI.app", &modulesUSB[0], &modulesUSBSize[0]);
971973
readFile("/rvloader/Hiidra/IOS58/OHCI0.app", &modulesUSB[1], &modulesUSBSize[1]);
972974
readFile("/rvloader/Hiidra/IOS58/USB.app", &modulesUSB[2], &modulesUSBSize[2]);
973-
readFile("/rvloader/Hiidra/IOS58/USB_HID.app", &modulesUSB[3], &modulesUSBSize[3]);
974-
readFile("/rvloader/Hiidra/IOS58/USB_HUB.app", &modulesUSB[4], &modulesUSBSize[4]);
975-
readFile("/rvloader/Hiidra/IOS58/USB_VEN.app", &modulesUSB[5], &modulesUSBSize[5]);
975+
readFile("/rvloader/Hiidra/IOS58/USB_VEN.app", &modulesUSB[3], &modulesUSBSize[3]);
976976

977977
readFile("/rvloader/Hiidra/modules/kernel_es.elf", &kernelModule, NULL);
978978
readFile("/rvloader/Hiidra/modules/usbfs.elf", &usbfsModule, NULL);
979979
readFile("/rvloader/Hiidra/modules/fsplugin.elf", &fspluginModule, NULL);
980980

981-
for (int i = 0; i < 6; i++) {
981+
for (int i = 0; i < sizeof(modulesUSBSize) / sizeof(u32); i++) {
982982
totalUSBSize += modulesUSBSize[i];
983983
}
984984

@@ -988,8 +988,8 @@ static void* bootHiidraThread(void* arg) {
988988

989989
printf("Forging custom kernel\n");
990990
hiidraAddLogLine("Forging custom kernel");
991-
const uint8_t* customModules[] = {kernelModule, modulesUSB[0], modulesUSB[1], modulesUSB[2], modulesUSB[3], modulesUSB[4], modulesUSB[5], usbfsModule, fspluginModule};
992-
forgeKernel(kernelAddress, kernelSize, customModules, 9, 0, 1);
991+
const uint8_t* customModules[] = {kernelModule, modulesUSB[0], modulesUSB[1], modulesUSB[2], modulesUSB[3], usbfsModule, fspluginModule};
992+
forgeKernel(kernelAddress, kernelSize, customModules, sizeof(customModules) / sizeof(uint8_t*), 0, 1);
993993

994994
unmountFAT();
995995
printf("Injecting Hiidra bootpoint\n");
@@ -1056,7 +1056,7 @@ static void* bootHiidraThread(void* arg) {
10561056
s32 ret;
10571057
printf("Loading disc game\n");
10581058
hiidraAddLogLine("Loading disc game");
1059-
ret = IOS_Ioctl(fd, 0xF0, gamePath, 0x80, NULL, 0);
1059+
ret = IOS_Ioctl(fd, DIP_IOCTL_DVDLoadGame, gamePath, 0x80, NULL, 0);
10601060
if (ret == 0) {
10611061
printf("Success\n");
10621062
} else {

0 commit comments

Comments
 (0)