Repository navigation
Releases: mathiasm74/modern-c64-shell
Release list
Tardis DOS v0.3.16
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.
loadis 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 typingEXITat the BASIC prompt
to return to Tardis. disklooks after the disk:disk status,disk init,
disk validateanddisk format <name>(it asks before erasing).- Wedge-style drive commands:
@i,@v,@n:name,idand so on send
a command straight to the drive and show its answer. catandlessshow BASIC programs as listings, same asLISTdoes.color border,color bgandcolor textset 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
runorbasiccould freeze the machine.
So couldfloadandrun <name>. - A reset after
runstarted the program again. - Filename completion could stop working after an
ls. lsprinted nothing for an empty drive; it now saysno disk.- Typing at the end of a file in the editor put the cursor in the wrong place.
Changed
lscolours files by what you can do with them: programs green, folders and
disk images yellow.helpis shorter. Commands it no longer lists, such asborderand
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
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,1andLOAD"x",8are both fast. The real Epyx cartridge declines
the,8form; 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. EXITtyped 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, whichsyscannot.- 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. ^Zundoes 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.^Ggo to address,^Wfind (text, or hex with a$prefix, repeat with a
bare RETURN),^B/^Fpage, 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.
^Vinserts 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 andC=+1-8 give the sixteen colour codes.debugshows 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 sizesreports 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
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 —
dirlspwdloadfloadand the Epyx fast-load protocol - util bank — filename TAB completion
- files bank —
catlesscpmvrmcdstatusborderbgtext
peekpokehelpdevicedevicesand 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/loadthen a barerunsaid "nothing loaded";loadthenbasic
cold-swapped instead of handing the program over- a disk command could corrupt the cached file commands, making
cdfail while
bg/text/helpstill 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 helpnow 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
What's new since v0.1.76
sys <addr>command — call machine code in place, like BASIC'sSYS(e.g. a SIDKick pico'ssys 54301/sys 54333). Decimal by default, hex with$. Runs under Tardis, not stock ROMs — great for KERNAL-API routines and I/O-device triggers; userunfor programs that need stock KERNAL/BASIC.runreliability fix — a loaded program now actually starts after the stock-ROM swap. It auto-typesRUNinto 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/cpno longer wipes the completion cache; only a successful one does. - Meaningful offline errors —
load/cdof a networked file report74 DRIVE NOT READYwhen the drive is offline, vs62 FILE NOT FOUNDfor a genuinely missing file (pairs with a Meatloaf-side change). Drive-status output now has a space between the code and the message. pwdasks the drive'sPWDcommand 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
fontis 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
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:
GO64gives you the shell while C128 mode stays 100% stock, andbasicswaps to stock C64 BASIC. Build withmake 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 thefire-24-eboard; rebuild withmake 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-cboard).GO64boots Tardis.
Reflashing wipes the One ROM's NV area, so saved colours/history reset — expected.
Tardis DOS v0.1.69
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/dirlisted: 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,/nameand%name= load,^name= run. aboutpages 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
devicescommand scans units 8–15 with progress dots and lists each drive's identity.devis an alias fordevice. - 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
floaddetects 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
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
runhands 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
loadis unaffected. - The firmware embeds genuine Commodore C64 BASIC/KERNAL/character ROMs as the stock fallback bank.
Made by Mathias Malmqvist with Claude Code, 2026.