mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-12-24 02:41:55 +01:00
-added option to disable IOS reload block for wii games and channels
This commit is contained in:
parent
0dac7f7b27
commit
aa5c1acba5
@ -37,7 +37,7 @@ typedef struct _dolheader{
|
||||
|
||||
u32 entryPoint;
|
||||
|
||||
s32 BootChannel(u8 *data, u64 chantitle, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode)
|
||||
s32 BootChannel(u8 *data, u64 chantitle, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, bool disableIOSreload)
|
||||
{
|
||||
u32 ios;
|
||||
Identify(chantitle, &ios);
|
||||
@ -60,7 +60,10 @@ s32 BootChannel(u8 *data, u64 chantitle, u8 vidMode, bool vipatch, bool countryS
|
||||
|
||||
entrypoint appJump = (entrypoint)entryPoint;
|
||||
|
||||
IOSReloadBlock(IOS_GetVersion());
|
||||
if (disableIOSreload)
|
||||
IOSReloadBlock(IOS_GetVersion(), false);
|
||||
else
|
||||
IOSReloadBlock(IOS_GetVersion(), true);
|
||||
|
||||
/* Set an appropriate video mode */
|
||||
__Disc_SetVMode();
|
||||
|
@ -8,7 +8,7 @@ extern "C" {
|
||||
#include <gctypes.h>
|
||||
#include <gccore.h>
|
||||
|
||||
s32 BootChannel(u8 *data, u64 chantitle, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode);
|
||||
s32 BootChannel(u8 *data, u64 chantitle, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, bool disableIOSreload);
|
||||
|
||||
u32 LoadChannel(u8 *buffer);
|
||||
void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes);
|
||||
|
@ -103,9 +103,9 @@ u8 Channels::GetRequestedIOS(u64 title)
|
||||
return IOS;
|
||||
}
|
||||
|
||||
bool Channels::Launch(u8 *data, u64 chantitle, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode)
|
||||
bool Channels::Launch(u8 *data, u64 chantitle, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, bool disableIOSreload)
|
||||
{
|
||||
return BootChannel(data, chantitle, vidMode, vipatch, countryString, patchVidMode);
|
||||
return BootChannel(data, chantitle, vidMode, vipatch, countryString, patchVidMode, disableIOSreload);
|
||||
}
|
||||
|
||||
u64* Channels::GetChannelList(u32* count)
|
||||
|
@ -56,7 +56,7 @@ class Channels
|
||||
|
||||
u8 * Load(u64 title, char* id);
|
||||
u8 GetRequestedIOS(u64 title);
|
||||
bool Launch(u8 *data, u64 chantitle, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode);
|
||||
bool Launch(u8 *data, u64 chantitle, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, bool disableIOSreload);
|
||||
|
||||
int Count();
|
||||
wchar_t *GetName(int index);
|
||||
|
@ -339,11 +339,14 @@ s32 Disc_IsGC(void)
|
||||
return Disc_Type(1);
|
||||
}
|
||||
|
||||
s32 Disc_BootPartition(u64 offset, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode)
|
||||
s32 Disc_BootPartition(u64 offset, u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, bool disableIOSreload)
|
||||
{
|
||||
entry_point p_entry;
|
||||
|
||||
IOSReloadBlock(IOS_GetVersion());
|
||||
if (disableIOSreload)
|
||||
IOSReloadBlock(IOS_GetVersion(), false);
|
||||
else
|
||||
IOSReloadBlock(IOS_GetVersion(), true);
|
||||
|
||||
s32 ret = WDVD_OpenPartition(offset, 0, 0, 0, Tmd_Buffer);
|
||||
if (ret < 0) return ret;
|
||||
@ -422,7 +425,7 @@ s32 Disc_BootPartition(u64 offset, u8 vidMode, bool vipatch, bool countryString,
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Disc_WiiBoot(u8 vidMode, bool vipatch, bool countryString, u8 patchVidModes)
|
||||
s32 Disc_WiiBoot(u8 vidMode, bool vipatch, bool countryString, u8 patchVidModes, bool disableIOSreload)
|
||||
{
|
||||
u64 offset;
|
||||
|
||||
@ -431,5 +434,5 @@ s32 Disc_WiiBoot(u8 vidMode, bool vipatch, bool countryString, u8 patchVidModes)
|
||||
if (ret < 0) return ret;
|
||||
|
||||
/* Boot partition */
|
||||
return Disc_BootPartition(offset, vidMode, vipatch, countryString, patchVidModes);
|
||||
return Disc_BootPartition(offset, vidMode, vipatch, countryString, patchVidModes, disableIOSreload);
|
||||
}
|
||||
|
@ -102,8 +102,8 @@ extern "C" {
|
||||
s32 Disc_Type(bool);
|
||||
s32 Disc_IsWii(void);
|
||||
s32 Disc_IsGC(void);
|
||||
s32 Disc_BootPartition(u64, u8, bool, bool, u8);
|
||||
s32 Disc_WiiBoot(u8, bool, bool, u8);
|
||||
s32 Disc_BootPartition(u64, u8, bool, bool, u8, bool);
|
||||
s32 Disc_WiiBoot(u8, bool, bool, u8, bool);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -246,32 +246,34 @@ void vidolpatcher(void *addr, u32 len)
|
||||
}
|
||||
}
|
||||
|
||||
s32 IOSReloadBlock(u8 reqios)
|
||||
s32 IOSReloadBlock(u8 reqios, bool enable)
|
||||
{
|
||||
s32 ESHandle = IOS_Open("/dev/es", 0);
|
||||
s32 ESHandle = IOS_Open("/dev/es", 0);
|
||||
|
||||
if (ESHandle < 0)
|
||||
{
|
||||
gprintf("Reload IOS Block failed, cannot open /dev/es\n");
|
||||
return ESHandle;
|
||||
}
|
||||
if (ESHandle < 0)
|
||||
{
|
||||
gprintf("Reload IOS Block failed, cannot open /dev/es\n");
|
||||
return ESHandle;
|
||||
}
|
||||
|
||||
static ioctlv vector[2] ATTRIBUTE_ALIGN(32);
|
||||
static u32 mode ATTRIBUTE_ALIGN(32);
|
||||
static u32 ios ATTRIBUTE_ALIGN(32);
|
||||
static ioctlv vector[2] ATTRIBUTE_ALIGN(32);
|
||||
static u32 mode ATTRIBUTE_ALIGN(32);
|
||||
static u32 ios ATTRIBUTE_ALIGN(32);
|
||||
|
||||
mode = 2;
|
||||
vector[0].data = &mode;
|
||||
vector[0].len = sizeof(u32);
|
||||
mode = enable ? 2 : 0;
|
||||
vector[0].data = &mode;
|
||||
vector[0].len = sizeof(u32);
|
||||
|
||||
ios = reqios;
|
||||
vector[1].data = &ios;
|
||||
vector[1].len = sizeof(u32);
|
||||
if (enable) {
|
||||
ios = reqios;
|
||||
vector[1].data = &ios;
|
||||
vector[1].len = sizeof(u32);
|
||||
}
|
||||
|
||||
s32 r = IOS_Ioctlv(ESHandle, 0xA0, 2, 0, vector);
|
||||
gprintf("Enable/Disable Block IOS Reload for cIOS%uv%u %s\n", IOS_GetVersion(), IOS_GetRevision() % 100, r < 0 ? "FAILED!" : "SUCCEEDED!");
|
||||
s32 r = IOS_Ioctlv(ESHandle, 0xA0, 2, 0, vector);
|
||||
gprintf("Enable/Disable Block IOS Reload for cIOS%uv%u %s\n", IOS_GetVersion(), IOS_GetRevision() % 100, r < 0 ? "FAILED!" : "SUCCEEDED!");
|
||||
|
||||
IOS_Close(ESHandle);
|
||||
IOS_Close(ESHandle);
|
||||
|
||||
return r;
|
||||
return r;
|
||||
}
|
@ -33,7 +33,7 @@ u8 configbytes[2];
|
||||
bool dogamehooks(void *addr, u32 len, bool channel);
|
||||
void langpatcher(void *addr, u32 len);
|
||||
void vidolpatcher(void *addr, u32 len);
|
||||
s32 IOSReloadBlock(u8 reqios);
|
||||
s32 IOSReloadBlock(u8 reqios, bool enable);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -324,10 +324,15 @@ private:
|
||||
u32 m_gameSettingsLblVideo;
|
||||
u32 m_gameSettingsBtnVideoP;
|
||||
u32 m_gameSettingsBtnVideoM;
|
||||
|
||||
u32 m_gameSettingsLblDMLGameVideo;
|
||||
u32 m_gameSettingsLblDMLVideo;
|
||||
u32 m_gameSettingsBtnDMLVideoP;
|
||||
u32 m_gameSettingsBtnDMLVideoM;
|
||||
|
||||
u32 m_gameSettingsLblIOSreloadBlock;
|
||||
u32 m_gameSettingsBtnIOSreloadBlock;
|
||||
|
||||
u32 m_gameSettingsLblOcarina;
|
||||
u32 m_gameSettingsBtnOcarina;
|
||||
u32 m_gameSettingsLblVipatch;
|
||||
|
@ -36,6 +36,8 @@ void CMenu::_hideGameSettings(bool instant)
|
||||
m_btnMgr.hide(m_gameSettingsLblDMLVideo, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnDMLVideoP, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnDMLVideoM, instant);
|
||||
m_btnMgr.hide(m_gameSettingsLblIOSreloadBlock, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnIOSreloadBlock, instant);
|
||||
m_btnMgr.hide(m_gameSettingsLblOcarina, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnOcarina, instant);
|
||||
m_btnMgr.hide(m_gameSettingsLblCheat, instant);
|
||||
@ -247,6 +249,12 @@ void CMenu::_showGameSettings(void)
|
||||
m_btnMgr.show(m_gameSettingsLblIOS);
|
||||
m_btnMgr.show(m_gameSettingsBtnIOSP);
|
||||
m_btnMgr.show(m_gameSettingsBtnIOSM);
|
||||
|
||||
if (m_current_view != COVERFLOW_HOMEBREW)
|
||||
{
|
||||
m_btnMgr.show(m_gameSettingsLblIOSreloadBlock);
|
||||
m_btnMgr.show(m_gameSettingsBtnIOSreloadBlock);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -254,6 +262,9 @@ void CMenu::_showGameSettings(void)
|
||||
m_btnMgr.hide(m_gameSettingsLblIOS);
|
||||
m_btnMgr.hide(m_gameSettingsBtnIOSP);
|
||||
m_btnMgr.hide(m_gameSettingsBtnIOSM);
|
||||
|
||||
m_btnMgr.hide(m_gameSettingsLblIOSreloadBlock);
|
||||
m_btnMgr.hide(m_gameSettingsBtnIOSreloadBlock);
|
||||
}
|
||||
|
||||
|
||||
@ -326,6 +337,7 @@ void CMenu::_showGameSettings(void)
|
||||
m_btnMgr.setText(m_gameSettingsBtnOcarina, _optBoolToString(m_gcfg2.getOptBool(id, "cheat")));
|
||||
m_btnMgr.setText(m_gameSettingsBtnVipatch, _optBoolToString(m_gcfg2.getOptBool(id, "vipatch", 0)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnCountryPatch, _optBoolToString(m_gcfg2.getOptBool(id, "country_patch", 0)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnIOSreloadBlock, _optBoolToString(m_gcfg2.getOptBool(id, "reload_block", 0)));
|
||||
i = min((u32)m_gcfg2.getInt(id, "video_mode", 0), ARRAY_SIZE(CMenu::_videoModes) - 1u);
|
||||
m_btnMgr.setText(m_gameSettingsLblVideo, _t(CMenu::_videoModes[i].id, CMenu::_videoModes[i].text));
|
||||
i = min((u32)m_gcfg2.getInt(id, "dml_video_mode", 0), ARRAY_SIZE(CMenu::_DMLvideoModes) - 1u);
|
||||
@ -439,6 +451,15 @@ void CMenu::_gameSettings(void)
|
||||
m_gcfg2.setBool(id, "country_patch", true);
|
||||
_showGameSettings();
|
||||
}
|
||||
else if (m_btnMgr.selected(m_gameSettingsBtnIOSreloadBlock))
|
||||
{
|
||||
bool booloption = m_gcfg2.getBool(id, "reload_block");
|
||||
if (booloption != false)
|
||||
m_gcfg2.remove(id, "reload_block");
|
||||
else
|
||||
m_gcfg2.setBool(id, "reload_block", true);
|
||||
_showGameSettings();
|
||||
}
|
||||
else if (m_btnMgr.selected(m_gameSettingsBtnLanguageP) || m_btnMgr.selected(m_gameSettingsBtnLanguageM))
|
||||
{
|
||||
s8 direction = m_btnMgr.selected(m_gameSettingsBtnLanguageP) ? 1 : -1;
|
||||
@ -564,6 +585,7 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
|
||||
_addUserLabels(theme, m_gameSettingsLblUser, ARRAY_SIZE(m_gameSettingsLblUser), "GAME_SETTINGS");
|
||||
m_gameSettingsBg = _texture(theme.texSet, "GAME_SETTINGS/BG", "texture", theme.bg);
|
||||
m_gameSettingsLblTitle = _addLabel(theme, "GAME_SETTINGS/TITLE", theme.titleFont, L"", 20, 30, 600, 60, theme.titleFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE);
|
||||
|
||||
// Page 1
|
||||
m_gameSettingsLblCover = _addLabel(theme, "GAME_SETTINGS/COVER", theme.lblFont, L"", 40, 130, 290, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnCover = _addButton(theme, "GAME_SETTINGS/COVER_BTN", theme.btnFont, L"", 330, 130, 270, 56, theme.btnFontColor);
|
||||
@ -599,6 +621,7 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
|
||||
m_gameSettingsBtnOcarina = _addButton(theme, "GAME_SETTINGS/OCARINA_BTN", theme.btnFont, L"", 330, 250, 270, 56, theme.btnFontColor);
|
||||
m_gameSettingsLblCheat = _addLabel(theme, "GAME_SETTINGS/CHEAT", theme.lblFont, L"", 40, 310, 290, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnCheat = _addButton(theme, "GAME_SETTINGS/CHEAT_BTN", theme.btnFont, L"", 330, 310, 270, 56, theme.btnFontColor);
|
||||
|
||||
// Page 3
|
||||
m_gameSettingsLblCountryPatch = _addLabel(theme, "GAME_SETTINGS/COUNTRY_PATCH", theme.lblFont, L"", 40, 130, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnCountryPatch = _addButton(theme, "GAME_SETTINGS/COUNTRY_PATCH_BTN", theme.btnFont, L"", 380, 130, 220, 56, theme.btnFontColor);
|
||||
@ -620,6 +643,9 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
|
||||
m_gameSettingsBtnIOSM = _addPicButton(theme, "GAME_SETTINGS/IOS_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 380, 130, 56, 56);
|
||||
m_gameSettingsBtnIOSP = _addPicButton(theme, "GAME_SETTINGS/IOS_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 544, 130, 56, 56);
|
||||
|
||||
m_gameSettingsLblIOSreloadBlock = _addLabel(theme, "GAME_SETTINGS/IOS_RELOAD_BLOCK", theme.lblFont, L"", 40, 190, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnIOSreloadBlock = _addButton(theme, "GAME_SETTINGS/IOS_RELOAD_BLOCK_BTN", theme.btnFont, L"", 380, 190, 220, 56, theme.btnFontColor);
|
||||
|
||||
//Categories Page 1
|
||||
//m_gameSettingsLblCategory[0] = _addLabel(theme, "GAME_SETTINGS/CAT_ALL", theme.lblFont, L"All", 40, 130, 290, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
//m_gameSettingsBtnCategory[0] = _addButton(theme, "GAME_SETTINGS/CAT_ALL_BTN", theme.btnFont, L"", 330, 130, 270, 56, theme.btnFontColor);
|
||||
@ -662,6 +688,8 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
|
||||
_setHideAnim(m_gameSettingsLblVideo, "GAME_SETTINGS/VIDEO_BTN", 200, 0, 1.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnVideoM, "GAME_SETTINGS/VIDEO_MINUS", 200, 0, 1.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnVideoP, "GAME_SETTINGS/VIDEO_PLUS", 200, 0, 1.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsLblIOSreloadBlock, "GAME_SETTINGS/IOS_RELOAD_BLOCK", -200, 0, 1.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnIOSreloadBlock, "GAME_SETTINGS/IOS_RELOAD_BLOCK_BTN", 200, 0, 1.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsLblDMLGameVideo, "GAME_SETTINGS/DML_VIDEO", -200, 0, 1.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsLblDMLVideo, "GAME_SETTINGS/DML_VIDEO_BTN", 200, 0, 1.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnDMLVideoM, "GAME_SETTINGS/DML_VIDEO_MINUS", 200, 0, 1.f, 0.f);
|
||||
@ -726,6 +754,7 @@ void CMenu::_textGameSettings(void)
|
||||
m_btnMgr.setText(m_gameSettingsLblCountryPatch, _t("cfgg4", L"Patch country strings"));
|
||||
m_btnMgr.setText(m_gameSettingsLblOcarina, _t("cfgg5", L"Ocarina"));
|
||||
m_btnMgr.setText(m_gameSettingsLblDMLGameVideo, _t("cfgg2", L"Video mode"));
|
||||
m_btnMgr.setText(m_gameSettingsLblIOSreloadBlock, (L"Disable IOS Reload block"));
|
||||
m_btnMgr.setText(m_gameSettingsLblVipatch, _t("cfgg7", L"Vipatch"));
|
||||
m_btnMgr.setText(m_gameSettingsBtnBack, _t("cfgg8", L"Back"));
|
||||
m_btnMgr.setText(m_gameSettingsLblGameIOS, _t("cfgg10", L"IOS"));
|
||||
|
@ -654,7 +654,8 @@ void CMenu::_launchChannel(dir_discHdr *hdr)
|
||||
int language = min((u32)m_gcfg2.getInt(id, "language", 0), ARRAY_SIZE(CMenu::_languages) - 1u);
|
||||
const char *rtrn = m_gcfg2.getBool(id, "returnto", true) ? m_cfg.getString("GENERAL", "returnto").c_str() : NULL;
|
||||
u8 patchVidMode = min((u32)m_gcfg2.getInt(id, "patch_video_modes", 0), ARRAY_SIZE(CMenu::_vidModePatch) - 1u);
|
||||
|
||||
bool disableIOSreload = m_gcfg2.testOptBool(id, "reload_block", m_cfg.getBool("GENERAL", "reload_block", false));
|
||||
|
||||
int gameIOS = 0;
|
||||
|
||||
if(!forwarder)
|
||||
@ -799,7 +800,7 @@ void CMenu::_launchChannel(dir_discHdr *hdr)
|
||||
if (WII_LaunchTitle(hdr->hdr.chantitle) < 0)
|
||||
Sys_LoadMenu();
|
||||
}
|
||||
else if(!channel.Launch(data, hdr->hdr.chantitle, videoMode, vipatch, countryPatch, patchVidMode))
|
||||
else if(!channel.Launch(data, hdr->hdr.chantitle, videoMode, vipatch, countryPatch, patchVidMode, disableIOSreload))
|
||||
Sys_LoadMenu();
|
||||
}
|
||||
|
||||
@ -859,7 +860,8 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
||||
u8 videoMode = (u8)min((u32)m_gcfg2.getInt(id, "video_mode", 0), ARRAY_SIZE(CMenu::_videoModes) - 1u);
|
||||
int language = min((u32)m_gcfg2.getInt(id, "language", 0), ARRAY_SIZE(CMenu::_languages) - 1u);
|
||||
const char *rtrn = m_gcfg2.getBool(id, "returnto", true) ? m_cfg.getString("GENERAL", "returnto").c_str() : NULL;
|
||||
|
||||
bool disableIOSreload = m_gcfg2.testOptBool(id, "reload_block", m_cfg.getBool("GENERAL", "reload_block", false));
|
||||
|
||||
int emuPartition = m_cfg.getInt("GAMES", "savepartition", -1);
|
||||
if(emuPartition == -1)
|
||||
emuPartition = m_cfg.getInt("NAND", "partition", -1);
|
||||
@ -1057,7 +1059,7 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
||||
else
|
||||
{
|
||||
gprintf("Booting game\n");
|
||||
if (Disc_WiiBoot(videoMode, vipatch, countryPatch, patchVidMode) < 0)
|
||||
if (Disc_WiiBoot(videoMode, vipatch, countryPatch, patchVidMode, disableIOSreload) < 0)
|
||||
Sys_LoadMenu();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user