Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C64U Radar

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.

Version history

  • 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.

C64U Radar scope screen

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.

Features

  • 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. See server/README.md for how this works.

Quick start

  1. 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 — see server/README.md for 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+).
  2. On the C64U: enable Command Interface, then run executables/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.
  3. Pick a center (latitude/longitude or ICAO code). The server address should already be filled in; if not, press C= + S to enter it manually.

Building from source

C64 program (needs cc65):

cd c64u_radar
make clean all

Fails 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
./harness

This 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.py

Repository layout

c64u_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

Protocol summary

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.).

Credits

  • Traffic data: adsb.fi.
  • Airport coordinates: OurAirports (public domain).
  • C64 Ultimate command interface: the ultimateii library in c64u_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.

License

GPL-3. See LICENSE. The C64 program links the GPL-3 ultimateii library directly, so the whole repository is distributed under those terms.

About

an ADS-B radar scope for the Commodore 64 Ultimate

Resources

Stars

15 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages