mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-27 21:54:15 +01:00
-whoops removed some pretty important line :P
-using low mem setup of GX, because it got more expainations what is what and works fine so why now ;) -allocating memory to find partition dynamically now to prevent the function from overwriting something maybe in wiiflow -moved cheat file loading to mem2, because we cant just allocate the memory *somewhere* as it was before -categories should be found faster now (thanks yardape8000 for tip) -we dont need to debug print if we set gecko debugging on or not :P
This commit is contained in:
parent
1b0f97393f
commit
bdab5cf650
@ -20,7 +20,7 @@
|
|||||||
#include "frag.h"
|
#include "frag.h"
|
||||||
#include "usbstorage.h"
|
#include "usbstorage.h"
|
||||||
#include "wip.h"
|
#include "wip.h"
|
||||||
|
#include "memory.h"
|
||||||
#include "gecko.h"
|
#include "gecko.h"
|
||||||
|
|
||||||
#define ALIGNED(x) __attribute__((aligned(x)))
|
#define ALIGNED(x) __attribute__((aligned(x)))
|
||||||
@ -41,7 +41,7 @@ GXRModeObj *disc_vmode = NULL;
|
|||||||
GXRModeObj *vmode = NULL;
|
GXRModeObj *vmode = NULL;
|
||||||
u32 vmode_reg = 0;
|
u32 vmode_reg = 0;
|
||||||
|
|
||||||
static u8 Tmd_Buffer[0x49e4 + 0x1C] ALIGNED(32);
|
static u8 Tmd_Buffer[0x49e4] ALIGNED(32);
|
||||||
extern void __exception_closeall();
|
extern void __exception_closeall();
|
||||||
|
|
||||||
entry_point p_entry;
|
entry_point p_entry;
|
||||||
@ -49,34 +49,20 @@ entry_point p_entry;
|
|||||||
void __Disc_SetLowMem()
|
void __Disc_SetLowMem()
|
||||||
{
|
{
|
||||||
/* Setup low memory */
|
/* Setup low memory */
|
||||||
*(vu32 *)0x80000030 = 0x00000000; // Arena Low
|
*Sys_Magic = 0x0D15EA5E; // Standard Boot Code
|
||||||
*(vu32 *)0x80000060 = 0x38A00040;
|
*Sys_Version = 0x00000001; // Version
|
||||||
*(vu32 *)0x800000E4 = 0x80431A80;
|
*Arena_L = 0x00000000; // Arena Low
|
||||||
*(vu32 *)0x800000EC = 0x81800000; // Dev Debugger Monitor Address
|
*BI2 = 0x817E5480; // BI2
|
||||||
*(vu32 *)0x800000F0 = 0x01800000; // Simulated Memory Size
|
*Bus_Speed = 0x0E7BE2C0; // Console Bus Speed
|
||||||
*(vu32 *)0x800000F4 = 0x817E5480;
|
*CPU_Speed = 0x2B73A840; // Console CPU Speed
|
||||||
*(vu32 *)0x800000F8 = 0x0E7BE2C0; // bus speed
|
*Assembler = 0x38A00040; // Assembler
|
||||||
*(vu32 *)0x800000FC = 0x2B73A840; // cpu speed
|
*(u32*)0x800000E4 = 0x80431A80;
|
||||||
*(vu32 *)0xCD00643C = 0x00000000; // 32Mhz on Bus
|
*Dev_Debugger = 0x81800000; // Dev Debugger Monitor Address
|
||||||
|
*Simulated_Mem = 0x01800000; // Simulated Memory Size
|
||||||
|
*(vu32*)0xCD00643C = 0x00000000; // 32Mhz on Bus
|
||||||
|
|
||||||
/* Copy disc ID (online check) */
|
/* Copy disc ID */
|
||||||
memcpy((void *)0x80003180, (void *)0x80000000, 4);
|
memcpy((void *) Online_Check, (void *) Disc_ID, 4);
|
||||||
|
|
||||||
// Patch in info missing from apploader reads
|
|
||||||
*Sys_Magic = 0x0d15ea5e;
|
|
||||||
*Version = 1;
|
|
||||||
*Arena_L = 0x00000000;
|
|
||||||
*BI2 = 0x817E5480;
|
|
||||||
*Bus_Speed = 0x0E7BE2C0;
|
|
||||||
*CPU_Speed = 0x2B73A840;
|
|
||||||
|
|
||||||
// From NeoGamme R4 (WiiPower)
|
|
||||||
*(vu32 *)0x800030F0 = 0x0000001C;
|
|
||||||
*(vu32 *)0x8000318C = 0x00000000;
|
|
||||||
*(vu32 *)0x80003190 = 0x00000000;
|
|
||||||
|
|
||||||
// Fix for Sam & Max (WiiPower)
|
|
||||||
*(vu32 *)0x80003184 = 0x80000000;
|
|
||||||
|
|
||||||
/* Flush cache */
|
/* Flush cache */
|
||||||
DCFlushRange((void *)0x80000000, 0x3F00);
|
DCFlushRange((void *)0x80000000, 0x3F00);
|
||||||
@ -143,7 +129,7 @@ GXRModeObj * __Disc_SelectVMode(u8 videoselected, u64 chantitle)
|
|||||||
if (CONF_GetVideo() != CONF_VIDEO_NTSC)
|
if (CONF_GetVideo() != CONF_VIDEO_NTSC)
|
||||||
{
|
{
|
||||||
vmode_reg = VI_NTSC;
|
vmode_reg = VI_NTSC;
|
||||||
vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf;
|
vmode = progressive ? &TVEurgb60Hz480Prog : &TVEurgb60Hz480IntDf;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -153,8 +139,8 @@ GXRModeObj * __Disc_SelectVMode(u8 videoselected, u64 chantitle)
|
|||||||
vmode_reg = vmode->viTVMode >> 2;
|
vmode_reg = vmode->viTVMode >> 2;
|
||||||
break;
|
break;
|
||||||
case 2: // PAL60
|
case 2: // PAL60
|
||||||
vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf;
|
vmode = progressive ? &TVEurgb60Hz480Prog : &TVEurgb60Hz480IntDf;
|
||||||
vmode_reg = progressive ? TVEurgb60Hz480Prog.viTVMode >> 2 : vmode->viTVMode >> 2;
|
vmode_reg = progressive ? vmode->viTVMode >> 2 : vmode->viTVMode >> 2;
|
||||||
break;
|
break;
|
||||||
case 3: // NTSC
|
case 3: // NTSC
|
||||||
vmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf;
|
vmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf;
|
||||||
@ -205,31 +191,52 @@ s32 Disc_FindPartition(u64 *outbuf)
|
|||||||
u64 offset = 0;
|
u64 offset = 0;
|
||||||
u32 cnt;
|
u32 cnt;
|
||||||
|
|
||||||
|
u32 *TMP_Buffer = (u32*)MEM2_alloc(0x20);
|
||||||
|
if(!TMP_Buffer)
|
||||||
|
return -1;
|
||||||
|
|
||||||
/* Read partition info */
|
/* Read partition info */
|
||||||
s32 ret = WDVD_UnencryptedRead(buffer, 0x20, PTABLE_OFFSET);
|
s32 ret = WDVD_UnencryptedRead(TMP_Buffer, 0x20, PTABLE_OFFSET);
|
||||||
if (ret < 0) return ret;
|
if(ret < 0)
|
||||||
|
|
||||||
/* Get data */
|
|
||||||
u32 nb_partitions = buffer[0];
|
|
||||||
u64 table_offset = buffer[1] << 2;
|
|
||||||
|
|
||||||
if (nb_partitions > 8) return -1;
|
|
||||||
|
|
||||||
/* Read partition table */
|
|
||||||
ret = WDVD_UnencryptedRead(buffer, 0x20, table_offset);
|
|
||||||
if (ret < 0) return ret;
|
|
||||||
|
|
||||||
/* Find game partition */
|
|
||||||
for (cnt = 0; cnt < nb_partitions; cnt++)
|
|
||||||
{
|
{
|
||||||
u32 type = buffer[cnt * 2 + 1];
|
MEM2_free(TMP_Buffer);
|
||||||
|
return ret;
|
||||||
/* Game partition */
|
|
||||||
if(!type) offset = buffer[cnt * 2] << 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get data */
|
||||||
|
u32 nb_partitions = TMP_Buffer[0];
|
||||||
|
u64 table_offset = TMP_Buffer[1] << 2;
|
||||||
|
|
||||||
|
if(nb_partitions > 8)
|
||||||
|
{
|
||||||
|
MEM2_free(TMP_Buffer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(TMP_Buffer, 0, sizeof(TMP_Buffer));
|
||||||
|
|
||||||
|
/* Read partition table */
|
||||||
|
ret = WDVD_UnencryptedRead(TMP_Buffer, 0x20, table_offset);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
MEM2_free(TMP_Buffer);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find game partition */
|
||||||
|
for(cnt = 0; cnt < nb_partitions; cnt++)
|
||||||
|
{
|
||||||
|
u32 type = TMP_Buffer[cnt * 2 + 1];
|
||||||
|
|
||||||
|
/* Game partition */
|
||||||
|
if(!type)
|
||||||
|
offset = TMP_Buffer[cnt * 2] << 2;
|
||||||
|
}
|
||||||
|
MEM2_free(TMP_Buffer);
|
||||||
|
|
||||||
/* No game partition found */
|
/* No game partition found */
|
||||||
if (!offset) return -1;
|
if (!offset)
|
||||||
|
return -1;
|
||||||
|
|
||||||
/* Set output buffer */
|
/* Set output buffer */
|
||||||
*outbuf = offset;
|
*outbuf = offset;
|
||||||
@ -363,6 +370,7 @@ s32 Disc_BootPartition()
|
|||||||
__Disc_SetVMode();
|
__Disc_SetVMode();
|
||||||
|
|
||||||
/* Shutdown IOS subsystems */
|
/* Shutdown IOS subsystems */
|
||||||
|
__dsp_shutdown();
|
||||||
u32 level = IRQ_Disable();
|
u32 level = IRQ_Disable();
|
||||||
__IOS_ShutdownSubsystems();
|
__IOS_ShutdownSubsystems();
|
||||||
__exception_closeall();
|
__exception_closeall();
|
||||||
|
@ -1,13 +1,6 @@
|
|||||||
#ifndef _DISC_H_
|
#ifndef _DISC_H_
|
||||||
#define _DISC_H_
|
#define _DISC_H_
|
||||||
|
|
||||||
#define Sys_Magic ((vu32*)0x80000020)
|
|
||||||
#define Version ((vu32*)0x80000024)
|
|
||||||
#define Arena_L ((vu32*)0x80000030)
|
|
||||||
#define BI2 ((vu32*)0x800000F4)
|
|
||||||
#define Bus_Speed ((vu32*)0x800000F8)
|
|
||||||
#define CPU_Speed ((vu32*)0x800000Fc)
|
|
||||||
|
|
||||||
/* Disc header structure */
|
/* Disc header structure */
|
||||||
struct discHdr
|
struct discHdr
|
||||||
{
|
{
|
||||||
|
@ -336,7 +336,7 @@ void load_handler()
|
|||||||
{
|
{
|
||||||
if (debuggerselect == 0x01)
|
if (debuggerselect == 0x01)
|
||||||
{
|
{
|
||||||
gprintf("Debbugger selected is gecko\n");
|
//gprintf("Debbugger selected is gecko\n");
|
||||||
memset((void*)0x80001800,0,codehandler_size);
|
memset((void*)0x80001800,0,codehandler_size);
|
||||||
memcpy((void*)0x80001800,codehandler,codehandler_size);
|
memcpy((void*)0x80001800,codehandler,codehandler_size);
|
||||||
//if (pausedstartoption == 0x01)
|
//if (pausedstartoption == 0x01)
|
||||||
@ -349,7 +349,7 @@ void load_handler()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gprintf("Debbugger selected is not gecko\n");
|
//gprintf("Debbugger selected is not gecko\n");
|
||||||
memset((void*)0x80001800,0,codehandleronly_size);
|
memset((void*)0x80001800,0,codehandleronly_size);
|
||||||
memcpy((void*)0x80001800,codehandleronly,codehandleronly_size);
|
memcpy((void*)0x80001800,codehandleronly,codehandleronly_size);
|
||||||
memcpy((void*)0x80001906, &codelist, 2);
|
memcpy((void*)0x80001906, &codelist, 2);
|
||||||
|
@ -1596,16 +1596,24 @@ void CMenu::_initCF(void)
|
|||||||
&& (!m_locked || !m_gcfg1.getBool("ADULTONLY", id, false))
|
&& (!m_locked || !m_gcfg1.getBool("ADULTONLY", id, false))
|
||||||
&& !ageLocked)
|
&& !ageLocked)
|
||||||
{
|
{
|
||||||
if (catviews[0] == '0')
|
if(catviews[0] == '0')
|
||||||
{
|
{
|
||||||
const char *idcats = m_cat.getString("CATEGORIES", id, "").c_str();
|
const char *idcats = m_cat.getString("CATEGORIES", id, "").c_str();
|
||||||
if (strlen(idcats) == 0)
|
if(strlen(idcats) == 0)
|
||||||
continue;
|
continue;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool idinacat=0;
|
bool idinacat = false;
|
||||||
for (u32 j = 1; j<m_max_categories; ++j) if (catviews[j] == '1' && idcats[j] == '1') idinacat=1;
|
for(u32 j = 1; j<m_max_categories; ++j)
|
||||||
if (!idinacat) continue;
|
{
|
||||||
|
if(catviews[j] == '1' && idcats[j] == '1')
|
||||||
|
{
|
||||||
|
idinacat = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!idinacat)
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int playcount = m_gcfg1.getInt("PLAYCOUNT", id, 0);
|
int playcount = m_gcfg1.getInt("PLAYCOUNT", id, 0);
|
||||||
@ -2204,7 +2212,7 @@ bool CMenu::_loadFile(SmartBuf &buffer, u32 &size, const char *path, const char
|
|||||||
fseek(fp, 0, SEEK_END);
|
fseek(fp, 0, SEEK_END);
|
||||||
u32 fileSize = ftell(fp);
|
u32 fileSize = ftell(fp);
|
||||||
fseek(fp, 0, SEEK_SET);
|
fseek(fp, 0, SEEK_SET);
|
||||||
SmartBuf fileBuf = smartAnyAlloc(fileSize);
|
SmartBuf fileBuf = smartMem2Alloc(fileSize);
|
||||||
if (!fileBuf)
|
if (!fileBuf)
|
||||||
{
|
{
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
@ -1298,7 +1298,10 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
|
|||||||
|
|
||||||
/* Find game partition offset */
|
/* Find game partition offset */
|
||||||
u64 offset;
|
u64 offset;
|
||||||
Disc_FindPartition(&offset);
|
s32 ret = Disc_FindPartition(&offset);
|
||||||
|
if(ret < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
RunApploader(offset, videoMode, vipatch, countryPatch, patchVidMode, aspectRatio);
|
RunApploader(offset, videoMode, vipatch, countryPatch, patchVidMode, aspectRatio);
|
||||||
DeviceHandler::DestroyInstance();
|
DeviceHandler::DestroyInstance();
|
||||||
USBStorage_Deinit();
|
USBStorage_Deinit();
|
||||||
|
Loading…
Reference in New Issue
Block a user