u32 DOLRead32(u32 loc, u32 DOLOffset, FILE *f, u32 CurDICMD) { u32 BufAtOffset = 0; if(f != NULL) { fseek(f, DOLOffset+loc, SEEK_SET); fread(&BufAtOffset, 1, 4, f); } else if(CurDICMD) { ReadRealDisc((u8*)&BufAtOffset, DOLOffset+loc, 4, CurDICMD); } return BufAtOffset; }
static u32 DOLRead32(u32 loc, u32 DOLOffset, FIL *f, u32 CurDICMD) { u32 BufAtOffset = 0; if(f != NULL) { UINT read; f_lseek(f, DOLOffset+loc); f_read(f, &BufAtOffset, 4, &read); } else if(CurDICMD) { ReadRealDisc((u8*)&BufAtOffset, DOLOffset+loc, 4, CurDICMD); } return BufAtOffset; }
static u32 DOLRead32(u32 loc, u32 DOLOffset, FIL *f, unsigned int CurDICMD) { u32 BufAtOffset = 0; if(wiiVCInternal) { WDVD_FST_LSeek(DOLOffset+loc); WDVD_FST_Read(wdvdTmpBuf, 4); memcpy(&BufAtOffset, wdvdTmpBuf, 4); } else if(f != NULL) { UINT read; f_lseek(f, DOLOffset+loc); f_read(f, &BufAtOffset, 4, &read); } else if(CurDICMD) ReadRealDisc((u8*)&BufAtOffset, DOLOffset+loc, 4, CurDICMD); return BufAtOffset; }
u32 TRISetupGames(char *Path, u32 CurDICMD, u32 ISOShift) { u32 res = 0; FILE *f = NULL; u32 DOLOffset = 0; if(CurDICMD) { ReadRealDisc((u8*)&DOLOffset, 0x420+ISOShift, 4, CurDICMD); DOLOffset+=ISOShift; } else { char FullPath[300]; snprintf(FullPath, sizeof(FullPath), "%s:%s", GetRootDevice(), Path); f = fopen(FullPath, "rb"); if(f != NULL) { fseek(f, 0x420+ISOShift, SEEK_SET); fread(&DOLOffset, 1, 4, f); DOLOffset+=ISOShift; } else { char FSTPath[300]; snprintf(FSTPath, sizeof(FSTPath), "%ssys/main.dol", FullPath); f = fopen(FSTPath, "rb"); } if(f == NULL) return 0; } char SaveFile[128]; if(DOLRead32(0x210320, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Mario Kart GP1\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_GP1); CreateNewFile(SaveFile, 0x45); } else if(DOLRead32(0x25C0AC, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Mario Kart GP2\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_GP2); CreateNewFile(SaveFile, 0x45); } else if(DOLRead32(0x1821C4, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:F-Zero AX (Unk)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_AX); CreateNewFile(SaveFile, 0xCF); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_AX_UNK); CreateNewFile(SaveFile, 0x2A); } else if(DOLRead32(0x181E60, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:F-Zero AX (Rev C)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_AX); CreateNewFile(SaveFile, 0xCF); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_AX_RVC); CreateNewFile(SaveFile, 0x2A); } else if(DOLRead32(0x18275C, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:F-Zero AX (Rev E)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_AX); CreateNewFile(SaveFile, 0xCF); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_AX_RVE); CreateNewFile(SaveFile, 0x2A); } else if(DOLRead32(0x01C2DF4, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 3 Ver 2002\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS3V02); CreateNewFile(SaveFile, 0x12); } else if(DOLRead32(0x01CF1C4, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 4 (Japan)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS4JAP); CreateNewFile(SaveFile, 0x2B); } else if(DOLRead32(0x1C5514, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 4 (Export)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS4EXP); CreateNewFile(SaveFile, 0x2B); } else if(DOLRead32(0x24B248, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 4 Ver 2006 (Japan)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS4V06JAP); CreateNewFile(SaveFile, 0x2E); } else if(DOLRead32(0x20D7E8, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 4 Ver 2006 (Export)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS4V06EXP); CreateNewFile(SaveFile, 0x2B); } else if(DOLRead32(0x26B3F4, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Gekitou Pro Yakyuu (Rev B)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_YAKRVB); CreateNewFile(SaveFile, 0xF5); } else if(DOLRead32(0x26D9B4, DOLOffset, f, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Gekitou Pro Yakyuu (Rev C)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_YAKRVC); CreateNewFile(SaveFile, 0x100); } if(f != NULL) fclose(f); return res; }
u32 TRISetupGames(char *Path, u32 CurDICMD, u32 ISOShift) { u32 res = 0; u32 DOLOffset = 0; FIL f; FIL *fp = NULL; UINT read; FRESULT fres = FR_DISK_ERR; if(CurDICMD) { ReadRealDisc((u8*)&DOLOffset, 0x420+ISOShift, 4, CurDICMD); DOLOffset+=ISOShift; } else { char FullPath[260]; snprintf(FullPath, sizeof(FullPath), "%s:%s", GetRootDevice(), Path); fres = f_open_char(&f, FullPath, FA_READ|FA_OPEN_EXISTING); if (fres == FR_OK) { f_lseek(&f, 0x420+ISOShift); f_read(&f, &DOLOffset, 4, &read); DOLOffset+=ISOShift; } else { char FSTPath[260]; snprintf(FSTPath, sizeof(FSTPath), "%ssys/main.dol", FullPath); fres = f_open_char(&f, FSTPath, FA_READ|FA_OPEN_EXISTING); } if (fres != FR_OK) return 0; fp = &f; } // Create the save file if it doesn't already exist. char SaveFile[128]; if(DOLRead32(0x210320, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Mario Kart Arcade GP (Feb 14 2006 13:09:48)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_GP1); CreateNewFile(SaveFile, 0x45); } else if(DOLRead32(0x25C0AC, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Mario Kart Arcade GP 2 (Feb 7 2007 02:47:24)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_GP2); CreateNewFile(SaveFile, 0x45); } else if(DOLRead32(0x181E60, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:F-Zero AX (Rev C)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_AX); CreateNewFile(SaveFile, 0xCF); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_AX_RVC); CreateNewFile(SaveFile, 0x2A); } else if(DOLRead32(0x1821C4, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:F-Zero AX (Rev D)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_AX); CreateNewFile(SaveFile, 0xCF); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_AX_RVD); CreateNewFile(SaveFile, 0x2A); } else if(DOLRead32(0x18275C, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:F-Zero AX (Rev E)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), CARD_NAME_AX); CreateNewFile(SaveFile, 0xCF); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_AX_RVE); CreateNewFile(SaveFile, 0x2A); } else if(DOLRead32(0x01C2DF4, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 3 Ver 2002\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS3V02); CreateNewFile(SaveFile, 0x12); } else if(DOLRead32(0x01CF1C4, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 4 (Japan)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS4JAP); CreateNewFile(SaveFile, 0x2B); } else if(DOLRead32(0x1C5514, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 4 (Export)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS4EXP); CreateNewFile(SaveFile, 0x2B); } else if(DOLRead32(0x24B248, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 4 Ver 2006 (Japan)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS4V06JAP); CreateNewFile(SaveFile, 0x2E); } else if(DOLRead32(0x20D7E8, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Virtua Striker 4 Ver 2006 (Export)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_VS4V06EXP); CreateNewFile(SaveFile, 0x2B); } else if(DOLRead32(0x26B3F4, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Gekitou Pro Yakyuu (Rev B)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_YAKRVB); CreateNewFile(SaveFile, 0xF5); } else if(DOLRead32(0x26D9B4, DOLOffset, fp, CurDICMD) == 0x386000A8) { res = 1; gprintf("TRI:Gekitou Pro Yakyuu (Rev C)\r\n"); snprintf(SaveFile, sizeof(SaveFile), "%s:%s", GetRootDevice(), SETTINGS_YAKRVC); CreateNewFile(SaveFile, 0x100); } if (fres == FR_OK) f_close(&f); return res; }