Two systems join the sigilOS RetroPie launcher this week, bringing the total to 42 launchable platforms. The Atari 800 introduced a new CPU core (6502A), a new graphics chip (GTIA), and a character-mode renderer that decodes Atari's NTSC YIQ colour palette into ARGB32. The MSX Turbo-R cost almost nothing: one first-definition override on top of the existing MSX2 core.
- CPU: 6502A via m6502.sg
- RAM: 48KB ($0000–$BFFF)
- OS ROM: 8KB ($E000–$FFFF)
- GTIA: colour registers $D000–$D01F
- GR.0: 40×24 char render
- EL0 app: 38,560B
- CPU: R800 (Z80-compatible) via z80.sg
- GPU: V9938 (shared with MSX2)
- Audio: AY PSG (shared with MSX2)
- Slot layout: unchanged from MSX2
- EL0 app: 52,944B
- Override: first-def-wins core_id=1991
Atari 800: 6502A, GTIA, and GR.0
The Atari 800's memory map is simpler than most of the home computers already in the launcher. The 6502A sees 48KB of RAM from $0000 to $BFFF, the GTIA colour registers at $D000–$D01F, and an 8KB OS ROM at $E000–$FFFF. cores/at8.sg uses first-definition-wins overrides of m6_read/m6_write over the existing m6502.sg core to hook these regions without duplicating the CPU logic.
GTIA colour decode
The Atari used a proprietary NTSC YIQ colour encoding — 128 hue/luminance combinations rather than the palette entries of later systems. at8_color(reg) maps GTIA register values to ARGB32 using a lookup that encodes the YIQ parameters for each of the 16 hue phases and 8 luminance levels. The relevant GTIA registers for GR.0 are:
| Register | Address | Role |
|---|---|---|
COLPF0 | $D000 | Playfield colour 0 |
COLPF1 | $D001 | Playfield colour 1 (text foreground in GR.0) |
COLPF2 | $D002 | Playfield colour 2 (text background in GR.0) |
COLPF3 | $D003 | Playfield colour 3 |
COLBK | $D00A | Background colour |
GR.0 character render
GR.0 is Atari's 40-column text mode — 40 columns × 24 rows of 8×8 pixel characters. The screen RAM lives at $9C40 in the standard configuration; the character ROM is at $E800 within the OS ROM. at8_render_gr0 walks the screen RAM row by row, fetches each character's 8-byte glyph from the character ROM, extracts each bit MSB-first with at8_bit, and writes either the COLPF1 (foreground) or COLPF2 (background) ARGB pixel into the framebuffer. The result is a 320×192 pixel output (each character cell is 8×8, 40×24 = 320×192).
The 6502A reset vector sits at $FFFC–$FFFD in the OS ROM. core_load reads those two bytes and sets the program counter accordingly — the same pattern as the 6502-family cores already in the launcher (NES, Atari 2600, C64).
MSX Turbo-R: R800 as a thin override
The MSX Turbo-R was Panasonic's 1990 answer to the question of what comes after MSX2+. The answer, architecturally, was "almost the same thing with a faster CPU." The R800 is binary-compatible with the Z80 — the same instruction set, the same register file, the same I/O model — running at ~7 MHz with a pipeline that makes it materially faster in practice. Everything else (V9938 graphics, AY PSG audio, slot layout, ROM banking) is identical to MSX2.
This made the sigilOS core trivially cheap. cores/msx_turbo.sg is three lines of substance:
# first-def-wins: override core_id before msx2.sg defines it
core_id = 1991 # MSX Turbo-R (year of release)
# include the full MSX2 core
include cores/msx2.sg
Because cc0 uses first-definition-wins semantics, core_id = 1991 in msx_turbo.sg takes precedence over MSX2's core_id definition. Everything else — the Z80 CPU (already Z80-compatible with the R800), the V9938 renderer, the PSG mixer, the slot model — comes from msx2.sg unchanged. The launcher registers rp_title(41)="msx turbo-r" and rp_count goes from 41 to 42.
The EL0 app reuses msx2_app.sg's entry point, loading /roms/game.rom (cap-bounded, SECURE). The ROM load cap is the same 512KB ceiling as MSX2 — the Turbo-R's expanded addressing is a future pass.
The launcher at 42
The sigilOS RetroPie launcher now covers 42 systems across seven CPU architectures:
| CPU core | Systems |
|---|---|
| Z80 / Z80-compat | MSX, MSX2, MSX Turbo-R, ZX Spectrum, Game Boy, Game Boy Color, ColecoVision, PC-88, MSX-DOS |
| 6502 / 6502A | NES, FDS, Atari 2600, Atari 800, C64, Apple II |
| 68000 | Amiga, Atari ST, CPS-1, CPS-2, Neo Geo, Sharp X68000 |
| 68020 | CPS-3 |
| MIPS (N64) | Nintendo 64 |
| ARM (GBA) | Game Boy Advance |
| R800 (Turbo-R) | MSX Turbo-R |
The pattern that makes this scale: each new system either reuses an existing CPU core with a new bus map and graphics decoder, or adds a one-file CPU core and reuses everything else. The Atari 800 added a new CPU file but reused the 6502 register model. The MSX Turbo-R added no new files at all. The launcher infrastructure — the EL0 app loader, the cap-bounded ROM read, the framebuffer blit — is written once and shared across all 42.