Skip to content

Releases: mathiasm74/modern-c64-shell

Tardis DOS v0.3.16

Choose a tag to compare

@mathiasm74 mathiasm74 released this 25 Sep 00:23

Fast loading now works on a real 1541 and other spinning media, a cartridge version for EasyFlash is now available (what works in VICE and should work on C64 Ultimate too), and new drive commands (including @-style) has been added.

New

  • Fast loading on a real 1541. load is now fast by default, slightly
    faster than a genuine Epyx FastLoad cartridge, and falls back to normal speed
    by itself on drives it can't speed up. run <name> benefits too.
  • An EasyFlash cartridge. Tardis can now run on a stock C64, VICE, or C64U
    from an EasyFlash or Kung Fu Flash, no One ROM needed. Everything works
    except font swapping, saved settings, and typing EXIT at the BASIC prompt
    to return to Tardis.
  • disk looks after the disk: disk status, disk init,
    disk validate and disk format <name> (it asks before erasing).
  • Wedge-style drive commands: @i, @v, @n:name,id and so on send
    a command straight to the drive and show its answer.
  • cat and less show BASIC programs as listings, same as LIST does.
  • color border, color bg and color text set the colours, or open the
    colour picker if you leave out the number.
  • The editor can save a new document as a BASIC program (^D), tells you
    why a save failed, and saves to the drive you selected.
  • basic <line> now accepts up to 80 characters.

Fixed

  • Loading from a real 1541 after run or basic could freeze the machine.
    So could fload and run <name>.
  • A reset after run started the program again.
  • Filename completion could stop working after an ls.
  • ls printed nothing for an empty drive; it now says no disk.
  • Typing at the end of a file in the editor put the cursor in the wrong place.

Changed

  • ls colours files by what you can do with them: programs green, folders and
    disk images yellow.
  • help is shorter. Commands it no longer lists, such as border and
    status, still work.

Known issues

  • Fast loading from a real 1541 has so far only been tested in an emulator.
  • On a Kung Fu Flash, rebooting sometimes leaves a black screen.

Images

file machine board
c64-tardis-dos-v0.3.16-for-onerom-fire-24-e.bin C64 breadbin One ROM Fire 24-E
c64-tardis-dos-v0.3.16-for-onerom-fire-24-f.bin C64 breadbin One ROM Fire 24-F
c64c-tardis-dos-v0.3.16-for-onerom-fire-28-a.bin C64C One ROM Fire 28-A
c64c-tardis-dos-v0.3.16-for-onerom-fire-28-c.bin C64C One ROM Fire 28-C
tardis-c128-v0.3.16-for-onerom-fire-28-c.bin C128 (C64 mode) One ROM Fire 28-C
tardis-dos-v0.3.16-easyflash.crt any C64 including C64U EasyFlash / Kung Fu Flash

Tardis DOS v0.2.37

Choose a tag to compare

@mathiasm74 mathiasm74 released this 14 Sep 23:22

Forty-eight commits since v0.2.00. The headline is that LOAD in the stock
environment is now fast: loading Dig Dug from the stock BASIC prompt went from
38 seconds to 14, which is the same time a genuine Epyx v3 cartridge takes on the
same drive.

That is a load you type. The case this was built for — a program loading its own
data while running, after run has handed the machine over — uses the same
patched LOAD and should benefit equally, but has not been measured yet.

Fast loading in the stock environment

run hands the machine to the stock ROMs, and until now everything a program
loaded after that ran at stock speed. Tardis now patches an Epyx loader into the
served stock KERNAL before switching to it, in space the tape routines used to
occupy (tape is an explicit non-goal), and hooks it through the ROM's own vector
table — so it survives RESTOR, RUN/STOP+RESTORE, and a program clobbering
memory.

  • LOAD"x",8,1 and LOAD"x",8 are both fast. The real Epyx cartridge declines
    the ,8 form; this doesn't, which is the one place it is ahead of the original.
  • Anything it can't do — VERIFY, a drive that isn't Epyx-capable, any failure —
    falls back to the stock loader, so the worst case is the speed you had before.
  • EXIT typed at the stock BASIC prompt returns to the shell.
  • basic <command> swaps to stock and types a line for you: basic sys 54301
    reaches a SIDKick pico's config menu, which sys cannot.
  • The shell's text colour carries across the swap, so stock BASIC doesn't flash
    back to blue-on-blue.

A hex editor

hex <name>, and edit <name> now sniffs the file and opens whichever editor
suits it — a tokenized BASIC program or text goes to the text editor, binary to
the hex editor.

  • Address column, hex pane and PETSCII pane, overwrite-only so a file never
    changes length.
  • Layered colour: the panes dimmer than the address column, the focused cell
    white, the same byte's cell in the other pane light grey, and bytes you have
    changed in yellow
    .
  • ^Z undoes the last 128 keystrokes — per nibble in the hex pane, so a mistyped
    digit costs one press. Undoing a byte all the way back clears its mark.
  • ^G go to address, ^W find (text, or hex with a $ prefix, repeat with a
    bare RETURN), ^B/^F page, up-arrow switches pane.

The text editor

  • BASIC programs display as a listing and save back as a tokenized program,
    byte-for-byte.
  • Long lines wrap, so an 80-character BASIC line is fully visible.
  • ^V inserts the next key literally, for the control codes the editor binds.

PETSCII and the keyboard

  • C= plus a key gives the PETSCII graphics set, transcribed from the KERNAL's
    own table; CTRL+1-8 and C=+1-8 give the sixteen colour codes.
  • debug shows the raw keyboard matrix live — it will tell you when something
    outside is holding a line down, which on a real machine turned out to be a
    joystick's autofire latch killing eight keys.

Under the hood

  • The RAM overlays are gone; every command now lives in a ROM bank or the 16KB
    image, reached one way. Free ROM went from 771 to about 4500 bytes.
  • make sizes reports how full each bank is.

Fine print

Breadbin images are hardware-validated. The C64C and C128 images build and are
believed correct but have not been tested on real C64C or flat-C128 hardware
this cycle — sanity-check boot and a couple of disk commands after flashing.

The fast loader currently requires a drive that speaks the Epyx protocol
(Meatloaf does); a real 1541 needs genuine drive-side code, which is not in yet.

Tardis DOS v0.2.00

Choose a tag to compare

@mathiasm74 mathiasm74 released this 11 Sep 18:49

Tardis DOS v0.2.00 — the ROM-expansion release.

The 16KB ROM had ~770 free bytes and every new command made it worse. This
release changes that: commands now live in banks — 8KB images the One ROM
serves at $A000 in place of the shell's own BASIC half — so they run from ROM
without spending the 16KB budget.

Free ROM: 771 → 5504 bytes, and with data-driven dispatch a new bank command
costs a 4-byte table row instead of a 20–170 byte resident thunk.

What moved into banks

  • disk bank — dir ls pwd load fload and the Epyx fast-load protocol
  • util bank — filename TAB completion
  • files bank — cat less cp mv rm cd status border bg text
    peek poke help device devices and the colour picker

Banks run from ROM, so unlike the old RAM overlays they never occupy user RAM,
and they share one small RAM window — adding a bank costs no further program
space.

Fixes

  • fload/load then a bare run said "nothing loaded"; load then basic
    cold-swapped instead of handing the program over
  • a disk command could corrupt the cached file commands, making cd fail while
    bg/text/help still worked
  • any command reverted font B (Swedish) to font A, leaving the keyboard Swedish
    but the glyphs English
  • TAB completion now quotes as soon as a spaced name is among the candidates, so
    typing on past the space keeps completing; and it closes the quote on a
    fully-typed name
  • a program larger than the loadable area is refused with "program too large"
    rather than corrupting the loader mid-transfer
  • help now advertises TAB completion (tap CTRL) and command history

Images

file machine One ROM board
c64-tardis-dos-…-fire-24-e.bin C64 breadbin Fire 24-E
c64-tardis-dos-…-fire-24-f.bin C64 breadbin Fire 24-F
c64c-tardis-dos-…-fire-28-a.bin C64C Fire 28-A
c64c-tardis-dos-…-fire-28-c.bin C64C Fire 28-C
tardis-c128-…-fire-28-c.bin C128 (C64 mode, U32) Fire 28-C

The breadbin images are hardware-validated. The C64C and C128 images are built
but not hardware-validated with the new bank architecture
— their firmware
layout was repaired by inspection this release, so try them with that in mind.

Tardis DOS v0.1.82

Choose a tag to compare

@mathiasm74 mathiasm74 released this 08 Sep 23:54

What's new since v0.1.76

  • sys <addr> command — call machine code in place, like BASIC's SYS (e.g. a SIDKick pico's sys 54301 / sys 54333). Decimal by default, hex with $. Runs under Tardis, not stock ROMs — great for KERNAL-API routines and I/O-device triggers; use run for programs that need stock KERNAL/BASIC.
  • run reliability fix — a loaded program now actually starts after the stock-ROM swap. It auto-types RUN into stock BASIC's own machinery instead of a direct interpreter jump that came up blank on real hardware.
  • Tab completion survives errors — a failed cd/rm/mv/cp no longer wipes the completion cache; only a successful one does.
  • Meaningful offline errors — load / cd of a networked file report 74 DRIVE NOT READY when the drive is offline, vs 62 FILE NOT FOUND for a genuinely missing file (pairs with a Meatloaf-side change). Drive-status output now has a space between the code and the message.
  • pwd asks the drive's PWD command first (Meatloaf network path), falling back to the disk header.

Downloads — pick the binary for your exact board

Hardware Board File
Breadbin C64 (separate 24-pin KERNAL/BASIC) fire-24-e c64-tardis-dos-v0.1.82-for-onerom-fire-24-e.bin
Breadbin C64 fire-24-f c64-tardis-dos-v0.1.82-for-onerom-fire-24-f.bin
C64C (single combined 28-pin ROM) fire-28-a c64c-tardis-dos-v0.1.82-for-onerom-fire-28-a.bin
C64C fire-28-c c64c-tardis-dos-v0.1.82-for-onerom-fire-28-c.bin
C128 (Tardis as the C64-mode ROM in U32; use GO64) fire-28-c tardis-c128-v0.1.82-for-onerom-fire-28-c.bin

Firmware is board-specific — a binary for one board won't run on another. Match your exact board (onerom scan --list-boards).

Notes

  • The C64C binaries serve no character ROM, so font is unavailable (the charset stays the boot font); everything else works. Not yet validated on real C64C silicon — only in C128 C64-mode, which is the same combined-ROM path. Sanity-check boot + a couple of overlay commands after flashing.

Tardis DOS v0.1.76

Choose a tag to compare

@mathiasm74 mathiasm74 released this 04 Sep 21:33

Modern command shell that replaces the C64's BASIC + KERNAL, on a One ROM.

Highlights since v0.1.69

  • Commodore 128 support — Tardis now runs on a flat C128 as the C64-mode ROM in socket U32: GO64 gives you the shell while C128 mode stays 100% stock, and basic swaps to stock C64 BASIC. Build with make onerom-c128 (One ROM in U32). Full shell including the overlay commands, via a remapped RBCP command page for the C128's 16KB C64-mode image.
  • C= boot menu (GRUB-style) — hold C= at power-on for a menu to pick Tardis DOS or Stock C64 (r107sl's c64-bootloader, built from source as loadable set 0). Holding C= from a running shell returns to the menu. (The build can also carry a JiffyDOS entry if you own JiffyDOS and add it locally; it is deliberately not included in these distributed binaries.)
  • One ROM firmware 0.7.x — updated to the v0.3.0 CLI workflow: stock ROMs fetched from Zimmers by URL (no local copies needed), plugins specified on the CLI (always latest-compatible), and overlay sets packed as multi-ROM to satisfy the 0.7.x RAM-slot sizing. Pinned to firmware 0.7.1.
  • New default colours — dark-red background, light-red border (was brown/orange).
  • Robustness — the reset now disables the VIC interrupt, fixing a livelock when entering C64 mode on a C128 (and hardening the C64 path).

Flashing

  • C64: c64-tardis-dos-v0.1.76-for-onerom-fire-24-e.bin (built for the fire-24-e board; rebuild with make onerom-stock ONEROM_BOARD=… for other boards). Includes the C= boot menu, stock-C64 fallback, and overlays.
  • C128 (flat / C64C-style case): tardis-c128-v0.1.76-for-onerom-fire-28-c.bin — One ROM in the U32 socket (fire-28-c board). GO64 boots Tardis.

Reflashing wipes the One ROM's NV area, so saved colours/history reset — expected.

Tardis DOS v0.1.69

Choose a tag to compare

@mathiasm74 mathiasm74 released this 02 Jul 13:17

First release since v0.1.48 — a big one. Firmware image for the One ROM (fire-24-e) attached; flash with onerom or make onerom-flash. Note: flashing wipes the NV settings area, so colors/font/history start fresh.

Shell & editing

  • Filename TAB completion, triggered by a bare CTRL tap (the C64 has no TAB key; CTRL+combos still work) — completes from what the last ls/dir listed: unique match completes, ambiguity extends to the common prefix, a further tap lists candidates. Works in Meatloaf network folders (lowercase-PETSCII names, 40+ entries).
  • HOME goes to the start of the input (not the screen); CLR wipes the typed line (not the screen).
  • JiffyDOS-compatible wedges: @ = status, @$ = dir, @#9 = device 9, /name and %name = load, ^name = run.
  • about pages now use the full screen and paginate correctly with full-width lines.

Devices

  • Prompt shows 8: meatloaf> — the drive identifies itself (UI + error channel) when you switch devices, and automatically at boot.
  • New devices command scans units 8–15 with progress dots and lists each drive's identity. dev is an alias for device.
  • New IEC probe mode bounds bus waits during scans, so absent or still-booting drives time out instead of wedging (also unblocks a future AUTOEXEC).

Persistence

  • Colors, font, and command history survive power cycles reliably now: an idle checkpoint saves ~5s after you stop typing (the old every-8-commands cadence lost short sessions), plus on reset/basic/color/font changes.

Fast loader & IEC robustness

  • fload detects truncated transfers (a mid-transfer timeout is an error, not EOF) and catches yanked-cable phantom EOFs with a post-transfer drive presence check; the under-ATN byte-ack is bounded so a half-disconnected cable can't wedge the machine.
  • Fixed a never-firing retry give-up in the Epyx receiver's ready-wait.

Under the hood

  • Root-caused and fixed the RBCP overlay-fetch glitches: VIC-II badline DMA duplicated command-page reads; every command frame now waits for a badline-safe raster window. Overlay retries dropped 5 → 2 accordingly.
  • Overlays repacked into three flash sets; boot ROM-swap hardened (bounded LOAD_SLOT with fallback-to-shell, boot trace stamps via make TRACE=1).
  • Completion matcher hand-written in 6502 (~600 bytes vs 1.3KB of compiled C); test suite 6× faster (~35s) with make test M=<module> for quick iteration.

🤖 Generated with Claude Code

Tardis DOS v0.1.48

Choose a tag to compare

@mathiasm74 mathiasm74 released this 28 Jun 01:51

Tardis DOS is a ROM-resident command shell for the Commodore 64 that replaces the stock BASIC + KERNAL with a modern command line. It runs from a OneROM — a flash ROM-replacement chip that drops into the C64's KERNAL/BASIC ROM sockets; larger commands stream in from it as overlays on demand, so the shell does far more than its 16K — bigger on the inside, like the Doctor's TARDIS.

Download

c64-tardis-dos-v0.1.48-for-onerom-fire-24-e.bin — flash to a OneROM (fire-24-e board).

This is the stock-fallback firmware: it carries the shell plus genuine C64 ROMs as a second bank, so run (and cartridge insert) swap in the real ROMs to launch legacy software, and font live-switches the character set + keyboard (English / Swedish).

Highlights

  • Command-line shell with line editing, command history, and colour config
  • Epyx-compatible fast loader — pairs with the Meatloaf, also works with 1541 / SD2IEC / Pi1541 / 1541U
  • Disk tools (ls, dir, cd, cp, mv, rm, cat, less, status), a nano-style text editor, peek/poke
  • Persistent settings (colours, history, font) in OneROM NV flash
  • run hands off to the stock ROMs to launch BASIC / ML programs and cartridges

Notes

  • Built and tested on PAL hardware. NTSC should run fine for everything except possibly the timed Epyx fast loader (calibrated on PAL); standard load is unaffected.
  • The firmware embeds genuine Commodore C64 BASIC/KERNAL/character ROMs as the stock fallback bank.

Made by Mathias Malmqvist with Claude Code, 2026.