Docs / Feature list
Feature list#
Everything the emulator supports, seen from the user's side, not the internals. This is the checklist: the file formats it loads, the devices you can plug into the control ports, the display and sound options, the save features, and how it installs as an app. For a step-by-step walkthrough see the Getting Started guide.
App & platform (PWA)#
- First-visit welcome screen: a one-time splash introduces the emulator;
POWER ON boots straight into BASIC (and unlocks audio in the same
click). Dismissing it either way means it never shows again in that
browser; installed-app launches always skip it. Append
?SPLASH=1to the URL to see it again (?SPLASH=0forces it off). - Works on a modern smart phone: the full emulator runs in a mobile browser, sized to fit the screen.
- Installable Progressive Web App: "Add to Home Screen" from your browser to run it like a native app.
- Works offline: after the first load, the app (and its docs) run without a network connection.
- Mobile touch keyboard: tap the screen to summon your device's keyboard and type into the C64.
- Mobile touch joystick: an on-screen stick for touch devices; see Control-port devices below.
- Background-safe: switching apps pauses and mutes the machine; returning resumes cleanly with no audio blip or catch-up stutter. RUN IN BACKGROUND (Options ▸ Other, off by default) keeps the machine running instead.
- Stay awake: an optional screen wake-lock (Options ▸ Other ▸ STAY AWAKE, on by default) keeps your phone's display from sleeping mid-demo.
- Persistent settings: SID/VIC model, palette, CRT mode, autorun, cached ROMs, your media library, and save states all survive a reload.
Loading & file formats#
.prgprograms: single games and tools. With a 1541 ROM loaded, a program is written onto a disk of its own in drive 8, so it shows in the directory, loads again, and exports as a.d64, without resetting the machine. Without the drive ROM it loads directly into RAM, resetting first if the machine has already been used. See Loading a .prg for how programs start..d64disk images: 35-, 40- and 42-track floppies, with directory listing and wildcard loading, and read/write: programs canSAVEto them. An image's recorded error table is honoured, so a disk protected by a sector that must fail to read still behaves like the original. GEOS disks show readable filenames. Loading a disk with TDE off offers to turn it on for compatibility when the 1541 ROM is available; either answer continues loading..g64raw disk images: the tracks exactly as the original floppy recorded them, half-tracks and longer-than-standard tracks included, so copy protections that check the disk surface load as on a real 1541. They need TDE, so loading one turns it on for that drive. The directory listing, click-to-load and export work as for a.d64, and the drive can write to an unlocked.g64..nbznibbler dumps: the C64 Preservation Project's raw dumps become a.g64on the way in, one revolution per half-track, and load like one..d71disk images: 1571 disks, 70 tracks and 1328 blocks, with loading, saving, directory and command-channel access through the virtual drive. Inserting one turns TDE off for that drive; formatting and export retain D71..d81disk images: 1581 disks, 80 tracks and 3160 blocks, with directory listing, wildcard loading and click-to-load. A 1541 cannot read them, so the emulator serves the disk itself: inserting one turns TDE off for that drive..crtcartridges: the supported families are listed under Cartridges & expansions below..taptapes: datasette images (v0 / v1 / v2), played like real hardware..wavtape recordings: a recording of a real cassette loads as an ordinary tape (and any tape downloads as one)..dmptape dumps: a DC2N's record of a cassette, taken at the port, loads as an ordinary tape..t64archives: a tape-named format that is not a tape — it holds ready programs, and the one you pick loads as a program would, with no disk or tape in between. Almost every archive holds exactly one..sidtunes: music plays on a player that runs on the C64 itself, with the tune's own driver on the real chip. The player has its own screen — title, author and year, the song and how long it has been playing, an oscilloscope, and a view of all three voices. Two-SID tunes have two stacked, half-height scopes in Safe view. See Playing a .sid tune..reuexpansion-RAM images: load a RAM Expansion Unit's contents, and save them back out.- Drag-and-drop: drop any supported file on the screen and it goes to the right slot automatically.
- LOAD ANY and file pickers: one button takes any supported file and works out what to do with it; each media card also has its own load button.
- LOAD library: everything you open is cached in the browser and re-loadable from a searchable list, with import/export of the whole library.
- Auto-run: disk loads type the
LOAD/RUNcommands for you and wait until they finish (toggleable). PRGs loaded through a drive run when they contain BASIC or a BASICSYSstub; other machine-code PRGs wait for you to start them. - Insert while powered off: disks, tapes, and cartridges can be attached before power-on.
Assembly64 catalog#
Discover C64 demos, intros, music, graphics and diskmags, and explore the work of scene groups and creators.
- Quick search: search production titles and groups/producers, with Type and Source filters, and see ten results in the control. Demos is the default type.
- Explore: start with the newest demos in the Assembly64 Browser, with advanced filters, sorting and pagination. Refine Search carries a quick search into the browser.
- Charts: the top-rated demos, one-file demos, games, music, graphics and tools, ranked by CSDb visitors' votes.
- Load or download: PRG, D64, D71, D81, G64, CRT, TAP and REU files use the emulator's media controls. ZIP archives offer a choice of supported files. Disk loads are write protected and can use drive 8 or 9, with autorun or mount only.
- Local collections: favorites and named searches survive a reload. Save selected media to Library to reopen it offline, including REU images.
- Network use: searches and new downloads need a connection. Favorites alone do not download files.
Control-port devices#
Each of the two ports is assignable independently, with a SWAP PORTS button:
- Digital joystick via a connected gamepad (per-port gamepad selection).
- Touch Joystick: touch-only eight-way stick with two overlay buttons; A is fire and B uses the standard second-button UP-line convention.
- Key Joystick 1 & 2: two independent keyboard-driven sticks (no gamepad needed), either assignable to either port so two people can share the keyboard. Key Joystick 1 = arrow keys + J / K to fire; Key Joystick 2 = WASD + C / V to fire. Every key is remappable: click "redefine" under the port.
- Mouse (1351): proportional GEOS-style mouse (pointer-lock).
- Mouse (NEOS): the NEOS nibble-strobe mouse.
- Paddle: mouse-driven paddle pair for paddle games.
- None: an empty port.
- Light pen: wired to the port so "stable raster via light pen" software works.
Keyboard & input#
- Full C64 keyboard mapped to your physical keyboard.
- Host-friendly remaps for the C64-only keys:
TAB= INST/DEL,F9= RUN/STOP,F10= Commodore key,F11= CLR/HOME,F12= RESTORE. - On-screen key map: a clickable keyboard for finding symbols.
- Paste: type clipboard text or a BASIC listing straight into the machine.
- PETSCII directory listings: disk directories render through the real character ROM, so custom cracker-art charsets display correctly.
- App shortcuts: Cmd+Shift on a Mac, Ctrl+Shift on Windows and Linux (both work everywhere) for paste, the CRT settings, the VIBES zoom and Retro Vibes Studio mode; the KEY MAP dialog lists them. Only those letters are borrowed; Ctrl on its own is still the C64's.
Disk drives#
- Two drives: device 8 and device 9.
- Directory artwork viewer: every inserted disk lists its files in the drive panel, and a 🔍 button reopens the listing enlarged in its own window, just the filenames, so the PETSCII artwork many demos hide in their directory reads clearly. The names are tinted as a C64 raster rainbow, a continuous colour sweep through the hues of your selected palette (see Directory zoom).
- True Drive Emulation (TDE), on by default: a real emulated 1541 (its own CPU + DOS) for fastloaders, cracked intros, demos, and copy-protected disks.
- Disk I/O with TDE off: a built-in drive answers the KERNAL's file and
command calls, so programs open, read and write files, list the directory,
read the status and use block commands on a
.d64,.d71or.d81, without the 1541 ROM. Loaders that drive the hardware themselves still need TDE on. - Fast loading: with TDE off, an instant built-in shortcut load for plain
games. Loading a
.prgwith TDE on offers to switch it off, since nothing on that disk needs the real drive. - Disk writing: the drive writes back to the
.d64,.d71or.d81:SAVE, scratch and rename use the real 1541 DOS for D64 with TDE on, or the virtual drive for D64/D71/D81 with TDE off. Modified disks auto-save to your browser Library, and the directory listing updates itself as files change. - Blank & format: insert a fresh blank (unformatted) disk, then format it
from the panel or with BASIC
N:name,id, ready to save to. - Export: download the current disk, with your changes, as a
.d64file (or a.d71,.d81or.g64, for a disk that came in as one). - Write-protect toggle: lock a disk against writes (or unlock it) per drive; loaded disks start protected so nothing is changed by accident.
- Eject control per drive.
- Drive sounds: optional synthesized motor hum and head-stepper clicks.
Datasette (tape)#
.tapplayback driven cycle-accurately like a real 1530 Datasette, with the full five-key transport (REC / PLAY / REW / FF / STOP) plus a rewind-to-start shortcut, a three-digit counter, and hardware-true winding (the motor is switched by the C64, so the deck only moves when the machine asks it to).- Tape recording.
SAVEwrites real pulses, measured off the CPU's cassette write pin at cycle resolution, so both the KERNAL's saver and cycle-timed turbo savers produce loadable tapes. Insert a BLANK tape, press REC, and download the result as a.tap; recordings are also kept in the Library. - Write-protect tabs that block the RECORD key the way a real cassette does.
- Listen to the tape. A speaker button on the deck plays the signal the head is reading. A C64 tape's data is audible square-wave pulses, so what you hear is the loader itself, not an effect. A SAVE plays too, as it is written.
- Watch the tape. Beside it, a scope draws that same signal: the waveform under the head, pulse for pulse, whether or not the sound is on.
- See what is on a tape. A
.tapcarries no directory, so the tape is read the way a C64 reads it and the programs on it are listed: a row per file with its format, size and start time; a click winds the tape to that file. It reads KERNAL tapes and the turbo formats it knows: Turbo Tape 64 (which covers most of the home turbo programs), GRL-Supertape, and seven commercial loaders. Damaged files are struck through, and a line under the list says what is wrong and what was mended. .wavin and out. Load a recording of a real cassette and the pulses are recovered into an ordinary tape; download any tape as a.wavthat loads on real hardware. A DC2N.dmploads the same way, with no recovering to do.- Tape preservation. A recording of a worn cassette is recovered, not just played: several readings of the signal are compared, a file is mended only when the tape itself proves the fix, and every proved file is written back at clean pulse widths. Nothing is invented: a file that cannot be proved is left as it is and marked in the listing (the method is in the user guide). On the eight worn cassettes this was built against, 121 of 130 programs load, up from 66. Recordings are read in pieces, so a long side fits in a phone's memory.
Cartridges & expansions#
.crtsupport for generic (8K/16K/Ultimax), Action Replay v4.x/v5/v6, Final Cartridge III, Magic Desk / Domark / HES, and EasyFlash bank-switched carts, loadable even while powered off. Action Replay and Final Cartridge III expose their physical RESET and FREEZE buttons in the Cartridge card.- RAM Expansion Unit: a switch in the RAM Expansion card fits a 1700
(128 KB), 1764 (256 KB), 1750 (512 KB), 1750 XL (2 MB) or a generic 1, 4, 8
or 16 MB unit, with an activity lamp beside it. Expansion RAM can be filled
from a
.reuimage, saved back out to one, or wiped, and it travels with save states. Nothing is fitted until you switch it on.
Video & display#
- CRT display modes: a single button cycles: scanlines → phosphor-mask colour tube → black-and-white tube → bright arcade → tube with a rolling mains-hum bar → off. Drawn by a shader locked to the C64's raster lines, so the looks hold at every picture size and pixel density; browsers without WebGL get a CSS version.
- CRT settings: CRT SETTINGS in Options (or Cmd/Ctrl+Shift+F) opens a draggable panel with the six looks and a slider for every setting behind them, remembered per look.
- Picture size: 1X / 2X / 2.5X / 3X (each a whole multiple of the C64's own 384x272 screen so no scaling step softens a pixel), plus MAX to fill the width and fullscreen; sizes too big for the window are left out of the cycle. The picture is never stretched: it keeps the C64's own proportions at any size, window shape or CRT look.
- VIC-II model: switch between 6569 (original PAL) and 8565 (C64C).
- Colour palette: Colodore (modern, saturated) or Pepto (classic 2001 measurements).
- Dark and light mode: the interface follows the system's colour scheme, or stays dark or light, from a button in the header or Options ▸ Theme. The screen and the CRT looks are the same in both.
- Themes: Classic, GEOS, Breadbin, Phosphor, Out Run and Commando built in, and your own as a JSON file of colours and an optional page pattern, with a dark mode, a light mode or both; export any theme as a complete starting point (see Themes).
- FPS and per-frame timer readout in the header.
Sound#
- SID model: switch between 6581 (original) and 8580 (later C64C).
- SID2 (second SID chip): enable a second three-voice SID in Options, with
its own 6581/8580 model, filter and volume/digi playback. Choose its address
(default
$D420) and stereo or mono output. Stereo sends SID 1 left and SID 2 right; mono mixes them equally. Two-SID tune files select the chip models and ask before enabling SID2 or changing its address. - reSID engine: Dag Lem's transistor-level reSID model (oscillators, envelopes, analog filter and DACs), verified against VICE. It runs compiled to WebAssembly by default, with a reSID JS alternative that sounds identical.
- Master volume: a draggable output level on a perceptual (audio-taper) scale, defaulting to 70% for headroom. Combined with mute into one control (a pixel-art speaker toggle beside the slider); muting keeps playback running silently, and raising the level un-mutes.
Save, resume & state#
- Pause / resume: freeze and continue exactly where you were.
- Hard reset: clean power-cycle-equivalent restart.
- Save states: freeze the whole machine (RAM, every chip, and the inserted disk/tape/cartridge) into named, thumbnailed slots, rename them, and restore them later from an alphabetical list.
- Export / import state files: move a snapshot to another browser or machine.
ROMs#
- Bring-your-own ROMs: supply KERNAL, BASIC, CHARGEN (and an optional 1541 ROM for TDE) by fetching them into the browser or uploading them.
- Cached in the browser: provide them once; they auto-restore on later visits. A CLEAR button wipes the cache.
Extras & conveniences#
- Retro Vibes 3D viewer: a full-screen 3D scene of the C64 whose on-screen TV mirrors the live emulator picture, with several switchable lighting/backdrop moods. In Spotlight and 80s Bedroom, the monitor casts light that follows the picture's colour and brightness. Synthwave has opposing neon lights and a smoothly filtered grid; the cinematic scenes have individual grain and lens effects. Opened with the VIBES button in Controls; Esc / ✕ returns. Cmd+Shift+X / Ctrl+Shift+X is Studio mode, stripping the scene to the machine and the C64 READY. logo for screenshots and video (see Retro Vibes).
- VR (WebXR), experimental: on a device with a headset the 3D viewer offers an 🥽 Enter VR mode: the scene in stereo with head tracking. Its limits are noted in Known Issues.
- Record to MP4: capture the whole browser window, with sound, from the
● RECORD button in Controls: everything on screen, fullscreen and Retro
Vibes included, with the emulator's own audio, saved as
c64ready-<date>.mp4. Browser support and the resolution setting are in the user guide. - Rearrangeable side panel: drag the control cards into whatever order and columns suit you, hide the ones you never use, and the browser remembers the arrangement; the handles work from the keyboard too, and Options ▸ Display resets everything (see Rearranging the interface).
- VIBES button demo: a small pixel demo runs inside the VIBES button itself; Cmd+Shift+Z / Ctrl+Shift+Z zooms it to ten times the size. Switch it off in Options ▸ Other.
- Powered-off attract animation: an animated idle screen (toggleable). It
bows out by itself where it would cost more than it is worth: under
prefers-reduced-motion, on software WebGL, and on any GPU that cannot hold the frame rate; the static boot hint takes over. - About: a short in-app project note, with full specifications, source material, and credits in the docs.
Command line (c64rdy)#
The same tape and disk engine with a terminal in front of it. npx c64rdy
converts, inspects, repairs and runs cassettes, cartridges and disks in
batches: a shelf of .wav recordings into mended .tap files in one command,
formats converted in every honest direction, or every program on a tape side
booted headless and tiled into one captioned sheet. Node 20.19 or newer,
no dependencies; the CLI guide walks every command.
sid2prg wraps SID tunes with the same C64 music player as the browser UI.
sid2wav renders a selected song as 16-bit WAV audio (mono for one SID, stereo for two), with duration,
sample-rate and SID-model options.
New here? Start with the Getting Started guide, or dive into the Architecture for how it all works. For what's out of scope or still rough, see Known Issues.