mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-12-28 12:51:52 +01:00
-fixed booting wii games from disc
-moved a few debug prints, also added disc id check for wii games playing from a wbfs partition (before it just checked on fat32, ntfs and ext2 if the readed in disc is correctly opened from cIOS) -made ogg lib using MEM2 only (as we did in the previous update with the sound buffers)
This commit is contained in:
parent
971b5bdb52
commit
4932949a3a
Binary file not shown.
@ -198,7 +198,7 @@ s32 Disc_FindPartition(u64 *outbuf)
|
||||
u64 offset = 0;
|
||||
u32 cnt;
|
||||
|
||||
u32 *TMP_Buffer = (u32*)malloc(TMP_Buffer_size);
|
||||
u32 *TMP_Buffer = (u32*)memalign(32, TMP_Buffer_size);
|
||||
if(!TMP_Buffer)
|
||||
return -1;
|
||||
|
||||
@ -303,13 +303,18 @@ s32 Disc_Wait(void)
|
||||
|
||||
s32 Disc_SetUSB(const u8 *id, bool frag)
|
||||
{
|
||||
if(id && frag)
|
||||
return set_frag_list((u8 *) id);
|
||||
|
||||
s32 part = -1;
|
||||
if(is_ios_type(IOS_TYPE_HERMES, IOS_GetVersion()))
|
||||
part = wbfs_part_idx ? wbfs_part_idx - 1 : 0;
|
||||
return WDVD_SetUSBMode(wbfsDev, (u8*)id, part);
|
||||
/* ENABLE USB in cIOS */
|
||||
if(id)
|
||||
{
|
||||
if(frag)
|
||||
return set_frag_list();
|
||||
s32 part = -1;
|
||||
if(is_ios_type(IOS_TYPE_HERMES, IOS_GetVersion()))
|
||||
part = wbfs_part_idx ? wbfs_part_idx - 1 : 0;
|
||||
return WDVD_SetUSBMode(wbfsDev, (u8*)id, part);
|
||||
}
|
||||
/* DISABLE USB in cIOS */
|
||||
return WDVD_SetUSBMode(0, NULL, -1);
|
||||
}
|
||||
|
||||
s32 Disc_ReadHeader(void *outbuf)
|
||||
|
@ -241,7 +241,7 @@ int get_frag_list(u8 *id, char *path, const u32 hdd_sector_size)
|
||||
frag_concat(fa, fs);
|
||||
}
|
||||
|
||||
frag_list = malloc(ALIGN32(sizeof(FragList)));
|
||||
frag_list = malloc(sizeof(FragList));
|
||||
if(frag_list == NULL)
|
||||
goto out;
|
||||
|
||||
@ -297,7 +297,7 @@ out:
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
int set_frag_list(u8 *id)
|
||||
int set_frag_list()
|
||||
{
|
||||
if (frag_list == NULL)
|
||||
return -2;
|
||||
@ -317,12 +317,5 @@ int set_frag_list(u8 *id)
|
||||
|
||||
if(ret)
|
||||
return ret;
|
||||
|
||||
// verify id matches
|
||||
char discid[32] ATTRIBUTE_ALIGN(32);
|
||||
memset(discid, 0, sizeof(discid));
|
||||
|
||||
ret = WDVD_UnencryptedRead(discid, 32, 0);
|
||||
gprintf("Reading ID after setting fraglist: %s (expected: %s)\n", discid, id);
|
||||
return (strncasecmp((char *) id, discid, 6) != 0) ? -3 : 0;
|
||||
return 0;
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ int frag_get(FragList *ff, u32 offset, u32 count,
|
||||
|
||||
int frag_remap(FragList *ff, FragList *log, FragList *phy);
|
||||
int get_frag_list(u8 *id, char *path, const u32 hdd_sector_size);
|
||||
int set_frag_list(u8 *id);
|
||||
int set_frag_list();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -300,19 +300,21 @@ s32 WDVD_SetUSBMode(u32 mode, const u8 *id, s32 partition)
|
||||
|
||||
/* Set USB mode */
|
||||
inbuf[0] = IOCTL_DI_SETWBFSMODE << 24;
|
||||
inbuf[1] = (id) ? mode : 0;
|
||||
inbuf[1] = mode;
|
||||
|
||||
/* Copy ID */
|
||||
if (id)
|
||||
if(id)
|
||||
{
|
||||
memcpy(&inbuf[2], id, 6);
|
||||
if(partition >= 0) inbuf[5] = partition;
|
||||
if(partition >= 0)
|
||||
inbuf[5] = partition;
|
||||
}
|
||||
|
||||
s32 ret = IOS_Ioctl(di_fd, IOCTL_DI_SETWBFSMODE, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf));
|
||||
|
||||
if (ret < 0) return ret;
|
||||
return (ret == 1) ? 0 : -ret;
|
||||
if(ret < 0)
|
||||
return ret;
|
||||
return(ret == 1) ? 0 : -ret;
|
||||
}
|
||||
|
||||
s32 WDVD_Read_Disc_BCA(void *buf)
|
||||
|
@ -1185,7 +1185,7 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
||||
else
|
||||
{
|
||||
/* Read GC disc header */
|
||||
struct gc_discHdr *gcHeader = (struct gc_discHdr *)malloc(sizeof(struct gc_discHdr));
|
||||
struct gc_discHdr *gcHeader = (struct gc_discHdr *)memalign(32, sizeof(struct gc_discHdr));
|
||||
Disc_ReadGCHeader(gcHeader);
|
||||
strncpy(hdr->id, (char*)gcHeader->id, 6);
|
||||
free(gcHeader);
|
||||
@ -1196,7 +1196,7 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
||||
else
|
||||
{
|
||||
/* Read header */
|
||||
struct discHdr *header = (struct discHdr *)malloc(sizeof(struct discHdr));
|
||||
struct discHdr *header = (struct discHdr *)memalign(32, sizeof(struct discHdr));
|
||||
Disc_ReadHeader(header);
|
||||
id = string((const char*)header->id);
|
||||
free(header);
|
||||
@ -1358,7 +1358,6 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
||||
}
|
||||
IOSReloadBlock(IOS_GetVersion(), true);
|
||||
}
|
||||
|
||||
if(emulate_mode && !neek2o())
|
||||
{
|
||||
Nand::Instance()->Init(emuPath.c_str(), emuPartition, false);
|
||||
@ -1370,7 +1369,6 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
||||
Nand::Instance()->Set_FullMode(true);
|
||||
else
|
||||
Nand::Instance()->Set_FullMode(false);
|
||||
|
||||
if(Nand::Instance()->Enable_Emu() < 0)
|
||||
{
|
||||
Nand::Instance()->Disable_Emu();
|
||||
@ -1385,21 +1383,23 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
||||
if(!dvd)
|
||||
{
|
||||
s32 ret = Disc_SetUSB((u8*)id.c_str(), !wbfs_partition);
|
||||
if (ret < 0)
|
||||
if(ret < 0)
|
||||
{
|
||||
gprintf("Set USB failed: %d\n", ret);
|
||||
error(wfmt(_fmt("errgame10", L"Set USB failed: %d"), ret));
|
||||
if (iosLoaded) Sys_LoadMenu();
|
||||
if(iosLoaded)
|
||||
Sys_LoadMenu();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Disc_Open(false) < 0)
|
||||
if(Disc_Open(false) < 0)
|
||||
{
|
||||
error(_t("wbfsoperr2", L"Disc_Open failed"));
|
||||
if (iosLoaded) Sys_LoadMenu();
|
||||
if(iosLoaded)
|
||||
Sys_LoadMenu();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Find game partition offset */
|
||||
u64 offset;
|
||||
s32 ret = Disc_FindPartition(&offset);
|
||||
@ -1412,6 +1412,14 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
||||
shadow_mload();
|
||||
#endif
|
||||
|
||||
/* Last check if the Disc ID is correct */
|
||||
char discid[32] ATTRIBUTE_ALIGN(32);
|
||||
memset(discid, 0, sizeof(discid));
|
||||
WDVD_UnencryptedRead(discid, 32, 0);
|
||||
gprintf("WDVD_UnencryptedRead ID: %s (expected: %s)\n", discid, id.c_str());
|
||||
if(strncasecmp(id.c_str(), discid, 6) != 0)
|
||||
return;
|
||||
|
||||
RunApploader(offset, videoMode, vipatch, countryPatch, patchVidMode, aspectRatio, returnTo);
|
||||
gprintf("Booting game\n");
|
||||
Disc_BootPartition();
|
||||
|
Loading…
Reference in New Issue
Block a user