-corrected a few wrong things from r673

-use the devolution sample loader device mount way to read the iso
(may fixes bugs in booting devolution)
This commit is contained in:
fix94.1 2012-08-24 13:50:17 +00:00
parent 6723f00181
commit 99a2f9faad
11 changed files with 61 additions and 73 deletions

View File

@ -36,14 +36,12 @@
#include <malloc.h>
#include "nand.hpp"
#include "devicemounter/DeviceHandler.hpp"
#include "fileOps/fileOps.h"
#include "gecko/gecko.h"
#include "loader/alt_ios.h"
#include "loader/cios.h"
#include "loader/sys.h"
#include "loader/wbfs.h"
#include "music/musicplayer.h"
#include "memory/memory.h"
u8 *confbuffer ATTRIBUTE_ALIGN(32);
@ -160,12 +158,7 @@ s32 Nand::Enable_Emu()
if(emu_enabled)
return 0;
if(CurrentIOS.Type == IOS_TYPE_NORMAL_IOS)
{
m_music.Stop();
loadIOS(mainIOS, false, false);
DeviceHandler::Instance()->MountAll();
m_music.Next();
}
NandDevice *Device = &NandDeviceList[EmuDevice];

View File

@ -115,36 +115,34 @@ void DeviceHandler::UnMount(int dev)
UnMountUSB(dev-USB1);
}
void DeviceHandler::SetModes()
{
/* Set for USB */
if(CurrentIOS.Type == IOS_TYPE_NORMAL_IOS)
usb_libogc_mode = 1;
else
usb_libogc_mode = 0;
/* Set for SD */
if(CurrentIOS.Type == IOS_TYPE_D2X)
sdhc_mode_sd = 0;
else
sdhc_mode_sd = 1;
}
bool DeviceHandler::MountSD()
{
if(sd)
if(!sd)
sd = new PartitionHandle(&__io_sdhc);
if(sd && sd->GetPartitionCount() < 1)
{
delete sd;
sd = NULL;
}
sd = new PartitionHandle(&__io_sdhc);
if(sd->GetPartitionCount() < 1)
{
delete sd;
sdhc_mode_sd = 1;
gprintf("Couldn't find SD Card. Trying __io_wiisd mode\n");
sd = new PartitionHandle(&__io_sdhc);
}
if(sd->GetPartitionCount() < 1)
{
delete sd;
sd = NULL;
sdhc_mode_sd = 0;
gprintf("SD Card not found.\n");
return false;
}
gprintf("SD Card found.\n");
//! Mount only one SD Partition
return sd->Mount(0, DeviceName[SD], true);
}
bool DeviceHandler::MountUSB(int pos)
{
if(!usb0 && !usb1)
@ -165,36 +163,21 @@ bool DeviceHandler::MountUSB(int pos)
bool DeviceHandler::MountAllUSB()
{
if(CurrentIOS.Type == IOS_TYPE_NORMAL_IOS)
usb_libogc_mode = 1;
else
usb_libogc_mode = 0;
if(!usb0)
usb0 = new PartitionHandle(GetUSB0Interface());
//if(!usb1 && (Settings.USBPort == 1 || Settings.USBPort == 2))
//usb1 = new PartitionHandle(GetUSB1Interface());
if(usb0 && usb0->GetPartitionCount() < 1)
{
delete usb0;
usb0 = NULL;
return false;
}
if(usb1 && usb1->GetPartitionCount() < 1)
{
delete usb1;
usb1 = NULL;
}
bool result = false;
int partCount = GetUSBPartitionCount();
for(int i = 0; i < partCount; i++)
{
if(MountUSB(i))
result = true;
}
return result;
}

View File

@ -69,6 +69,8 @@ class DeviceHandler
static DeviceHandler * Instance();
static void DestroyInstance();
void SetModes();
void MountAll();
void UnMountAll();
bool Mount(int dev);

View File

@ -20,6 +20,7 @@
#include <string.h>
#include <malloc.h>
#include <ogc/machine/processor.h>
#include <sdcard/wiisd_io.h>
// for directory parsing and low-level file I/O
#include <sys/types.h>
@ -28,6 +29,7 @@
#include <dirent.h>
#include "gc/gc.hpp"
#include "fat.h"
#include "gecko/gecko.h"
#include "fileOps/fileOps.h"
#include "loader/utils.h"
@ -182,12 +184,7 @@ bool DEVO_Installed(const char* path)
return devo;
}
void DEVO_ShowReport(void)
{
gprintf("%s\n", (char*)loader_bin + 4);
}
void DEVO_SetOptions(const char *isopath, const char *partition, const char *loader, const char *gameID, bool memcard_emu)
void DEVO_GetLoader(const char *loader)
{
//Read in loader.bin
char loader_path[256];
@ -209,8 +206,13 @@ void DEVO_SetOptions(const char *isopath, const char *partition, const char *loa
gprintf("Devolution loader.bin not found!\n");
return;
}
gprintf("%s\n", (char*)loader_bin + 4);
}
DEVO_ShowReport();
void DEVO_SetOptions(const char *isopath, const char *partition, const char *gameID, bool memcard_emu)
{
// re-mount device we need
fatMountSimple(partition, strncasecmp(partition, "sd", 2) ? &__io_usbstorage : &__io_wiisd);
//start writing cfg to mem
struct stat st;
@ -218,7 +220,7 @@ void DEVO_SetOptions(const char *isopath, const char *partition, const char *loa
char iso2path[256];
stat(isopath, &st);
f = fopen(isopath, "rb");
FILE *f = fopen(isopath, "rb");
gprintf("Read ISO File: \"%s\"\n", isopath);
fread((u8*)0x80000000, 1, 32, f);
fclose(f);
@ -296,6 +298,8 @@ void DEVO_SetOptions(const char *isopath, const char *partition, const char *loa
// flush disc ID and Devolution config out to memory
DCFlushRange((void*)0x80000000, 64);
fatUnmount(partition);
}
void DEVO_Boot()

View File

@ -80,8 +80,8 @@ typedef struct global_config
} gconfig;
bool DEVO_Installed(const char *path);
void DEVO_ShowReport(void);
void DEVO_SetOptions(const char *isopath, const char *partition, const char *loader, const char *gameID, bool memcard_emum);
void DEVO_GetLoader(const char *loader);
void DEVO_SetOptions(const char *isopath, const char *partition, const char *gameID, bool memcard_emum);
void DEVO_Boot();
// General

View File

@ -14,6 +14,7 @@
#include "gecko/gecko.h"
#include "memory/mem2.hpp"
#include "memory/memory.h"
#include "music/musicplayer.h"
#include "types.h"
// mload from uloader by Hermes
@ -81,15 +82,16 @@ void load_dip_249()
bool loadIOS(int ios, bool launch_game, bool emu_channel)
{
#ifndef DOLPHIN
bool iosOK = true;
if(ios != IOS_GetVersion())
{
m_music.Stop();
Close_Inputs();
DeviceHandler::Instance()->UnMountAll();
WDVD_Close();
USBStorage2_Deinit();
mload_close();
bool iosOK = true;
if(ios != IOS_GetVersion())
{
gprintf("Reloading into IOS %i from %i...\n", ios, IOS_GetVersion());
Nand::Instance()->DeInit_ISFS();
iosOK = IOS_ReloadIOS(ios) == 0;
@ -102,6 +104,7 @@ bool loadIOS(int ios, bool launch_game, bool emu_channel)
load_ehc_module_ex();
else if(CurrentIOS.Type == IOS_TYPE_WANIN && CurrentIOS.Revision >= 18)
load_dip_249();
DeviceHandler::Instance()->SetModes();
if(!emu_channel)
{
@ -112,8 +115,11 @@ bool loadIOS(int ios, bool launch_game, bool emu_channel)
Disc_Init();
}
else
{
DeviceHandler::Instance()->MountAll();
Open_Inputs();
}
}
return iosOK;
#else

View File

@ -69,7 +69,7 @@ int main(int argc, char **argv)
iosOK = true;
memset(&CurrentIOS, 0, sizeof(IOS_Info));
CurrentIOS.Version = 254;
CurrentIOS.Type = IOS_TYPE_D2X;
CurrentIOS.Type = IOS_TYPE_NEEK2O;
CurrentIOS.Base = 254;
CurrentIOS.Revision = 999;
DCFlushRange(&CurrentIOS, sizeof(IOS_Info));
@ -77,12 +77,12 @@ int main(int argc, char **argv)
else if(*HW_AHBPROT != 0xFFFFFFFF)
{
gprintf("Loading cIOS: %d\n", mainIOS);
iosOK = loadIOS(mainIOS, false, false) && CustomIOS(CurrentIOS.Type);
iosOK = loadIOS(mainIOS, true, true) && CustomIOS(CurrentIOS.Type);
}
else
{
gprintf("Using IOS%d and AHBPROT patched out\n", IOS_GetVersion());
iosOK = loadIOS(IOS_GetVersion(), false, false);
gprintf("AHBPROT patched out, use IOS58\n");
iosOK = loadIOS(58, true, true);
}
#else
iosOK = true;
@ -98,7 +98,6 @@ int main(int argc, char **argv)
{
Open_Inputs(); //(re)init wiimote
#ifndef DOLPHIN
DeviceHandler::Instance()->MountSD();
const DISC_INTERFACE *handle = DeviceHandler::GetUSB0Interface();
bool deviceAvailable = false;
u8 timeout = 0;
@ -109,13 +108,10 @@ int main(int argc, char **argv)
break;
usleep(50000);
}
DeviceHandler::Instance()->MountAllUSB();
#endif
DeviceHandler::Instance()->MountAll();
if(DeviceHandler::Instance()->IsInserted(SD))
deviceAvailable = true;
#else
bool deviceAvailable = true;
DeviceHandler::Instance()->MountAll();
#endif
bool dipOK = Disc_Init() >= 0;
mainMenu = new CMenu(vid);

View File

@ -809,6 +809,7 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
}
u8 loader = min((u32)m_gcfg2.getInt(id, "gc_loader", 0), ARRAY_SIZE(CMenu::_GCLoader) - 1u);
bool memcard_emu = m_gcfg2.getBool(id, "devo_memcard_emu", false);
if(disc)
{
@ -856,8 +857,7 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
else if(loader == 2 || (loader == 0 && m_devo_installed && strcasestr(path.c_str(), "boot.bin") == NULL))
{
loader = 2;
bool memcard_emu = m_gcfg2.getBool(id, "devo_memcard_emu", false);
DEVO_SetOptions(path.c_str(), DeviceName[currentPartition], m_dataDir.c_str(), id.c_str(), memcard_emu);
DEVO_GetLoader(m_dataDir.c_str());
}
m_gcfg1.save(true);
@ -865,21 +865,24 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
m_cat.save(true);
m_cfg.save(true);
cleanup();
#ifndef DOLPHIN
USBStorage2_Deinit();
USB_Deinitialize();
Nand::Instance()->DeInit_ISFS();
#endif
GC_SetVideoMode(videoMode, videoSetting);
GC_SetLanguage(GClanguage);
if(loader == 2)
{
loadIOS(58, true, true);
writeStub();
DEVO_SetOptions(path.c_str(), DeviceName[currentPartition], id.c_str(), memcard_emu);
DEVO_Boot();
}
DML_New_WriteOptions();
Nand::Instance()->DeInit_ISFS();
DML_New_WriteOptions();
WII_Initialize();
if(WII_LaunchTitle(0x100000100LL) < 0)
Sys_LoadMenu();

View File

@ -687,7 +687,7 @@ int CMenu::main(void)
{
_showWaitMessage();
_hideMain();
bool isD2XnewerThanV6 = false;
bool isD2XnewerThanV6 = (CurrentIOS.Type == IOS_TYPE_NEEK2O);
if(CurrentIOS.Revision > 6 && CurrentIOS.Type == IOS_TYPE_D2X)
isD2XnewerThanV6 = true;
if(m_current_view == COVERFLOW_CHANNEL && m_cfg.getInt("NAND", "emulation", 0))

View File

@ -200,7 +200,7 @@ void CMenu::_enableNandEmu(bool fromconfig)
if(!disable)
{
bool isD2XnewerThanV6 = false;
bool isD2XnewerThanV6 = (CurrentIOS.Type == IOS_TYPE_NEEK2O);
if(CurrentIOS.Revision > 6 && CurrentIOS.Type == IOS_TYPE_D2X)
isD2XnewerThanV6 = true;
if(m_current_view == COVERFLOW_CHANNEL && !m_cfg.getBool("NAND", "disable", true) && !neek2o() && !m_tempView)

View File

@ -25,6 +25,7 @@ enum
IOS_TYPE_WANIN,
IOS_TYPE_HERMES,
IOS_TYPE_KWIIRK,
IOS_TYPE_NEEK2O,
IOS_TYPE_NORMAL_IOS,
IOS_TYPE_STUB,
};