There are 2 banks (one usable at a time) of 256 palettes available. Each palette has 16 color entries, the first being the transparent index ("color 0"), the 15 others are real colors, made of 16-bit RGB definitions.
The maximum number of colors on screen without timer interrupt tricks is: 256 palettes * 15 colors = 3840 (out of 2^16 = 65536).
Byte writes are allowed, but the value will be written to both bytes of the word (/WE pins are tied together).
The palettes can be read and written at full speed at any time. During active display, since the CPU has priority over rendering, the color read or written will be displayed during at least one pixel, resulting in noticeable "snow" if multiple colors are updated. A workaround is to update the palettes only during blanking (horizontal or vertical), over multiple frames if necessary.
There are two special colors used:
- The first color of the palette bank ($400000) is the Reference color for the video output. It always has to be pure black ($8000) otherwise monitors won't be happy and other colors won't be displayed correctly.
- The last color of the palette bank ($401FFE) is the Backdrop color, the color of the backmost layer on the screen. Caused by line buffers in NEO-B1 being cleared to $FFF (referencing the last color of the last palette).