30 lines
1.3 KiB
Python
30 lines
1.3 KiB
Python
"""Atari 7800 conversion dispatch.
|
|
|
|
The 7800's MARIA chip has its own architecture (display lists + zones + objects),
|
|
nothing like ANTIC/GTIA -- but its 160A graphics mode is 2 bits/pixel, 4 px/byte,
|
|
exactly the packing of ANTIC mode E (Atari GR.15). So the per-mode encoders pack
|
|
160x192 2bpp bitmaps the same way GR.15 does and reuse the Atari 256-colour NTSC
|
|
palette + dither-aware selection; the MARIA-specific display lists are built by
|
|
the cartridge packer (viewer/assemble.py).
|
|
|
|
Modes: ``c160`` = 25-colour 160A (8 MARIA palettes, per-segment palette choice);
|
|
``mono`` = luminance two-tone / tinted.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from ... import imageprep
|
|
from . import c160, mono
|
|
|
|
_MODULES = {"c160": c160, "mono": mono}
|
|
MODES = list(_MODULES.keys())
|
|
|
|
|
|
def convert_image(path_or_img, mode="c160", palette_name="ntsc",
|
|
dither_mode="floyd", intensive=False, prep_opt=None,
|
|
base_color=None):
|
|
prep_opt = prep_opt or imageprep.PrepOptions()
|
|
module = _MODULES.get(mode, c160)
|
|
img_rgb = imageprep.prepare(path_or_img, module.WIDTH, module.HEIGHT,
|
|
module.PIXEL_ASPECT, prep_opt, border_rgb=(0, 0, 0))
|
|
return module.convert(img_rgb, palette_name, dither_mode, intensive,
|
|
base_color=base_color)
|