Docs / Known Issues
Known Issues#
The honest list of what's still rough, approximate, or out of scope in C64 READY. Nearly everything else runs faithfully; this page covers the exceptions worth knowing about. For what does work, see the Features overview.
Open demo bugs#
- None at the moment.
Demos & games in general#
Most demos and games run faithfully, but:
- Fastloaders and copy-protected disks need True Drive Emulation (TDE) turned on and a 1541 ROM loaded. With the fast built-in loader they may hang or refuse to load.
- NTSC-only productions won't run — the machine is PAL (see below).
- The emulation is extremely close but not 100 % on every raster trick, so an occasional demo may show a minor visual glitch or a one-line offset. The specific ones currently tracked are listed under Open demo bugs.
- Multi-disk demos: eject and load the next disk yourself when the program asks you to flip.
- On slower phones and tablets, the heaviest demos may drop visible frames or slow down if the device cannot keep up with the emulator core.
Found something broken? Please note the demo and where it breaks — bug reports help push the emulation closer to real hardware.
Hardware not emulated#
- NTSC machines — C64 READY. targets the PAL C64 only. NTSC raster geometry and timing aren't modelled, so NTSC-only software is out of scope.
- Tape recording — the datasette is playback-only;
.taptapes cannot be written or recorded. - A second SID (stereo) — single-SID machine only; 2SID / stereo tunes aren't supported.
- REU, cartridge types other than the supported Generic, Action Replay, Final Cartridge III, Magic Desk, and EasyFlash families, user-port devices, printers, and modems are not implemented.
Unmodelled hardware quirks#
Deliberate simplifications inside otherwise-emulated chips. These are model-specific glitches or corner cases with negligible impact on practical software:
- 6569 fetch-address glitch — on the original 6569 (not 8565), a c-access transitioning between RAM and CHAR-ROM fetches latches the address LSB from the previous cycle and the upper bits from the current cycle. No known demo depends on it.
- C64C glue-logic bank glitch + NMOS DDR bank-change delay — the code paths
exist (
vic2.c64cBankGlitch,vic2.nmosBankDelay) but are off by default because the behavior is variant-specific and unstable on real chips. Toggle viac64Vic.bankGlitch(true)/c64Vic.bankDelay(true)in DevTools to A/B a demo that relies on it (the 8565 glitch only activates whenvicVariant === '8565'). - SID combined waveforms use a synthetic table — reSID ships measured tables for the analog combined-waveform DAC; we use compact independently fitted generators instead. Audibly close, not bit-exact.
- Boxcar audio decimator — the worklet downsamples 985 kHz → 44.1 kHz via simple boxcar averaging (the post-DAC low-pass compensates somewhat). A proper FIR decimator would add ~20 dB of stopband attenuation.
- Write-only SID register reads — registers other than
$D419/$D41A/$D41B/$D41Creturn the last byte written rather than bus garbage. Most software doesn't depend on this. - CIA serial shift register (SDR) — physical pins + input mode — output-mode shifting (SDR write → 16 Timer A underflows → SP IRQ on ICR bit 3) is modelled, but the physical SP/CNT pins carry no serial data and input-mode shifting isn't implemented. These only matter for user-port hardware; the IEC bus is bit-banged on CIA2 Port A and is unaffected.
Unsupported file formats#
The supported set is .prg, .d64, .crt, and .tap (see the
Features overview). Two adjacent formats are out of scope:
.g64/ raw GCR disk images — the true drive synthesizes its GCR stream from.d64images, so copy protections that depend on custom flux-level track layouts won't load..t64tape archives — only real.tapimages play; convert.t64programs to.prgfirst.
D64 disk images#
The .d64 parser (src/d64.js) covers the standard directory, file types
(including DEL/scratched entries), BAM free-block totals, and the 35-/40-track
and error-info image-size variants. A few format details are recognised but not
fully handled:
- 40-track free-block count — the "blocks free" tally sums only tracks
1–35; tracks 36–40 live in a DOS-variant-specific BAM extension (DolphinDOS
$AC/ SpeedDOS$C0/ PrologicDOS$90), so counting them reliably needs variant detection. Undercounts on 40-track disks only. - REL files — the side-sector track/sector (
+$15/$16) and record length (+$17) aren't parsed. - GEOS files — the GEOS info bytes (
+$18–$1D) aren't parsed. - Error-info bytes — their presence is detected, but the per-sector error codes (21/23/27…) aren't surfaced or emulated as read errors.
Audio#
- SID emulation still needs some work, and differences remain between the 6581 and 8580 models. Use the 8580 (default) for the best experience.
- On tab switch or phone standby the machine pauses and mutes; audio resumes when you return (on some mobile browsers the first tap after returning is what actually restarts the sound).
Performance#
- Performance is still being improved. On mobile and older machines the heaviest demos can dip below full frame rate; simpler software runs at full speed.
- Mobile devices are inherently less predictable than desktops: they usually have tighter memory limits, smaller JavaScript heaps, more aggressive background process pressure, and thermal throttling. Other apps, browser tabs, or system services can take capacity away mid-run, so the same demo may be reliable on a desktop but intermittently slow or stutter on a phone.
Bug reports are welcome on GitHub. See also the Getting Started guide and the Features overview.