JSIDPlay2: a cross-platform SID player and C64 emulator

Download the latest build.

JSIDPlay2 is more than just a sidplayer. We are focusing on providing a cross-platform emulator for the C64, including joystick, keyboard, drives, display, etc. In addition to that, we will support the C64 system and the formats used in HVSC and CGSC music formats, with the exception of Amiga PlaySID and sidplay1 music formats, which are identified by "_PSID.sid" extension. The project's sourceforge page is also the best way to obtain source code.

Consequently, I've moved the stuff pertaining to the C++ port elsewhere. I'm still maintaining new distortion improvements for the C++ codebase, but I am not going to port other emulation updates such as the rewrites of the CPU, CIA and VICs.

Why Java?

Java is relatively rare choice for project such as this (open source & real-time emulation). Thus the question is raised frequently enough to deserve a place on this page. While the usual knee-jerk reaction to Java seems to be "oh my god, why" and "java sucks", my opinion is that Java is actually a fairly excellent language, and that there's a lot of things going for Java:

In summary, using Java raises the baseline experience for application developer, especially when compared to development on Linux. The baseline is very low: usually only a syntax-highlighting editor, autotools, gdb and valgrind. I admit that choice of Java might lower the experience for end user, given that a java runtime may need to be installed first, the startup delay is annoying, etc., but these are tradeoffs that are well worth it from my perspective. I hope the downsides will further minimize in time. Based on my testing, the upcoming JDK7 release will run JSIDPlay2 with about 10 % improvement, but sadly offers no apparent improvement in startup time.

I might also add an imflammable rant here about the poor state of Linux APIs, regarding both sound and GUI programming. Java insulates you from these, although each platform will add its own quirks nevertheless. Sadly, Eclipse on Linux hasn't really worked well for me as every update of GTK+ seemingly breaks the SWT that Eclipse is built upon, and PulseAudio broke my sound output with Java, and so on.

What's going on with jsidplay2 these days?

The focus of development has been in improving the emulation in all areas. We have mostly piggybacked on the work done for VICE project, and its new cycle-exact emulation engine x64sc. I'm happy to say that I have also contributed something for this effort, so it's not been entirely one-sided. For instance, we have borrowed the CIA 6526/6526A emulation, and the 1541 code from VICE, and are thankful for the VICE project for these bits. In turn, jsidplay2 has provided the hints required to make VICE too pass Lorentz suite and some of those irqdma tests which used to fail for it.

CPU
We now pass the entire Lorentz suite. The CPU compatibility should be very good.
CIA
We pass Lorenz suite's CIA tests, and various VICE testprograms. The CIA compatibility should be very good.
VIC
We have a reasonably good, cycle-exact simulation of the VIC, and pass some very complicated VICE testprograms such as the irqdma suite. However, some sprite tests like those used by various emutesters, and some inline video mode changes are buggy.
C1541
The drive support is arguably fairly weak, and we suffer from compatibility issues in various demos. Yet, many things work just fine with jsidplay2.
ReSID
Sound work is always ongoing, but I consider the distortion emulation to be fairly complete and compatible.
Cartridges
We have started to add support for various classic cartridges and the CRT format. We can support normal 8k and 16k, and some freezer cartridges like atomic power and action replay.