plus4-build
CI/CD templates for Commodore Plus/4 (ACME + VICE) game projects, in the same
spirit as c64-tools: the Plus/4 shares the C64's 6502 core, so
the toolchain is the same ACME assembler — only the emulator (xplus4), the
load address ($1001) and the TED registers differ.
example-makefile.make— project Makefile: local dev targets (deps,build,run,clear,rebuild,rebuildrun).example-woodpecker.yaml— a one-line marker (platform: plus4): the full pipeline (version → build → artifact → publish) is served by the update server's Woodpecker configuration extension — preview it withcurl "https://teletypegames.org/build/config?platform=plus4".example-metadata.json— catalog metadata; theversionfield drives the pipeline's version step, the rest (name,title,author,desc,site,repo,license) is whatWarpEngine::Platforms::Plus4::Servicewrites into the DB (sitebecomes the "Source Code",repothe "Repository" external link).example-tasks.json— VS Code.vscode/tasks.jsonwrapping the local make targets.
Usage in a game repo
- Copy
example-makefile.maketoMakefile, setPROJECT(andTARGETif the .prg name differs from$(PROJECT).prg). - Copy
example-metadata.jsontometadata.jsonand fill it in;namemust matchPROJECT. - Copy
example-woodpecker.yamlto.woodpecker.yaml(a one-line marker — the pipeline itself is served by the update server; addname:when the software name differs from the repo name) and add theapplication_tokensecret in Woodpecker (an ApplicationToken with theupdate+uploadscopes, created in the admin). - Copy
example-tasks.jsonto.vscode/tasks.json.
Plus/4 specifics
- A BASIC program starts at
$1001(the C64's is$0801), so the SYS stub and the* =origin differ; the entry point after a minimal stub is$100D(SYS 4109). - Screen RAM is at
$0C00, colour RAM at$0800; a colour byte isluminance << 4 | hue(bit 7 flashes). - Video is the TED at
$FF00–$FF3F($FF15background,$FF19border,$FF1D/$FF1Craster line); there is no VIC-II, no SID and no CIA. - The KERNAL jump table is compatible (
$FFD2CHROUT,$FFE4GETIN).
Builder image
builder.Dockerfile bakes the pipeline's build-step dependencies
(ACME assembler + make) into git.teletypegames.org/build/plus4-builder,
so the build step does not run apt-get on every run (VICE is a
local-dev tool only and is not included):
docker build --platform linux/amd64 -f builder.Dockerfile \
-t git.teletypegames.org/build/plus4-builder:latest .
docker push git.teletypegames.org/build/plus4-builder:latest
The served pipeline uploads $(PROJECT)-$(VERSION).prg and
$(PROJECT)-$(VERSION).metadata.json via /build/upload, then triggers
/build/publish?platform=plus4&name=$(PROJECT)&version=$(VERSION), which
creates/updates the Software row and a Release with cartridge_path.