This guide describes the current JSIDPlay2 build, including features planned for the next release. The browser player, desktop application, and console player share the same C64 emulation core, but offer different controls and output devices.

Start here

Version Getting started

C64Jukebox in a browser

Open C64Jukebox, then choose an example or load a local file. No Java installation is needed. See C64Jukebox in a browser.

Desktop application (JavaFX)

Install Java 21 or newer, extract the archive for your operating system and CPU architecture, then start the supplied launcher. See Launch JSIDPlay2.

Console player

Use the console launcher to play a tune from a terminal or record audio. See Distribution variants.

For a first listen, keep the default ReSIDfp emulation and automatic chip detection. For games and demos, enable the video screen and use the machine, drive, and cartridge required by the program.

SID music

SID music has been and still is collected at several sites throughout the Internet.
The most popular collections are:

  • High Voltage SID Collection (HVSC) – the biggest SID music collection on earth https://www.hvsc.de/

  • Compute’s Gazette SID Collection (CGSC) – A collection of COMPUTE!'s Sidplayer music containing tons of stereo files http://www.c64music.co.uk/

  • Stone Oakvalley’s Authentic SID Collection (SOASC=) – A recording project containing SID music both in SID and MP3 format. SOASC

  • HVMEC (High Voltage Music Engine Collection) – A collection of music editors, trackers, and other music and sound effect makers

Supported File Formats

Table 1. Supported File Formats
Format Description

SID

PSID v1–5, RSID v2/v3/v5 (including BASIC tunes), and extended v4E multi-SID files. Legacy MUS-specific PSIDs are not supported; use MUS/STR files instead.

MUS

CGSC stereo format (voices 1-3)

STR

CGSC stereo format (voices 4-6)

DAT

SID music data

PRG, C64

C64 program files

P00

C64 program files created by the abandoned PC64 emulator

D64

Disk image

D71

Double-sided 1571 disk image

D81

1581 disk image

G64

GCR disk image with half-track playback/recording and per-byte speed-map timing

NIB

1541 disk captures with full/half-track playback and saving

NBZ

Compressed NIBTools disk captures with playback and saving

NB2

NIBTools multi-pass disk captures with playback and saving

TAP

Tape image

T64

Tape program files

REU

Ram Expansion Unit memory dump

GeoRAM image

Raw RAM image, loaded through the GeoRAM image selector; its size determines the capacity

CRT

Cartridge memory dump

MP3

Recorded audio, including comparison with emulation in the desktop player; not a C64 program

Table 2. Supported Cartridge Formats

Action Replay

Atomic Power

Comal 80

EasyFlash

Epyx FastLoader

Expert Cartridge

Final Cartridge v1

Final Cartridge v3 (87, 88)

Magic Desk (32Kb, 64Kb, and 128Kb)

MikroAss

Generic CRT (normal/Ultimax layouts)

Ocean Type1

Rex Utility (Rex Datentechnik)

Zaxxon / Super Zaxxon

Pagefox

Super Games

RGCD

Retro Replay / Nordic Replay

GeoRAM (64, 128, 256, 512, 1024, 2048, and 4096 KiB)

REU (1700: 128 kB, 1750: 512 kB, 1764: 256 kB, 1750 XL: 2 MB and 16 MB that was never produced)

SFX Sound Expander [FM-YAM alike] (OPL1: YM3526 and OPL2: YM3812)

GMod2 (8Kb, 16Kb, 32Kb, 64Kb, 128Kb, 256Kb and 512Kb)

JSIDPlay2 can play:

  • Mono sound

  • Stereo sound

  • 3-SID sound

  • Multi-SID music with up to 15 SID chips, including PSIDv5/RSIDv5 files

  • SID music with SFX Sound Expander FM output

  • In the desktop player, switch between an MP3 recording and emulation for comparison

PSIDv5 adds flexible SID address layouts, file-defined stereo panning, longer title/author/release text, embedded song lengths with millisecond precision, and an FM-OPL requirement flag. Keep automatic SID selection to use the layout stored in a file. The manual per-chip settings and oscilloscope expose the first three SIDs; playback can use all 15.

For older stereo tunes, the main SID is at $D400 and additional SIDs normally use 32-byte-aligned addresses in $D420–$D7E0 or $DE00–$DFE0. Use the second/third SID address controls only when a tune needs a manual override.

The desktop and console versions can record output as:

  • WAV (lossless)

  • FLAC (lossless)

  • AAC (lossy)

  • MP3 audio (lossy)

  • AVI video (lossy)

  • MP4 video (lossy)

  • FLV video (lossy)

  • SID dump format (note sheet as CSV)

  • SID registers (writes and timing as CSV )

Supported Devices

Software emulation

JSIDPlay2 provides three software emulation choices. ReSID is based on Dag Lem’s work. ReSID-fp includes Antti S. Lankila’s combined-waveform and distortion emulation and remains the default. The optional ReSIDfp Circuit (RESIDFP_CIRCUIT) shares our ReSIDfp digital core and uses newer 6581 and 8580 analogue filter, mixer and volume models from libresidfp.

In the browser, choose Configuration / Emulation / Default Emulation. On the desktop, use the emulation selector in the toolbar or Settings / Emulation Settings…​. Per-SID overrides can force a different emulation or MOS6581/MOS8580 model; leave them at Default/Automatic to follow the tune and default settings.

Choose and edit a filter

  1. In the browser, open Configuration / Filter and select the SID slot, engine, and MOS6581/MOS8580 model you want to adjust.

  2. Choose a preset and enable Edit to unlock its sliders. Only one preset editor is unlocked at a time.

  3. Adjust the cutoff curve, resonance, and engine-specific controls while listening; the curve preview helps compare settings.

  4. Use Reset to default to restore that preset, then turn Edit off to lock the controls again.

The first three SID slots have separate preset selections. Editing a named preset also affects other slots that use that preset. For Circuit emulation, start with FilterCircuit6581 or FilterCircuit8580 rather than a preset from another engine. The desktop Emulation Settings window also provides preset selection and Circuit calibration controls. Keep the defaults if you want the existing ReSID/ReSIDfp sound; selecting Circuit is optional.

Advanced filter calibration

ReSID filter presets now also provide resonance and DAC-nonlinearity calibration in the browser filter editor. ResonanceFactor accepts 0..2 (default 1) and scales the tune’s resonance code within the native 4-bit ladder; fractional positions interpolate its gain tables. VoiceNonlinearity selects the ReSID DAC resistor ratio (2R/R), from 1.8 to 2.6. The native defaults are 2.2 for MOS6581 and 2.0 for MOS8580; these preserve the existing sound. This control updates waveform and envelope DACs, plus the 6581 cutoff DAC, without changing digital oscillator or envelope timing. Its scale is specific to ReSID; the ReSIDfp variants retain their separate voice-DAC parameter. The same preset fields are saved in INI, JSON and XML and used by desktop and Network SID Device playback.

[FilterAverage6581]
Filter6581CurvePosition=0.5
VoiceNonlinearity=2.2
ResonanceFactor=1.0

Select ReSIDfp Circuit as the default software emulation or force it for an individual SID. Its independent presets are FilterCircuit6581 and FilterCircuit8580. The desktop emulation settings and browser filter configuration provide curve and resonance adjustments and, for the 6581, transistor-range, capacitance and voice-DAC adjustments. Configuration versions are bumped so older saved settings start with fresh defaults, including the Circuit presets. INI, JSON and XML files are backed up before replacement.

In jsidplay2.ini, the new selections use ReSIDfpCircuit_Filter6581, ReSIDfpCircuit_Stereo_Filter6581 and ReSIDfpCircuit_3rdSID_Filter6581, with equivalent keys for 8580. A circuit preset identifies its chip model explicitly, allowing curve positions at either endpoint:

[FilterCircuit6581]
CircuitModel=MOS6581
CircuitCurve=0.5
CircuitRange=0.5
CircuitCapacitance=470
VoiceNonlinearity=0.96
ResonanceFactor=1.0

CircuitCurve and CircuitRange accept 0..1, capacitance is in pF (330..2200), and resonance factor accepts 0..2. These calibrations describe possible chip characters: chips from the same production week can differ, and a cutoff curve does not describe the complete nonlinear response. The variant retains our ReSIDfp voice-DAC calculations and external RC stage; it is not a complete port of every libresidfp feature. It uses more CPU time and lookup-table memory than the existing ReSIDfp. Reproducible reference and performance checks are documented in src/test/resources/sid/circuit/.

Hardware output

Device Desktop / console C64Jukebox in a browser

HardSID 4U, UPlay, Uno

USB output; configure the 6581 and 8580 slots

Supported through WebUSB

ExSID / ExSID+

USB output

Supported through WebUSB

USBSID-Pico

USB output

Supported through WebUSB

SIDBlaster USB

Supported; see device setup

Not supported; the browser SIDBlaster driver has been removed

Ultimate64

SID playback over the network, with optional audio/video streaming

Not offered as a local browser output device

Network SID Device

Network output to a compatible server

Not offered as a local browser output device

Choose the desktop sound device in the toolbar and configure its slots or network address there. For browser hardware playback, open Configuration / USB, enable USB, start playback, and select the attached device when prompted. This needs a browser with WebUSB support and permission to access the device. Follow that panel’s operating-system setup instructions, and connect the hardware’s audio output to your speakers or audio interface. Voice and sample mute controls also work with ExSID, HardSID, and USBSID-Pico; device buffering can delay when a change is heard.

Developers implementing their own device can use the Network SID Device protocol.

Compatibility

JSIDPlay2 emulates the C64 CPU, CIA timers and interrupts, VIC-II video, SID sound, and peripherals including 1541/1571/1581 drives, Datasette, cartridges, REU, and GeoRAM. Regression tests cover CPU instructions, interrupt and video timing, SID behavior, memory expansion, and disk loaders, using VICE programs and hardware reference captures.

Animated diagnostic captures can wait for a documented program state and cursor phase within a bounded emulated time. The Frodo 3fff.prg border effect uses this timing alignment while retaining an exact comparison of the complete image.

Disk regressions also execute original Vorpal v1 and RapidLok 6 sector readers and Revolution-V’s V-MAX! readers against known G64 data, including CPU recording, ejection, and reopening full and half-tracks in a fresh drive. Vorpal coverage also boots the original Winter Games disks from BASIC, executes the original installer and decoding-table swaps, selects events through the game’s menus, and changes to side 2 at its own prompt, checking every delivered file byte. Later no-SYNC Vorpal regressions load the original California Games module through stock DOS, execute its drive bootstrap, and transfer prescribed packets through native seeks at all four densities, with checksum-retry and wrong-sector-ID controls. CPU-recorded later Vorpal tracks are also saved and reopened as G64, NIB, NBZ, NB2 and compressed NB2, then read through the original installer and serial protocol on a fresh machine, with exact packet and write-protection checks. Optional original California Games NBZ checks boot from BASIC through the title and practice menus into all six events. They compare complete packed and unpacked files, check the original loader’s wrong-side retry and prompted disk swap, and require each event to initialize and consume joystick press/release input on both C64/CIA and 1541 models. Separate offline checks exercise the original track-18 side/signature authentication with readable forged data and repaired CBM checksums. Valid data and an unrelated score-text change are accepted; wrong signatures or side IDs trigger the original retry prompt. Both disk images and stock drive ROMs are preserved. V-MAX! v2/v3/v4 regressions use the complete original Revolution-V installer, C64/drive serial routines, native seeks, density changes, track readers and DOS cleanup, with parity, changed-data and missing-header controls. RapidLok 6 coverage also includes its published track search and timer-driven key loading through the stock drive ROM, decoder-density changes, physical seeks, and sector authentication with valid and deliberately damaged media. Its original PAL/NTSC serial routines also run through stock-ROM installation commands and the IEC bus, covering buffer and memory-page crossings, control bytes, end-of-file, error signalling, and drive timeout dispatch. Full-file regressions connect track search and authentication to IEC delivery, including sector chains, track-order changes, and separate shadow files. Cleanup regressions execute the original drive reset path and verify that stock DOS can then process memory commands and read the complete BAM sector after successful transfers and a serial timeout. Startup regressions also execute the original TITLE autostart, encrypted drive installer and directory takeover, then load prescribed protected files through the original C64 loading loop, including BASIC autorun and cleanup. Lifecycle regressions repeat those installations on a running machine, checking cached keys, disk-side changes, and successful reloads after disk ejection and a stock-DOS read error. Original-game regressions also boot the published PAL/NTSC Pirates! images through their setup screens, answer the game’s historical question using its original manual, change disks at its own prompt, and load side 2’s original MAIN program into an interactive gameplay screen. These checks preserve the game and protection code. They explicitly restore the documented weak area in the supplied track-36 captures; they do not claim that every uncorrected capture boots unchanged. Individual game compatibility still depends on its protection version and disk image.

Compatibility depends on the selected C64/VIC model and attached peripherals; some tests and programs still expose differences. See the published compatibility report and visual comparisons for the current results and remaining failures. If a program fails, first check its PAL/NTSC, drive, and expansion requirements rather than forcing unrelated SID settings.

Launch JSIDPlay2

Desktop and console

Install OpenJDK 21 or newer and extract the archive matching your operating system and CPU architecture. Desktop packages are available for Windows x64, Linux x64/AArch64, and macOS x64/AArch64 (Apple Silicon). Use the supplied launcher so the included JavaFX libraries and native libraries are found.

Note: Whereas Windows users get an executable (.EXE) to launch:

jsidplay2-4.14.exe # (1)
jsidplay2-console-4.14.exe # (2)
  1. Launch User interface version

  2. Launch Console version

On Linux, launch from the extracted directory:

cd Downloads/jsidplay2-4.14
./jsidplay2.sh # (1)
./jsidplay2-console.sh # (2)
  1. Launch User interface version

  2. Launch Console version

On macOS, use jsidplay2.command or jsidplay2-console.command in the extracted directory. The .sh launchers can also be run from a terminal in that directory.

To play a file immediately, pass its path to the console launcher, for example:

./jsidplay2-console.sh /path/to/tune.sid

Docker Support

JSIDPlay2 can also be run using Docker. To start JSIDPlay2 using Docker, you can use the provided docker-compose.yml`s in `src/main/docker:

docker compose -f src/main/docker/docker-compose.ui.linux.yml up jsidplay-ui

Run this from a source checkout after configuring the host’s display and audio access. This starts the desktop UI service; the same Compose file also contains a console service. Network SID Device and server deployments use their own Compose files in src/main/docker.

The backend loads assembly64-credentials.properties from user.dir first, then user.home, merging both files with home-directory values overriding duplicate keys, like directoryServlet.properties. An explicit -Djsidplay2.assembly64.credentials selects a single file instead. The server Compose file mounts /home/ken/assembly64-credentials.properties from the Docker host read-only at /root/assembly64-credentials.properties, matching the backend’s default location in the container user’s home directory. Keep the host file private with mode 600 and recreate the server container after adding the mount. Credentials are usable only by web administrators and stay outside the image.

C64Jukebox in a browser

C64Jukebox runs the emulator locally as JavaScript or WebAssembly; Java is not required on your computer or phone. The hosted page uses a server for music collections, searches, downloads, and optional recognition services. Local emulation and server-side audio/video conversion are different playback modes.

Play music

  1. Open C64Jukebox.

  2. Choose one of the music examples, or use File / Load content for a local file. The file chooser also accepts DAT, MUS, STR, and C64 files.

  3. Use Player to pause, restart, stop, change song, or select normal speed/fast forward. A SID file may contain several songs; changing song restarts playback at that song.

  4. Open SID for tune information, STIL for collection notes, or Playlist to manage a listening queue. Use Server or Assembly64 to browse/search hosted content. Availability depends on the server configuration.

If the browser blocks sound, click a playback control to allow audio. Your volume, emulation settings, and other preferences are saved in that browser’s site storage. See Sharing and downloads to share hosted or uploaded local content with its companions.

Demos, games, disks, and cartridges

  • Use Device / Floppy / Insert Disk for D64, D71, D81, G64, NIB, NBZ, or NB2 images. Use Load *,8,1 to enter the load/run command. Inserting a disk and loading a program are separate actions.

  • To swap disks in a running demo, insert the next disk when requested without resetting the C64. Inserting D71 or D81 selects a compatible 1571 or 1581 drive automatically.

  • Use Device / Datasette for tape insertion and transport controls, and Device / Cart for CRT, REU, GeoRAM, or Sound Expander selection. A CRT can optionally run together with a REU. Select No REU for the cartridge alone, or choose a REU capacity in Device / Cart / REU or Configuration / Cartridge. Selecting or disabling the REU leaves the CRT inserted. Reset after changing the setup if the program checks for a REU during startup. Compatibility depends on the cartridge and ROM; overlapping I/O addresses can prevent playback, and the browser displays a compatibility notice for the combined setup. GeoRAM and Sound Expander remain separate selections.

  • To supply a REU image with a CRT, select both in Load contents or attach the REU as a companion to the loaded CRT. Shared links and companion ZIP downloads retain the image and selected REU capacity. Sharing an image-backed combination currently requires the CRT as the primary content; a separate program/disk plus CRT plus REU image cannot yet be saved as one launch. A blank REU capacity can also be saved with a program/disk and its CRT companion. StarTreu requires a blank 512 KB REU and has approximately 25 seconds of black screen during startup.

  • Configuration / Playback / Auto play of well-known demos can perform recorded disk swaps and key presses for recognized demos. It does not automate every disk image. Theater mode provides continuous random playback of hosted music/demo categories.

Open Screen for video and the virtual keyboard. Configure a gamepad and joystick port under Configuration / Joystick. On touch devices, enable Virtual joystick (touch) there and use the V-Joystick button on the screen view to enter fullscreen controls. Choose Configuration / Audio / Latency / Gaming, then restart the game to reduce input lag. Standard mode uses larger buffers for more stable music playback.

Companion files

The web player pairs CGSC .mus/.str and _a.mus/_b.mus files automatically in server collections and Assembly64 releases. For local files, select both parts together in File / Load content or the playlist picker. A pair appears as one playlist item. To add the second part after loading the first, use File / Add companion… and select the matching file. The browser can only use local files you select; it cannot search their directory for a sibling. .dat files keep their existing PSID handling.

A demo can also have a required .crt cartridge or .reu memory image as a companion. Select one demo and one cartridge/REU image together, or load the demo and attach its image through File / Add companion…. The cartridge or REU image is installed before the demo starts. Cartridge requirements are explicit; unrelated cartridges in the same directory are not attached automatically. A CRT can explicitly be combined with a REU; other expansion choices remain exclusive. Cartridges may conflict with the REU’s I/O addresses, so compatibility depends on the software.

For StarTreu, select a 512 KiB REU and enable StarTreu timing workaround in the web cartridge configuration. Enable it before loading the CRT, or reset afterwards. This optional compatibility setting selects the timing version already included in the recognised cartridge and enables the VICE bus handoff needed by its following portrait effect. It is off by default and leaves the original file and other cartridges unchanged. The choice is included in both shared links/QR codes and downloaded launch bundles.

To choose a companion from Server or Assembly64, load the primary item first, then browse to the companion file. Use the Add companion button with the link icon beside a matching stereo part or a CRT/REU image. The same button appears in both views when the file can be attached to the loaded item. It restarts the primary item with that companion; clicking the filename keeps its usual playback behavior. These companions retain their server references, so sharing or downloading the complete item does not upload them again.

Sharing and downloads

The Share tab offers two links and QR codes for the same content, companions, selected song, disk autostart selection, and playback settings. One opens the browser emulator; the other starts server-side playback.

For local content, click Upload and update to upload the selected files and generate the links. After upload, the button becomes Update, which saves the current settings without uploading the files again. Hosted collection and Assembly64 content can be shared using its existing server references. Playing individual local files does not upload them, and the Share tab explains when content still needs loading or uploading.

Click Update after changing the settings, companions, or program selected for disk autostart. Repeated updates for an unchanged loaded item keep the same links and QR codes. Changes produce new links; previously shared links retain their original settings.

Use File / Download with companions to download a ZIP to your browser’s usual download location. It contains the primary file, companions, and launch.json describing the settings and autostart selection. Open the ZIP through File / Load content or the playlist picker to restore the complete item; ZIP import uploads the bundle to the server. The normal directory and Assembly64 download buttons still download the original individual file.

Saved links remain usable while the server retains their shared files and referenced collection/Assembly64 content. If you run your own server, saved launches and uploads are stored under <Temp Dir>/playback-shares/. Back up that directory if shares must survive server storage cleanup.

Visuals, sound, and performance

  • Piano shows the visual keyboard and falling-note history. Oscilloscope shows SID waveforms and, when active, FM-OPL channels. Enable the view’s output control when needed; disabling unused visuals reduces processing work. Inside the sound in the oscilloscope explains the applied software SID model and clock, including whether they came from the file, a manual choice, automatic detection, or a default. It identifies the applied emulation and filter preset and highlights differences from explicit file flags. The cutoff marker follows audible playback on the preset’s estimated frequency curve, alongside resonance and the tune’s filter routing. The voice paths below the curve name the selected waveforms and show whether each voice goes directly to the output or through the filter. They explain voice 3’s direct-output suppression and show the oscillator links requested by sync and ring modulation. Pulse high time is shown when pulse is selected. Gate-off is not treated as silence: the envelope can continue its release. Applied software voice/sample mutes, filter bypass and 8580 digi boost are shown with their corresponding playback frame. The curve is not an audio spectrum or a measurement of a physical SID; USB output shows a software reference. Browser setup selection covers all active software SIDs; live positions and voice paths currently cover the first three. The desktop oscilloscope provides the same view for its three displayed SID slots. Collapsing the panel stops its curve rendering; hiding or disabling the oscilloscope stops its existing collection.

  • Configuration / Emulation selects the default SID engine, C64/VIC model, and stereo detection. Force contains per-SID overrides. Filter selects and edits presets; see Choose and edit a filter.

  • Configuration / Screen controls video output, frame rate, and PAL colors. Keep music-only playback without video when you do not need the C64 screen.

  • Configuration / Audio, Delay, and Reverb control sampling, buffers, and effects. Delay and reverb each offer a reset to their defaults.

  • Settings marked with a yellow warning apply after restarting the tune; they do not necessarily change the running machine.

Use a WebAssembly GC build if supported by your browser. The shared-memory build (WASM_GC_SAB) also requires cross-origin isolation on its host; the non-shared build (WASM_GC) is an alternative, with JavaScript builds available as well. Standalone web ZIPs must be served by a web server; opening the HTML directly as a local file is not the supported setup. For embedding or upgrading a website, use the web build’s README.md, UPGRADE.md, and UPGRADE-DEEPSID.md.

Configuration

The desktop application uses jsidplay2.xml by default. Start its launcher with --configurationType JSON to use jsidplay2.json instead. The console player uses jsidplay2.ini. Desktop/console configuration files are looked up first in the current working directory and then in your home directory; new files are created in the home directory.

Operating system Default home-directory example (replace yourname)

Windows

C:\Users\yourname\jsidplay2.xml

Linux

/home/yourname/jsidplay2.xml

macOS

/Users/yourname/jsidplay2.xml

Use the same directory with .json or .ini for the other configuration types. Downloads and temporary files normally go into .jsidplay2 below your home directory. The browser player stores its preferences in the browser, independently of these desktop files.

When a release requires a new configuration version, the INI/XML/JSON readers back up the older configuration as a .bak file and start with fresh defaults. Check collection paths, hardware mappings, and custom filter settings after upgrading. The browser may also reset outdated preferences to its new defaults.

Tip
If a desktop configuration cannot be read, close the application, rename the configuration file to keep a copy, and try starting with fresh defaults. Check the console output for the actual error.

Playback and machine settings

C64 and VIC-II models

Use Settings / Emulation Settings…​ on the desktop or Configuration / Emulation in the browser. The default machine is C64C; choose C64 when a program needs the older CIA and board behavior.

Machine CIA Default PAL VIC Default NTSC VIC

C64

MOS6526

MOS6569R3

MOS6567R8

C64C

MOS6526A

MOS8565

MOS8562

Leave VIC Model at Default to follow that table and the selected video standard/tune detection. Explicit choices are MOS6569R3 or MOS8565 (PAL), and MOS6567R8 or MOS6567R56A (old NTSC). An explicit VIC fixes PAL/NTSC and overrides the video-standard controls and tune detection; return to Default to use automatic video-standard selection again. On the desktop, changing the C64 or VIC model requires restarting JSIDPlay2. In the browser, restart the tune/game after changing either model.

For PAL colors, choose JSIDPlay2 or VICE in the desktop Video Screen’s Monitor Settings, or JSIDPlay2 PAL / VICE-style PAL under browser Configuration / Screen. This choice applies at the next playback start. The VICE-style preset matches VICE 3.10 x64sc’s default PAL colors, using its default MOS8565 palette, gamma 1.00 and default color controls independently of the emulated VIC model. It uses native-resolution PAL filtering without artificial scanlines; NTSC keeps the standard renderer.

Song lengths, looping, and silence detection

Use the song-length database when you want known tunes to finish automatically. PSIDv5’s embedded song length takes precedence when supplied; otherwise the database or configured default length is used. A default length of zero means unlimited playback when no known length is available. Choose Single Song to stay on the selected song, or disable it to continue through a tune’s songs. Use Loop to repeat playback instead of advancing when the selected playback sequence ends.

Silence Timeout ends tunes of unknown length after the configured number of silent seconds; zero disables detection. Find it in desktop Emulation Settings or browser Configuration / Playback. Software playback measures generated SID/FM audio, so continuing register writes do not prevent a silent ending. Changing playback volume does not affect the detector, and manually muting a voice or samples suspends detection. Hardware and Network SID output use register inactivity instead.

Stereo detection and FM

Keep automatic SID selection for files that already describe their chips. Stereo Sniffer can detect up to 15 active SIDs in older content; it is independent of PSID64 detection. Additional chips must show sustained voice activity, so volume-only samples or rarely updated held notes can require manual configuration. For manual two/three-SID playback, choose the SID count and addresses, then set the per-chip balance/delay controls. Fake Stereo duplicates a mono tune through multiple SIDs; it does not turn it into a separately composed stereo tune.

SFX Sound Expander provides OPL1 (YM3526) or OPL2 (YM3812) FM sound alongside SID playback. PSIDv5 files can request FM automatically. For older SID+FM files, select the Sound Expander manually; enable it only when needed because FM emulation uses additional CPU time.

VIC-II

Open View / VIC-II on the desktop, or the VIC-II browser tab, during playback. The view shows the current screen-memory cells, eight sprite images and their settings, character glyphs, VIC registers, counters, and BA/AEC state. Select a sprite or character to inspect its data address. It complements the oscilloscope’s Inside the sound view.

Memory preview is selected by default, followed by Rendered output. Snapshot, Freeze machine and breakpoint hits copy the existing renderer output, including sprites, raster effects and the normal video borders. The ordinary video screen and inspector use the same frozen presentation. Both show a raster line and cycle-position marker with a readable raster/core-cycle/phase label on the picture. The capture metadata supplies the common frame and absolute time. The desktop temporarily hides its decorative monitor bezel so it cannot cover captured border pixels; the normal appearance returns on Resume. An orange dashed line marks the raster and a white point marks the most recently processed eight-pixel cycle boundary; it is not a dot-level measurement. A raster outside the video viewport has no in-picture line; the white point is absent during horizontal blanking outside the captured columns.

Freezing midway through a frame does not finish rendering it or advance emulation. Only pixels already committed to the renderer’s output buffer are copied; checkerboard marks the remaining pixels. Some PAL filters commit whole rows, so part of the current row can still be unavailable. The viewport may span raster zero on NTSC. While the inspector is visible, its live subscription requests video, or any visual breakpoint is armed, the browser renders every frame. Its presentation frame-rate setting remains unchanged. Releasing the last demand restores ordinary frame skipping. This uses the existing renderer buffer, with no history or periodic pixel copies. The change begins at the next frame boundary; pixels skipped before inspection began cannot be recovered. If inspection is opened and frozen immediately during a skipped frame, resume briefly and capture again. Disabled video and unsupported custom renderers remain labeled explicitly. Pixels outside the normal video viewport are not captured. There is no additional video history buffer or continuous pixel copying.

Enable Sprite positions in Rendered output to see numbered outlines for enabled sprites that intersect the viewport. The guides include X/Y expansion, the X high bit, border clipping and raster-counter wrap. Select a thumbnail or click a guide to highlight the corresponding sprite. These are current register positions; raster tricks can have drawn sprites at different positions earlier in the frame. The guides do not claim that an entire rectangle is opaque or visible through foreground graphics and borders.

Live inspection starts switched off. Enable it to collect at 10 Hz while the view is selected. Hiding or closing the view removes that subscription; unchecking Live also stops periodic snapshots. Snapshot requests one capture. Freeze machine captures and pauses emulation; Snapshot also turns off Live to hold the captured view while emulation continues. Resume uses the ordinary player pause control. Live packets contain memory and state only, without video pixels. Normal playback creates no inspection service, samplers, history buffers, or inspection messages until a view or API caller requests them.

The separate Memory preview reconstructs 40 x 25 cells from memory at the reported capture time. It does not composite sprites, scrolling, or earlier raster changes. Previews use a fixed inspection palette, independently of monitor color/filter settings. Sprite images show their current memory, which may differ from bytes fetched earlier in the frame. Gray pixels mark cartridge mappings without a side-effect-free inspection path. Viewing registers does not perform guest reads or clear collision latches.

Raster timeline

Press Record one frame in Raster timeline to record the next complete raster frame. The recorder waits for the observed raster-zero transition and stops automatically after one PAL or NTSC frame. Playback continues; recording does not freeze the machine or turn off Live inspection. Resume first if playback is paused.

Eight sprite lanes show enabled intervals in blue and DMA intervals in turquoise. Orange marks show observed changes to sprite coordinates, expansion, colors, enables and pointers. The VIC lane also shows other stored register and bank changes. DMA means sprite data fetching is active; it does not guarantee opaque or visible pixels. Click a lane to select that hardware sprite and the nearest change, or step through changes using the browser slider or desktop list. The detail shows recorded X/Y, enables, DMA, pointer and bank values at that boundary. This explains multiplexing: the same hardware sprite can be moved and reused several times during one frame.

Timeline selection only reads the recorded log. It does not rewind emulation or replace the independent picture, memory preview or sprite thumbnails. The recording has its own chip, generation and start-time metadata. Save timeline exports it as JSON, separately from Save capture.

Recording is off by default. Only an explicit request schedules half-cycle probes; no recorder or probe is kept running after completion or cancellation. Only changed scalar values are stored, with a hard limit of 8,192 changes. The recorder performs no guest register reads, pixel copies, or periodic memory snapshots. Sprite pointers are side-effect-free previews of the current pointer table, rather than a trace of the VIC’s latched fetches. Equal-value writes are omitted; values are observed after device events at PHI1/PHI2 boundaries, not through write hooks.

Cancel recording retains the available partial history. Freeze or a breakpoint also ends the recording and retains history up to the stop. Incomplete or capped recordings are labeled explicitly, with the unrecorded tail shaded. Hiding the view allows this single recording to finish. Clear releases its data; stop or reset also discards the service’s recorder and retained log. A new recording replaces the previous one.

Visual breakpoints

Choose a condition and press Arm breakpoint. Up to 16 rules may be active; Disarm all removes them. They remain armed when the view is hidden or closed. A hit pauses the emulator inside its execution batch and opens the inspector with the matching capture. Reset or stopping playback disarms the rules.

Condition Meaning

Raster position

Stop at a zero-based raster line and a one-based internal VIC core cycle.

Sprite/background collision latch

Stop when a selected sprite bit becomes set in the collision latch.

Sprite/sprite collision latch

Stop when a selected sprite bit becomes set in the sprite collision latch.

Sprite DMA begins

Stop when DMA becomes active for a sprite selected by the mask.

VIC register matches

Stop when the stored register byte enters the masked value. Use an offset from $00 to $3F.

VIC bank changes

Stop when the active VIC memory bank changes.

Display mode changes

Stop when the stored ECM/BMM/MCM mode bits change.

For collision/DMA masks, $01 selects sprite 0, $08 selects sprite 3, and $FF selects any sprite. Decimal values and hexadecimal values beginning with $ or 0x are accepted. One shot removes the rule on its first hit. A repeating raster rule continues to its next occurrence after Resume. Collision rules observe latch transitions, including CPU reads which clear the latch; they do not infer collisions by intersecting sprite rectangles.

Cycle numbers follow the emulator core’s existing convention: cycles are numbered from 1, and a raster begins at core cycle 10. The capture includes PHI1/PHI2 and absolute emulated time. Breakpoint probes run as separate scheduler events after the relevant device event; they do not stop in the middle of an instruction or reconstruct dot-level history. Raster rules schedule their next position directly. Other state rules check the required phases only while armed, without copying memory or recording history on each check.

Save capture exports versioned JSON with the C64/VIC/clock models, generation, frame, raster, core cycle, phase, trigger ID/type/target/value/mask, previous and observed condition values, register bytes, bus/counter state, and requested memory. The desktop toolbar and browser tab indicate armed rules. The exported capture is diagnostic evidence, not a restorable machine save state.

Embedding and extensions

C64.getInspection() lazily provides the shared InspectionService. Call its methods on the emulation thread; desktop embeddings can use Player.inspect(service → …​) to marshal a request and install the player pause handler. Browser embeddings use js2inspection / SET_INSPECTION. The generated API reference describes actions, masks and acknowledgements. A raw C64 embedding must stop its execution loop when the service pauses; InspectionService.clock(maxEvents) provides a loop which stops inside a batch.

Subscriptions request data groups: 1 state, 2 sprites, 4 characters, 8 screen/color/bitmap memory, and 16 rendered video (default mask 31). Live sampling always omits video. Host control/status responses also omit it; only explicit snapshots, freezes and hits copy pixels. The optional video object contains viewport dimensions, its first raster, beam position, viewport start time, availability status and a committed pixel count. Pixel data uses RGB24_BASE64 and contains only the committed prefix in row order; the uncommitted suffix must be marked as unfinished. A missing video channel is null. Exported pixels are unmodified renderer output; markers and checkerboard are presentation overlays, independently reproducible from the metadata. watchVideo() holds full-frame rendering for a visible view without scheduling snapshots; close its subscription when hidden. Browser embeddings use SHOW / HIDE for that lifecycle, separately from LIVE / OFF memory sampling. One sampler serves their union. Packets are detached from chip state; absent groups are empty arrays, and unavailable mapped bytes are -1. The browser permits one packet in flight, one pending state/hit and one pending timeline result. Live updates cannot discard an undelivered breakpoint hit or completed recording; acknowledgements from older sessions are ignored.

recordTimeline(listener) requests a frame; cancelTimeline(), clearTimeline() and timeline() control or retrieve it. Browser actions are RECORD_TIMELINE, CANCEL_TIMELINE, CLEAR_TIMELINE and GET_TIMELINE. Timeline updates use the existing acknowledged transport with reason: "TIMELINE" and a separate timeline object (or null when cleared); they must not replace the ordinary inspection snapshot. Updates are sent only when waiting, starting or finishing a recording, rather than on every probe or live snapshot. The versioned timeline holds an initial array and ordered changes. Fields 0..63 are stored VIC register bytes, 64 is the DMA mask, 65 the VIC bank and 66..73 current sprite pointer-table bytes. Changes contain half-cycle tick offsets, raster, core cycle, phase, field, previous and new values. Ticks are relative to startTime at the observed raster-zero PHI1; startCycle retains that model’s actual core cycle. A completed frame has cyclesPerLine * rasterLines * 2 ticks.

The inspection service owns sampling, trigger rules, pause state and capture reporting. A small read-only VICInspection adapter accesses existing VIC state; no callbacks are added to VIC rendering/fetch loops or CPU execution. Future chip views can add requested data groups and adapters, and extend the separately enabled, bounded timeline. The timeline records state changes, rather than bus transactions or per-pixel history.

Focused validation and optional UI/performance checks:

mvn -o -Djavafx.platform=linux -Dmaven.test.skip=false \
  -Dtest=InspectionServiceTest,InspectionTimelineTest,InspectionImageTest,InspectionFrameTest,InspectionSpriteBoundsTest,PlayerInspectionTest \
  resources:resources compiler:compile compiler:testCompile surefire:test
node src/test/scripts/vic-inspection-test.mjs
VIC_ALL=1 node src/test/scripts/vic-inspection-browser-check.cjs
python3 src/test/scripts/vic-inspection-benchmark.py --baseline e85f25b3

The browser check needs Chrome, the four compiled TeaVM backends, and local webjar resources. It checks the actual Vue component and workers, including PAL/old NTSC, hidden-view teardown, pause/resume, exact trigger stops, and phone widths. ui.vic.VICExplorerCheck is an opt-in JavaFX FXML/control check on a working display; it saves English/German screenshots without opening a visible stage. Reports are under target/vic-inspection/. Run the benchmark alone, without concurrent builds. It reports synthetic CPU/VIC work separately for unused, dormant, live+JSON, and armed inspection; presentation and SID audio costs are outside that benchmark. An example run and its limits are recorded in src/test/resources/debug/inspection-performance.txt.

Distribution variants

The same emulator is available with three user-facing frontends:

  • Console version is for execution in a terminal or command prompt. It has no user interface and no graphical output. Its purpose is just to play a SID tune. However, it prints out a little text-based menu and reacts on keyboard input.

Use INI file: /home/ken/jsidplay2.ini
+------------------------------------------------------+
| Java SIDPLAY - Music Player & C64 SID Chip Emulator  |
+------------------------------------------------------+
| Title        :            Turrican 2-The Final Fight |
| Author       :       Markus Siebold & Stefan Hartwig |
| Released     :                     1991 Rainbow Arts |
+------------------------------------------------------+
| Playlist     :                     1/9 (tune 1/9[1]) |
| Song Length  :                                 03:00 |
+------------------------------------------------------+
Keyboard control (press enter after command):
< > - play previous/next song
h e - play first/last tune
, . - normal/faster speed
p   - pause/continue player
1   - mute voice 1
2   - mute voice 2
3   - mute voice 3
4   - mute voice 1 (stereo-SID)
5   - mute voice 2 (stereo-SID)
6   - mute voice 3 (stereo-SID)
7   - mute voice 1 (3-SID)
8   - mute voice 2 (3-SID)
9   - mute voice 3 (3-SID)
f   - enable/disable filter
g   - enable/disable stereo filter
G   - enable/disable 3-SID filter
q   - quit player
  • The desktop JavaFX application adds a video screen, favorites, collection browsers, recording, and development tools.

  • The browser C64Jukebox adds a touch-friendly interface, piano roll, playlists, and hosted content browsing. See C64Jukebox in a browser.

Desktop User Interface

Screen Layout

In the following image the general layout of the UI is shown.

JSidplay2 4.14 - Start Screen

The main window is divided into several regions:

  1. Menubar – reveals all possible functions of JSIDPlay2 by a classic menu

  2. Toolbar – For always visible and important settings like emulation, sound device, and sampling parameters

  3. Tabs Area – Switch between currently opened views

  4. View – contents of the currently opened view

  5. Statusbar – For the currently chosen settings like chip type, song speed, and peripheral device infos

Menubar

The file menu is for loading a tune from a file, basically.

Table 3. File Menu

File/Load…​

load a tune, reset C64, and immediately start playing

File/Load REU Video…​

Insert a REU (Ram Expansion Unit) memory dump containing video data, reset C64, and immediately start playing using NUVIE video player 1.0

File/Save…​

Save the current tune

File/Reset

Reset C64

File/Quit

Quit JSIDPlay2

Selecting a specific View menu entry will open various tabs in the tab area. Each tab can be opened exactly once.

Table 4. View Menu

View/Video Screen

Show video screen

View/Oscilloscope

Show real-time SID output and, when used, FM-OPL channel output and operator envelopes

View/Favorites

Show the favorite browser

View/Music Collections/HVSC

Show the music collection HVSC

View/Music Collections/CGSC

Show the music collection CGSC

View/Disk Collections/HVMEC

Show the disk collection HVMEC

View/Disk Collections/Demos

Show the demo disk collection

View/Disk Collections/Magazines

Show the disk magazine collection

View/Tools/SID Dump

Record notes while playing a tune

View/Tools/SID Registers

Show register writes while playing a tune

View/Tools/Kick Assembler

Use kickassembler to assemble machine code into C64 RAM

View/Tools/Disassembler

Simple Disassembler possibility of the C64 RAM

View/Online/Assembly64

Open Assembly 64 search engine

View/Online/GameBase 64

Open GameBase64 to search for games

View/Online/<website>

Open a web browser view for that site

View/Online/JSIDPlay2 Source Code

Show the source code of JSIDPlay2 in a web browser view

View/Printer

Open the printer view (as a replacement for paper)

View/Console

Show console output and error messages

View/Recording

Show recently created recording

The oscilloscope displays SID and local SFX Sound Expander (OPL1/OPL2) output together. Its Inside the sound panel shows applied software settings and a playback-aligned marker on the selected preset’s estimated cutoff curve. Resonance and routing come from the same scope frame. Saved settings that have not yet been applied do not replace the running preset. A bypassed software filter is labelled explicitly. The FM-OPL section appears only when a local Sound Expander is active. Its overview shows all nine channel waveforms; select a channel to see both operator envelopes, base pitch, algorithm, feedback, waveform selection and operator levels. Select "All gauges" to display every channel’s envelopes and pitch together.

Each OPL channel has two operators, each with its own waveform and volume envelope. In FM mode, OP1 modulates OP2, which supplies the channel output; in additive mode, both operators contribute to the output. Feedback feeds part of OP1’s output back into itself to change the timbre. The detail area belongs to the selected channel, so clicking another channel changes both operator envelopes and the pitch shown below.

The envelope gauges show attenuation before the operator’s total-level setting: 0 dB is the top and -48 dB is the bottom. They describe the envelope, rather than the final channel loudness. Output traces use a fixed range for each synthesis mode, so quieter instruments stay visibly quieter instead of being automatically amplified.

Rhythm mode labels the percussion assignments of channels 7–9. Base-pitch history uses a fixed logarithmic scale covering all 17 octaves of the channel’s frequency registers, before operator multipliers. Each doubling of base pitch occupies the same height. Collection stops while the oscilloscope is disabled or its tab is hidden.

The player menu is to control playback of a tune.

Table 5. Player Menu

Player/Pause/Continue

Pause or resume playback

Player/Previous

Play the previous song of a tune. After the first 4 seconds the current song is restarted instead.

Player/Next

Play the next song of a tune

Player/Normal speed

Play a song at normal speed

Player/Fast Forward

Increase playback speed. Use Normal Speed to return to regular playback.

Player/WARP

Toggle uncapped, silent software emulation with Alt+W. All emulated chip and drive timing is retained; the monitor presents up to ten frames per real second. WARP off restores the previous playback speed. Available with live soundcard output; recording, streaming, MP3 comparison and hardware/network SIDs are excluded.

Toolbar/WARP on startup/loading (also Player menu)

Automatically enable WARP on subsequent starts (off by default). WARP ends before the command following a successful LOAD, including RUN for BASIC programs. Errors, RUN/STOP and unexpected editable prompts cancel the following command. Execution leaving the KERNAL for program RAM also ends WARP before the first program instruction, independently of the emulation buffer size. RAM-based loaders can return to normal speed early; unrecognized loaders can use the full timeout. Cartridge boots start playback at reset without automatic WARP. Manual WARP requests override this automation. The browser has the same saved switch and time limit under Configuration/Playback for software playback; switching it off also ends active automatic WARP.

Toolbar/Time limit (seconds) (also Player menu)

Maximum real elapsed seconds for automatic WARP, 1–3600, default 30. The deadline also applies while paused. Expiry continues loading at normal speed without interrupting it. The editable number field is enabled with startup WARP.

Player/Stop

Stop emulation, song playback stopped

Player/Playlist starts with song 1

Choose playlists to start with start song or song 1

The devices/Datasette menu is the interface to the keys on a magnetic tape data storage device (datasette), where a tape can be inserted to store program data.

Table 6. Devices/Datasette Menu

Devices/Datasette/Record

Press the Record key on a device

Devices/Datasette/Play

Press Play on a device

Devices/Datasette/Rewind

Press the Rewind key on a device to control storage medium position

Devices/Datasette/Forward

Press Forward on a device to control storage medium position

Devices/Datasette/Stop

Press the Stop key on a device

Devices/Datasette/Reset Counter

Reset the counter of the storage medium position to zero

Devices/Datasette/Enable turbo tape for t64

Enable turbo tape for t64

Devices/Datasette/Insert Tape…​

Insert a tape into the datasette (.TAP file format). Different file formats are converted

Devices/Datasette/Eject Tape…​

Physically eject a tape from the datasette

The device floppy menu is the interface to the floppy disk device using a disk as the storage medium, (a thin and flexible magnetic storage medium) for data storage

Table 7. Devices/Floppy Menu

Devices/Floppy/Turn Drive On

Switch power on/off-key

Devices/Floppy/Drive Sound

Play pre-recorded floppy disk drive sound for disk rotation and track change

Devices/Floppy/Parallel Cable

Connect a 1541/1541-II and C64 using a parallel cable for compatible fast loaders

Devices/Floppy/jiffyDos

Use floppy speeder

Devices/Floppy/Floppy Type/C1541

Choose C-1541 as the floppy disk drive device (old model)

Devices/Floppy/Floppy Type/C1541-II

Choose C-1541-II as the floppy disk drive device (new model)

Devices/Floppy/Floppy Type/1571

Choose a 1571 drive for double-sided D71 images

Devices/Floppy/Floppy Type/1581

Choose a 1581 drive for D81 images

Devices/Floppy/40 Track handling/Never Extend

Normally a disk uses 35 tracks, but can be formatted using up to 40 tracks. This option means a disk will never extend to 40 tracks.

Devices/Floppy/40 Track handling/Ask On Extend

Ask the user if the floppy disk should extend to 40 tracks.

Devices/Floppy/40 Track handling/Extend On Access

The floppy disk should extend to 40 tracks automatically.

Devices/Floppy/Memory Expansion/8K RAM Expansion 0x2000

The floppy disk drive memory gets 8Kb extra RAM at 0x2000.

Devices/Floppy/Memory Expansion/8K RAM Expansion 0x4000

The floppy disk drive memory gets 8Kb extra RAM at 0x4000.

Devices/Floppy/Memory Expansion/8K RAM Expansion 0x6000

The floppy disk drive memory gets 8Kb extra RAM at 0x6000.

Devices/Floppy/Memory Expansion/8K RAM Expansion 0x8000

The floppy disk drive memory gets 8Kb extra RAM at 0x8000.

Devices/Floppy/Memory Expansion/8K RAM Expansion 0xA000

The floppy disk drive memory gets 8Kb extra RAM at 0xA000.

Devices/Floppy/Insert Disk…​

Insert a disk into the floppy disk drive

Devices/Floppy/Eject Disk

Remove disk out of the floppy disk drive

Devices/Floppy/Reset Floppy

Reset the floppy disk drive. Normally it does not have a reset button and will be reset altogether with the C64

Devices/Floppy/Create and Insert Empty Disk (D64)

Insert a new empty floppy disk into the floppy disk drive

Disk insertion automatically selects compatible drive hardware for D64/G64/NIB/NBZ/NB2, D71, or D81 images. Use Insert Disk…​ again to change sides/disks without resetting a running program. The parallel cable and drive RAM expansion options apply to 1541/1541-II hardware. The menu’s empty-disk command still creates D64; it does not create a D71/D81 image.

NIB, NBZ, and NB2 support playback of recorded half-tracks; NB2 can also replay compatible variations between recorded passes. No-SYNC Vorpal captures with non-byte-aligned revolutions are recovered when repeated data and a safe sector gap can be verified. Drive writes save full tracks and existing or newly recorded half-tracks back to these images, including NBZ compression. Saving applies to writable desktop images; browser imports are mounted read-only. NB2 updates the four captures at the selected density while preserving the other density captures and compatible variations outside the write gate. These formats store one density per track record: use G64 for recordings that change density within a track. If a recording cannot be represented or saved, the disk stays attached with its changes pending for retry. File permissions, write protection and the existing track-extension policy still apply.

G64 plays recorded full and half-tracks with per-byte speed-map timing, following recorded density changes within a 300 RPM revolution. It also records and saves full and half-tracks, updating track lengths and speed maps when the program changes recording density. A first write to a missing half-track creates a separate record, preserving its full-track neighbour. If changes cannot be saved, the disk stays attached for a retry. Captured G64 tracks use the format’s unsigned 16-bit lengths, up to 65535 bytes. This includes the 8066-byte tracks on Defender of the Crown side 2 and the 9422/9517/9572-byte captures on Magic Disk 64 08/89.

The device printer menu is the interface to the printer device using a printer tab with graphical output as the paper to print on. The printer MPS-803 is currently supported.

Table 8. Devices/Printer menu

Devices/Printer/Turn Printer On

Switch power on/off-key

The device cartridge menu is the interface to the various multipurpose cartridges currently supported by JSIDPlay2.

Table 9. Devices/Cartridge menu

Devices/Cartridge/Insert Cartridge…​

Insert a multipurpose cartridge. The cartridge type will be auto-detected by reading the cartridge header.

Devices/Cartridge/GeoRAM/Insert GeoRAM…​

Insert a RAM expansion cartridge GeoRAM. The RAM size is determined by the cartridge contents.

Devices/Cartridge/GeoRAM/size

Choose 64, 128, 256, 512, 1024, 2048, or 4096 KiB. A new capacity starts with empty RAM.

Devices/Cartridge/REU/Insert REU…​

Insert a REU memory image. Its size determines the capacity.

Devices/Cartridge/REU/REU 1700 (128Kb)

Insert a 128 KiB REU with empty contents.

Devices/Cartridge/REU/REU 1750 (512Kb)

Insert a 512 KiB REU with empty contents.

Devices/Cartridge/REU/REU 1764 (256Kb)

Insert a 256 KiB REU with empty contents.

Devices/Cartridge/REU/REU 1750 XL (2Mb)

Insert a 2 MiB REU with empty contents.

Devices/Cartridge/REU/REU (16Mb)

Insert a 16 MiB REU with empty contents.

Devices/Cartridge/SFX Sound Expander [FM-YAM alike]/SFX Sound Expander (OPL1: YM3526)

Insert Sound Expander Module with OPL1

Devices/Cartridge/SFX Sound Expander [FM-YAM alike]/SFX Sound Expander (OPL2: YM3812)

Insert Sound Expander Module with OPL2

Devices/Cartridge/Action Replay V6.0

Insert multipurpose cartridge Action Replay V6.0

Devices/Cartridge/Eject Cartridge

Disconnect multipurpose cartridge from C64

Devices/Cartridge/Freeze

Press the freeze button on the multipurpose cartridge

GeoRAM images must have exactly one supported capacity; an empty image selects the legacy 2048 KiB default. Selecting the same capacity retains RAM. Resetting or changing tunes also preserves GeoRAM while it remains selected. Selecting another cartridge, ejecting GeoRAM, or changing its capacity replaces that RAM. In the browser, GeoRAM is preserved across worker restarts during the page session, but reloading the page starts fresh; only the selected capacity is saved in preferences. Loaded RAM images are not written back to the original file automatically.

The devices hardcopy menu is to make a screenshot off the video screen of the C64.

Table 10. Devices/Hardcopy menu

Hardcopy/GIF

Create a hardcopy of the C64 video screen output in GIF format. Output is stored in the temporary folder of JSIDPlay2.

Hardcopy/JPG

Create a hardcopy of the C64 video screen output in JPG format. Output is stored in the temporary folder of JSIDPlay2.

Hardcopy/PNG

Create a hardcopy of the C64 video screen output in PNG format. Output is stored in the temporary folder of JSIDPlay2.

The extras menu provides special functionalities.

Table 11. Extras menu

Extras/Ultimate64

Show Ultimate64 audio and video data shared over socket connection.

The settings menu opens a new window to configure JSIDPlay2. All settings will be persisted.

Table 12. Settings menu

Settings/Audio Settings…​

Open the audio settings window of JSIDPlay2.

Settings/Emulation Settings…​

Open the emulation settings window of JSIDPlay2.

Settings/WhatsSID Settings…​

Open the WhatsSID settings window of JSIDPlay2.

Settings/Joystick Settings…​

Open the joystick settings window of JSIDPlay2.

Settings/Proxy Settings…​

Open the proxy settings to be used for internet connections.

The help menu provides access to user help and credits.

Table 13. Help menu

Help/Userguide

Open the userguide of JSIDPlay2.

Help/Java documentation

Open the Java API documentation of JSIDPlay2.

Help/Check For Updates

Check for updates of JSIDPlay2.

Help/About

Open the about box with the credits of every individual who has contributed to JSIDPlay2.

Tabs Area

Shows a selection of currently opened tabs.

View

Shows the contents of the currently selected tab.

Statusbar

The status bar shows currently active settings and emulator status. Additionally, a progress bar shows background task activity. Status bar infos are comma separated.

Table 14. Status information

"PAL" or "NTSC"

Shows the active video standard. An explicit VIC model can override the tune’s requested standard.

C64/C64C and VIC model

Shows the active machine and VIC-II model. Restart requirements are described under Playback and machine settings.

"RESID", "RESIDFP", "RESIDFP_CIRCUIT" or HardSID4U(Device 0 as MOS6581)/ 2 Devices

Shows the currently used SID emulation engine. RESID is ReSID 1.0 beta by Dag Lem, RESIDFP is Antti S. Lankila’s resid-fp (distortion simulation), and RESIDFP_CIRCUIT adds the newer libresidfp analogue filter models to our ReSIDfp core. If multiple SIDs are used, each SIDs emulation type is printed separated by a plus sign. In the case of hardware SIDs e.g., HARDSID4U each device number and configured chip model is printed in brackets altogether with the total device count.

"MOS6581" or "MOS8580"

Shows the currently plugged-in SID chip type that is emulated. If multiple SIDs are used, each SIDs SID chip type is printed separated by a plus sign and each additional SIDs base address is printed hexadecimal in brackets, e.g., "MOS6581(at 0xd420)".

"Player: DMC"

Shows the currently identified player of the tune, e.g., Demo Music Creator System (DMC). Players are identified by memory analysis of the play routine identity scanner tool SIDId. A click on the tool tip of the status bar opens a browser window of the online available player.

PSID64

Shows if the PSID64 format has been detected.

SNIF

Stereo has been detected, sniffing SID writes

REU

Shows the cartridge name of the currently inserted cart.

SPEED: 2.0

Shows the measured tune speed.

"Song: 1/7"

Shows the currently played song number and the available number of songs within a tune, but only if more than one song is available.

"Floppy Track: 18"

Shows the read/write head position of the floppy disk drive if a disk has been inserted and the motor is on.

"Datasette Counter: 001"

Shows the counter of the storage medium position if a tape has been inserted and the motor is on.

250MB/4096MB

Shows the current memory usage.

"Time: 00:01.000/04:37.000"

Shows the current playing time of a tune or song in minutes, seconds, and milliseconds. If the song length is well-known, it is separated by a slash and printed as well.

"Recording: /path/to/filename"

Shows the currently recorded filename.

JSIDPlay2 Server

JSIDPlay2 has a built-in server mode.

Network SID Device Interface

JSIDPlay2 can send SID playback to a compatible Network SID Device server, or run its own device server for other players. Start Network SID Device on the receiving computer, then select Network SID in JSIDPlay2’s desktop toolbar. Set its hostname and port (6581 by default) to match the receiver; use localhost when both run on the same computer. The current protocol also supports FM-OPL playback when both client and server implement version 5.

For the protocol, commands, and integration details, see:

FAQ

How to Record SIDs as MP3 by Command Line

Record your favorite SID music to MP3 files.

Why does browser audio stutter or game input lag?

For music, choose Standard latency and reduce video frame rate or disable unused visuals. For games, choose Gaming latency and restart the game. Smaller buffers respond sooner but require the emulator to keep up more consistently. ReSIDfp Circuit, FM, and many-SID tunes need more processing time than ordinary one-SID playback. If a shared-memory build cannot start on a particular host, try the non-shared WebAssembly build.

Why did a changed model or screen setting not take effect?

The browser marks restart-required settings with a yellow warning; restart playback after changing them. For C64/VIC model changes on the desktop, restart the application. PAL color-preset changes apply at the next playback start.

Can the browser save changes to my original disk or expansion image?

Selecting a local image gives the emulator its contents; it does not grant write access to the original file. Do not treat a browser session or its saved preferences as a persistent copy of disk or expansion RAM. GeoRAM session retention is described under the cartridge controls above.

Glossary

C64

Commodore 64 (C64) is a very popular Home Computer of the 80’s

SID

SID (Sound Interface Device) is the name associated with the sound chip of the Commodore 64. It is a synthesizer that can be programmed in Basic and Assembler to produce sound output.

SID music

SID music or alternatively a SID tune is a program running on the C64 that produces sound. It is therefore required to emulate a complete C64 to run any program producing sound. SID is also a file extension used for SID tunes. A SID tune sometimes contains multiple songs. Emulators such as JSIDPlay2 are able to play the songs contained in a SID tune.

JSIDPlay2

JSIDPlay2 is a software that makes it possible to listen to SID music of the Commodore 64. Besides that, it is a complete, very compatible, and cycle exact Commodore 64 emulator. It emulates not just a naked C64, but many additional devices as well. Datasette, Floppy, Printer, and multipurpose cartridges. On top of that, many useful tools dealing with SIDs have been added.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA