2.7 KiB
Plus/4 Demo — Teletype Games title card
A Commodore Plus/4 program written in 6502 assembly (built with the ACME assembler): the smallest complete example of a Plus/4 title that goes through the Teletype Games build pipeline. It clears the screen, paints the Teletype Games title card, runs a gold colour wash across the title in sync with the raster beam, blinks a prompt, and hands control back to BASIC on any key.
The Plus/4 sibling of the C64 demo: same assembler, same Makefile, same pipeline shape — only the machine differs.
Controls
| Key | Action |
|---|---|
| any key | return to BASIC (colours restored, screen cleared) |
Keys are read straight from the keyboard latch ($FD30 / $FF08), the KERNAL IRQ is switched off while the demo runs.
Build and run
make build # produce plus4-demo.prg
make run # build + launch in VICE (xplus4)
make rebuildrun # clean rebuild + run
make deps # on macOS: install acme + vice via Homebrew
Loading the .prg on a real or emulated Plus/4:
LOAD"*",8,1
RUN
Headless smoke test with VICE (runs for a few emulated seconds, then writes a screenshot):
xplus4 +sound -warp -limitcycles 30000000 -exitscreenshot shot.png -autostartprgmode 1 plus4-demo.prg
How it works
- BASIC stub at
$1001:10 SYS 4109, soRUNstarts the code at$100D. - Screen is written directly: screen RAM at
$0C00, colour RAM at$0800. A Plus/4 colour byte isluminance << 4 | hue, which is what the wash exploits — the same gold hue at eight luminances, peaking in white. - Timing: no interrupts; the main loop polls the TED raster register (
$FF1D) and does one pass per frame. - Text: the
+prtextmacro copies a fixed screen-code string to a row/column with one colour. Strings are written in lowercase ASCII, which ACME's!scrmaps to the uppercase screen codes of the default character set. - Exit: the saved border and background colours are restored, interrupts re-enabled, and the screen cleared through the KERNAL (
$FFD2) beforeRTSreturns to BASIC.
Memory map
$1001 .. $100C BASIC stub (10 SYS 4109)
$100D .. ... machine code + texts + variables
$0C00 .. $0FE7 screen RAM (written directly)
$0800 .. $0BE7 colour RAM
$FF15 / $FF19 background / border colour (TED)
$FF1D raster line (frame sync)
$FD30 / $FF08 keyboard column select / row latch
Pipeline
.woodpecker.yaml is a one-line marker (platform: plus4); the pipeline itself is served by the update server. See plus4-build for the toolchain and the platform page on the wiki: https://wiki.teletypegames.org/development/plus4