Both Brett and I use this screenshot upload service called puu.sh, turns out it's a great way to track the history of your life. Here's what we have of decaf over the years.
decaf-emu (or wiiu-emu as it was known back then) started as a simple file loader for the Wii U .rpx files
The day after that first screenshot we have the first ever commit:
Can load WiiU compressed .ELF files into memory with symbols & relocations.
Looks like we have the beginnings of a PPC interpreter going on here.
My first HLE functions!
First run of the JIT against a real game.
Looks like we have a reasonable amount of functions implemented at this point - in this screenshot we can see memory allocation and file system usage. Followed by a crash!
We are now 2 months in and from this screenshot you can see we already have our first fiber based thread scheduler and quite a few coreinit functions implemented (and I presume a pretty solid PPC interpreter if we are getting this far).
The humble beginnings of a latte shader decompiler.
Seems like we figured out how texture storage "works" (we are yet to have many problems with the peculiarities of GPU texture swizzling!).
And shader storage...
Which means... our first rendering! This is from the system application Amiibo Settings.
Testing the accuracy of your CPU emulation for all edge cases is quite important!
This was the first game running in the emulator, if you look hard enough you might be able to tell this is actually NES Remix. Looks like we've switched to the name decaf here.
Now that looks more like it...!
Figuring out registers was fun...
Progress in emulation is not always forwards.
So we're now 5 months in and we have something which looks like a game! Awesome! Except it's totally wrong and we're going to redo all the graphics from scratch again, great!
In November we decided to move to using PM4 for encoding our GPU instructions just as the real Wii U does. PM4 is the data format that the AMD gpu uses to communicate with the graphics drivers running on the CPU.
Start fleshing out this whole pm4 / gx2 / driver stuff.
Untiling / unswizzling was non-trivial to figure out! Please excuse my mouse cursor.
Once we started gaining some interest from the outside world we decided to switch to OpenGL in an attempt to attract Linux developers to the project. So we're back to being unable to render Amiibo Settings correctly.
Trying to figure out why nothing is working by using the NVIDIA debug tools.
It didn't take that long to get back to where we were before with the old DX12 renderer. But now we were using OpenGL with our much more accurate PM4 pipeline for feeding commands to the GPU instead of a custom format!
It wasn't perfect though.
With the Wii U we were fortunate enough to have games compiled with full function symbols which made some things easier to reverse!
One step backwards..
But two steps forward! A second game running in the emulator, I believe this is one of the Mario games.
Oh yeah it's Super Mario 3D World.
So it's about 7 months after we started, we've made some progress, but it's a long time to work on stuff without any playable results and we're a bit burnt out so we both took a break.