▓ CGTerm3.1
GitHub

BBS · demoscene · legacy · 2026

CGTerm 3.1

Terminal for Commodore 64 bulletin boards

PETSCII-native terminal for Commodore 64 bulletin boards: Telnet, file transfers, disk images, cross-platform SDL builds for macOS, Linux, and Windows. MagerValp’s CGTerm, carried forward as this scene edition.

< BOARDS ON AIR >

The C64 boards from CGTerm’s phonebook, probed from this server. Checking carriers…

Dialling…

WEB TERMINAL

In-browser session to Frozen Floppy BBS via fTelnet. Press DIAL on any board above to call it instead. The widget loads only after you press the button below (external script; allow it if your browser blocks third-party content).

bbs.retrohack.se:64128

fTelnet is not loaded until you request it, to keep the page fast and avoid unnecessary third-party requests.

Native client: cgterm bbs.retrohack.se 64128

< DEV LOG >

  • Loading…

LATEST COMMITS

github.com/unbreached/CGTerm-3.0

  • Loading…
All commits

< ABOUT >

CGTerm is the client MagerValp’s vision deserves on today’s machines: real C64 boards over Telnet, PETSCII on the glass, transfers and disk images done the way sysops and callers still expect, with SDL builds for macOS, Linux, and Windows. Many of us learned the network by watching characters crawl across the screen at 9600 baud, greeting demos before the menu, trading files and mail in a culture that treated knowledge as something meant to move freely. Bulletin boards, the demoscene, and the old curiosity-driven scenes are part of how all of this began; nothing that came later, not even the wave of AI we have now, erases that root. This project exists to keep the line open and the legacy breathing.

The original code is MagerValp’s; this scene edition is a deep refresh by m00p and Genesis*Project, with sysops, swappers, and callers who still think in blocks. I take no credit for MagerValp’s foundation. This release is for the community, the build many of us were waiting for, so BBSing stays a little easier and the people keeping lines up stay visible. New hands at the keyboard are welcome. We stand at the edge of powerful AI and vast clouds, but the glow of this era is still the beginning we build from. That legacy should never die.

Code
m00p (Genesis*Project)
Music
Mr.Death
Support
mermaid
QA
Larry, Jucke, SkyHawk, hedning
Original
MagerValp

For callers and sysops (transport security): typical BBS access uses Telnet (cleartext). Traffic can be observed on untrusted networks, as with historical dial-up paths converted to TCP. Use strong, unique passwords per board where possible, and treat the session like any unencrypted terminal connection.

< FEATURES >

Demo splash

Demoscene-style intro in the spirit of greet disks and party screens: vectorballs, plasma, rotozoom, wireframe morph, XM module, sine scroller, greetings; CRT-style power-down when you exit.

Modem sim & audio

Optional connection theatre: green-phosphor look, AT sequence with phone book, dial tone, DTMF, and carrier-style audio (approximate V.34-era line). For anyone who still remembers pacing the scroll at 9600 baud. Toggle from the menu. Bell and modem sounds now work on macOS and Linux too, with mute and volume adjustable while you are connected, and the XM music loops without a gap.

ZMODEM NEW

Batch send and receive with real file names and sizes, crash recovery to resume broken downloads, CRC-32, and auto-start the moment the board begins sending. No more typing file names twice.

Transfers

ZMODEM, Multi Punter (batch), Rainbow, XMODEM variants (checksum, CRC, 1K), and Punter. Last protocol is preselected (T + Return), every transfer is logged with bytes, time and cps, and you get an on-screen summary. Progress UI, optional hex view, cancel that no longer stalls the other end, free-space checks, and filename conversion between PC extensions and C64 comma types (e.g. .prg ↔ ,p).

Disk images

Open D64, D71, and D81 images like folders; set an image as download target; extract and inject PRG/SEQ/USR with PETSCII-aware names and block accounting. New disk tools: validate (rebuild the BAM), lock/unlock, rename disk and ID, extract to the host, insert into an image, a real CBM-style listing with splat and lock markers, and support for images with error tables.

Fonts

Ten header and nine body pixel fonts, selectable in settings, plus support for adding converted TTF/OTF assets through the project’s usual pipeline.

Terminal & ANSI NEW

Status line, capture toggle, copy the screen as text, and paste that transliterates UTF-8. Much fuller ANSI: scroll regions, pending wrap, save/restore cursor, insert/delete/erase characters, iCE colours, truecolour, line drawing, xterm keys and Alt hotkeys.

Keyboard

Swedish, US, and German-oriented layouts on macOS, Linux, and Windows, and any extra layouts you drop into the assets folder are picked up automatically. Keyboard test screen with PETSCII mapping; macros now record RETURN, cursor keys and F-keys.

UI

Categorized menus, colour-distinguished file selector (directories, disk images, files), consistent accent theme, and visible transfer path so download and upload directories stay obvious.

Bookmarks

Forty entries with host, port, alias, and terminal mode fields; per-board notes file; numeric quick-connect where configured.

Sessions NEW

Connection history with one-key redial, per-bookmark auto-login scripts (in a bookmark’s notes: login=w:Handle;s:name;cr;w:Password;s:secret;cr), automatic reconnect after any dropped line, and a new options panel. IPv6 support (IPv4 tried first for old boards), and Telnet negotiation in ANSI mode.

Hardening

Bounded string handling on sensitive paths, filename validation for downloads, protocol length limits, Telnet IAC separated from raw transfer mode, and warning-clean builds on GCC and Clang.

Platforms

Windows portable archive (settings now live in %APPDATA%); ready-made macOS app for Apple Silicon; Linux via make, make install and make uninstall. Native MinGW build on Windows, make test and make fuzz, and continuous integration on GitHub Actions.

< SCREENSHOTS >

Click a thumbnail for fullscreen. Keyboard: Tab to move focus, Enter to open, Escape to close the viewer.

< CHANGELOG >

cgterm@localhost:~$ cat CHANGELOG █

CGTERM 3.1 / SCENE EDITION full changelog / nfo Genesis*Project · 2026

─── 3.1 · october 2026 ───

  • [+]ZMODEM: batch send/receive, file names and sizes, crash recovery, CRC-32, auto-start when the board sends
  • [+]Transfers: last protocol preselected (T + Return), transfer log with bytes/time/cps, on-screen summary, cancel prompt no longer stalls the peer
  • [+]XMODEM: CRC to checksum fallback, bounded handshakes, cancel during send, 0-byte files
  • [+]Punter: one-byte last blocks no longer lost, duplicate block guard, patient S/B wait, SEQ file type announced, empty files
  • [+]Disk tools: validate (rebuild BAM), lock/unlock, rename disk/ID, extract to host, insert into image, CBM listing with splat/lock markers, error-table images, D81/D71 fixes
  • [+]Terminal: status line, capture toggle, copy screen text, paste transliterates UTF-8, macros record RETURN/cursor/F-keys
  • [+]ANSI: scroll regions, pending wrap, DECSC/DECRC, ICH/DCH/ECH, iCE colours, truecolour, line drawing, xterm keys, Alt hotkeys
  • [+]Network: IPv6 with IPv4 first, Telnet negotiation offered in ANSI mode, raw 0xFF from PETSCII boards shown, no SIGPIPE/EAGAIN losses
  • [+]Session: connection history with redial, per-bookmark auto-login scripts, reconnect after any drop, options panel, keyboard layouts scanned from assets
  • [+]Audio: bell and modem sounds on macOS/Linux, runtime mute and volume, gapless XM loop
  • [+]Build: native MinGW build, make test / make fuzz, GitHub Actions CI, make uninstall/distclean, %APPDATA% on Windows
  • [*]Multi Punter upload: no longer gives up after a 3 second silence while the board writes to its drive; files picked from inside a D64 are opened before they are announced; a failed file stops the batch and is reported instead of being counted as sent
  • [*]Downloads over a Telnet board: 0xFF bytes inside Punter/XMODEM data are no longer doubled or corrupted (incoming IAC IAC collapsed, outgoing 0xFF only escaped after a real Telnet negotiation)
  • [*]ANSI boards: hide-cursor no longer moves the cursor to the top left, reverse video no longer draws box characters, and termmode = ansi in the config now loads the ANSI font
  • [*]Disk images: "New disk image" D81 now has a working directory; D71 no longer reports disk full with ~170 blocks free; a disk-full save no longer leaves an undeletable splat file in the image
  • [!]Dozens of bug fixes, listed in REVIEW-2026-10.md (also in the source package)

─── what is this release ───

Major update to the C64 BBS terminal MagerValp gave the scene. Same heart: real boards, PETSCII on glass, files in motion. The codebase is cleaned and runs on SDL 1.2 via sdl12-compat (on top of SDL2/SDL3); the polish nods to demoscene intros, modem-era mood, batch transfers, disk tools, and UI work for people who still enjoy watching bytes.

─── file transfers & disk images ───

  • [+]Punter: classic C64 BBS protocol (send + receive)
  • [+]Multi Punter: batch download + upload, filename announce, C*BASE-style batch end, drain between files
  • [+]Rainbow: upload and download where the BBS supports it
  • [+]XMODEM: checksum, CRC, and 1K block variants
  • [+]Interactive transfer UI: progress, live hex feed, cancel with confirm, PC ↔ 1541 style cues
  • [+]D64 / D71 / D81: open as directories, pick image as download target, extract / inject PRG/SEQ/USR, PETSCII-aware names, block-free checks
  • [+]Filename conversion: e.g. .prg ↔ ,p for C64 naming
  • [+]Temp files: mkstemp / Windows temp APIs for uploads & downloads

─── terminal, ansi & keyboard ───

  • [+]PETSCII + ANSI (80 cols in ANSI), toggle from menu
  • [+]Telnet IAC for chat mode; raw bytes for protocols so 0xFF isn’t eaten
  • [+]Clipboard paste, macro record/playback
  • [+]Keyboard profiles (US / SE / DE) + keyboard test view
  • [+]PETSCII modifiers: Commodore key, control colours

─── ui / scene polish ───

  • [+]Demo-style splash: vectors, plasma, rotozoom, wireframe morph, scroller, greetz; tracker music on supported builds; CRT power-off on quit
  • [+]Modem theatre: phosphor, fake AT dial, phone book, V.34-ish audio (menu toggle)
  • [+]Menus by category; pink / cyan / neon theme
  • [+]File selector: colour hints for dirs, disk images, files; path line in menu
  • [+]Font system: header + body pixel fonts, in-app picker, TTF/OTF pipeline

─── bookmarks & session ───

  • [+]40 bookmark slots: host, port, alias, term mode
  • [+]Per-bookmark notes (separate file)
  • [+]Quick connect: number keys 0–9
  • [+]Connection history logging

─── security & stability ───

  • [+]Downloads: filename validation; block .., slashes, controls, Windows reserved devices (CON, COM1–9, …)
  • [+]Punter: bounded handshake; block length clamped to internal buffer
  • [+]Multi-Punter: bounded remote filename
  • [+]Config: hostname/alias/port validation; safer path joins
  • [+]net_connect: reject empty host; close socket on failed resolve (no FD leak)
  • [+]Bookmarks: rollback host alloc if alias malloc fails
  • [+]ANSI: clamp CSI params against pathological repeat loops
  • [+]Prefer bounded string APIs; clean build on GCC/Clang

─── networking ───

  • [+]Non-blocking TCP connect: ESC can cancel
  • [+]Unix: getaddrinfo + AI_ADDRCONFIG → IPv4
  • [+]Windows zips may use legacy resolver; still IPv4-first for BBS interop

─── audio / music ───

  • [+]Windows: SDL_mixer + libmikmod path (XM/MOD/IT) where enabled
  • [+]macOS/Linux: libopenmpt + SDL when built with those deps
  • [+]Volume control; graceful fallback if audio init fails

─── platforms & build ───

  • [+]Windows: portable ZIP
  • [+]Linux: make + optional sudo make install
  • [+]macOS: self-contained signed app (Apple Silicon); building from source still possible
  • [+]Cross-compile: MinGW from Unix documented

─── docs & help ───

  • [+]In-app help: shortcuts, transfers, ANSI, C*BASE user cheatsheet, sysop hints

─── known limitations ───

  • [!]BBS = classic Telnet, cleartext on the wire. Trust your network; don’t reuse critical passwords.
  • [!]Roadmap (not promised): TLS where boards support it, file digests, sandboxing; see GitHub issues/PRs.

─── greetz & credits ───

Respect forever to MagerValp for the original CGTerm and the BBS culture it stands for. Scene Edition: code m00p (Genesis*Project), music Mr.Death, support mermaid, QA Larry / Jucke / SkyHawk, and every sysop still running a C64 (or bridge) board.

< DOWNLOAD >

Windows

Portable archive · no installer

Extract the zip and run cgterm.exe. Dependencies ship with the archive as documented in the bundle. Settings, bookmarks, notes and logs live in %APPDATA%\CGTerm.

CGTerm-3.1-win32.zip

macOS

App bundle · Apple Silicon · macOS 11+

Unzip and drag CGTerm.app to Applications. The app is signed but not notarized: on macOS 15 the first launch needs System Settings › Privacy & Security › Open Anyway (right-click › Open is no longer enough). Intel Macs: install SDL2 and libopenmpt (see README), unpack the source and run make.

MacOS APP

< GREETZ >

  • Abyss Connection
  • Arsenic
  • Booze Design
  • Camelot
  • Cosine
  • Crest
  • Danish Gold
  • Dutch Cracking Team
  • Dynamic Duo
  • Eaglesoft
  • Eclipse
  • Excess
  • Fairlight
  • Finnish Gold
  • FLT
  • Genesis Project
  • Hitmen
  • Hokuto Force
  • Ikari + Talent
  • Laxity
  • Nostalgia
  • Onslaught
  • Razor 1911
  • Red Sector
  • Remember
  • Software of Sweden
  • Success + TRC
  • Swedish Cracking Crew
  • The Sharks
  • The Silents
  • The Supply Team
  • Triad
  • TRSI
  • West Coast Crackers
  • Information that moves freely
  • Demoscene craft
  • Curiosity in the old exploration tradition
  • Every sysop still holding a line open

Feedback and discussion welcome on the board: telnet://bbs.retrohack.se:64128