C64U Radar turns a Commodore 64 Ultimate, Ultimate 64 or an original C64 with an Ultimate II cartridge into a live air traffic scope.
Select any worldwide airport's four-letter ICAO code and the aircraft actually flying near that airport right now appear as moving targets on your screen.
It works for airports worldwide. Point it at your local field and watch the approach traffic line up, or at KLAX and watch it get busy.
The C64 can't handle encrypted network traffic so a small server on your computer and fetches live traffic from adsb.fi and streams it on your LAN.
- v0.3 — track table enhancements: climb/descent glyphs, ground tracks in grey, auto QNH.
- v0.2 — range set via menu: new menu item to set range (3..99), in multiples of 3.
- v0.1 — first public beta.
The C64 can't do HTTPS, JSON, or geodesic math, so a small companion program does that on a Mac, Windows, Linux, or Raspberry Pi computer and streams a compact binary feed to the C64U over the LAN:
adsb.fi HTTPS API
|
v
Python server: fetch, cache, filter, sort, project, encode
|
| plain TCP port 6464, MR2 request + LD binary response
v
C64 Ultimate: validate feed, draw bitmap scope/table, move 8 sprites
The server uses only the Python standard library — no API key, no third-party package, no account.
- Hires bitmap scope, customisable nautical mile range 3..99nm range rings.
- Up to 8 simultaneous targets (VIC-II hardware sprite limit), shown as numbered diamonds with a directional stem for track/heading.
- Callsign, aircraft type, altitude, climb/descent indicator and groundspeed for each target.
- Center on any latitude/longitude, or a four-letter ICAO airport code (worldwide, via a cached OurAirports lookup).
- The server finds the C64U on the LAN and pushes its own address into a
small mailbox in C64 memory over the C64 Ultimate's REST API — the server
address usually just fills itself in, with manual entry (
C= + S) as a fallback. Seeserver/README.mdfor how this works.
- On a computer on the same LAN as the C64U, run the server:
- macOS: double-click
executables/server_bundle/start_server_mac.command(first launch needs a right-click → Open, since the script isn't Apple-signed — seeserver/README.mdfor why). - Windows: run
executables/server_bundle/start_server_windows.bat. - Linux: run
executables/server_bundle/start_server_mac_linux.sh. - Or directly:
python3 executables/server_bundle/ultimate_radar_server.py(Python 3.9+).
- macOS: double-click
- On the C64U: enable
Command Interface, then runexecutables/c64u_radar.prg. Look under Main Menu > MEMORY & ROMS on the Commodore-branded C64 Ultimate, or Configure > C64 and Cartridge Settings on other Ultimate 64 / 1541 Ultimate-II+ firmware. Menu location can vary by firmware version; if you don't see it in one place, check the other. - Pick a center (latitude/longitude or ICAO code). The server address should
already be filled in; if not, press
C= + Sto enter it manually.
C64 program (needs cc65):
cd c64u_radar
make clean allFails the build if the program/data exceeds the fixed $5A00 sprite memory
block — this is checked automatically by check_map.py.
make also builds c64u_radar2.prg from c64u_radar2.asm, a hand-written
6502 assembly port of the same program contributed by
@buck5125. It is smaller and has less
per-frame overhead than the cc65 build, and is kept here for people who want
to build and experiment with it. The C version remains the reference
implementation and is the only one shipped as a release download, so if you
just want to run the radar, use c64u_radar.prg above.
Native logic harness (no C64 emulator; compiles the real radar source against a fake 64K RAM and a mocked Ultimate network API, using your system's C compiler):
cd c64u_radar/host_test
cc -DHOST_TEST -I. -I.. -o harness harness.c
./harnessThis is not a substitute for testing on real hardware, but it does catch regressions in request generation, PETSCII handling, the server-address mailbox, sprite drawing, and link-down behavior.
Server tests:
cd server
python3 -m unittest test_ultimate_radar_server.pyc64u_radar/ C64 program source (cc65 C + 6502 asm port), Makefile,
native test harness
server/ Python server source and tests
executables/ Prebuilt PRG and a ready-to-run server bundle
assets/ Screenshots
The C64 opens one TCP connection to the server on port 6464 per poll cycle
(~10s), optionally sends an MR2 POS <lat> <lon> <range> or
MR2 ICAO <code> <range> request line, reads an 8-byte header plus up to
eight 28-byte aircraft records, then disconnects. See
server/README.md for the full wire format and the HTTP
debug endpoints (/traffic.txt, /status.json, etc.).
- Traffic data: adsb.fi.
- Airport coordinates: OurAirports (public domain).
- C64 Ultimate command interface: the
ultimateiilibrary inc64u_radar/ultimateii/, by Scott Hutter and Francesco Sblendorio (1541ultimate2), GPL-3. - 6502 assembly port (
c64u_radar/c64u_radar2.asm), plus the v0.2 range menu and v0.3 track-table work: @buck5125.
GPL-3. See LICENSE. The C64 program links the GPL-3 ultimateii
library directly, so the whole repository is distributed under those terms.