| File | Date | Author | Commit |
|---|---|---|---|
| .idea | 2026-05-24 |
|
[f62050] grammar |
| .mvn | 2026-03-11 |
|
[5ce1c7] maven user settings to stop interference with ~... |
| docs | 2026-05-16 |
|
[cc2dcf] SERVER_SETUP overhaul and moving of the docker ... |
| lib | 2025-12-05 |
|
[8a0290] Initial commit |
| src | 9 hours ago |
|
[da79af] examples updated |
| .gitignore | 2026-04-11 |
|
[cc4b8a] jiffydos added to distinguish loading times |
| CHANGELOG.md | 7 days ago |
|
[6e7615] RTMP unsupported |
| Jenkinsfile | 2026-05-16 |
|
[66fb84] wrong command fix |
| Jenkinsfile.whatssid | 2026-05-16 |
|
[66fb84] wrong command fix |
| README.md | 2026-05-16 |
|
[cc2dcf] SERVER_SETUP overhaul and moving of the docker ... |
| TODO.md | 2026-03-28 |
|
[6a86ab] grammar and warnings fixed |
| jsidplay2.iml | 2026-04-20 |
|
[b59a47] cleanup |
| latest.properties | 2025-12-05 |
|
[8a0290] Initial commit |
| pom.xml | 1 day ago |
|
[27b870] comment: Enable shared buffer |
| rule-set.xml | 2026-03-29 |
|
[c90a1f] last warnings fixed |
JSIDPlay2 is a highly compatible and cycle-exact Commodore 64 (C64) emulator. It is written in Java and features:
Use the following command to build the project. Replace javafx.platform with your platform (linux, linux-aarch64,
win, mac, or mac-aarch64).
mvn -Djavafx.platform=linux clean install
target/standalonetarget/deploymvn exec:java -Dexec.mainClass=ui.JSidPlay2Main
mvn exec:java -Dexec.mainClass=server.restful.JSIDPlay2Server
Then open http://127.0.0.1:8080 in your browser.
For detailed server setup (NGINX, MySQL, WhatsSID), see docs/SERVER_SETUP.md.
For the developer release process, see docs/RELEASE_HOWTO.md.
For the JCommander usage, see docs/JCOMMANDER_USAGE.md.
For the latest changes, see CHANGELOG.md.
For plans, see TODO.md.
mvn -Djavafx.platform=linux clean install -P release
Note: Disable screensaver to avoid interference with tests.
Allow the Docker container to open a window (once):
xhost +local:docker
On Jenkins host install Docker and Docker Compose:
sudo apt-get install docker.io
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo usermod -aG docker jenkins # Who is allowed to call docker
sudo usermod -aG docker ken # Who is allowed to call docker
sudo systemctl restart jenkins
In Jenkins, click New Item → give it a name → choose Pipeline → OK.
Under Pipeline → Definition, select a pipeline script from SCM (Jenkinsfile).
Choose your SCM (e.g., Git) and set the repository URL and branch.
docker compose -f src/main/docker/docker-compose.XXX.linux.yml updocker compose -f src/main/docker/docker-compose.XXX.linux.yml downSet these properties via -D at the command line or via IntelliJ IDEA path variables or Eclipse IDE string
substitution:
-Dcgsc.7z=<path> : Path to CGSC.7z-Dgb64.mdbfile=<path> : Path to GameBase64.mdb-Dhvmec.zip=<path> : Path to HVMEC.zip-Dhvsc.7z=<path> : Path to HVSC.7z-DserverUrl=<url> : Upload URL scp://<username>>:<password>>@<serverip>/home/ken</serverip></password></username>-Dupx.exe=<path> : Path to UPX executablemvn -Djavafx.platform=linux clean deploy
Builds and uploads target/deploy to the configured web server.
Grant access to input devices:
sudo usermod -a -G input $(whoami)
# Reboot after running this command
For HardSID4U, HardSID Uno, and HardSID UPlay USB devices in VirtualBox:
vboxusers group.Audio Routing (Ubuntu/Pulseaudio):
Connect mixed/out to Microphone/in. In a terminal:
parec --latency-msec=1 | pacat --latency-msec=1
# OR
pactl load-module module-loopback latency_msec=1
# Unload with: pactl unload-module module-loopback
gsettings set com.canonical.indicator.sound visible truekmix -> "Output device" -> "Analog Stereo Duplex".mvn -Djavafx.platform=linux clean installmvn eclipse:eclipsecd target/standalone
cp ../deploy/*.sh .
chmod +x *.sh
./jsidplay2.sh ~/path/to/sidfile.sid
# Also available: ./jsidplay2-console.sh, ./sidblastertool.sh, ./recordingtool.sh
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999-Dcom.sun.management.jmxremote.port=9999-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.local.only=false-Djava.rmi.server.hostname=<server-ip>jmap -dump:format=b,file=heap.bin <JavaProcessId>heap.bin in Eclipse MAT.MemoryAnalyzer.ini (e.g., -Xmx=5g).Snippet to dump the scene graph:
private void dump(Node<?> n, int depth) {
for (int i = 0; i < depth; i++) System.out.print(" ");
System.out.println(n);
if (n instanceof Parent)
for (Node<?> c : ((Parent) n).getChildrenUnmodifiable())
dump(c, depth + 1);
}
sudo certbot certonly --standalone -d haendel.ddns.net/path/to/java -jar -> Remember file type assignment.