Programming the C64 and C64 Ultimate from modern tools: BASIC, cc65 C, Python servers, and SwiftLink-style TCP/HTTP over the Ultimate’s emulated modem.
| Approach | Where | Verified |
|---|---|---|
| BASIC + SwiftDriver | c64u-kernal/ on kernal.d64 |
SIMPLE, SIMPLE-WOTD, HTTP-GET, WORD-SEARCH |
| Pure C (no driver file) | httpget-c/ |
httpget.c, wotd.c via make run |
| Direct ACIA BASIC | Root http-get.bas, word-search.bas |
Real SwiftLink / VICE / some older C64U setups only |
New C64 Ultimate firmware often hangs on root programs that poll $DE00 directly (PEEK(SR) bit 3). Use c64u-kernal/ or httpget-c/ instead.
- Menu → ACIA mapping
DE00/NMI, Hardware mode SwiftLink. - Build the disk:
cd c64u-kernal && ./build-disk.sh - On the C64:
LOAD"SIMPLE",8thenRUN(HTTP smoke test). - Then
HTTP-GET,SIMPLE-WOTD,WORD-SEARCH.
Full instructions: c64u-kernal/README.md, DISK_CREATION.md.
BASIC programs that LOAD "swiftdrvr" and use OPEN / PRINT# / GET# through Bo Zimmerman’s SwiftDriver. build-disk.sh produces kernal.d64 for Compute! / community distribution.
simple.bas— minimal HTTP test (start here)simple-wotd.bas— raw TCP to the Python BBShttp-get.bas— fetch and format a web pageword-search.bas— Compute! word-search demo (works; slower at 1200 baud)swiftdrvr.prg— driver binary (disk nameSWIFTDRVR)
Direct 6551 ACIA access at $DE00 with an NMI ring buffer (nmi.s). No separate driver file. Deploy to the Ultimate with:
cd httpget-c && make runUses runner.py (HTTP POST to the Ultimate’s run_prg API). See SPEC.md for wire-protocol gotchas and architecture.
Vendored from Swiftdriver.zip: swiftdrvr.asm, LADS project, Apache License 2.0. See swiftdriver/PROVENANCE.md.
PETSCII BBS server for C64 clients over TCP (port 6464). Used by SIMPLE-WOTD and wotd.bas. Based on jalbarracinv/python-cbm-petscii-bbs.
pip install requests
python3 bbs.pyhttp-get.bas, word-search.bas, wotd.bas, swiftlink.bas — direct PEEK/POKE at $DE00, often at 38400 baud. Fine on hardware SwiftLink or VICE; not the first choice on new C64 Ultimate firmware.
http-get-kernal.bas duplicates the KERNAL approach at repo root (canonical copies live in c64u-kernal/).
httpget-tool/— planned BASIC-callable resident HTTP tool (REU storage); scaffold onlyswiftdriver-c/— educational C port of SwiftDrivermultiplex.c-c64/— sprite multiplexing demo (separate from HTTP work)runner.py,rbas.sh— tokenize BASIC withpetcat, POST PRG to C64 Ultimate
Symptoms: “connecting…” then hang, or host-side timeout with no data.
- Confirm menu: ACIA
DE00/NMI, SwiftLink mode. - Use
kernal.d64fromc64u-kernal/, not root direct-ACIA programs. - Disable JiffyDOS for KERNAL/SwiftDriver programs.
- Full power cycle after modem errors (reset alone may not clear the emulated modem).
Requirements: petcat (VICE), requests, python-dotenv, .env with C64U_PASSWORD.
./rbas.sh c64u-kernal/simple.basOr for C:
cd httpget-c && make runrunner.py POSTs to http://<your-ultimate>/v1/runners:run_prg.
| Service | Host | Port |
|---|---|---|
| HTTP demos | php.retrogamecoders.com |
80 |
| BBS / WOTD | bbs.retrogamecoders.com |
6464 |
| Doc | Contents |
|---|---|
SPEC.md |
Architecture, gotchas, roadmap |
c64u-kernal/README.md |
KERNAL programs, baud table, credits |
DISK_CREATION.md |
Building kernal.d64 |
- This repo’s own code (BASIC, Python, C except vendored driver) —
LICENSE - SwiftDriver (
swiftdriver/) — Apache License 2.0, Bo Zimmerman —swiftdriver/LICENSE