Universal PPU

The Nintendo NES home console, as well as the Nintendo VS and Playchoice-10 systems for the arcade, all were based on the same architecture.  The heart of the system was composed of two chips; the first was the Ricoh 2A03 and its variants, which acted as the main microprocessor and contained hardware to generate sounds and music; the second was the RP2C02 and its variants, also known as the “Picture Processing Unit”, or PPU, responsible for generating video.

This project aimed create a drop-in replacement for the PPU compatible with all of its variants.  The replacement could be used to modify an NES to allow for RGB (or even VGA) output, or to allow VS fanatics to play the entire library of VS titles without having to find and purchase all of the variants of the PPU, which are becoming increasingly difficult to find.

Although functional prototypes were produced, the project was abandoned for various reasons in August 2014 and the sources were made available under an open-source license.


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License

Please note that there is no warranty nor any support offered for the contents of this archive.  The Universal PPU is working, but is in no way a finished product.  Compatibility with games is observed to be very good but not 100%.  Assembling your own Universal PPU is strictly at your own risk.


Resistors R29, R30, R18, R31, R33, R34, R36, R37, R39, R40, R42, R43, R45, R46, R48, and R49 are shown as 0-ohm resistors in the design.  They are present to either pull the data bus up or down while the FPGA is being initialized.  Only one of each pair should be populated.  It was an experiment I was never able to complete, and I populated none of them on my own Universal PPUs to no ill effect.


Demo 1

An early hardware prototype running on the Nintendo VS motherboard (and yes, FPGA loading time was ultimately reduced to ~2 seconds)


Demo 2

A later hardware revision running on an American NES console