Close

Choosing a System Palette

A project log for Project RAD

8bit game console from an alternate reality

photondreamsphotondreams 05/29/2025 at 12:150 Comments

(It seems hackaday.io ate all of my images... oh well)

RAD uses a tile-based rendering system. Everything on screen is either a background tile or a sprite tile. Each tile has attributes, one of which is a palette ID pointing to one of 4 palettes of 16 colors each.

Palette entries are 8 bit, using the RRGGGBBS encoding. 

This encoding gives us a 256 color subset of the 512 color RGB333 color space where red and blue share the lowest weighted bit. It requires a 9 bit DAC and 9 output pins from the FPGA.

We considered other encoding schemes like RRGGBBSS and RRRGGGBB, but we settled on this one because it gave us real neutral grays and a good assortment of hues.

This is the main RRGGGBBS palette and it's associated color spectrum :


For comparison, here is the Sega master system RGB222 palette sorted by hue with associated spectrum :

I don't have a spectrum for it, but here is the gamma correct NES palette for reference :

Our rejected alternatives :

RRGGBBSS, a 256 color subset of the 4096 color RGB444 space. Lots of shades but many missing hues. Very crunched reds. Requires a 12 bit DAC (3 more resistors not a big issue. 3 more output pins from the FPGA... more problematic).

RRRGGGBB, terrible grays. Otherwise a pretty good assortment.

Discussions