First public commit.
This commit is contained in:
parent
2a48f52979
commit
4bac9d83ed
288 changed files with 18417 additions and 1076 deletions
30
lenser/pet/palette.py
Normal file
30
lenser/pet/palette.py
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
"""Commodore PET / CBM monochrome display.
|
||||
|
||||
The PET has no bitmap or colour -- a 40- or 80-column text screen of a fixed
|
||||
character ROM on a monochrome (green P1 phosphor) monitor. Images are rendered
|
||||
with the PETSCII 2x2 quadrant-block graphics characters, giving an effective
|
||||
80x50 (40-col) or 160x50 (80-col) one-bit pixel grid.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ..palette import srgb_to_lab
|
||||
|
||||
# 0 = background (dark), 1 = foreground (lit phosphor). Green to match the
|
||||
# classic PET monitor; the signal is one bit, so only luminance matters.
|
||||
PALETTE = np.array([(0, 0, 0), (0x40, 0xE0, 0x40)], dtype=np.float64)
|
||||
|
||||
|
||||
def get_palette() -> np.ndarray:
|
||||
return PALETTE
|
||||
|
||||
|
||||
def palette_lab() -> np.ndarray:
|
||||
return srgb_to_lab(PALETTE)
|
||||
|
||||
|
||||
# screen (poke) code for each 2x2 quadrant pattern, bits TL<<3|TR<<2|BL<<1|BR.
|
||||
# Derived from the PET character ROM: 8 blocks exist directly, the other 8 are
|
||||
# their reverse-video forms (screen code | $80).
|
||||
QUAD = [32, 108, 123, 98, 124, 225, 255, 254, 126, 127, 97, 252, 226, 251, 236, 160]
|
||||
Loading…
Add table
Add a link
Reference in a new issue