I couldn't help but notice that parts of FreeDO went open source. Last weekend I downloaded what was uploaded to see if it could function on its own.

It's been about a week, and I've been able to compile the FreeDO core and interface with it minimally. I have fed it a ROM to see what happens, and I finally I have my first visible progress!

I hereby name it: FourFreeO, a name combining both FourDO and FreeDO. It really doesn't use any code from my high-level emulation attempt (FourDO). I gave up with the high-level emulation approach; disassembling and reverse engineering the 3DO OS was clearly an overwhelming workload.

Anyway, I'll keep working on it. I'm using C# this time and crossing my fingers that it performs well enough. Long live 3DO!

Breakthrough! Since that last screenshot, I am now:
* Reading the video buffer accurately
* Able to load BIOS
* Able to load a game

BIOS worked great from the get-go. Figuring out how to load a game took a while. Some examples:
* I had to disassemble FreeDO to find the right value to pass to the FreeDO interface for GetDiscSize. It's too bad they didn't upload their UI code. What a chore!
* For some mysterious reason, I had to disable compiler optimizations on a few functions in the FreeDO core, or it would freeze up. Probably some bad pointer arithmetic I'll have to look into later.
* I also had to make my first genuine bug fix to the FreeDO source code: an uninitialized variable. I'm somewhat confused as to how this got uploaded, since I hit it very early on.

Anyway, finally, after some work and very late nights:

Yep, the game starts up. The introduction video does too; and so does the main menu, and the in-game demo the game plays through. That is a pretty significant test of the system. The source code they uploaded seems to be pretty much complete as far as emulation of the system. I am quite happy about this.

I'm going to move on to audio next. That may require me to pick a better multimedia framework (currently the display is using winforms and simple blits). I believe I'll go with either OGL or SDL if I have to. Oh, also, I will work on incorporating a flux capacitor.