mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-25 12:46:53 +01:00
sync to sourceforge r1266
* Added 2 new Nintendont settings (CC Rumble and IPL choices). (Greywolf) * Updated all the sources to compile with devkitPPC r28 and r29-1. (Greywolf) * Fixed loading banners from EmuNAND with a long path. (Greywolf) * Updated Libcustomfat to 1.1.1 + Ustealth. (Greywolf, Cyan) * Added support for Open source HBC TitleID.
This commit is contained in:
parent
6a2d30beb3
commit
b0352c301e
@ -2,8 +2,8 @@
|
|||||||
<app version="1">
|
<app version="1">
|
||||||
<name> USB Loader GX</name>
|
<name> USB Loader GX</name>
|
||||||
<coder>USB Loader GX Team</coder>
|
<coder>USB Loader GX Team</coder>
|
||||||
<version>3.0 r1263</version>
|
<version>3.0 r1264</version>
|
||||||
<release_date>20161106144602</release_date>
|
<release_date>20170810090107</release_date>
|
||||||
<!-- // remove this line to enable arguments
|
<!-- // remove this line to enable arguments
|
||||||
<arguments>
|
<arguments>
|
||||||
<arg>--ios=250</arg>
|
<arg>--ios=250</arg>
|
||||||
|
2
Makefile
2
Makefile
@ -65,7 +65,7 @@ endif
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# options for code generation
|
# options for code generation
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
CFLAGS = -g -ggdb -O3 -Wall -Wno-multichar -Wno-unused-parameter -Wextra $(MACHDEP) $(INCLUDE) -DBUILD_IOS=$(IOS)
|
CFLAGS = -g -ggdb -O3 -Wall -Wno-multichar -Wno-unused-parameter -Wextra $(MACHDEP) $(INCLUDE) -D_GNU_SOURCE -DBUILD_IOS=$(IOS)
|
||||||
CXXFLAGS = $(CFLAGS)
|
CXXFLAGS = $(CFLAGS)
|
||||||
LDFLAGS = -g -ggdb $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80B00000,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,wiiuse_register
|
LDFLAGS = -g -ggdb $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80B00000,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,wiiuse_register
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ u8 * Channels::GetDol(const u64 &title, u8 *tmdBuffer)
|
|||||||
if(tmd_file->contents[i].index == tmd_file->boot_index)
|
if(tmd_file->contents[i].index == tmd_file->boot_index)
|
||||||
continue; // Skip loader
|
continue; // Skip loader
|
||||||
|
|
||||||
snprintf(filepath, ISFS_MAXPATH, "/title/%08x/%08x/content/%08x.app", high, low, tmd_file->contents[i].cid);
|
snprintf(filepath, ISFS_MAXPATH, "/title/%08x/%08x/content/%08x.app", (unsigned int)high, (unsigned int)low, (unsigned int)tmd_file->contents[i].cid);
|
||||||
|
|
||||||
s32 fd = ISFS_Open(filepath, ISFS_OPEN_READ);
|
s32 fd = ISFS_Open(filepath, ISFS_OPEN_READ);
|
||||||
if(fd < 0)
|
if(fd < 0)
|
||||||
@ -191,7 +191,7 @@ u8 * Channels::GetDol(const u64 &title, u8 *tmdBuffer)
|
|||||||
gprintf("Loading boot content index\n");
|
gprintf("Loading boot content index\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(filepath, ISFS_MAXPATH, "/title/%08x/%08x/content/%08x.app", high, low, bootcontent);
|
snprintf(filepath, ISFS_MAXPATH, "/title/%08x/%08x/content/%08x.app", (unsigned int)high, (unsigned int)low, (unsigned int)bootcontent);
|
||||||
gprintf("Loading Channel DOL: %s\n", filepath);
|
gprintf("Loading Channel DOL: %s\n", filepath);
|
||||||
|
|
||||||
if (NandTitle::LoadFileFromNand(filepath, &buffer, &filesize) < 0)
|
if (NandTitle::LoadFileFromNand(filepath, &buffer, &filesize) < 0)
|
||||||
@ -255,7 +255,7 @@ u8 *Channels::GetTMD(const u64 &tid, u32 *size, const char *prefix)
|
|||||||
if(!prefix)
|
if(!prefix)
|
||||||
prefix = "";
|
prefix = "";
|
||||||
|
|
||||||
snprintf(filepath, ISFS_MAXPATH, "%s/title/%08x/%08x/content/title.tmd", prefix, TITLE_UPPER(tid), TITLE_LOWER(tid));
|
snprintf(filepath, ISFS_MAXPATH, "%s/title/%08x/%08x/content/title.tmd", prefix, (unsigned int)TITLE_UPPER(tid), (unsigned int)TITLE_LOWER(tid));
|
||||||
|
|
||||||
u8 *tmdBuffer = NULL;
|
u8 *tmdBuffer = NULL;
|
||||||
u32 tmdSize = 0;
|
u32 tmdSize = 0;
|
||||||
@ -480,7 +480,7 @@ bool Channels::emuExists(char *tmdpath)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
//! tmdpath has length of 1024
|
//! tmdpath has length of 1024
|
||||||
snprintf(ptr+1, 1024-(ptr+1-tmdpath), "%08x.app", cid);
|
snprintf(ptr+1, 1024-(ptr+1-tmdpath), "%08x.app", (unsigned int)cid);
|
||||||
|
|
||||||
FILE *f = fopen(tmdpath, "rb");
|
FILE *f = fopen(tmdpath, "rb");
|
||||||
if(!f)
|
if(!f)
|
||||||
@ -605,7 +605,7 @@ bool Channels::GetEmuChanTitle(char *tmdpath, int language, std::string &Title)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
//! tmdpath has length of 1024
|
//! tmdpath has length of 1024
|
||||||
snprintf(ptr+1, 1024-(ptr+1-tmdpath), "%08x.app", cid);
|
snprintf(ptr+1, 1024-(ptr+1-tmdpath), "%08x.app", (unsigned int)cid);
|
||||||
|
|
||||||
FILE *f = fopen(tmdpath, "rb");
|
FILE *f = fopen(tmdpath, "rb");
|
||||||
if(!f)
|
if(!f)
|
||||||
@ -671,13 +671,13 @@ u8 *Channels::GetOpeningBnr(const u64 &title, u32 * outsize, const char *pathPre
|
|||||||
u32 high = TITLE_UPPER(title);
|
u32 high = TITLE_UPPER(title);
|
||||||
u32 low = TITLE_LOWER(title);
|
u32 low = TITLE_LOWER(title);
|
||||||
|
|
||||||
char *filepath = (char *) memalign(32, ISFS_MAXPATH);
|
char *filepath = (char *) memalign(32, ISFS_MAXPATH + strlen(pathPrefix));
|
||||||
if(!filepath)
|
if(!filepath)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
snprintf(filepath, ISFS_MAXPATH, "%s/title/%08x/%08x/content/title.tmd", pathPrefix, high, low);
|
snprintf(filepath, ISFS_MAXPATH, "%s/title/%08x/%08x/content/title.tmd", pathPrefix, (unsigned int)high, (unsigned int)low);
|
||||||
|
|
||||||
u8 *buffer = NULL;
|
u8 *buffer = NULL;
|
||||||
u32 filesize = 0;
|
u32 filesize = 0;
|
||||||
@ -712,7 +712,7 @@ u8 *Channels::GetOpeningBnr(const u64 &title, u32 * outsize, const char *pathPre
|
|||||||
if(!found)
|
if(!found)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
snprintf(filepath, ISFS_MAXPATH, "%s/title/%08x/%08x/content/%08x.app", pathPrefix, high, low, bootcontent);
|
snprintf(filepath, ISFS_MAXPATH, "%s/title/%08x/%08x/content/%08x.app", pathPrefix, (unsigned int)high, (unsigned int)low, (unsigned int)bootcontent);
|
||||||
|
|
||||||
if(pathPrefix && *pathPrefix != 0)
|
if(pathPrefix && *pathPrefix != 0)
|
||||||
ret = LoadFileToMem(filepath, &buffer, &filesize);
|
ret = LoadFileToMem(filepath, &buffer, &filesize);
|
||||||
|
@ -43,11 +43,11 @@ private:
|
|||||||
void RenderHighliter(Mtx &modelview);
|
void RenderHighliter(Mtx &modelview);
|
||||||
void UpdateTooltips(void);
|
void UpdateTooltips(void);
|
||||||
|
|
||||||
static const float gridwidth = 2048.f;
|
static constexpr float gridwidth = 2048.f;
|
||||||
static const float gridheight = 288.f;
|
static constexpr float gridheight = 288.f;
|
||||||
|
|
||||||
static const float chanWidth = 128.f;
|
static constexpr float chanWidth = 128.f;
|
||||||
static const float chanHeight = 96.f;
|
static constexpr float chanHeight = 96.f;
|
||||||
|
|
||||||
const int XOffset;
|
const int XOffset;
|
||||||
const int YOffset;
|
const int YOffset;
|
||||||
|
@ -66,6 +66,8 @@ enum ninconfig
|
|||||||
NIN_CFG_NATIVE_SI = (1<<14), // v2.189
|
NIN_CFG_NATIVE_SI = (1<<14), // v2.189
|
||||||
NIN_CFG_WIIU_WIDE = (1<<15), // v2.258
|
NIN_CFG_WIIU_WIDE = (1<<15), // v2.258
|
||||||
NIN_CFG_ARCADE_MODE = (1<<16), // v4.424
|
NIN_CFG_ARCADE_MODE = (1<<16), // v4.424
|
||||||
|
NIN_CFG_CC_RUMBLE = (1 << 17),// v4.43x
|
||||||
|
NIN_CFG_SKIP_IPL = (1 << 18),// v4.43x
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ninvideomode
|
enum ninvideomode
|
||||||
|
@ -36,13 +36,13 @@ class GuiSound
|
|||||||
//!\param sound Pointer to the sound data
|
//!\param sound Pointer to the sound data
|
||||||
//!\param filesize Length of sound data
|
//!\param filesize Length of sound data
|
||||||
GuiSound(const char * filepath);
|
GuiSound(const char * filepath);
|
||||||
GuiSound(const u8 * sound, int filesize, int volume, int voice = -1);
|
GuiSound(const u8 * sound, s32 filesize, int volume, int voice = -1);
|
||||||
//!Destructor
|
//!Destructor
|
||||||
virtual ~GuiSound();
|
virtual ~GuiSound();
|
||||||
//!Load a file and replace the old one
|
//!Load a file and replace the old one
|
||||||
virtual bool Load(const char * filepath);
|
virtual bool Load(const char * filepath);
|
||||||
//!Load a file and replace the old one
|
//!Load a file and replace the old one
|
||||||
bool Load(const u8 * sound, int filesize);
|
bool Load(const u8 * sound, s32 filesize);
|
||||||
//!For quick playback of the internal soundeffects
|
//!For quick playback of the internal soundeffects
|
||||||
bool LoadSoundEffect(const u8 * snd, s32 len);
|
bool LoadSoundEffect(const u8 * snd, s32 len);
|
||||||
//!Start sound playback
|
//!Start sound playback
|
||||||
|
@ -71,7 +71,7 @@ bool SystemMenuResources::Init()
|
|||||||
}
|
}
|
||||||
// build file path
|
// build file path
|
||||||
char path[ ISFS_MAXPATH ]__attribute__((aligned( 32 )));
|
char path[ ISFS_MAXPATH ]__attribute__((aligned( 32 )));
|
||||||
sprintf( path, "/title/00000001/00000002/content/%08x.app", contents[ idx ].cid );
|
sprintf( path, "/title/00000001/00000002/content/%08x.app", (unsigned int)contents[ idx ].cid );
|
||||||
|
|
||||||
// get resource archive
|
// get resource archive
|
||||||
u8* resourceArc = NULL;
|
u8* resourceArc = NULL;
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#include <sys/param.h>
|
||||||
#include "prompts/ProgressWindow.h"
|
#include "prompts/ProgressWindow.h"
|
||||||
#include "FileOperations/fileops.h"
|
#include "FileOperations/fileops.h"
|
||||||
#include "ZipFile.h"
|
#include "ZipFile.h"
|
||||||
|
@ -173,7 +173,7 @@ bool OpeningBNR::LoadWiiBanner(const discHdr * header)
|
|||||||
if (!disc)
|
if (!disc)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
wiidisc_t *wdisc = wd_open_disc((int(*)(void *, u32, u32, void *)) wbfs_disc_read, disc);
|
wiidisc_t *wdisc = wd_open_disc((s32(*)(void *, u32, u32, void *)) wbfs_disc_read, disc);
|
||||||
if (!wdisc)
|
if (!wdisc)
|
||||||
{
|
{
|
||||||
WBFS_CloseDisc(disc);
|
WBFS_CloseDisc(disc);
|
||||||
@ -247,7 +247,7 @@ const u16 * OpeningBNR::GetIMETTitle(int lang)
|
|||||||
return imetHdr->names[lang];
|
return imetHdr->names[lang];
|
||||||
}
|
}
|
||||||
|
|
||||||
static int GC_Disc_Read(void *fp, u32 offset, u32 count, void*iobuf)
|
static s32 GC_Disc_Read(void *fp, u32 offset, u32 count, void*iobuf)
|
||||||
{
|
{
|
||||||
if(fp)
|
if(fp)
|
||||||
{
|
{
|
||||||
|
@ -96,7 +96,7 @@ void hexdump(void *d, int len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t __out_write(struct _reent *r, int fd, const char *ptr, size_t len)
|
static ssize_t __out_write(struct _reent *r, void *fd, const char *ptr, size_t len)
|
||||||
{
|
{
|
||||||
if(len > 0)
|
if(len > 0)
|
||||||
usb_sendbuffer(1, ptr, len);
|
usb_sendbuffer(1, ptr, len);
|
||||||
@ -130,6 +130,7 @@ static const devoptab_t gecko_out = {
|
|||||||
NULL, // device deviceData
|
NULL, // device deviceData
|
||||||
NULL, // device chmod_r
|
NULL, // device chmod_r
|
||||||
NULL, // device fchmod_r
|
NULL, // device fchmod_r
|
||||||
|
NULL, // device rmdir_r
|
||||||
};
|
};
|
||||||
|
|
||||||
void USBGeckoOutput()
|
void USBGeckoOutput()
|
||||||
|
@ -233,7 +233,7 @@ bool gettextLoadLanguage(const char* langFile)
|
|||||||
}
|
}
|
||||||
const char *gettext(const char *msgid)
|
const char *gettext(const char *msgid)
|
||||||
{
|
{
|
||||||
if(!msgid) return NULL;
|
if(!msgid[0]) return NULL;
|
||||||
MSG *msg = findMSG(hash_string(msgid));
|
MSG *msg = findMSG(hash_string(msgid));
|
||||||
if (msg && msg->msgstr) return msg->msgstr;
|
if (msg && msg->msgstr) return msg->msgstr;
|
||||||
return msgid;
|
return msgid;
|
||||||
|
Binary file not shown.
@ -497,7 +497,7 @@ s32 wbfs_add_disc(wbfs_t*p, read_wiidisc_callback_t read_src_wii_disc, void *cal
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//ERROR("read error");
|
//ERROR("read error");
|
||||||
printf("\rWARNING: read (%u) error (%d)\n", offset, ret);
|
printf("\rWARNING: read (%u) error (%d)\n", (unsigned int)offset, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
//fix the partition table
|
//fix the partition table
|
||||||
@ -727,7 +727,7 @@ u32 wbfs_size_disc(wbfs_t*p, read_wiidisc_callback_t read_src_wii_disc, void *ca
|
|||||||
//int (*read_wiidisc_callback_t)(void*fp,u32 offset,u32 count,void*iobuf);
|
//int (*read_wiidisc_callback_t)(void*fp,u32 offset,u32 count,void*iobuf);
|
||||||
|
|
||||||
// connect wiidisc to wbfs_disc
|
// connect wiidisc to wbfs_disc
|
||||||
int read_wiidisc_wbfsdisc(void*fp, u32 offset, u32 count, void*iobuf)
|
s32 read_wiidisc_wbfsdisc(void*fp, u32 offset, u32 count, void*iobuf)
|
||||||
{
|
{
|
||||||
return wbfs_disc_read((wbfs_disc_t*) fp, offset, count, iobuf);
|
return wbfs_disc_read((wbfs_disc_t*) fp, offset, count, iobuf);
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ extern "C"
|
|||||||
//
|
//
|
||||||
|
|
||||||
// callback definition. Return 1 on fatal error (callback is supposed to make retries until no hopes..)
|
// callback definition. Return 1 on fatal error (callback is supposed to make retries until no hopes..)
|
||||||
typedef int (*rw_sector_callback_t)(void*fp, u32 lba, u32 count, void*iobuf);
|
typedef s32 (*rw_sector_callback_t)(void*fp, u32 lba, u32 count, void*iobuf);
|
||||||
typedef void (*progress_callback_t)(s64 status, s64 total);
|
typedef void (*progress_callback_t)(s64 status, s64 total);
|
||||||
|
|
||||||
typedef struct wbfs_s
|
typedef struct wbfs_s
|
||||||
|
@ -11,7 +11,7 @@ extern "C"
|
|||||||
#endif
|
#endif
|
||||||
// callback definition. Return 1 on fatal error (callback is supposed to make retries until no hopes..)
|
// callback definition. Return 1 on fatal error (callback is supposed to make retries until no hopes..)
|
||||||
// offset points 32bit words, count counts bytes
|
// offset points 32bit words, count counts bytes
|
||||||
typedef int (*read_wiidisc_callback_t)(void*fp, u32 offset, u32 count, void*iobuf);
|
typedef s32 (*read_wiidisc_callback_t)(void*fp, u32 offset, u32 count, void*iobuf);
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@ -16,8 +16,8 @@ public:
|
|||||||
|
|
||||||
void CMEM2Alloc::init(unsigned int size)
|
void CMEM2Alloc::init(unsigned int size)
|
||||||
{
|
{
|
||||||
m_baseAddress = (SBlock *) std::max(((u32)SYS_GetArena2Lo() + 31) & ~31, IOS_RELOAD_AREA);
|
m_baseAddress = (SBlock *) std::max(((u32)SYS_GetArena2Lo() + 31) & ~31, (u32)IOS_RELOAD_AREA);
|
||||||
m_endAddress = (SBlock *) ((char *)m_baseAddress + std::min(size * 0x100000, SYS_GetArena2Size() & ~31));
|
m_endAddress = (SBlock *) ((char *)m_baseAddress + std::min((u32)(size * 0x100000), SYS_GetArena2Size() & ~31));
|
||||||
if (m_endAddress > (SBlock *) 0x93300000) //rest is reserved for usb/usb2/network and other stuff... (0xE0000 bytes)
|
if (m_endAddress > (SBlock *) 0x93300000) //rest is reserved for usb/usb2/network and other stuff... (0xE0000 bytes)
|
||||||
m_endAddress = (SBlock *) 0x93300000;
|
m_endAddress = (SBlock *) 0x93300000;
|
||||||
SYS_SetArena2Lo(m_endAddress);
|
SYS_SetArena2Lo(m_endAddress);
|
||||||
|
@ -187,7 +187,7 @@ void WDMMenu::CheckGameFiles(const struct discHdr * header)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wiidisc_t *wdisc = wd_open_disc((int(*)(void *, u32, u32, void *)) wbfs_disc_read, disc);
|
wiidisc_t *wdisc = wd_open_disc((s32(*)(void *, u32, u32, void *)) wbfs_disc_read, disc);
|
||||||
if (!wdisc)
|
if (!wdisc)
|
||||||
{
|
{
|
||||||
WindowPrompt(tr( "ERROR:" ), tr( "Could not open Disc" ), tr( "OK" ));
|
WindowPrompt(tr( "ERROR:" ), tr( "Could not open Disc" ), tr( "OK" ));
|
||||||
|
@ -139,7 +139,7 @@ static int ListCompare(const void *a, const void *b)
|
|||||||
Link_Info *ab = (Link_Info*) a;
|
Link_Info *ab = (Link_Info*) a;
|
||||||
Link_Info *bb = (Link_Info*) b;
|
Link_Info *bb = (Link_Info*) b;
|
||||||
|
|
||||||
return stricmp((char *) ab->URL, (char *) bb->URL);
|
return strcasecmp((char *) ab->URL, (char *) bb->URL);
|
||||||
}
|
}
|
||||||
void URL_List::SortList()
|
void URL_List::SortList()
|
||||||
{
|
{
|
||||||
|
@ -46,14 +46,14 @@ static bool networkHalt = true;
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Initialize_Network
|
* Initialize_Network
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
void Initialize_Network(void)
|
void Initialize_Network(int retries)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (networkinitialized) return;
|
if (networkinitialized) return;
|
||||||
|
|
||||||
s32 result;
|
s32 result;
|
||||||
|
|
||||||
result = if_config(IP, NULL, NULL, true);
|
result = if_config(IP, NULL, NULL, true, retries);
|
||||||
|
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
{
|
{
|
||||||
@ -147,7 +147,7 @@ s32 network_request(s32 connect, const char * request, char * filename)
|
|||||||
ptr = strstr(buf, "Content-Length:");
|
ptr = strstr(buf, "Content-Length:");
|
||||||
if (!ptr) return NET_SIZE_UNKNOWN;
|
if (!ptr) return NET_SIZE_UNKNOWN;
|
||||||
|
|
||||||
sscanf(ptr, "Content-Length: %u", &size);
|
sscanf(ptr, "Content-Length: %lu", &size);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#define NET_SIZE_UNKNOWN -0xFFFFFFF
|
#define NET_SIZE_UNKNOWN -0xFFFFFFF
|
||||||
#define NET_DEFAULT_SOCK -0xFFFFFFE
|
#define NET_DEFAULT_SOCK -0xFFFFFFE
|
||||||
|
|
||||||
void Initialize_Network(void);
|
void Initialize_Network(int retries = 0);
|
||||||
void DeinitNetwork(void);
|
void DeinitNetwork(void);
|
||||||
bool IsNetworkInit(void);
|
bool IsNetworkInit(void);
|
||||||
char * GetNetworkIP(void);
|
char * GetNetworkIP(void);
|
||||||
|
@ -54,70 +54,70 @@ extern void multidolhook(u32 address);
|
|||||||
extern void langvipatch(u32 address, u32 len, u8 langbyte);
|
extern void langvipatch(u32 address, u32 len, u8 langbyte);
|
||||||
extern void vipatch(u32 address, u32 len);
|
extern void vipatch(u32 address, u32 len);
|
||||||
|
|
||||||
static const u32 multidolpatch1[2] = {
|
//static const u32 multidolpatch1[2] = {
|
||||||
0x3C03FFB4,0x28004F43
|
// 0x3C03FFB4,0x28004F43
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 healthcheckhook[2] = {
|
//static const u32 healthcheckhook[2] = {
|
||||||
0x41810010,0x881D007D
|
// 0x41810010,0x881D007D
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 updatecheckhook[3] = {
|
//static const u32 updatecheckhook[3] = {
|
||||||
0x80650050,0x80850054,0xA0A50058
|
// 0x80650050,0x80850054,0xA0A50058
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 multidolpatch2[2] = {
|
//static const u32 multidolpatch2[2] = {
|
||||||
0x3F608000, 0x807B0018
|
// 0x3F608000, 0x807B0018
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 recoveryhooks[3] = {
|
//static const u32 recoveryhooks[3] = {
|
||||||
0xA00100AC,0x5400073E,0x2C00000F
|
// 0xA00100AC,0x5400073E,0x2C00000F
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 nocopyflag1[3] = {
|
//static const u32 nocopyflag1[3] = {
|
||||||
0x540007FF, 0x4182001C, 0x80630068
|
// 0x540007FF, 0x4182001C, 0x80630068
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 nocopyflag2[3] = {
|
//static const u32 nocopyflag2[3] = {
|
||||||
0x540007FF, 0x41820024, 0x387E12E2
|
// 0x540007FF, 0x41820024, 0x387E12E2
|
||||||
};
|
//};
|
||||||
|
|
||||||
// this one is for the GH3 and VC saves
|
// this one is for the GH3 and VC saves
|
||||||
//static const u32 nocopyflag3[5] = {
|
//static const u32 nocopyflag3[5] = {
|
||||||
// 0x2C030000, 0x40820010, 0x88010020, 0x28000002, 0x41820234
|
// 0x2C030000, 0x40820010, 0x88010020, 0x28000002, 0x41820234
|
||||||
//};
|
//};
|
||||||
|
|
||||||
static const u32 nocopyflag3[5] = {
|
//static const u32 nocopyflag3[5] = {
|
||||||
0x2C030000, 0x41820200,0x48000058,0x38610100
|
// 0x2C030000, 0x41820200,0x48000058,0x38610100
|
||||||
};
|
//};
|
||||||
// this removes the display warning for no copy VC and GH3 saves
|
// this removes the display warning for no copy VC and GH3 saves
|
||||||
static const u32 nocopyflag4[4] = {
|
//static const u32 nocopyflag4[4] = {
|
||||||
0x80010008, 0x2C000000, 0x4182000C, 0x3BE00001
|
// 0x80010008, 0x2C000000, 0x4182000C, 0x3BE00001
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 nocopyflag5[3] = {
|
//static const u32 nocopyflag5[3] = {
|
||||||
0x801D0024,0x540007FF,0x41820024
|
// 0x801D0024,0x540007FF,0x41820024
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 movedvdpatch[3] = {
|
//static const u32 movedvdpatch[3] = {
|
||||||
0x2C040000, 0x41820120, 0x3C608109
|
// 0x2C040000, 0x41820120, 0x3C608109
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 regionfreehooks[5] = {
|
//static const u32 regionfreehooks[5] = {
|
||||||
0x7C600774, 0x2C000001, 0x41820030,0x40800010,0x2C000000
|
// 0x7C600774, 0x2C000001, 0x41820030,0x40800010,0x2C000000
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 cIOScode[16] = {
|
//static const u32 cIOScode[16] = {
|
||||||
0x7f06c378, 0x7f25cb78, 0x387e02c0, 0x4cc63182
|
// 0x7f06c378, 0x7f25cb78, 0x387e02c0, 0x4cc63182
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 cIOSblock[16] = {
|
//static const u32 cIOSblock[16] = {
|
||||||
0x2C1800F9, 0x40820008, 0x3B000024
|
// 0x2C1800F9, 0x40820008, 0x3B000024
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 fwritepatch[8] = {
|
//static const u32 fwritepatch[8] = {
|
||||||
0x9421FFD0,0x7C0802A6,0x90010034,0xBF210014,0x7C9B2378,0x7CDC3378,0x7C7A1B78,0x7CB92B78 // bushing fwrite
|
// 0x9421FFD0,0x7C0802A6,0x90010034,0xBF210014,0x7C9B2378,0x7CDC3378,0x7C7A1B78,0x7CB92B78 // bushing fwrite
|
||||||
};
|
//};
|
||||||
|
|
||||||
static const u32 vipatchcode[3] = {
|
static const u32 vipatchcode[3] = {
|
||||||
0x4182000C,0x4180001C,0x48000018
|
0x4182000C,0x4180001C,0x48000018
|
||||||
@ -175,17 +175,17 @@ static const u32 langpatch[3] = {
|
|||||||
0x7C600775, 0x40820010, 0x38000000
|
0x7C600775, 0x40820010, 0x38000000
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u32 oldpatch002[3] = {
|
//static const u32 oldpatch002[3] = {
|
||||||
0x2C000000, 0x40820214, 0x3C608000
|
// 0x2C000000, 0x40820214, 0x3C608000
|
||||||
};
|
//};
|
||||||
|
//
|
||||||
static const u32 newpatch002[3] = {
|
//static const u32 newpatch002[3] = {
|
||||||
0x2C000000, 0x48000214, 0x3C608000
|
// 0x2C000000, 0x48000214, 0x3C608000
|
||||||
};
|
//};
|
||||||
|
//
|
||||||
static const u32 dczeropatch[4] = {
|
//static const u32 dczeropatch[4] = {
|
||||||
0x7C001FEC, 0x38630020, 0x4200FFF8, 0x4E800020
|
// 0x7C001FEC, 0x38630020, 0x4200FFF8, 0x4E800020
|
||||||
};
|
//};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
void dogamehooks(u32 hooktype, void *addr, u32 len)
|
void dogamehooks(u32 hooktype, void *addr, u32 len)
|
||||||
@ -453,7 +453,7 @@ static void app_loadgameconfig()
|
|||||||
}
|
}
|
||||||
if (strncasecmp("poke", parsebuffer, strlen(parsebuffer)) == 0 && strlen(parsebuffer) == 4)
|
if (strncasecmp("poke", parsebuffer, strlen(parsebuffer)) == 0 && strlen(parsebuffer) == 4)
|
||||||
{
|
{
|
||||||
ret = sscanf((char *) tempgameconf + i, "( %x , %x", &codeaddr, &codeval);
|
ret = sscanf((char *) tempgameconf + i, "( %x , %x", (unsigned int *)&codeaddr, (unsigned int *)&codeval);
|
||||||
if (ret == 2)
|
if (ret == 2)
|
||||||
{
|
{
|
||||||
*(gameconf + (gameconfsize / 4)) = 0;
|
*(gameconf + (gameconfsize / 4)) = 0;
|
||||||
@ -469,7 +469,7 @@ static void app_loadgameconfig()
|
|||||||
}
|
}
|
||||||
if (strncasecmp("pokeifequal", parsebuffer, strlen(parsebuffer)) == 0 && strlen(parsebuffer) == 11)
|
if (strncasecmp("pokeifequal", parsebuffer, strlen(parsebuffer)) == 0 && strlen(parsebuffer) == 11)
|
||||||
{
|
{
|
||||||
ret = sscanf((char *) (tempgameconf + i), "( %x , %x , %x , %x", &codeaddr, &codeval, &codeaddr2, &codeval2);
|
ret = sscanf((char *) (tempgameconf + i), "( %x , %x , %x , %x", (unsigned int *)&codeaddr, (unsigned int *)&codeval, (unsigned int *)&codeaddr2, (unsigned int *)&codeval2);
|
||||||
if (ret == 4)
|
if (ret == 4)
|
||||||
{
|
{
|
||||||
*(gameconf + (gameconfsize / 4)) = 0;
|
*(gameconf + (gameconfsize / 4)) = 0;
|
||||||
@ -487,7 +487,7 @@ static void app_loadgameconfig()
|
|||||||
}
|
}
|
||||||
if (strncasecmp("searchandpoke", parsebuffer, strlen(parsebuffer)) == 0 && strlen(parsebuffer) == 13)
|
if (strncasecmp("searchandpoke", parsebuffer, strlen(parsebuffer)) == 0 && strlen(parsebuffer) == 13)
|
||||||
{
|
{
|
||||||
ret = sscanf((char *) (tempgameconf + i), "( %x%n", &codeval, &tempoffset);
|
ret = sscanf((char *) (tempgameconf + i), "( %x%n", (unsigned int *)&codeval, (int *)&tempoffset);
|
||||||
if (ret == 1)
|
if (ret == 1)
|
||||||
{
|
{
|
||||||
gameconfsize += 4;
|
gameconfsize += 4;
|
||||||
@ -498,10 +498,10 @@ static void app_loadgameconfig()
|
|||||||
gameconfsize += 4;
|
gameconfsize += 4;
|
||||||
temp++;
|
temp++;
|
||||||
i += tempoffset;
|
i += tempoffset;
|
||||||
ret = sscanf((char *) (tempgameconf + i), " %x%n", &codeval, &tempoffset);
|
ret = sscanf((char *) (tempgameconf + i), " %x%n", (unsigned int *)&codeval, (int *)&tempoffset);
|
||||||
}
|
}
|
||||||
*(gameconf + (gameconfsize / 4) - temp - 1) = temp;
|
*(gameconf + (gameconfsize / 4) - temp - 1) = temp;
|
||||||
ret = sscanf((char *) (tempgameconf + i), " , %x , %x , %x , %x", &codeaddr, &codeaddr2, &codeoffset, &codeval2);
|
ret = sscanf((char *) (tempgameconf + i), " , %x , %x , %x , %x", (unsigned int *)&codeaddr, (unsigned int *)&codeaddr2, (unsigned int *)&codeoffset, (unsigned int *)&codeval2);
|
||||||
if (ret == 4)
|
if (ret == 4)
|
||||||
{
|
{
|
||||||
*(gameconf + (gameconfsize / 4)) = codeaddr;
|
*(gameconf + (gameconfsize / 4)) = codeaddr;
|
||||||
|
@ -40,10 +40,10 @@ class BannerWindow : public GuiWindow
|
|||||||
void Animate(void);
|
void Animate(void);
|
||||||
void ChangeGame(bool playsound);
|
void ChangeGame(bool playsound);
|
||||||
|
|
||||||
static const float fBannerWidth = 608.f;
|
static constexpr float fBannerWidth = 608.f;
|
||||||
static const float fBannerHeight = 448.f;
|
static constexpr float fBannerHeight = 448.f;
|
||||||
static const float fIconWidth = 128.f;
|
static constexpr float fIconWidth = 128.f;
|
||||||
static const float fIconHeight = 96.f;
|
static constexpr float fIconHeight = 96.f;
|
||||||
|
|
||||||
static BannerFrame bannerFrame;
|
static BannerFrame bannerFrame;
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ int DiscBrowse(const char * GameID, char * alternatedname, int alternatedname_si
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
gprintf("wd_open_disc\n");
|
gprintf("wd_open_disc\n");
|
||||||
wiidisc_t *wdisc = wd_open_disc((int(*)(void *, u32, u32, void *)) wbfs_disc_read, disc);
|
wiidisc_t *wdisc = wd_open_disc((s32(*)(void *, u32, u32, void *)) wbfs_disc_read, disc);
|
||||||
if (!wdisc)
|
if (!wdisc)
|
||||||
{
|
{
|
||||||
ResumeGui();
|
ResumeGui();
|
||||||
@ -80,7 +80,7 @@ int DiscBrowse(const char * GameID, char * alternatedname, int alternatedname_si
|
|||||||
|
|
||||||
if (fileext && strcasecmp(fileext, ".dol") == 0)
|
if (fileext && strcasecmp(fileext, ".dol") == 0)
|
||||||
{
|
{
|
||||||
options.SetName(position, "%s %03i", tr("Offset"), i);
|
options.SetName(position, "%s %03i", tr("Offset"), (int)i);
|
||||||
options.SetValue(position, filename);
|
options.SetValue(position, filename);
|
||||||
position++;
|
position++;
|
||||||
}
|
}
|
||||||
|
@ -249,7 +249,7 @@ static void UpdateProgressValues(GuiImage *progressbarImg, GuiText *prTxt, GuiTe
|
|||||||
|
|
||||||
if (showTime == true)
|
if (showTime == true)
|
||||||
{
|
{
|
||||||
timeTxt->SetTextf("%s %d:%02d:%02d", tr( "Time left:" ), h, m, s);
|
timeTxt->SetTextf("%s %d:%02d:%02d", tr( "Time left:" ), (int)h, (int)m, (int)s);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showSize == true)
|
if (showSize == true)
|
||||||
|
@ -299,13 +299,13 @@ void WindowCredits()
|
|||||||
#ifdef FULLCHANNEL
|
#ifdef FULLCHANNEL
|
||||||
snprintf(SvnRev, sizeof(SvnRev), "Rev%sc IOS%u (Rev %u)%s", GetRev(), IOS_GetVersion(), IOS_GetRevision(), (*(vu32*)0xcd800064 == 0xFFFFFFFF)? " + AHB" : "" );
|
snprintf(SvnRev, sizeof(SvnRev), "Rev%sc IOS%u (Rev %u)%s", GetRev(), IOS_GetVersion(), IOS_GetRevision(), (*(vu32*)0xcd800064 == 0xFFFFFFFF)? " + AHB" : "" );
|
||||||
#else
|
#else
|
||||||
snprintf(SvnRev, sizeof(SvnRev), "Rev%s IOS%u (Rev %u)%s", GetRev(), IOS_GetVersion(), IOS_GetRevision(), (*(vu32*)0xcd800064 == 0xFFFFFFFF)? " + AHB" : "" );
|
snprintf(SvnRev, sizeof(SvnRev), "Rev%s IOS%u (Rev %u)%s", GetRev(), (unsigned int)IOS_GetVersion(), (int)IOS_GetRevision(), (*(vu32*)0xcd800064 == 0xFFFFFFFF)? " + AHB" : "" );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char IosInfo[80] = "";
|
char IosInfo[80] = "";
|
||||||
iosinfo_t * info = IosLoader::GetIOSInfo(IOS_GetVersion());
|
iosinfo_t * info = IosLoader::GetIOSInfo(IOS_GetVersion());
|
||||||
if(info)
|
if(info)
|
||||||
snprintf(IosInfo, sizeof(IosInfo), "(%s v%i%s base%i)", info->name, info->version, info->versionstring, info->baseios);
|
snprintf(IosInfo, sizeof(IosInfo), "(%s v%i%s base%i)", info->name, (int)info->version, info->versionstring, (int)info->baseios);
|
||||||
|
|
||||||
// Check if DIOS MIOS (Lite) is available
|
// Check if DIOS MIOS (Lite) is available
|
||||||
char GCInfo[80] = "";
|
char GCInfo[80] = "";
|
||||||
|
@ -170,7 +170,7 @@ bool TitleSelector(char output[])
|
|||||||
if (r < num_titles)
|
if (r < num_titles)
|
||||||
{
|
{
|
||||||
u64 tid = titleList[r];
|
u64 tid = titleList[r];
|
||||||
sprintf(output, "%08x", TITLE_LOWER( tid ));
|
sprintf(output, "%08x", (unsigned int)TITLE_LOWER( tid ));
|
||||||
}
|
}
|
||||||
else output[0] = 0;
|
else output[0] = 0;
|
||||||
ret = true;
|
ret = true;
|
||||||
|
@ -154,7 +154,7 @@ bool operator<(const BROWSERENTRY &f1, const BROWSERENTRY &f2)
|
|||||||
if (f1.isdir && !(f2.isdir)) return true;
|
if (f1.isdir && !(f2.isdir)) return true;
|
||||||
if (!(f1.isdir) && f2.isdir) return false;
|
if (!(f1.isdir) && f2.isdir) return false;
|
||||||
|
|
||||||
return stricmp(f1.filename, f2.filename) < 0;
|
return strcasecmp(f1.filename, f2.filename) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ParseFilter(FILTERCASCADE *Filter, BROWSERENTRY* Entry)
|
int ParseFilter(FILTERCASCADE *Filter, BROWSERENTRY* Entry)
|
||||||
@ -208,7 +208,7 @@ int ParseDirectory(const char* Path, int Flags, FILTERCASCADE *Filter)
|
|||||||
}
|
}
|
||||||
for (i = 0; i < browsers.size(); i++) // searchs the browser who match the path
|
for (i = 0; i < browsers.size(); i++) // searchs the browser who match the path
|
||||||
{
|
{
|
||||||
if (strnicmp(fulldir, browsers[i].rootdir, strlen(browsers[i].rootdir) - 1 /*means without trailing '/'*/)
|
if (strncasecmp(fulldir, browsers[i].rootdir, strlen(browsers[i].rootdir) - 1 /*means without trailing '/'*/)
|
||||||
== 0)
|
== 0)
|
||||||
{
|
{
|
||||||
browser = &browsers[curDevice];
|
browser = &browsers[curDevice];
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <gccore.h>
|
#include <gccore.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
|
||||||
#define MAXJOLIET 255
|
#define MAXJOLIET 255
|
||||||
#define MAXDISPLAY MAXPATHLEN
|
#define MAXDISPLAY MAXPATHLEN
|
||||||
|
@ -197,7 +197,7 @@ bool CGameSettings::Save()
|
|||||||
fprintf(f, "iosreloadblock:%d; ", GameList[i].iosreloadblock);
|
fprintf(f, "iosreloadblock:%d; ", GameList[i].iosreloadblock);
|
||||||
fprintf(f, "patchcountrystrings:%d; ", GameList[i].patchcountrystrings);
|
fprintf(f, "patchcountrystrings:%d; ", GameList[i].patchcountrystrings);
|
||||||
fprintf(f, "loadalternatedol:%d; ", GameList[i].loadalternatedol);
|
fprintf(f, "loadalternatedol:%d; ", GameList[i].loadalternatedol);
|
||||||
fprintf(f, "alternatedolstart:%d; ", GameList[i].alternatedolstart);
|
fprintf(f, "alternatedolstart:%d; ", (int)GameList[i].alternatedolstart);
|
||||||
fprintf(f, "alternatedolname:%s; ", GameList[i].alternatedolname.c_str());
|
fprintf(f, "alternatedolname:%s; ", GameList[i].alternatedolname.c_str());
|
||||||
fprintf(f, "returnTo:%d; ", GameList[i].returnTo);
|
fprintf(f, "returnTo:%d; ", GameList[i].returnTo);
|
||||||
fprintf(f, "sneekVideoPatch:%d; ", GameList[i].sneekVideoPatch);
|
fprintf(f, "sneekVideoPatch:%d; ", GameList[i].sneekVideoPatch);
|
||||||
@ -223,6 +223,8 @@ bool CGameSettings::Save()
|
|||||||
fprintf(f, "NINVideoOffset:%d; ", GameList[i].NINVideoOffset);
|
fprintf(f, "NINVideoOffset:%d; ", GameList[i].NINVideoOffset);
|
||||||
fprintf(f, "NINRemlimit:%d; ", GameList[i].NINRemlimit);
|
fprintf(f, "NINRemlimit:%d; ", GameList[i].NINRemlimit);
|
||||||
fprintf(f, "NINArcadeMode:%d; ", GameList[i].NINArcadeMode);
|
fprintf(f, "NINArcadeMode:%d; ", GameList[i].NINArcadeMode);
|
||||||
|
fprintf(f, "NINCCRumble:%d; ", GameList[i].NINCCRumble);
|
||||||
|
fprintf(f, "NINSkipIPL:%d; ", GameList[i].NINSkipIPL);
|
||||||
fprintf(f, "NINMCEmulation:%d; ", GameList[i].NINMCEmulation);
|
fprintf(f, "NINMCEmulation:%d; ", GameList[i].NINMCEmulation);
|
||||||
fprintf(f, "NINMCSize:%d; ", GameList[i].NINMCSize);
|
fprintf(f, "NINMCSize:%d; ", GameList[i].NINMCSize);
|
||||||
fprintf(f, "NINUSBHID:%d; ", GameList[i].NINUSBHID);
|
fprintf(f, "NINUSBHID:%d; ", GameList[i].NINUSBHID);
|
||||||
@ -441,6 +443,16 @@ bool CGameSettings::SetSetting(GameCFG & game, const char *name, const char *val
|
|||||||
game.NINArcadeMode = atoi(value);
|
game.NINArcadeMode = atoi(value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(name, "NINCCRumble") == 0)
|
||||||
|
{
|
||||||
|
game.NINCCRumble = atoi(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (strcmp(name, "NINSkipIPL") == 0)
|
||||||
|
{
|
||||||
|
game.NINSkipIPL = atoi(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else if(strcmp(name, "NINMCEmulation") == 0)
|
else if(strcmp(name, "NINMCEmulation") == 0)
|
||||||
{
|
{
|
||||||
game.NINMCEmulation = atoi(value);
|
game.NINMCEmulation = atoi(value);
|
||||||
@ -669,6 +681,8 @@ void CGameSettings::SetDefault(GameCFG &game)
|
|||||||
game.NINVideoOffset = INHERIT - 20;
|
game.NINVideoOffset = INHERIT - 20;
|
||||||
game.NINRemlimit = INHERIT;
|
game.NINRemlimit = INHERIT;
|
||||||
game.NINArcadeMode = INHERIT;
|
game.NINArcadeMode = INHERIT;
|
||||||
|
game.NINCCRumble = INHERIT;
|
||||||
|
game.NINSkipIPL = INHERIT;
|
||||||
game.NINMCEmulation = INHERIT;
|
game.NINMCEmulation = INHERIT;
|
||||||
game.NINMCSize = INHERIT;
|
game.NINMCSize = INHERIT;
|
||||||
game.NINUSBHID = INHERIT;
|
game.NINUSBHID = INHERIT;
|
||||||
|
@ -47,6 +47,8 @@ typedef struct _GameCFG
|
|||||||
short NINVideoOffset;
|
short NINVideoOffset;
|
||||||
short NINRemlimit;
|
short NINRemlimit;
|
||||||
short NINArcadeMode;
|
short NINArcadeMode;
|
||||||
|
short NINCCRumble;
|
||||||
|
short NINSkipIPL;
|
||||||
short NINMCEmulation;
|
short NINMCEmulation;
|
||||||
short NINMCSize;
|
short NINMCSize;
|
||||||
short NINUSBHID;
|
short NINUSBHID;
|
||||||
|
@ -188,10 +188,12 @@ void CSettings::SetDefault()
|
|||||||
NINDeflicker = OFF;
|
NINDeflicker = OFF;
|
||||||
NINPal50Patch = OFF;
|
NINPal50Patch = OFF;
|
||||||
NINWiiUWide = widescreen;
|
NINWiiUWide = widescreen;
|
||||||
NINVideoScale = 40;
|
NINVideoScale = 0;
|
||||||
NINVideoOffset = 0;
|
NINVideoOffset = 0;
|
||||||
NINRemlimit = OFF;
|
NINRemlimit = OFF;
|
||||||
NINArcadeMode = OFF;
|
NINArcadeMode = OFF;
|
||||||
|
NINCCRumble = OFF;
|
||||||
|
NINSkipIPL = OFF;
|
||||||
NINMCEmulation = ON;
|
NINMCEmulation = ON;
|
||||||
NINMCSize = 2;
|
NINMCSize = 2;
|
||||||
NINAutoboot = ON;
|
NINAutoboot = ON;
|
||||||
@ -357,9 +359,9 @@ bool CSettings::Save()
|
|||||||
fprintf(file, "ShowFreeSpace = %d\n", ShowFreeSpace);
|
fprintf(file, "ShowFreeSpace = %d\n", ShowFreeSpace);
|
||||||
fprintf(file, "InstallToDir = %d\n", InstallToDir);
|
fprintf(file, "InstallToDir = %d\n", InstallToDir);
|
||||||
fprintf(file, "GameSplit = %d\n", GameSplit);
|
fprintf(file, "GameSplit = %d\n", GameSplit);
|
||||||
fprintf(file, "InstallPartitions = %08X\n", InstallPartitions);
|
fprintf(file, "InstallPartitions = %08X\n", (unsigned int)InstallPartitions);
|
||||||
fprintf(file, "PlaylogUpdate = %d\n", PlaylogUpdate);
|
fprintf(file, "PlaylogUpdate = %d\n", PlaylogUpdate);
|
||||||
fprintf(file, "ParentalBlocks = %08X\n", ParentalBlocks);
|
fprintf(file, "ParentalBlocks = %08X\n", (unsigned int)ParentalBlocks);
|
||||||
fprintf(file, "returnTo = %s\n", returnTo);
|
fprintf(file, "returnTo = %s\n", returnTo);
|
||||||
fprintf(file, "HomeMenu = %d\n", HomeMenu);
|
fprintf(file, "HomeMenu = %d\n", HomeMenu);
|
||||||
fprintf(file, "MultiplePartitions = %d\n", MultiplePartitions);
|
fprintf(file, "MultiplePartitions = %d\n", MultiplePartitions);
|
||||||
@ -373,7 +375,7 @@ bool CSettings::Save()
|
|||||||
fprintf(file, "EnabledCategories = ");
|
fprintf(file, "EnabledCategories = ");
|
||||||
for(u32 i = 0; i < EnabledCategories.size(); ++i)
|
for(u32 i = 0; i < EnabledCategories.size(); ++i)
|
||||||
{
|
{
|
||||||
fprintf(file, "%i", EnabledCategories[i]);
|
fprintf(file, "%i", (int)EnabledCategories[i]);
|
||||||
if(i+1 < EnabledCategories.size())
|
if(i+1 < EnabledCategories.size())
|
||||||
fprintf(file, ",");
|
fprintf(file, ",");
|
||||||
}
|
}
|
||||||
@ -381,7 +383,7 @@ bool CSettings::Save()
|
|||||||
fprintf(file, "RequiredCategories = ");
|
fprintf(file, "RequiredCategories = ");
|
||||||
for(u32 i = 0; i < RequiredCategories.size(); ++i)
|
for(u32 i = 0; i < RequiredCategories.size(); ++i)
|
||||||
{
|
{
|
||||||
fprintf(file, "%i", RequiredCategories[i]);
|
fprintf(file, "%i", (int)RequiredCategories[i]);
|
||||||
if(i+1 < RequiredCategories.size())
|
if(i+1 < RequiredCategories.size())
|
||||||
fprintf(file, ",");
|
fprintf(file, ",");
|
||||||
}
|
}
|
||||||
@ -389,7 +391,7 @@ bool CSettings::Save()
|
|||||||
fprintf(file, "ForbiddenCategories = ");
|
fprintf(file, "ForbiddenCategories = ");
|
||||||
for(u32 i = 0; i < ForbiddenCategories.size(); ++i)
|
for(u32 i = 0; i < ForbiddenCategories.size(); ++i)
|
||||||
{
|
{
|
||||||
fprintf(file, "%i", ForbiddenCategories[i]);
|
fprintf(file, "%i", (int)ForbiddenCategories[i]);
|
||||||
if(i+1 < ForbiddenCategories.size())
|
if(i+1 < ForbiddenCategories.size())
|
||||||
fprintf(file, ",");
|
fprintf(file, ",");
|
||||||
}
|
}
|
||||||
@ -449,6 +451,8 @@ bool CSettings::Save()
|
|||||||
fprintf(file, "NINVideoOffset = %d\n", NINVideoOffset);
|
fprintf(file, "NINVideoOffset = %d\n", NINVideoOffset);
|
||||||
fprintf(file, "NINRemlimit = %d\n", NINRemlimit);
|
fprintf(file, "NINRemlimit = %d\n", NINRemlimit);
|
||||||
fprintf(file, "NINArcadeMode = %d\n", NINArcadeMode);
|
fprintf(file, "NINArcadeMode = %d\n", NINArcadeMode);
|
||||||
|
fprintf(file, "NINCCRumble = %d\n", NINCCRumble);
|
||||||
|
fprintf(file, "NINSkipIPL = %d\n", NINSkipIPL);
|
||||||
fprintf(file, "NINMCEmulation = %d\n", NINMCEmulation);
|
fprintf(file, "NINMCEmulation = %d\n", NINMCEmulation);
|
||||||
fprintf(file, "NINMCSize = %d\n", NINMCSize);
|
fprintf(file, "NINMCSize = %d\n", NINMCSize);
|
||||||
fprintf(file, "NINAutoboot = %d\n", NINAutoboot);
|
fprintf(file, "NINAutoboot = %d\n", NINAutoboot);
|
||||||
@ -974,6 +978,16 @@ bool CSettings::SetSetting(char *name, char *value)
|
|||||||
NINArcadeMode = atoi(value);
|
NINArcadeMode = atoi(value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(name, "NINCCRumble") == 0)
|
||||||
|
{
|
||||||
|
NINCCRumble = atoi(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (strcmp(name, "NINSkipIPL") == 0)
|
||||||
|
{
|
||||||
|
NINSkipIPL = atoi(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else if (strcmp(name, "NINMCEmulation") == 0)
|
else if (strcmp(name, "NINMCEmulation") == 0)
|
||||||
{
|
{
|
||||||
NINMCEmulation = atoi(value);
|
NINMCEmulation = atoi(value);
|
||||||
|
@ -196,6 +196,8 @@ class CSettings
|
|||||||
short NINVideoOffset;
|
short NINVideoOffset;
|
||||||
short NINRemlimit;
|
short NINRemlimit;
|
||||||
short NINArcadeMode;
|
short NINArcadeMode;
|
||||||
|
short NINCCRumble;
|
||||||
|
short NINSkipIPL;
|
||||||
s8 NINMCEmulation;
|
s8 NINMCEmulation;
|
||||||
short NINMCSize;
|
short NINMCSize;
|
||||||
short NINAutoboot;
|
short NINAutoboot;
|
||||||
|
@ -312,7 +312,7 @@ int FeatureSettingsMenu::GetMenuInternal()
|
|||||||
|
|
||||||
if(gameList[i]->tid != 0) //! Channels
|
if(gameList[i]->tid != 0) //! Channels
|
||||||
{
|
{
|
||||||
snprintf(nandPath, sizeof(nandPath), "/title/%08x/%08x/data", (u32) (gameList[i]->tid >> 32), (u32) gameList[i]->tid );
|
snprintf(nandPath, sizeof(nandPath), "/title/%08x/%08x/data", (unsigned int) (gameList[i]->tid >> 32), (unsigned int) gameList[i]->tid );
|
||||||
snprintf(filePath, sizeof(filePath), "%s%s", Settings.NandEmuChanPath, nandPath);
|
snprintf(filePath, sizeof(filePath), "%s%s", Settings.NandEmuChanPath, nandPath);
|
||||||
}
|
}
|
||||||
else //! Wii games
|
else //! Wii games
|
||||||
|
@ -198,6 +198,8 @@ void GCGameLoadSM::SetOptionNames()
|
|||||||
Options->SetName(Idx++, "%s", tr( "Ocarina" ));
|
Options->SetName(Idx++, "%s", tr( "Ocarina" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "Remove Read Speed Limit" ));
|
Options->SetName(Idx++, "%s", tr( "Remove Read Speed Limit" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "Triforce Arcade Mode" ));
|
Options->SetName(Idx++, "%s", tr( "Triforce Arcade Mode" ));
|
||||||
|
Options->SetName(Idx++, "%s", tr("CC Rumble"));
|
||||||
|
Options->SetName(Idx++, "%s", tr("Skip IPL"));
|
||||||
Options->SetName(Idx++, "%s", tr( "Memory Card Emulation" ));
|
Options->SetName(Idx++, "%s", tr( "Memory Card Emulation" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "Memory Card Blocks Size" ));
|
Options->SetName(Idx++, "%s", tr( "Memory Card Blocks Size" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "USB-HID Controller" ));
|
Options->SetName(Idx++, "%s", tr( "USB-HID Controller" ));
|
||||||
@ -402,6 +404,18 @@ void GCGameLoadSM::SetOptionValues()
|
|||||||
else
|
else
|
||||||
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.NINArcadeMode]));
|
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.NINArcadeMode]));
|
||||||
|
|
||||||
|
//! Settings: NIN CC Rumble
|
||||||
|
if (GameConfig.NINCCRumble == INHERIT)
|
||||||
|
Options->SetValue(Idx++, tr("Use global"));
|
||||||
|
else
|
||||||
|
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.NINCCRumble]));
|
||||||
|
|
||||||
|
//! Settings: NIN Skip IPL
|
||||||
|
if (GameConfig.NINSkipIPL == INHERIT)
|
||||||
|
Options->SetValue(Idx++, tr("Use global"));
|
||||||
|
else
|
||||||
|
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.NINSkipIPL]));
|
||||||
|
|
||||||
//! Settings: NIN Memory Card Emulation
|
//! Settings: NIN Memory Card Emulation
|
||||||
if(GameConfig.NINMCEmulation == INHERIT)
|
if(GameConfig.NINMCEmulation == INHERIT)
|
||||||
Options->SetValue(Idx++, tr("Use global"));
|
Options->SetValue(Idx++, tr("Use global"));
|
||||||
@ -743,6 +757,18 @@ int GCGameLoadSM::GetMenuInternal()
|
|||||||
if (++GameConfig.NINArcadeMode >= MAX_ON_OFF) GameConfig.NINArcadeMode = INHERIT;
|
if (++GameConfig.NINArcadeMode >= MAX_ON_OFF) GameConfig.NINArcadeMode = INHERIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Settings: NIN CC Rumble
|
||||||
|
else if (currentGCmode == GC_MODE_NINTENDONT && ret == ++Idx)
|
||||||
|
{
|
||||||
|
if (++GameConfig.NINCCRumble >= MAX_ON_OFF) GameConfig.NINCCRumble = INHERIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Settings: NIN Skip IPL
|
||||||
|
else if (currentGCmode == GC_MODE_NINTENDONT && ret == ++Idx)
|
||||||
|
{
|
||||||
|
if (++GameConfig.NINSkipIPL >= MAX_ON_OFF) GameConfig.NINSkipIPL = INHERIT;
|
||||||
|
}
|
||||||
|
|
||||||
//! Settings: NIN Memory Card Emulation
|
//! Settings: NIN Memory Card Emulation
|
||||||
else if (currentGCmode == GC_MODE_NINTENDONT && ret == ++Idx)
|
else if (currentGCmode == GC_MODE_NINTENDONT && ret == ++Idx)
|
||||||
{
|
{
|
||||||
|
@ -355,9 +355,9 @@ void GameLoadSM::SetOptionValues()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(GameConfig.alternatedolname.size() != 0)
|
if(GameConfig.alternatedolname.size() != 0)
|
||||||
Options->SetValue(Idx++, "%i <%s>", GameConfig.alternatedolstart, GameConfig.alternatedolname.c_str());
|
Options->SetValue(Idx++, "%i <%s>", (int)GameConfig.alternatedolstart, GameConfig.alternatedolname.c_str());
|
||||||
else
|
else
|
||||||
Options->SetValue(Idx++, "%i", GameConfig.alternatedolstart);
|
Options->SetValue(Idx++, "%i", (int)GameConfig.alternatedolstart);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -612,7 +612,7 @@ int GameLoadSM::GetMenuInternal()
|
|||||||
{
|
{
|
||||||
GameConfig.alternatedolname = tmp;
|
GameConfig.alternatedolname = tmp;
|
||||||
GameConfig.alternatedolstart = res;
|
GameConfig.alternatedolstart = res;
|
||||||
snprintf(tmp, sizeof(tmp), "%s %.6s - %i", tr( "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team." ), (char *) GameConfig.id, GameConfig.alternatedolstart);
|
snprintf(tmp, sizeof(tmp), "%s %.6s - %i", tr( "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team." ), (char *) GameConfig.id, (int)GameConfig.alternatedolstart);
|
||||||
WindowPrompt(0, tmp, tr( "OK" ));
|
WindowPrompt(0, tmp, tr( "OK" ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ void GameSettingsMenu::CreateSettingsMenu(int menuNr)
|
|||||||
char nandPath[512];
|
char nandPath[512];
|
||||||
if(DiscHeader->tid != 0) //! Channels
|
if(DiscHeader->tid != 0) //! Channels
|
||||||
{
|
{
|
||||||
snprintf(nandPath, sizeof(nandPath), "/title/%08x/%08x/data", (u32) (DiscHeader->tid >> 32), (u32) DiscHeader->tid);
|
snprintf(nandPath, sizeof(nandPath), "/title/%08x/%08x/data", (unsigned int) (DiscHeader->tid >> 32), (unsigned int) DiscHeader->tid);
|
||||||
snprintf(filePath, sizeof(filePath), "%s%s", Settings.NandEmuChanPath, nandPath);
|
snprintf(filePath, sizeof(filePath), "%s%s", Settings.NandEmuChanPath, nandPath);
|
||||||
}
|
}
|
||||||
else //! Wii games
|
else //! Wii games
|
||||||
|
@ -236,6 +236,8 @@ LoaderSettings::LoaderSettings()
|
|||||||
Options->SetName(Idx++, "%s", tr( "Video offset" ));
|
Options->SetName(Idx++, "%s", tr( "Video offset" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "Remove Read Speed Limit" ));
|
Options->SetName(Idx++, "%s", tr( "Remove Read Speed Limit" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "Triforce Arcade Mode" ));
|
Options->SetName(Idx++, "%s", tr( "Triforce Arcade Mode" ));
|
||||||
|
Options->SetName(Idx++, "%s", tr("CC Rumble"));
|
||||||
|
Options->SetName(Idx++, "%s", tr("Skip IPL"));
|
||||||
Options->SetName(Idx++, "%s", tr( "Memory Card Emulation" ));
|
Options->SetName(Idx++, "%s", tr( "Memory Card Emulation" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "Memory Card Blocks Size" ));
|
Options->SetName(Idx++, "%s", tr( "Memory Card Blocks Size" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "USB-HID Controller" ));
|
Options->SetName(Idx++, "%s", tr( "USB-HID Controller" ));
|
||||||
@ -430,7 +432,7 @@ void LoaderSettings::SetOptionValues()
|
|||||||
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.NINWiiUWide]));
|
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.NINWiiUWide]));
|
||||||
|
|
||||||
//! Settings: NIN VideoScale
|
//! Settings: NIN VideoScale
|
||||||
Options->SetValue(Idx++, "%d (40~120)", Settings.NINVideoScale);
|
Options->SetValue(Idx++, "%d (0, 40~120)", Settings.NINVideoScale);
|
||||||
|
|
||||||
//! Settings: NIN VideoOffset
|
//! Settings: NIN VideoOffset
|
||||||
Options->SetValue(Idx++, "%d (-20~20)", Settings.NINVideoOffset);
|
Options->SetValue(Idx++, "%d (-20~20)", Settings.NINVideoOffset);
|
||||||
@ -441,6 +443,12 @@ void LoaderSettings::SetOptionValues()
|
|||||||
//! Settings: NIN Arcade Mode
|
//! Settings: NIN Arcade Mode
|
||||||
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.NINArcadeMode]));
|
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.NINArcadeMode]));
|
||||||
|
|
||||||
|
//! Settings: NIN CC Rumble
|
||||||
|
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.NINCCRumble]));
|
||||||
|
|
||||||
|
//! Settings: NIN Skip IPL
|
||||||
|
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.NINSkipIPL]));
|
||||||
|
|
||||||
//! Settings: NIN Memory Card Emulation
|
//! Settings: NIN Memory Card Emulation
|
||||||
Options->SetValue(Idx++, "%s", tr(NINMCText[Settings.NINMCEmulation]));
|
Options->SetValue(Idx++, "%s", tr(NINMCText[Settings.NINMCEmulation]));
|
||||||
|
|
||||||
@ -807,7 +815,7 @@ int LoaderSettings::GetMenuInternal()
|
|||||||
snprintf(entrie, sizeof(entrie), "%i", Settings.NINVideoScale);
|
snprintf(entrie, sizeof(entrie), "%i", Settings.NINVideoScale);
|
||||||
int ret = OnScreenNumpad(entrie, sizeof(entrie));
|
int ret = OnScreenNumpad(entrie, sizeof(entrie));
|
||||||
if(ret)
|
if(ret)
|
||||||
Settings.NINVideoScale = LIMIT(atoi(entrie), 40, 120);
|
Settings.NINVideoScale = (atoi(entrie) == 0) ? 0 : LIMIT(atoi(entrie), 40, 120);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Settings: NIN VideoOffset
|
//! Settings: NIN VideoOffset
|
||||||
@ -832,6 +840,18 @@ int LoaderSettings::GetMenuInternal()
|
|||||||
if (++Settings.NINArcadeMode >= MAX_ON_OFF) Settings.NINArcadeMode = 0;
|
if (++Settings.NINArcadeMode >= MAX_ON_OFF) Settings.NINArcadeMode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Settings: NIN CC Rumble
|
||||||
|
else if (ret == ++Idx)
|
||||||
|
{
|
||||||
|
if (++Settings.NINCCRumble >= MAX_ON_OFF) Settings.NINCCRumble = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Settings: NIN Skip IPL
|
||||||
|
else if (ret == ++Idx)
|
||||||
|
{
|
||||||
|
if (++Settings.NINSkipIPL >= MAX_ON_OFF) Settings.NINSkipIPL = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//! Settings: NIN Memory Card Emulation
|
//! Settings: NIN Memory Card Emulation
|
||||||
else if (ret == ++Idx)
|
else if (ret == ++Idx)
|
||||||
{
|
{
|
||||||
|
@ -140,11 +140,11 @@ int UninstallSM::GetMenuInternal()
|
|||||||
else if(DiscHeader->type == TYPE_GAME_EMUNANDCHAN && DiscHeader->tid != 0)
|
else if(DiscHeader->type == TYPE_GAME_EMUNANDCHAN && DiscHeader->tid != 0)
|
||||||
{
|
{
|
||||||
// Remove ticket
|
// Remove ticket
|
||||||
snprintf(filepath, sizeof(filepath), "%s/ticket/%08x/%08x.tik", Settings.NandEmuChanPath, (u32) (DiscHeader->tid >> 32), (u32) DiscHeader->tid);
|
snprintf(filepath, sizeof(filepath), "%s/ticket/%08x/%08x.tik", Settings.NandEmuChanPath, (unsigned int) (DiscHeader->tid >> 32), (unsigned int) DiscHeader->tid);
|
||||||
RemoveFile(filepath);
|
RemoveFile(filepath);
|
||||||
|
|
||||||
// Remove contents / data
|
// Remove contents / data
|
||||||
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/", Settings.NandEmuChanPath, (u32) (DiscHeader->tid >> 32), (u32) DiscHeader->tid);
|
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/", Settings.NandEmuChanPath, (unsigned int) (DiscHeader->tid >> 32), (unsigned int) DiscHeader->tid);
|
||||||
RemoveDirectory(filepath);
|
RemoveDirectory(filepath);
|
||||||
|
|
||||||
Channels::Instance()->GetEmuChannelList();
|
Channels::Instance()->GetEmuChannelList();
|
||||||
|
@ -205,6 +205,7 @@ void Sys_BackToLoader(void)
|
|||||||
#define HBC_JODI 0x000100014A4F4449LL
|
#define HBC_JODI 0x000100014A4F4449LL
|
||||||
#define HBC_1_0_7 0x00010001AF1BF516LL
|
#define HBC_1_0_7 0x00010001AF1BF516LL
|
||||||
#define HBC_LULZ 0x000100014c554c5aLL
|
#define HBC_LULZ 0x000100014c554c5aLL
|
||||||
|
#define HBC_OHBC 0x000100014F484243LL
|
||||||
|
|
||||||
void Sys_LoadHBC(void)
|
void Sys_LoadHBC(void)
|
||||||
{
|
{
|
||||||
@ -213,10 +214,12 @@ void Sys_LoadHBC(void)
|
|||||||
WII_Initialize();
|
WII_Initialize();
|
||||||
|
|
||||||
// Try launching all known HBC titles in reversed released order
|
// Try launching all known HBC titles in reversed released order
|
||||||
|
WII_LaunchTitle(HBC_OHBC);
|
||||||
WII_LaunchTitle(HBC_LULZ);
|
WII_LaunchTitle(HBC_LULZ);
|
||||||
WII_LaunchTitle(HBC_1_0_7);
|
WII_LaunchTitle(HBC_1_0_7);
|
||||||
WII_LaunchTitle(HBC_JODI);
|
WII_LaunchTitle(HBC_JODI);
|
||||||
WII_LaunchTitle(HBC_HAXX);
|
WII_LaunchTitle(HBC_HAXX);
|
||||||
|
//Todo : jump to 0x80001800, which is what libogc does when you return from main(), not hardcode any ID, so it works with everything
|
||||||
|
|
||||||
//Back to system menu if all fails
|
//Back to system menu if all fails
|
||||||
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
||||||
|
@ -600,7 +600,7 @@ iosinfo_t *IosLoader::GetIOSInfo(s32 ios)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(filepath, sizeof(filepath), "/title/%08x/%08x/content/%08x.app", 0x00000001, ios, *(u8 *)((u32)TMD+0x1E7));
|
snprintf(filepath, sizeof(filepath), "/title/%08x/%08x/content/%08x.app", 0x00000001, (unsigned int)ios, (unsigned int)(*(u8 *)((u32)TMD+0x1E7)));
|
||||||
|
|
||||||
free(TMD);
|
free(TMD);
|
||||||
|
|
||||||
|
@ -39,15 +39,19 @@ static const u8 di_readlimit_patch[] = { 0x7e, 0xd4 };
|
|||||||
|
|
||||||
static const u8 isfs_permissions_old[] = { 0x42, 0x8B, 0xD0, 0x01, 0x25, 0x66 };
|
static const u8 isfs_permissions_old[] = { 0x42, 0x8B, 0xD0, 0x01, 0x25, 0x66 };
|
||||||
static const u8 isfs_permissions_patch[] = { 0x42, 0x8B, 0xE0, 0x01, 0x25, 0x66 };
|
static const u8 isfs_permissions_patch[] = { 0x42, 0x8B, 0xE0, 0x01, 0x25, 0x66 };
|
||||||
|
#if 0
|
||||||
static const u8 setuid_old[] = { 0xD1, 0x2A, 0x1C, 0x39 };
|
static const u8 setuid_old[] = { 0xD1, 0x2A, 0x1C, 0x39 };
|
||||||
static const u8 setuid_patch[] = { 0x46, 0xC0 };
|
static const u8 setuid_patch[] = { 0x46, 0xC0 };
|
||||||
|
#endif
|
||||||
static const u8 es_identify_old[] = { 0x28, 0x03, 0xD1, 0x23 };
|
static const u8 es_identify_old[] = { 0x28, 0x03, 0xD1, 0x23 };
|
||||||
static const u8 es_identify_patch[] = { 0x00, 0x00 };
|
static const u8 es_identify_patch[] = { 0x00, 0x00 };
|
||||||
static const u8 hash_old[] = { 0x20, 0x07, 0x23, 0xA2 };
|
static const u8 hash_old[] = { 0x20, 0x07, 0x23, 0xA2 };
|
||||||
static const u8 hash_patch[] = { 0x00 };
|
static const u8 hash_patch[] = { 0x00 };
|
||||||
static const u8 new_hash_old[] = { 0x20, 0x07, 0x4B, 0x0B };
|
static const u8 new_hash_old[] = { 0x20, 0x07, 0x4B, 0x0B };
|
||||||
|
#if 0
|
||||||
static const u8 addticket_vers_check[] = { 0xD2, 0x01, 0x4E, 0x56 };
|
static const u8 addticket_vers_check[] = { 0xD2, 0x01, 0x4E, 0x56 };
|
||||||
static const u8 addticket_patch[] = { 0xE0 };
|
static const u8 addticket_patch[] = { 0xE0 };
|
||||||
|
#endif
|
||||||
static const u8 es_set_ahbprot_old[] = { 0x68, 0x5B, 0x22, 0xEC, 0x00, 0x52, 0x18, 0x9B, 0x68, 0x1B, 0x46, 0x98, 0x07, 0xDB };
|
static const u8 es_set_ahbprot_old[] = { 0x68, 0x5B, 0x22, 0xEC, 0x00, 0x52, 0x18, 0x9B, 0x68, 0x1B, 0x46, 0x98, 0x07, 0xDB };
|
||||||
static const u8 es_set_ahbprot_patch[] = { 0x01 };
|
static const u8 es_set_ahbprot_patch[] = { 0x01 };
|
||||||
|
|
||||||
@ -92,10 +96,12 @@ static const u8 Kill_AntiSysTitleInstallv3_pt3_old[] = { 0x68, 0xFB, 0x2B, 0x00,
|
|||||||
static const u8 Kill_AntiSysTitleInstallv3_pt3_patch[] = { 0x68, 0xFB, 0x2B, 0x00, 0xDB, 0x10 };
|
static const u8 Kill_AntiSysTitleInstallv3_pt3_patch[] = { 0x68, 0xFB, 0x2B, 0x00, 0xDB, 0x10 };
|
||||||
|
|
||||||
/* ISFS_SetAttr patches made by megazig */
|
/* ISFS_SetAttr patches made by megazig */
|
||||||
|
#if 0
|
||||||
static const u8 isfs_setattr_pt1_old[] = { 0x42, 0xAB, 0xD0, 0x02, 0x20, 0x66 };
|
static const u8 isfs_setattr_pt1_old[] = { 0x42, 0xAB, 0xD0, 0x02, 0x20, 0x66 };
|
||||||
static const u8 isfs_setattr_pt1_patch[] = { 0x42, 0xAB, 0xE0, 0x02, 0x20, 0x66 };
|
static const u8 isfs_setattr_pt1_patch[] = { 0x42, 0xAB, 0xE0, 0x02, 0x20, 0x66 };
|
||||||
static const u8 isfs_setattr_pt2_old[] = { 0x2D, 0x00, 0xD0, 0x02, 0x20, 0x66 };
|
static const u8 isfs_setattr_pt2_old[] = { 0x2D, 0x00, 0xD0, 0x02, 0x20, 0x66 };
|
||||||
static const u8 isfs_setattr_pt2_patch[] = { 0x2D, 0x00, 0xE0, 0x02, 0x20, 0x66 };
|
static const u8 isfs_setattr_pt2_patch[] = { 0x2D, 0x00, 0xE0, 0x02, 0x20, 0x66 };
|
||||||
|
#endif
|
||||||
|
|
||||||
static u8 apply_patch(const char *name, const u8 *old, u32 old_size, const u8 *patch, size_t patch_size, u32 patch_offset, bool verbose) {
|
static u8 apply_patch(const char *name, const u8 *old, u32 old_size, const u8 *patch, size_t patch_size, u32 patch_offset, bool verbose) {
|
||||||
u8 *ptr_start = (u8*)*((u32*)0x80003134), *ptr_end = (u8*)0x94000000;
|
u8 *ptr_start = (u8*)*((u32*)0x80003134), *ptr_end = (u8*)0x94000000;
|
||||||
|
@ -49,7 +49,7 @@ extern "C" {
|
|||||||
//==============================================================================
|
//==============================================================================
|
||||||
// Extra standard declarations
|
// Extra standard declarations
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
typedef signed int s32;
|
//typedef signed int s32;
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
@ -975,6 +975,8 @@ int GameBooter::BootNintendont(struct discHdr *gameHdr)
|
|||||||
u8 ninPal50PatchChoice = game_cfg->NINPal50Patch == INHERIT ? Settings.NINPal50Patch : game_cfg->NINPal50Patch;
|
u8 ninPal50PatchChoice = game_cfg->NINPal50Patch == INHERIT ? Settings.NINPal50Patch : game_cfg->NINPal50Patch;
|
||||||
u8 ninRemlimitChoice = game_cfg->NINRemlimit == INHERIT ? Settings.NINRemlimit : game_cfg->NINRemlimit;
|
u8 ninRemlimitChoice = game_cfg->NINRemlimit == INHERIT ? Settings.NINRemlimit : game_cfg->NINRemlimit;
|
||||||
u8 ninArcadeModeChoice = game_cfg->NINArcadeMode == INHERIT ? Settings.NINArcadeMode : game_cfg->NINArcadeMode;
|
u8 ninArcadeModeChoice = game_cfg->NINArcadeMode == INHERIT ? Settings.NINArcadeMode : game_cfg->NINArcadeMode;
|
||||||
|
u8 ninCCRumbleChoice = game_cfg->NINCCRumble == INHERIT ? Settings.NINCCRumble : game_cfg->NINCCRumble;
|
||||||
|
u8 ninSkipIPLChoice = game_cfg->NINSkipIPL == INHERIT ? Settings.NINSkipIPL : game_cfg->NINSkipIPL;
|
||||||
|
|
||||||
const char *ninLoaderPath = game_cfg->NINLoaderPath.size() == 0 ? Settings.NINLoaderPath : game_cfg->NINLoaderPath.c_str();
|
const char *ninLoaderPath = game_cfg->NINLoaderPath.size() == 0 ? Settings.NINLoaderPath : game_cfg->NINLoaderPath.c_str();
|
||||||
|
|
||||||
@ -1421,6 +1423,10 @@ int GameBooter::BootNintendont(struct discHdr *gameHdr)
|
|||||||
nin_config->Config |= NIN_CFG_WIIU_WIDE; // v2.258+
|
nin_config->Config |= NIN_CFG_WIIU_WIDE; // v2.258+
|
||||||
if(ninArcadeModeChoice)
|
if(ninArcadeModeChoice)
|
||||||
nin_config->Config |= NIN_CFG_ARCADE_MODE; // v4.424+ Triforce Arcade Mode
|
nin_config->Config |= NIN_CFG_ARCADE_MODE; // v4.424+ Triforce Arcade Mode
|
||||||
|
if (ninCCRumbleChoice)
|
||||||
|
nin_config->Config |= NIN_CFG_CC_RUMBLE; // v4.424+ Classic Controller Rumble
|
||||||
|
if (ninSkipIPLChoice)
|
||||||
|
nin_config->Config |= NIN_CFG_SKIP_IPL; // v4.424+ Skip Gamecube BIOS
|
||||||
|
|
||||||
// Max Pads
|
// Max Pads
|
||||||
nin_config->MaxPads = ninMaxPadsChoice; // NIN_CFG_VERSION 2 r42
|
nin_config->MaxPads = ninMaxPadsChoice; // NIN_CFG_VERSION 2 r42
|
||||||
|
@ -35,7 +35,7 @@ void CreateTitleTMD(const char *path, const struct discHdr *hdr)
|
|||||||
if (!disc)
|
if (!disc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wiidisc_t *wdisc = wd_open_disc((int(*)(void *, u32, u32, void *)) wbfs_disc_read, disc);
|
wiidisc_t *wdisc = wd_open_disc((s32(*)(void *, u32, u32, void *)) wbfs_disc_read, disc);
|
||||||
if (!wdisc)
|
if (!wdisc)
|
||||||
{
|
{
|
||||||
WBFS_CloseDisc(disc);
|
WBFS_CloseDisc(disc);
|
||||||
|
@ -97,7 +97,7 @@ int split_get_file(split_info_t *s, u32 lba, u32 *sec_count, int fill)
|
|||||||
int fd;
|
int fd;
|
||||||
if (lba >= s->total_sec)
|
if (lba >= s->total_sec)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "SPLIT: invalid sector %u / %u\n", lba, (u32) s->total_sec);
|
fprintf(stderr, "SPLIT: invalid sector %u / %u\n", (unsigned int)lba, (unsigned int)s->total_sec);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
int idx;
|
int idx;
|
||||||
@ -150,7 +150,7 @@ int split_get_file(split_info_t *s, u32 lba, u32 *sec_count, int fill)
|
|||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
int split_read_sector(void *_fp, u32 lba, u32 count, void*buf)
|
s32 split_read_sector(void *_fp, u32 lba, u32 count, void*buf)
|
||||||
{
|
{
|
||||||
split_info_t *s = _fp;
|
split_info_t *s = _fp;
|
||||||
int fd;
|
int fd;
|
||||||
@ -166,7 +166,7 @@ int split_read_sector(void *_fp, u32 lba, u32 count, void*buf)
|
|||||||
fd = split_get_file(s, lba + i, &chunk, 1);
|
fd = split_get_file(s, lba + i, &chunk, 1);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "\n\n"FMT_lld" %d %p\n", off, count, _fp);
|
fprintf(stderr, "\n\n"FMT_lld" %d %p\n", off, (int)count, _fp);
|
||||||
split_error( "error seeking in disc partition" );
|
split_error( "error seeking in disc partition" );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -174,7 +174,7 @@ int split_read_sector(void *_fp, u32 lba, u32 count, void*buf)
|
|||||||
ret = read(fd, ptr, chunk * 512);
|
ret = read(fd, ptr, chunk * 512);
|
||||||
if (ret != chunk * 512)
|
if (ret != chunk * 512)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "error reading %u %u [%u] %u = %u\n", lba, count, i, chunk, ret);
|
fprintf(stderr, "error reading %u %u [%u] %u = %u\n", (unsigned int)lba, (unsigned int)count, i, (unsigned int)chunk, ret);
|
||||||
split_error( "error reading disc" );
|
split_error( "error reading disc" );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -182,7 +182,7 @@ int split_read_sector(void *_fp, u32 lba, u32 count, void*buf)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int split_write_sector(void *_fp, u32 lba, u32 count, void*buf)
|
s32 split_write_sector(void *_fp, u32 lba, u32 count, void*buf)
|
||||||
{
|
{
|
||||||
split_info_t *s = _fp;
|
split_info_t *s = _fp;
|
||||||
int fd;
|
int fd;
|
||||||
@ -200,7 +200,7 @@ int split_write_sector(void *_fp, u32 lba, u32 count, void*buf)
|
|||||||
// fprintf(stderr, "WRITE CHUNK %d %d/%d\n", lba+i, chunk, count);
|
// fprintf(stderr, "WRITE CHUNK %d %d/%d\n", lba+i, chunk, count);
|
||||||
if (fd < 0 || !chunk)
|
if (fd < 0 || !chunk)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "\n\n"FMT_lld" %d %p\n", off, count, _fp);
|
fprintf(stderr, "\n\n"FMT_lld" %d %p\n", off, (int)count, _fp);
|
||||||
split_error( "error seeking in disc partition" );
|
split_error( "error seeking in disc partition" );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -28,8 +28,8 @@ extern "C"
|
|||||||
int split_open_file(split_info_t *s, int idx);
|
int split_open_file(split_info_t *s, int idx);
|
||||||
int split_get_file(split_info_t *s, u32 lba, u32 *sec_count, int fill);
|
int split_get_file(split_info_t *s, u32 lba, u32 *sec_count, int fill);
|
||||||
int split_fill(split_info_t *s, int idx, u64 size);
|
int split_fill(split_info_t *s, int idx, u64 size);
|
||||||
int split_read_sector(void *_fp, u32 lba, u32 count, void*buf);
|
s32 split_read_sector(void *_fp, u32 lba, u32 count, void*buf);
|
||||||
int split_write_sector(void *_fp, u32 lba, u32 count, void*buf);
|
s32 split_write_sector(void *_fp, u32 lba, u32 count, void*buf);
|
||||||
void split_init(split_info_t *s, char *fname);
|
void split_init(split_info_t *s, char *fname);
|
||||||
void split_set_size(split_info_t *s, u64 split_size, u64 total_size);
|
void split_set_size(split_info_t *s, u64 split_size, u64 total_size);
|
||||||
void split_close(split_info_t *s);
|
void split_close(split_info_t *s);
|
||||||
|
@ -240,7 +240,7 @@ u64 WBFS_EstimeGameSize(void)
|
|||||||
return WbfsList[Settings.partition]->EstimateGameSize();
|
return WbfsList[Settings.partition]->EstimateGameSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
int WBFS_GetFragList(u8 *id)
|
s32 WBFS_GetFragList(u8 *id)
|
||||||
{
|
{
|
||||||
int part_num = gameList.GetPartitionNumber(id);
|
int part_num = gameList.GetPartitionNumber(id);
|
||||||
if(!VALID(part_num))
|
if(!VALID(part_num))
|
||||||
|
@ -33,7 +33,7 @@ extern "C"
|
|||||||
s32 WBFS_ReIDGame(u8 *discid, const void *newID);
|
s32 WBFS_ReIDGame(u8 *discid, const void *newID);
|
||||||
u64 WBFS_EstimeGameSize(void);
|
u64 WBFS_EstimeGameSize(void);
|
||||||
|
|
||||||
int WBFS_GetFragList(u8 *id);
|
s32 WBFS_GetFragList(u8 *id);
|
||||||
|
|
||||||
s32 WBFS_OpenAll();
|
s32 WBFS_OpenAll();
|
||||||
s32 WBFS_OpenPart(int part_num);
|
s32 WBFS_OpenPart(int part_num);
|
||||||
|
@ -17,7 +17,7 @@ class Wbfs
|
|||||||
s32 CheckGame(u8 *);
|
s32 CheckGame(u8 *);
|
||||||
s32 GameSize(u8 *, f32 *);
|
s32 GameSize(u8 *, f32 *);
|
||||||
bool IsMounted() { return hdd == 0; };
|
bool IsMounted() { return hdd == 0; };
|
||||||
virtual int GetFragList(u8 *id) { return 0; };
|
virtual s32 GetFragList(u8 *id) { return 0; };
|
||||||
|
|
||||||
virtual s32 Open() = 0;
|
virtual s32 Open() = 0;
|
||||||
virtual void Close() {};
|
virtual void Close() {};
|
||||||
|
@ -849,7 +849,7 @@ void Wbfs_Fat::CleanTitleCharacters(char *title)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Wbfs_Fat::GetFragList(u8 *id)
|
s32 Wbfs_Fat::GetFragList(u8 *id)
|
||||||
{
|
{
|
||||||
char fname[1024];
|
char fname[1024];
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ class Wbfs_Fat: public Wbfs
|
|||||||
|
|
||||||
void AddHeader(struct discHdr *discHeader);
|
void AddHeader(struct discHdr *discHeader);
|
||||||
|
|
||||||
virtual int GetFragList(u8 *);
|
virtual s32 GetFragList(u8 *);
|
||||||
virtual u8 GetFSType(void) { return PART_FS_FAT; }
|
virtual u8 GetFSType(void) { return PART_FS_FAT; }
|
||||||
|
|
||||||
static bool CheckLayoutB(char *fname, int len, u8* id, char *fname_title);
|
static bool CheckLayoutB(char *fname, int len, u8* id, char *fname_title);
|
||||||
@ -55,7 +55,7 @@ class Wbfs_Fat: public Wbfs
|
|||||||
|
|
||||||
void mk_gameid_title(struct discHdr *header, char *name, int re_space, int layout);
|
void mk_gameid_title(struct discHdr *header, char *name, int re_space, int layout);
|
||||||
|
|
||||||
static int nop_rw_sector(void *_fp, u32 lba, u32 count, void* buf) { return 0; }
|
static s32 nop_rw_sector(void *_fp, u32 lba, u32 count, void* buf) { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //_WBFS_FAT_H
|
#endif //_WBFS_FAT_H
|
||||||
|
@ -32,7 +32,7 @@ class Wbfs_Wbfs: public Wbfs
|
|||||||
s32 ReIDGame(u8 *, const void *);
|
s32 ReIDGame(u8 *, const void *);
|
||||||
|
|
||||||
u64 EstimateGameSize();
|
u64 EstimateGameSize();
|
||||||
int GetFragList(u8 *id);
|
s32 GetFragList(u8 *id);
|
||||||
private:
|
private:
|
||||||
WBFS_PartInfo PartInfo;
|
WBFS_PartInfo PartInfo;
|
||||||
};
|
};
|
||||||
|
@ -364,7 +364,7 @@ auth_md5Ctx *auth_md5SumCtx(auth_md5Ctx *ctx, const unsigned char *src, const in
|
|||||||
(ctx->b_used)++;
|
(ctx->b_used)++;
|
||||||
if (64 == ctx->b_used)
|
if (64 == ctx->b_used)
|
||||||
{
|
{
|
||||||
Permute(ctx->ABCD, ctx->block);
|
Permute((uint32_t *)ctx->ABCD, ctx->block);
|
||||||
ctx->b_used = 0;
|
ctx->b_used = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -415,7 +415,7 @@ auth_md5Ctx *auth_md5CloseCtx(auth_md5Ctx *ctx, unsigned char *dst)
|
|||||||
*/
|
*/
|
||||||
if (56 < ctx->b_used)
|
if (56 < ctx->b_used)
|
||||||
{
|
{
|
||||||
Permute(ctx->ABCD, ctx->block);
|
Permute((uint32_t *)ctx->ABCD, ctx->block);
|
||||||
for (i = 0; i < 64; i++)
|
for (i = 0; i < 64; i++)
|
||||||
ctx->block[i] = 0;
|
ctx->block[i] = 0;
|
||||||
}
|
}
|
||||||
@ -429,7 +429,7 @@ auth_md5Ctx *auth_md5CloseCtx(auth_md5Ctx *ctx, unsigned char *dst)
|
|||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
ctx->block[56 + i] |= GetLongByte( l, i );
|
ctx->block[56 + i] |= GetLongByte( l, i );
|
||||||
ctx->block[60] = ((GetLongByte( ctx->len, 3 ) & 0xE0) >> 5); /* See Above! */
|
ctx->block[60] = ((GetLongByte( ctx->len, 3 ) & 0xE0) >> 5); /* See Above! */
|
||||||
Permute(ctx->ABCD, ctx->block);
|
Permute((uint32_t *)ctx->ABCD, ctx->block);
|
||||||
|
|
||||||
/* Now copy the result into the output buffer and we're done.
|
/* Now copy the result into the output buffer and we're done.
|
||||||
*/
|
*/
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include "gecko.h"
|
#include "gecko.h"
|
||||||
|
|
||||||
#define GP_FIFO_SIZE (256 * 1024 * 3)
|
#define GP_FIFO_SIZE (256 * 1024 * 3)
|
||||||
static unsigned int *xfb[2] = { NULL, NULL }; // Double buffered
|
static u32 *xfb[2] = { NULL, NULL }; // Double buffered
|
||||||
static int whichfb = 0; // Switch
|
static int whichfb = 0; // Switch
|
||||||
static unsigned char *gp_fifo = NULL;
|
static unsigned char *gp_fifo = NULL;
|
||||||
Mtx44 FSProjection2D;
|
Mtx44 FSProjection2D;
|
||||||
|
@ -127,8 +127,8 @@ bool NandTitle::GetName(u64 tid, int language, wchar_t* name)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(app, sizeof(app), "/title/%08x/%08x/content/%08x.app", TITLE_UPPER( tid ), TITLE_LOWER( tid ),
|
snprintf(app, sizeof(app), "/title/%08x/%08x/content/%08x.app", (unsigned int)TITLE_UPPER( tid ), (unsigned int)TITLE_LOWER( tid ),
|
||||||
titleTmd->contents[i].cid);
|
(unsigned int)titleTmd->contents[i].cid);
|
||||||
//gprintf("%s\n", app );
|
//gprintf("%s\n", app );
|
||||||
|
|
||||||
if (language > CONF_LANG_KOREAN) language = CONF_LANG_ENGLISH;
|
if (language > CONF_LANG_KOREAN) language = CONF_LANG_ENGLISH;
|
||||||
@ -212,8 +212,8 @@ bool NandTitle::Exists(u64 tid)
|
|||||||
}
|
}
|
||||||
if (!ok) return false;
|
if (!ok) return false;
|
||||||
|
|
||||||
snprintf(app, sizeof(app), "/title/%08x/%08x/content/%08x.app", TITLE_UPPER( tid ), TITLE_LOWER( tid ),
|
snprintf(app, sizeof(app), "/title/%08x/%08x/content/%08x.app", (unsigned int)TITLE_UPPER( tid ), (unsigned int)TITLE_LOWER( tid ),
|
||||||
titleTmd->contents[i].cid);
|
(unsigned int)titleTmd->contents[i].cid);
|
||||||
s32 fd = ISFS_Open(app, ISFS_OPEN_READ);
|
s32 fd = ISFS_Open(app, ISFS_OPEN_READ);
|
||||||
if (fd >= 0) ISFS_Close(fd);
|
if (fd >= 0) ISFS_Close(fd);
|
||||||
|
|
||||||
|
@ -189,12 +189,12 @@ bool Wad::UnInstall(const char *installpath)
|
|||||||
int result = true;
|
int result = true;
|
||||||
|
|
||||||
// Remove ticket
|
// Remove ticket
|
||||||
snprintf(filepath, sizeof(filepath), "%s/ticket/%08x/%08x.tik", installpath, (u32) (tmd_data->title_id >> 32), (u32) tmd_data->title_id);
|
snprintf(filepath, sizeof(filepath), "%s/ticket/%08x/%08x.tik", installpath, (unsigned int)(tmd_data->title_id >> 32), (unsigned int) tmd_data->title_id);
|
||||||
if(!RemoveFile(filepath))
|
if(!RemoveFile(filepath))
|
||||||
result = false;
|
result = false;
|
||||||
|
|
||||||
// Remove contents / data
|
// Remove contents / data
|
||||||
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/", installpath, (u32) (tmd_data->title_id >> 32), (u32) tmd_data->title_id);
|
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/", installpath, (unsigned int) (tmd_data->title_id >> 32), (unsigned int) tmd_data->title_id);
|
||||||
if(!RemoveDirectory(filepath))
|
if(!RemoveDirectory(filepath))
|
||||||
result = false;
|
result = false;
|
||||||
|
|
||||||
@ -211,22 +211,22 @@ bool Wad::Install(const char *installpath)
|
|||||||
tmd *tmd_data = (tmd *) SIGNATURE_PAYLOAD((signed_blob *) p_tmd);
|
tmd *tmd_data = (tmd *) SIGNATURE_PAYLOAD((signed_blob *) p_tmd);
|
||||||
|
|
||||||
// Create necessary folders if not existing
|
// Create necessary folders if not existing
|
||||||
snprintf(filepath, sizeof(filepath), "%s/ticket/%08x/", installpath, (u32) (tmd_data->title_id >> 32));
|
snprintf(filepath, sizeof(filepath), "%s/ticket/%08x/", installpath, (unsigned int) (tmd_data->title_id >> 32));
|
||||||
CreateSubfolder(filepath);
|
CreateSubfolder(filepath);
|
||||||
|
|
||||||
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/content/", installpath, (u32) (tmd_data->title_id >> 32), (u32) tmd_data->title_id);
|
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/content/", installpath, (unsigned int) (tmd_data->title_id >> 32), (unsigned int) tmd_data->title_id);
|
||||||
CreateSubfolder(filepath);
|
CreateSubfolder(filepath);
|
||||||
|
|
||||||
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/data/", installpath, (u32) (tmd_data->title_id >> 32), (u32) tmd_data->title_id);
|
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/data/", installpath, (unsigned int) (tmd_data->title_id >> 32), (unsigned int) tmd_data->title_id);
|
||||||
CreateSubfolder(filepath);
|
CreateSubfolder(filepath);
|
||||||
|
|
||||||
// Write ticket file
|
// Write ticket file
|
||||||
snprintf(filepath, sizeof(filepath), "%s/ticket/%08x/%08x.tik", installpath, (u32) (tmd_data->title_id >> 32), (u32) tmd_data->title_id);
|
snprintf(filepath, sizeof(filepath), "%s/ticket/%08x/%08x.tik", installpath, (unsigned int) (tmd_data->title_id >> 32), (unsigned int) tmd_data->title_id);
|
||||||
if(!WriteFile(filepath, p_tik, header->tik_len))
|
if(!WriteFile(filepath, p_tik, header->tik_len))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Write tmd file
|
// Write tmd file
|
||||||
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/content/title.tmd", installpath, (u32) (tmd_data->title_id >> 32), (u32) tmd_data->title_id);
|
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/content/title.tmd", installpath, (unsigned int) (tmd_data->title_id >> 32), (unsigned int) tmd_data->title_id);
|
||||||
if(!WriteFile(filepath, p_tmd, header->tmd_len))
|
if(!WriteFile(filepath, p_tmd, header->tmd_len))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -332,7 +332,7 @@ bool Wad::InstallContents(const char *installpath)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// private content
|
// private content
|
||||||
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/content/%08x.app", installpath, (u32) (tmd_data->title_id >> 32), (u32) tmd_data->title_id, content->cid);
|
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/content/%08x.app", installpath, (unsigned int) (tmd_data->title_id >> 32), (unsigned int) tmd_data->title_id, (unsigned int) content->cid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create file
|
// Create file
|
||||||
@ -356,7 +356,7 @@ bool Wad::InstallContents(const char *installpath)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(progressTxt, sizeof(progressTxt), "%s %08x.app", tr("Installing content"), content->cid);
|
snprintf(progressTxt, sizeof(progressTxt), "%s %08x.app", tr("Installing content"), (unsigned int) content->cid);
|
||||||
|
|
||||||
// Go to position
|
// Go to position
|
||||||
fseek(pFile, offset, SEEK_SET);
|
fseek(pFile, offset, SEEK_SET);
|
||||||
@ -462,7 +462,7 @@ int Wad::CheckContentMap(const char *installpath, tmd_content *content, char *fi
|
|||||||
content_map_size++;
|
content_map_size++;
|
||||||
|
|
||||||
map = (map_entry_t *) content_map;
|
map = (map_entry_t *) content_map;
|
||||||
sprintf(map[next_entry].name, "%08x", next_entry);
|
sprintf(map[next_entry].name, "%08x", (unsigned int)next_entry);
|
||||||
memcpy(map[next_entry].hash, content->hash, 20);
|
memcpy(map[next_entry].hash, content->hash, 20);
|
||||||
|
|
||||||
// write new content.map
|
// write new content.map
|
||||||
@ -470,7 +470,7 @@ int Wad::CheckContentMap(const char *installpath, tmd_content *content, char *fi
|
|||||||
if(!WriteFile(filepath, content_map, content_map_size * sizeof(map_entry_t)))
|
if(!WriteFile(filepath, content_map, content_map_size * sizeof(map_entry_t)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
snprintf(filepath, 1024, "%s/shared1/%08x.app", installpath, next_entry);
|
snprintf(filepath, 1024, "%s/shared1/%08x.app", installpath, (unsigned int)next_entry);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user