These are our project goals we plan to achieve with the N64 emulator port of Mupen64 to the Gamecube & Wii.
- Hardware Accelerated Graphics
- Dynamic Recompilation
- 4mb Expansion PAK Games
- 512mbit ROM Support
- Configurable Input
- ROM Loading from DVD/SD/Front-SD & USB
- Native Saves
- Save States
- Rumble/Controller PAK Support
- Progressive/Widescreen Resolution
To break things down into more detail, we have explained how each goal has progressed and how we plan to progress them.
Hardware Accelerated Graphics:
Currently, sepp256 has been working on a port of the plugin glN64 0.41 from OpenGL to GX libraries. He has made great progress and many games are looking 1:1 with the OpenGL version of the plugin. This is the first and most compatible Graphics plugin that has been ported and has been used in the public builds we’ve distributed.
Prior to this plugin whilst still learning the emulator, sepp256 ported the software rendering graphics plugin that Mupen64 comes with. It was a good learning platform however it was quite limited and only ran demos and a handful of commercial games. It was also ported from software rendering into GX but of course still had the very limited compatibility. The following screen shots show you just how the graphics have progressed thus far.
As you can see the progress is quite apparent. However even with glN64, compatibility is not as good as we would like it. Sepp256 is in progress of finishing the glN64 port and also is planning to start porting Rice’s N64 Graphics plugin which will vastly improve compatibility and graphical appearance once it’s complete.
Dynamic recompilation is a means by which we “recompile” N64 standard r4300 MIPS machine code into Gamecube and Wii native PowerPC machine code. This is what will make the emulator run at 100% speed, even on Gamecube (hopefully). Currently, we use the straight C language pure interpreter straight out of Mupen64, however this is not capable of emulating things at a decent speed, even on the more powerful Wii CPU.
Writing the “dynarec” (Dynamic Re-compiler) has been the most complex and time consuming task, but tehpola has made some great progress on this and the final goal is slowly coming closer to a reality. Currently, the dynarec can execute a hand written demo which tests a few of the MIPS instructions, but it is showing a promising future with already some homebrew demos and commercial ROMs partially executing some code (nothing visually yet).
There is currently full support for stereo sound on the emulator. It is also resampled and interpolated into the right frequency. Of course, there is room for improvement once the emulator reaches full speed if the audio does not sound as clear as it’s supposed to.
4mb Expansion PAK Games:
We plan to support all games that require the 4MB RAM Expansion Pak in the future, however this can only be implemented properly once we have allocated all the space we will need for the dynamic re-compiler. There will hopefully be enough room on the Gamecube to also have this feature.
512mbit ROM Support:
Currently we already support all ROM sizes, via a LRU block cache implementation. On the Gamecube system this cache lives inside of the ARAM (15MB cache) and on the Wii, we have allocated the cache to the secondary memory known as MEM2 (32MB cache).
Input mapping is hard coded for now, however in the future we plan to make it configurable. Current input devices are via combination’s of Wiimote+Classic Contoller and Gamecube controllers of up to 4 players.
ROM Loading from DVD/SD/Front-SD & USB:
ROMs can currently be loaded from the DVD Drive on Gamecube and Wii via DVD media, from a SD card via a SD Gecko plugged into a Gamecube memory card slot and from a SD card in the front slot of the Wii. When libOGC permits, we will add in USB hard drive support and SDHC Card support.
Games can save to a emulated N64 controller PAK or cart EEPROM and Flash. The user can then save to either SD Card via Front-SD or SD Gecko and to Gamecube memory cards for later loading.
Save states are still going through work in progress but are currently working for the most part. Save states can be saved to the SD Card only for now, but later hopefully to removable USB Media.
Rumble/Controller Pak Support:
Currently there is full support for N64 rumble PAK emulation via the Gamecube and Wii controllers rumble motors.
Full 480p widescreen resolution is supported by the emulator. There might perhaps be a little bit of work required to get this running on Gamecube via component cables if it does not already work.
We plan to eventually implement netplay over the Wii’s wireless connection and hopefully on the Gamecube via the broadband adapter. An alternative solution may also be to use the USBGecko together with a PC connected to the internet to allow for remote play.