I've always wanted to be able to launch all drunkard games (Wii Sports Bowling, Mario Kart, Boom Blox) directly from a channel without having to swap discs. High failure rate otherwise after a few beers.
This is now possible.
The WBFS source includes YAL (Yet Another Loader) which launches specific titles from the WBFS-partition on the hdd connected to your Wii. When run from hbc, it checks the current pathname and reads out the gameid to load from this. This is the way the mkhbc feature works. This does not however work with dol_forwarders or streaming the binary to HBC.
A sollution for this to make binaries injectable into channels is by hardcoding the gameid and recompile the YAL source. Below is a diff allowing for direct boot of RSPP01 (Wii Sports):
This is three binaries to try with. If someone with a good art sense feels like making channels out of them the knowhow to make channels with the original banners from the game, I'd be more than happy!
This is now possible.
The WBFS source includes YAL (Yet Another Loader) which launches specific titles from the WBFS-partition on the hdd connected to your Wii. When run from hbc, it checks the current pathname and reads out the gameid to load from this. This is the way the mkhbc feature works. This does not however work with dol_forwarders or streaming the binary to HBC.
A sollution for this to make binaries injectable into channels is by hardcoding the gameid and recompile the YAL source. Below is a diff allowing for direct boot of RSPP01 (Wii Sports):
Code:
--- yal/source/yal.cÂÂÂÂ2009-04-02 09:53:37.000000000 +0200
+++ wii_sports/source/yal.cÂÂÂÂ2009-04-02 09:59:53.000000000 +0200
@@ -191,7 +191,6 @@
int main(int argc, char **argv) {
//---------------------------------------------------------------------------------
ÂÂÂÂÂÂÂÂ char discid[7];
-ÂÂÂÂÂÂÂÂchar *arg;
ÂÂÂÂÂÂÂÂ int cios = CIOS;
ÂÂÂÂÂÂÂÂ SYS_SetResetCallback(Reboot);
ÂÂÂÂÂÂÂÂ debug_printf("start %s",argv[0]);
@@ -202,21 +201,8 @@
ÂÂÂÂÂÂÂÂ printf("Loading IOS %d\n",cios);
ÂÂÂÂÂÂÂÂ IOS_ReloadIOS(cios);
ÂÂÂÂÂÂÂÂ sleep(1);
-ÂÂÂÂÂÂÂÂ//get the discid from arguments.
-ÂÂÂÂÂÂÂÂswitch(argc){
-ÂÂÂÂÂÂÂÂcase 1:
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂarg = argv[0];
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂbreak;
-ÂÂÂÂÂÂÂÂcase 2:
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂarg = argv[1];
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂbreak;
-ÂÂÂÂÂÂÂÂdefault:
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂreturn 1;
-ÂÂÂÂÂÂÂÂ}
-ÂÂÂÂÂÂÂÂint len=strlen(arg);
-ÂÂÂÂÂÂÂÂif(arg[len-9]=='/' && arg[len-9-7]=='/')
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂmemcpy(discid,arg+len-9-6,6);
-ÂÂÂÂÂÂÂÂelse memcpy(discid,arg,6);
+ÂÂÂÂÂÂÂÂ//Hardcode discid.
+ÂÂÂÂÂÂÂÂmemcpy(discid,"RSPP01",6);
ÂÂÂÂÂÂÂÂ discid[6]=0;
ÂÂÂÂÂÂÂÂ int ret = load_disc(discid);
ÂÂÂÂÂÂÂÂ debug_printf("returned %d\n",ret);