Thursday, February 18, 2016

NES audio + other updates

PlayStation emulation is on-going. I can now render the PS logo using my WIP geometry transformation engine implementation - this also proves the very painful CD-ROM controller is semi-working. Games are not booting at the moment and I hope to get some nice updates in the next few months.

I took a short break to implement NES audio. It took me a while to get started on this task but it was always on my TODO list. Luckily, the previous work I had done regarding Game Boy audio really helped in order to get this controller implemented smoothly. The NES APU is composed of five distinct channels: two pulse (or square) channels, one triangle channel, one noise (pseudo-random) channel, and a so-called delta modulation channel (DMC). Super Mario Bros uses the first four, while Bomberman uses DMC for bomb explosion sound effects (thanks to the folks on #nesdev for pointing this out), so testing was pretty straight-forward.

On a side note, I also improved overall performance a tiny bit by changing my clock scheduler implementation, which also now allows for arbitrary clock rates (which beforehand were expected to have a joint least common multiple which was small enough). This means that the various supported machine clock rates are now consistent with their real specifications.

Next step is to continue work for the PlayStation, and maybe implement some more NES mappers on the side.