I want to explain how DIOS MIOS roughly works.
First of all let’s look at MIOS and what it does. MIOS is made up of two parts a heavily modified IOS and a GAMECUBE IPL. The IOS part just does minimal hardware setup and creates a power button handler. Then it tells the GAMECUBE IPL to start and finally ends in an endless loop.
The GAMECUBE IPL applies patches to certain games and then loads them.
And that’s is all MIOS does.
So why is a GAMECUBE USB Loader impossible?
First thing that everyone comes to mind is GAMECUBE mode, but what is the GAMECUBE mode?
It’s not a simple on/off switch and it is also not as limited as everything says it is.
You can for example change the CPU clock within in the GAMECUBE mode from the PPC side!
What makes the GAMECUBE mode so limited is MIOS, let’s imagine you have IOS and take away all modules, even the ES and FS module what’s left is basically MIOS and it’s no surprise you can’t access any Wii specific stuff if none of the modules are loaded, right?
That doesn’t mean there is no GAMECUBE mode, there sure is BC and MIOS do 100s of magic register writes and nobody knows what they do, but luckily that doesn’t really matter that much.
The main thing about the GAMECUBE mode is the different CPU and BUS clock and that some hardware registers are mapped from ARM space to PPC space.
Many also said that all the Wii hardware gets shutdown in "GC mode" which is simply not true everything can normally be accessed from the ARM, just not from the PPC since there is no IPC handler in MIOS.
So now the magic question how does DIOS MIOS work?
It took quite some work to figure out all the stuff that had to be done.
First step of course was to get code running, but the approach I used in SNEEK wasn’t possible since MIOS didn’t use any modules, so I had to write up a completely new tool which could add sections to the MIOS ELF file.
Once I had code running I quickly run into new problems, like that the memory allocation supplied by syscalls didn’t work at all, so I wrote up my own memory allocation and free code and got one step closer.
The next step was to get all the DVD commands from the PPC side as everyone should know by now GAMECUBE games directly access the drive hardware registers and don’t ask IOS like Wii games do.
I created a search code which just patched all DVD commands so they would read/write from a certain memory range within MEM1 which I could freely access from the ARM side.
From there it was more or less bug fixing stuff and once I had a game running I made the youtube video.
I left some information out so it doesn't become too easy to create a GAMECUBE loader.
Now a bit about the infamous audio streaming stuff and why everyone fails on it; The main problem is that the drive doesn’t send the data requested to the PPC, but directly to the DSP. The drive is directly connected to the DSP via three wires and that’s why it is basically impossible to get that emulated right in software. I posted about a three-wire soldering solution but I couldn’t find the pin out of the flat cable, so I didn’t try it yet.
That wraps up what I wanted to say about DIOS MIOS and now to the Q&As:
(note: all questions are unmodified!)
What hardware access do you have from which processor?
I have full hardware access from the ARM and normal access from the PPC, though I could disable the hardware protection anytime from the ARM.
What do you do with the arm?
This should be answered by the post above.
Is Ocarina/wiird support planned?
Well it’s not planned but it sould be easy to add.
If yes, with the old or the new code handler?
If no, do you plan to support another code handler?
If you plan to support the new code handler, would you share the info what needs to be changed to get it GC compatible?
I haven’t look at that so I can’t say but I would share a working version of that new code handler.
What's the current compatiblity?
Basically most games work that I’ve tried, those audio streaming games are not working correctly though.
Are you able to force 480p on all games?
So far I’ve only done simply video mode patching nothing else, I also don’t have an “HD-cable” to try.
Any chance to emulate the memory card on the same usb device that holds the games?
As we know by now nothing is impossible but that pretty much take the same amount of patching and work as the GameCube Loader.
Any memory card issues?
Now idea, can’t find my GC card and I’ve turned my other one into an SD-Gecko some time ago
Is it running at GC or Wii clock speed?
It is running at GC speed, in “GC mode”.
Is there a modified BC and why doesn't it work well with sneek-less wiis?
BC is currently unmodified but that could change, don’t know yet why it doesn’t work without SNEEK and I don’t care that much.
Also, I would like to know if the same principle could be used to mount an SD card as a Gamecube memory card, since my one died. I would like to know whether you will publicly release it or not, as well as how in the world you did what I heard was impossible. Most of those questions should be answered already, about the release I’m currently not sure about a release that’s all I can say about that.
How much time have you put into your diosmios project?
nice work so far. How much time have you spent developing DiosMios?
Well I didn’t stop the time or anything; I created the project in april and mostly worked only a few days on it, then dropped it for a long time due some problems and then picked it up again…
Will DiosMios be publicly released at any point? What kind of source license will it have?
If there will be a public open source release it will have the GNU GPL v2.
any plans to set up donations again? If so gbatemp is the place to post about it imho
can we get a quick rundown on how it actually works or is that a trade secret?
See above post, I can’t tell everything of course!
Is it sneek-only? If so does that mean decrypted game-dumps in folders is a must?
For now it’s SNEEK only and probably always will be since the game selection from the SNEEK menu is also used for GC games, for now DIOS MIOS is using complete GC dumps and not extracted ones.
Is the only compatibility issue you've run into the audio streaming? Any ideas for workarounds apart from the 3 wire solder?
Yes, well there could be a VERY complicated software way but I don’t plan on doing that.
It is rumored that you will never release DIOS-MIOS, is there a reason(s) for this? Thanks
Well nothing is certain yet, there is a major reason it would allow many people to easily pirate tons of GC games as well, as currently that’s quite an effort since you must have either a drivechip or a certain drive to softmod it and then you still have to burn each disc and chance them whenever you want to play a different game.
will the new version of SNEEK contain the Gamecube usb loader? and will it be available for public?
DIOS MIOS is not part of SNEEK and therefore will never be included in a SNEEK update.
does it read the gc iso or extracted files?
Unmodified GC dumps.
Is the patched mios stored on the sneek nand, or does sneek load it like it does the di module?
Currently it’s stored on the SNEEK NAND, but one could easily change that of course and load it like the DI module.
how much code was added to mios?
Roughly 1000 lines this also includes the patching code for the DI commands, VI patch and OSReport patch.
does it use wbfs?
No, it uses FAT32 as most parts were taken over from SNEEK.
Will the DIOS MIOS be region free?
The region free part is actually within SNEEK and is already implemented.