Developers’ Retrospective Part 1: emu_kidid’s nostalgia

Since that first post I made, all the way back on the 27th of May 2007 over at tehskeen.com .. the emulator sure has progressed! Back at the time which I created that thread, I considered myself a rather experienced coder, but nothing could’ve prepared me for the long road of development we had ahead of us. Looking back, I think we were all a little naive at how quickly this could be done. It wasn’t until we had an alpha version out that we realized what hard work lied ahead of us. Wii64, then known as mupen64gc simply because we only thought it would ever run on a Gamecube, would soon change my knowledge of N64 hardware, coding and debugging forever.

It was only a few months after that post in which tehpola (mainly) and I quickly got together a mupen64 port which would actually do something on a GC. One of the first games we ever saw emulated in mupen64gc was Rampage World Tour. I remember it would run with bad graphics, no sound, very bad input, direct saving (which would take up to a minute each time a single byte wanted to save), and on top of all that, it wouldn’t even reach past 4 or 5 FPS before eventually crashing anyway due to a limited software rendering graphics plugin. We eventually got Super Mario 64 to work with the software rendering plugin at around 4-5FPS too, but we soon realized we would need a better hardware accelerated plugin.

A little bit of trivia, we actually emulated the public domain ROM “Fire Demo by LaC” before anything but we didn’t see it running as the software graphics plugin was rendering the screen too dark :P

Very shortly after our initial work and after our search for a graphics coder, sepp256 joined the project. He was keen to learn about the N64, and showed us quick results by porting the mupen64 software rendering graphics plugin to work with some GX hardware acceleration and Super Mario 64 was running at around 35% of the speed. Around this time (October 2007), we released the first alpha for the general public to see, known as the “Basic GX Build” which was followed shortly by the “DVD Loading Build”, enabling users to load ROMs from their Gamecube DVD drive. These builds had quite a large number of graphical glitches, extremely screechy audio, and general lack of features, however the emulator was starting to show positive progress.

As time progressed and we entered the new year of 2008, there was new hope on the horizon, Wii homebrew would soon be possible thanks to Team Twiizers, so we were quite motivated to move forward. The mupen64gc project would continue, with many bugfixes, a GUI with a menu system now slowly coming together, threaded audio emulation, a ROM cache, a TLB cache, native saves working and even more graphics plugin bugfixes and improvements than you could poke a stick at! There was yet another alpha version released for the GC at this point to show the public some more progress, labelled “New Year’s Edition”. This was the first official alpha release to feature the GX graphics plugin and the version 1 menu (pink coloured backdrop made by brakken from tehskeen).

Shortly after this, we were given the ability of being able to load homebrew on the Wii (thx Team Twiizers!), this was great news for us as we would now have so much more CPU horsepower and memory to play with, not to mention the new peripherals. It didn’t take us long to have our code working on the Wii, and we quickly realized how much more power we had in our hands thanks to the Wii. Word got out around the scene, and we were special enough to have a build labelled “Wii64 Tiizer Edition” be included in the Homebrew Channel initial release. This alpha build was pretty far along, but used a very early port of the glN64 graphics plugin port and the Pure Interpreter for everything.

After May 2008′s Tiizer edition release, we started to see a very large influx in the amount of unofficial builds popping up with Wiimote support, and 100′s of different button mappings and other attempts to better the emulator. As a result of this, we were bombarded with bug reports which weren’t even ours to fix, and even more so, there were bugs introduced in the unofficial builds because of bad tool chains people were using to build the emulator which took us a while to track down the causes of (thinking they were problems in our code too). After that, things went a little quiet for a bit as we all continued on with our real lives, but development continued to trickle into the public googlecode repository as we made changes.

Shortly after this time, sepp256′s port of Orkin’s glN64 graphics plugin work was showing major progress and we would soon have a working port on the GC/Wii with hardware acceleration via GX. Although, this was never yet marked with a milestone alpha version as there was a silent boom of progress in another part of the emulator we were awaiting to happen. Around early January 2009 and after a few rewrites, the dynamic recompiler was actually starting to run games and most homebrew demos. This was not a quick step, and whilst things were actually starting to run on the new core, there were major issues. The first notable thing to run on the dynarec was “Fire Demo by LaC” .. which is quite interesting since it was the first thing to run on the pure interpreter. By “run”, you’d all probably think, full fps, etc .. , but in truth, it only executed enough code to emulate 90 video interrupts which showed us about 3 frames of graphics on screen. It wasn’t realized until I coded a N64 demo by hand to print the instruction execution count to the screen that we would need to be a lot more accurate in our emulation.

During early February 2009, we decided to setup a private SVN to get us through what was basically going to be a complete rewrite of the most major part of the emulator, the MIPS to PPC dynarec. You can imagine our relief at the time, it would be the first time in a long while that we could now work on the crucial parts of the emulator at our own pace and not have to worry about people compiling every single small changed revision and making complaints. We did this because the working copy of the source code would be obviously broken until major work was done in the areas of the Dynarec and the menu.

During this time, there was a great increase in progress, tehpola was hard at work on the dynarec, sepp256 was making progress in leaps and bounds on the glN64 bugfixes and the new menu system, and I was tinkering with various areas of the emulator such as thinking about ways to fit the expansion pak support into the emulator and testing everyone’s code out. From this point on, the positive progress never stopped, sure there were hard times when we would find bugs that not even days of debugging would solve, but we always moved on. Some bugs were so hard to debug on the Wii that tehpola found it easier to resolve them by porting his dynarec to the PS3 (which is further explained in this article).

In about a 7 month period after this, which leads us up to this beta 1 release, to sum things up, we managed to transform the emulator to go from only running 3 frames of a homebrew demo to playing The Legend of Zelda Majoras Mask with 2xSaI filtered textures, framebuffer effects, expansion pak support, all at a very playable frame rate with a nice new menu backing the emulator with artwork from Wii homebrew artist drmr.

The future of Wii64 is looking pretty optimistic with many bugfixes and optimizations up our sleeves to better it. We expect to have a minor version out shortly to address some of the bugs which users have come across in beta 1.

I hope on behalf of the team that everyone enjoys emulating their old favourites with the Wii64 beta 1 release as much as I had developing and testing the emulator. Since release, we have had some very positive reviews from you all, which have provided us with motivation to get working on beta 2 and making the emulator more compatible and feature rich in the coming versions. We also really appreciate everyones support towards our hardware and hosting donations fund.

54 thoughts on “Developers’ Retrospective Part 1: emu_kidid’s nostalgia

  1. You and the team rock, thank you so much for the emulator. My friends and I have had a great playing the old games from our teenage years. No joke, I even had a party were we got drunk and played Wave Race and Mario Kart 64 on the Wii all night. That wouldn’t have been possible without your work on Wii64.

    Thanks alot to everyone Emu_kdid, Tehpola and Sepp256!

  2. You guys rock. I’ve been lurking here for about a year now, and while I have virtually zero experience coding, I’m still a huge fan. When the next paycheck comes in, I’m gonna throw a few bucks your way.

    You said something earlier on about how the need for test controllers, web hosting, other shit is remedied by cash. I really think you should put up a wishlist so people can contribute toward particular needed items. It really helps when people feel that they’re contributing to something more specific than a huge, kickass project.

  3. It definitely sounds like you’ve made major progress since that big gap in updates that started on July 12. The work that’s happened on the emulator really shows since then and I’m glad to read that an update for some bug fixes will be released soon.

    Keep up the awesome work, Wii64 Team!

  4. So I have a question. I haven’t seen anything that isn’t a known, documented bug (I’m checking the compatibility list religiously) but I think I’ve found a show stopper, something very very strange is happening. Where should I post bugs? The google code revision doesn’t have the most recent build code so it seems like a bad place to post issues on the release. Are there plans to move the code back into the public SVN?

    The emulator is simply fantastic, and it seems like the issues that are still there are mostly related (lots of “graphics layering issues” and things) so I imagine that they’ll be easy enough to track down and fix. I mean, after coding a dynarec from scratch, nothing’s impossible for you guys. Right now I’ve got SM64 and SSB64 working fullspeed with no problems, I want to play through Majora’s Mask but it keeps crashing during the Deku Link area right at the beginning. Banjo Kazooie works like a dream, it’s one of the few games right now that Wii64 can play that the Virtual Console can *not* which is going to make everyone on the scene very happy.

    In short, you guys rock! Yay! I fully intend to donate to you, I just need to get myself financially situated first. I’ll be recommending that my friends do the same, since they’re all equally excited about the project.

  5. The time and effort you have put into this is really something fabulous. I thank you ever so much for providing hours of pure nostalgia.

    Aside from some graphical bugs the only think I’d love to see is the option of button mapping.. the the reversed orientation of buttons/joysticks from the n64 controller to the gc controller make games like smash 64 rather difficult. Also maybe some kinda gameshark function; in due time. Of course for being the first beta it’s some tremendous work.

    Thank you again! I’ll be sure to spread the word of your valiant and most noble of efforts.

  6. I am proud to see the project progress and appriciate your progress. While I have updated my friend about the progress over the past few months, he has increasingly became interested in it (as well as I have). He has shown an interest in watching the improvement of the FPS because he does video editing, himself. I have finally convinced him to purchased the wii after he saw your Beta release 1 in looking forward to playing goldeneye.

    Looking back does help aid in moving forward, I plan on watching your progress guys!…

  7. @Nicholas:
    The google code issue tracker is where we’d prefer bug reports filed. We’re getting everything situated to move the entire history from our private SVN repository back into google code, hopefully commit for commit if all goes well. It might be a somewhat long process as we have to review the code being committed and take turns committing our portions, but I think its important for the code history to be available even if the timeline is really skewed.

  8. Wow this is a mind blowing achievement since its release!! I’m sure you’ll come with updates 4 it to play all games. I toast to you guys

  9. It’s really amazing how you all have stuck with the project for so long! It would have been terrible if the whole project was just dropped–!….I don’t even want to think about it…I’m very grateful.
    Oh and I played Majora’s Mask too..and it played all the way to the 1st Final Day just fine. (at least, for me)
    Thank you soooo much!

  10. Awesome, simply awesome. You guys are a bunch of seriously committed people; it shows in your work. With all your combined determination, nothing should be impossible for you guys. I especially cannot wait to see how online play turns out. Kinda strange question, but is coding emulators and the like a permanent hobby? Do you see yourselves doing this (emulators) in the future? Or was this mainly for the challenge/experience? I know a PS1 emulator is in the works but do you have any future interest in this sort of thing? I think this has all been a very interesting experience. Keep up the fantastic work!

  11. From this post, I can finally see just how much difficulty and effort you people have put into this. Thank you for developing this emulator.
    If I may be so humble as to ask, here is my Emulation on Wii Thread, currently only at Video-Game-Info forums but once I write more reviews I may duplicate to other places such as Tehskeen or even the Wiibrew forums.
    It has high praise and some complain, but you can find it at http://www.video-game-info.com/forums/showthread.php?t=995 if you’re interested.

  12. Emukidid–

    You guys release posts the way you release software–you don’t do it very often, but when you do, it’s spectacular! I loved reading this.

    I got interested in the N64 and your work not as nostalgia but on the system’s own merits–I never actually played the system when it on the market! It was because of everyone’s interest in Wii64 that I bought VC versions of Super Mario 64 and then Zelda OoT (just to see what the fuss was all about) and played them through to completion while you guys were working on code. By then I was hooked!

    Your Beta 1 release just blew me away. You’ve actually made the Wii more valuable by opening up a new dimension of gaming options. (Nintendo should make a donation!) It’s amazing to consider that you guys also slipped out an amazing Beta 1 of WiiSX while everyone was waiting for Wii64. I’m having fun with both of them.

    I wish the three of you continued success on these projects as well as continued success in your professional pursuits. You are talented folks!

  13. P.S.

    Just sent you a donation and encourage everyone else to do the same. It all adds up!

  14. Really interesting article, it’s nice to read back and see how much progress you’ve made right? What better motivator?

  15. it’s very cool to see how much you guys are into working on this. There’s something to be said for accomplishing a big task through small steps and hard work, then being able to share your journey with the community. Those are the feelings that drive us to forge ahead and create truly awesome things for everyone to enjoy. Keep it up guys.

  16. Your emulator is da best!
    I wish I could make a donation.
    The most time I spend with my wii ,is while playing with your emu!
    There’s only one thing I’d like to see:
    Real time save.
    Because it’s sometimes very annoying in starfox 64 to play the game everytime from the start.
    Maybe it’s in beta 1 and I didn’t see it.

  17. I get random crashes in Banjo kazooie and a code dump if i do everything on the first world, like all jiggys and notes and then talk to the nice witch in the next area I get a code dump and I get this freeze with a whining sound when I learn to fly and follow the x’s to the treasure. If that helps at all.

  18. Great read. I love reading all these entries you guys post up. They really make you want to create your own emulator, and give you some helpful info too. I can’t wait for the second beta. I’m sure it’ll be just as awesome as the first!

    @ computerboy
    Do you know any sort of programming language? (A C like language preferably) If you don’t, I’d suggest you try learning C++, or start off with something a bit easier if that’s a little too difficult.

    If you do know C/C++ (or some other C like language) you shouldn’t be asking this question. Emulation is one of the hardest things you can do in programming, and not knowing the answer yourself (or at least doing some research first) really shows your not ready to create an emulator of your own.

    I’m not trying to be rude, but if you were to ask this on any other [emulation] forum/blog/whatever, someone would probably tell you the same thing.

    – CHR15x94

  19. Fascinating.

    I wish you would’ve wrote about what it was like to work on WiiSX at the same time though. (ie: Did developing WiiSX help you to develop Wii64 at all?)

    Overall though, a great read!

  20. It truly is fantastic.
    I mean, I can’t see you guys as anything less than an inspiration for more ambitious projects in the future.
    All that remains is to refine your sweat and blood to create a program that will truly be remembered throughout all of the Homebrew community and perhaps even beyond.

  21. @ Computerboy,

    I will agree with CHR15x94 on the sense of Starting yourself in the C/C++ World. As a developer, myself, I Started in that language and then found my ninch in Web C#/ASP.NET, but value my history with the C family.

    If you have experience with C or C++, download the code and study it. It could get an idea to what n64 emulation is like on the wii.

    IMHO, Don’t start learning Java or C#. Sorry for those who support the language, but it will spoil you and starting on C or C++, you will value the benefits of Java or C#. The Emulations I have seen use C and/or C++. On Top of that, They are optimized for either PC or Mac (and some are for the Video Game system – like Wii).

    This brings me to my next points… What are you looking at Emulating? What System(s) are you looking to have the emulator on? Has this emulator been emulated on similar hardware? That last one is asked because the N64 hasn’t been open sourced (viewing the code) to similar hardware to the Wii at all, so it is more work on these fine workers, but well worth their work.

    I am not saying that you shouldn’t, I just think that you should identify what you know, what you want to start, and where you are going. Basically get a general goal you want to get to and identify the details as you go. There will be tough times, and you will have more to learn than you originally think because – even a seasoned developer like Emu_kidd has seen his fair shake of uphill battles and countless hours/days/weeks of debugging issues has he has mentioned here. I believe you can do it, just remember it won’t be easy.

  22. I’m glad you guys are still motivated toward this project. It’s so often I see development on emulators and homebrew just abandoned due to lack of interest to continue. This is generally caused by a less-than-appreciative reaction to the hard work people are doing on the project. During the development over the years I’ve skimmed across the comments left on this board of people saying “What’s the point when VC can already run N64?” and “This emulator sux!” and the like. I think it’s fascinating reading your posts about work you’ve done on the DynaRec and how you’ve overcome obstacles in the code. It’s almost like reading an underdog story. How a small group of coders overcame every obstacle to create something amazing… I know, unlike game developers, you’re not doing this for money or even recognition. You do it for the challenge, the mystery, the discovery, and simply the ability to create something amazing as this really is becoming.

  23. hyrule0513 says :
    “If you have experience with C or C++, download the code and study it. It could get an idea to what n64 emulation is like on the wii.”

    you need more than this you should have knowledge on electronics and more. Like you and other people I want to contribute on this project and MAME too but I know my limitations, if i can understand 20% of the code, i am sure that i have a better job than a car’s parking staff ;)
    Thank you for this emulator I understant the work and effort put on it.

    Best regards,

  24. Interesting article, im not so good in english, but i have it understand.^^

    i hope beta2 works better, than we have more fun with this emulator.

    best regards

  25. i know java and c# pretty well, but not well enough to ever use bytes in my code!

    not too sure what kind of docs to read. i have seen a gb java emulator open sourced but some docs or newbie guidelines would be nice.

    in addition, i’d like to do an amstrad cpc emulator – there is one on the wii but i was looking at another platform (GBA).

    thanking you.

  26. If you know some Java and C#, that’s good. I went from a program called Game Maker’s scripting language (Game Maker Language, or GML to keep it short. VERY easy) to Java to C++.

    Here’s a few resources:

    C++ Tutorial:
    http://www.cplusplus.com/doc/tutorial/

    SDL Tutorial: (SDL = Simple DirectMedia Layer. This may be useful for displaying graphics, taking in input, etc.)
    http://lazyfoo.net/SDL_tutorials/index.php

    An cool emulation tutorial I found one day:
    http://www.emulation.org/EMUL8/HOWTO.html

    GameBoy Pan-Docs: (Everything you need to know about the GameBoy)
    http://nocash.emubase.de/pandocs.htm

    Since you already know C# and Java, you should catch on to C++ pretty quick, since a good chunk of stuff is the same.

    SDL (Simple DirectMedia Layer) is a simple graphics/audio/input library that is used in a ton of open-source projects and emulators (Mupen64, the emulator Wii/Cube64 is based off of used SDL). Although that tutorial is aimed at game programming, it’ll tell you a lot about SDL.

    The link to the emulation tutorial gives you the basic structure of an emulator. I found it useful.

    The third link is to the GB-PanDocs. I know you weren’t looking to emulate the GB, but, the GB is considered to be one of the easiest things to emulate, because it is a simple and very well documented system. (Documentation is probably one of (if not the most) important thing you should have when starting an emulator. Without it, you’d be lost)

    I’d attempt a GameBoy emulator first if you want to get into making emulators. The Amstrad CPC that you mentioned has a Z80 CPU, a similar CPU to that of the GB, which uses a Z80/Intel 8080 like CPU with a few new/changed instructions. Use Google to get more info.

    I myself haven’t made any working emulators, but I did start one a few weeks ago. I haven’t done too much with it, but I’m rather busy with a couple of other things, and have little time to work on it. Hopefully I can get back to that soon, and make something that doesn’t just collect digital dust on my HDD…

    – CHR15x94

  27. If you decide to make a gameboy emulator, i would recommend you keep it as a personal project. At this point there are so many established emulators for gameboy, that you’d get a lot of discouraging comments like “whats the point of this???” and the like. The point won’t be for them. The point will be for you to learn/improve. When its done, just out of nowhere you can release it, but still….be aware there will be many comments like “this emulator doesn’t even compare to that emulator” or “this was uneeded” ect ect ect. It comes with the territory. You could also just develop it, and keep it to yourself. Kind of a personal achievement sort of thing.

  28. Thank you so much for all your work!

    I just spent half an hour playing Goldeneye at five frames per second while grinning like an idiot.

  29. computerboy:

    My first thought was just what Lost My Mind said would come out (“Why build another GB/GBC/GBA emulator”), but It is a good thing to go in as a knowledge investor and learn the process. Hopefully that is what Emu_Kidd and his team is using to help motivate themselves to continue Wii64. An Intellectual advancement. I was unaware that there were Java Emulators. I have seen C and C++ quite a bit, so that is why I have suggested those languages. Whatever you choose to do, enjoy it. There will be ups and downs. good times and tough times.

    In all, it will be worth it for the pursuit of an understanding in programming knowledge in the emulation world. I don’t know if this exists out there, but have you thought of building on one of the previous GB/GBA/GBC emulators and adding DS/DSi functionality? Maybe for the wii (if you are interested)?

  30. PK Stadium 2 is a BLAST.

    no FB Tex, Load from SD not USB, no CPU FB, almost perfect. TYTYTYTY for this great work and i love reading your articles so much i actually go back and read them again multiple times. You guys are the best, soon youll be a synomous with the scene as team twizzers, even non-HBC user will know you. Keep persuing your goals, looks like the hard part of the coding is finished :)

  31. I have a problem. It isn’t a code error, but a troubleshooting one. And frankly, this is the only way I can express my problem, as far as I can see.

    I have placed a rom within a “wii64/rom/” directory, as well as multiple other directories just to be safe withinin my SD card. When I boot up wii64 and try to load said game, however, it simply says “an error has occured” with no other explenation whatsoever. I checked on the compatability list, and the game, Megaman 64, is indeed on the list.

    The best I can do is have it work on my jump drive. I put the game in the same directory set-up you ask for, and it works fine, only that I can’t even save at all. Even after putting up a save folder. But this is an extra proble; I don’t want to have to always put in my jump drive when I should be able to load a game from my SD card.

    In a nutshell, I can’t load jack shii~ from my SD card and I don’t understand why. A reply soon would be really greatful. Thanks.

  32. Hey, good job wii64 team ^^

    i just have only one question, Fighting force 64 don’t work on wii64 beta 1 and i have the USA version of the rom! I just want to know why lol

  33. Well my nostalgia started about the beginning of 2008 when I was wondering, “WHEN THE HELL IS THIS THING GONNA BE FINISHED?”, but now that’s a far distance memory… BUT -

    Thanks Wii64 Team for your work and most importantly the emulator… brings back the memories when I used to pla- babble blah blah…

    Also do you accept cash via regular mail… cause i no have credit card/paypal/etc…

  34. Sorry for double post, but uhhh…. Will… son… it’s Wii64/romS <- notice the S, therefore, you have no problems anymore.

    Source (WiiBrew: Wii64):
    “Put ROMs in the directory named /wii64/roms (All save types will automatically be placed in /wii64/saves) “

  35. How much of a donation would it take to get the emulator to read a FAT32 USB external drive? I love the idea of the emulator but the limitation of the drive makes “mass” rom access almost impossible.

    Hopefully, you will start a new, long-lasting trend. FAT16 was left behind for a reason, it’s extreme limitations of storage capacity.

    Great job with the emulator.

  36. @Joe Hobbes:
    We don’t take donations to ‘get things done.’ Donations are used to keep this site running and to purchase any development/testing equipment we need.
    I’m not sure why you’re having issues with your USB drive, but I’m fairly certain we support FAT32 as everything else does which uses a recent version of libfat. Perhaps you haven’t set up your drive correctly or something like a hacked IOS is interfering.

  37. I’ve been following this for about one and a half years now and I’m really impressed with the progress you guys have made on the emulator. Kudos to tehpola, sepp256, emu_kidid and everyone else who has made it possible. Another donation (hopefully) coming your way!

    I can’t wait to see beta 2 and later revisions!

  38. HUGE thanks to the Wii64 team for sticking with development for all this time and continuing forward with the project! Looking forward to what lies ahead. Incredible that the Wii can now emulate every Nintendo console and handheld ever made…

  39. Thanks for all your hard work! I appreciate all the time you have put into this project. I look forward to future releases. Keep up the good work!

  40. T_T… I’m so happy! , i just finished installing the homebrew channel and all the emulators for NES, SNES and of course N64 and they are all working wonderfully!

    I just wanted to thank you guys from the deepest part of my heart for making this available to all of us that know, the best damn games in history, were played on a nintendo system.

    I’ve installed so far 27 N64 Roms, and tested all of them on the Wii64, with probably 50% of them working 100% perfect!!

    Millions of thanks to you guys for this and if you guys make Goldeneye 007 work soon, try to give us a heads up here in the site, it’s in my personal opinion one of the best games in the history of the N64 system.

    P.S. if you get the GoldenEye game to work, i will not only donate money to your cause, (lowering voice) i would also give you my wife ;)

  41. everyone has their games they are loving to play via wii64, but i think that most, if not all of us are excited about playing GoldenEye in the near future.

  42. Great job on Wii64 guys!, just wondering, will WiiSX be given the same treatment soon (proper GUI, wiimote support, etc..). Don’t get me wrong, i’m extremely greatful for the hard work put into both of these great emulators and have enjoyed Wii64 greatly. Again, my greatest thanks for your hard work.

  43. So wait, a quick question for people reading here… do you need to set up a wii64/saves directory yourself for saves to work, or will the emulator do it by itself? Or are saves not working for beta 1 yet? Just trying to clarify.

  44. @ Ben

    You will need to make the /wii64/saves directory, wii64 will not make it for you. All you needed to do was extract the beta1 release archive to the root of your card and it would’ve been done for you.

    @ Matt

    Read the instructions posted everywhere.