8bitlenser/lenser/ti99/palette.py
2026-07-03 19:35:35 -07:00

39 lines
1.2 KiB
Python

"""TI-99/4A TMS9918A Video Display Processor palette (15 colours + transparent)."""
from __future__ import annotations
import numpy as np
from ..palette import srgb_to_lab
# TMS9918A colours, index 0 = transparent (we never use it for pixels).
# Common measured RGB values.
TMS9918 = np.array([
(0x00, 0x00, 0x00), # 0 transparent (treated as black for matching)
(0x00, 0x00, 0x00), # 1 black
(0x21, 0xc8, 0x42), # 2 medium green
(0x5e, 0xdc, 0x78), # 3 light green
(0x54, 0x55, 0xed), # 4 dark blue
(0x7d, 0x76, 0xfc), # 5 light blue
(0xd4, 0x52, 0x4d), # 6 dark red
(0x42, 0xeb, 0xf5), # 7 cyan
(0xfc, 0x55, 0x54), # 8 medium red
(0xff, 0x79, 0x78), # 9 light red
(0xd4, 0xc1, 0x54), # 10 dark yellow
(0xe6, 0xce, 0x80), # 11 light yellow
(0x21, 0xb0, 0x3b), # 12 dark green
(0xc9, 0x5b, 0xba), # 13 magenta
(0xcc, 0xcc, 0xcc), # 14 grey
(0xff, 0xff, 0xff), # 15 white
], dtype=np.float64)
# Palette indices usable as pixel colours (1..15).
USABLE = list(range(1, 16))
def get_palette() -> np.ndarray:
return TMS9918
def palette_lab() -> np.ndarray:
return srgb_to_lab(TMS9918)