Pixels are Tiny
on

I've been pressing on with my work on Emu-o-Tron, and it is about time for me to post an update. I have made the video and sound processing systems far more modular, so now instead of being forced to use DirectX 9 and Xaudio2 you can choose between DirectX9, DirectX10, GDI, OpenGL, Xaudio2, DirectSound, and OpenAL. The big upside to this is that Emu-o-Tron can now be run with Mono on Mac and Linux systems with full sound and video support which is all kinds awesome. The other big big BIG change since I last posted is that I have finally added a cycle-based PPU. Previously when emulating the NES video I would render entire scanlines at a time which is fine for the vast majority of games, but when a game tries to make changes that last for less than one scanline you can get some graphical glitches. With my cycle-based PPU every pixel is rendered individually, though this can have quite the performance cost (runs at about half the speed now, though still easily manages the 60FPS required even on my craptop). A game that really demonstrates the difference in PPUs is Rad Racer, here is a screenshot with the old PPU and below is a video of it running with the cycle PPU.

Rad Racer with cycle-based PPU.

I have decided to keep developing my scanline PPU in parallel to the new one for platforms where speed is a priority over accuracy like my Silverlight emu or if I were to decide to make a Win Phone 7 port. There is still going to be quite a long period of tiny accuracy tweaks (mostly timing related) to the new PPU before I'm really happy with it, but at least I have finally gotten over the big hurdle of initially writing it. Another fun little thing I have implemented is proper NSF playback support, even has a simple little GUI for displaying the NSF meta information. That covers pretty much all the major changes since I last posted, hopefully I will stay pretty motivated and will have another new blog post shortly.