DriveWire 4 Java by Aaron Wolfe
Latest version is 4.3.6p
- DriveWire4 4.3.6p for Windows x64 with Java included
- DriveWire4 4.3.6p for linux x86_64 with Java included
- DriveWire4 4.3.6p for linux arm_64 with Java included
- DriveWire4 4.3.6p for MacOS aarch64(apple silicone) with Java included
- DriveWire4 4.3.6p for MacOS x86_64 with Java included
This release focuses on cross-platform compatibility improvements, particularly for macOS Apple Silicon and Windows systems. Major changes include a complete serial library migration and enhanced file path handling.
The previous serial communication library, nrjavaserial 5.2.1, does not support macOS Apple Silicon (aarch64). This is a known issue where the native library loader looks for the wrong library name on ARM Macs. Support for Apple Silicon was targeted for version 5.3.0, which was never released.
DriveWire 4 now uses jSerialComm 2.10.4, a modern serial communication library with native support for:
- macOS x86_64 (Intel)
- macOS aarch64 (Apple Silicon M1/M2/M3/M4)
- Windows x86/x64
- Linux x86/x64/ARM
The following files were updated to use the jSerialComm API:
| File | Changes |
|---|---|
DWSerialDevice.java |
Port opening, configuration, and data transfer |
DWSerialReader.java |
Serial data reading thread |
DriveWireServer.java |
Serial port testing and enumeration |
DWCmdServerShowSerial.java |
Serial port status display |
DWUtils.java |
Port enumeration utilities |
DWAPISerial.java |
Serial API endpoint |
DWAPISerialPortDef.java |
Port definition handling |
DWProtocolHandler.java |
Protocol communication layer |
VModemProtocolHandler.java |
Virtual modem support |
MCXProtocolHandler.java |
MCX protocol support |
DWCmdServerTurbo.java |
Turbo mode serial handling |
When loading disk images or ZIP files through the right-click context menu on the drive table, Windows file paths (e.g., C:\Users\name\disk.dsk) were not being handled correctly. The Apache Commons VFS library expects properly formatted file:// URIs.
DWImageMounter.java was updated with comprehensive cross-platform path handling:
The getFilename() method now handles both Unix (/) and Windows (\) path separators:
int lastSlash = location.lastIndexOf('/');
int lastBackslash = location.lastIndexOf('\\');
int lastSeparator = Math.max(lastSlash, lastBackslash);A new normalizeToFileUri() method converts file paths to proper file:// URIs:
| Input | Output |
|---|---|
C:\path\to\file.dsk |
file:///C:/path/to/file.dsk |
/path/to/file.dsk |
file:///path/to/file.dsk |
file:///already/uri |
file:///already/uri (unchanged) |
All file loading paths now use normalized URIs:
- ZIP file contents via
findAllFileUris() - Non-ZIP disk images via
mountDisks() - Browser-initiated loads via
DWBrowser.java
- Silent Launch: Application starts without a visible command prompt window using
javaw.exe - Bundled JRE Priority: Automatically uses the included JRE if present, falls back to system Java
- Start Menu Integration: Creates shortcuts for both launching and uninstalling
- Self-Contained: Does not modify system-wide Java settings
- Extract the distribution archive
- Run
install_windows.bat - Launch from Start Menu > DriveWire4
- Start Menu > DriveWire4 > Uninstall, or
- Run
uninstall.batfrom the installation directory
| Platform | Architecture | Status |
|---|---|---|
| Windows 10 | x64 | Verified |
| Windows 11 | x64 | Verified |
| Ubuntu Linux | x86_64 | Verified |
| Raspberry Pi OS | aarch64 | Verified |
| macOS | x86_64 (Intel) | Not Verified |
| macOS | aarch64 (Apple Silicon) | Verified |
This is the first version of DriveWire 4 with native Apple Silicon support. Previous versions required Rosetta 2 emulation for serial port functionality, which often resulted in enumeration failures or crashes.
The project uses Maven with platform-specific profiles for SWT libraries:
# Build for current platform (auto-detected)
mvn clean package
# Build for specific platform
mvn -DskipTests -Dswt.platform=windows-x86_64 clean package
mvn -DskipTests -Dswt.platform=linux-x86_64 clean package
mvn -DskipTests -Dswt.platform=linux-aarch64 clean package
mvn -DskipTests -Dswt.platform=macos-x86_64 clean package
mvn -DskipTests -Dswt.platform=macos-aarch64 clean packageAdditionaly you can run the buildall script to create versions for all platforms. the binaries will be created in ./dist-buildall in their respective directories.
chmod +x buildall.sh
./buildall.shAll dependencies are resolved from Maven Central and Nuiton repositories. No GitHub-hosted JARs are required.
| Dependency | Version | Purpose |
|---|---|---|
| jSerialComm | 2.10.4 | Serial port communication |
| SWT | 4.37 | GUI framework |
| Apache Commons VFS | 1.0 | Virtual file system |
| Log4j | 1.2.17 | Logging |
Simply download and install the new version. Configuration files are compatible with previous 4.3.x releases.
If you have custom code that interfaces with DriveWire's serial port handling:
- Replace
gnu.io.*imports withcom.fazecast.jSerialComm.* - Update method calls per the API mapping table above
- Replace
PortInUseExceptionwithDWPortInUseException - Replace
UnsupportedCommOperationExceptionwithDWUnsupportedCommOperationException
- Linux WebKit: Ensure
libswt-webkit-gtk-4-jniis installed before first run - Windows Antivirus: Some antivirus software may flag
commons-vfs-1.0.jar; add an exclusion if needed
The SWT library has been updated from version 4.2.4 (2012) to 4.37 (September 2025).
This update brings a wide range of improvements to SWT, most notably within the embedded browser component.
As a result, DriveWire 4 can now load more modern web pages and support current web technologies.
Outdated or broken URLs have been removed from the bookmark menu, and new, relevant links have been added.
The bookmark menu now includes:
- NitrOS9
- Software Websites
- DriveWire Websites
Leveraging the new SWT library, DriveWire 4 can now render HTML <audio> controls within its built-in browser.
The Load HDB-DOS page is a local web page that includes an HTML audio player for three HDB-DOS WAV files:
- CoCo 1
- CoCo 2
- CoCo 3
These WAV files can be played directly within the DriveWire 4 browser, allowing for convenient and integrated HDB-DOS loading across CoCo systems.
Although the browser component itself no longer handles disk or archive mounting, it now seamlessly integrates with the new DWImageMounter system to provide consistent behavior when interacting with DSK or archive files.
The toolbar spinner is now visible and fully functional, providing clear feedback during browser-based operations.
Users can now insert images directly from the Color Computer Archive, a feature that was not previously possible.
This improvement is due to two key factors:
- The previous SWT version did not render the website correctly, preventing interaction with download links.
- The archive distributes disk images within ZIP files, with DSK files one level deeper than the archive root, a structure older versions could not traverse.
With SWT 4.37 and the DWImageMounter.java ZIP traversal logic, DriveWire 4 can now properly access and mount these images directly from the site.
DWBrowser.java has also been enhanced to improve drive management and user interaction within the browser interface.
Users can insert or append a drive by clicking on its associated row in the drive table.
Clicking a row updates the drive number displayed in the browser spinner, keeping the interface synchronized.
Conversely, changing the spinner’s value whether by typing a number or using the + and – buttons, highlights the corresponding drive row.
The floppy disk icon located to the left of the spinner can be clicked to toggle Append Mode directly from the browser toolbar, providing a quick way to switch between standard and append behaviors.
All functionality related to loading or mounting CoCo image and binary files has been moved from DWBrowser.java to a new, dedicated class: DWImageMounter.java.
While DriveWire 4 has long supported these file types, this change delegates management of them to DWImageMounter.java rather than DWBrowser.java.
DWImageMounter.java handles all CoCo-related disk and binary extensions, including:
BIN, DSK, VHD, BAS, ARC, IMG, DMK, OS9, and ZIP.
It is responsible for traversing ZIP files, locating valid images (including those nested within subdirectories), and prompting the user to load them.
Because this logic has been centralized, the following features now share the same core implementation:
- Insert disk for drive X
- Insert disk from URL for drive X
- Load disks directly from the web browser
- Append to inserted DSK image
As a result, improvements or fixes to mounting behavior apply consistently across all use cases.
Appending to files has also been implemented.
A new Append menu item has been added to the disk table context menu, and a Toggle Append Mode option is available under the Tools menu for quick activation.
In several areas of the user interface, shell handling and event management have been improved for better reliability.
A bug that prevented loading multiple files due to use of an inactive shell has been resolved by replacing references to getActiveShell() with Display.getMainShell().
This method is part of the SWT Display class and ensures the correct shell is always returned, active or not.
Other stability improvements include:
- Fixing a bug in the Tools menu event handler logic that would cause DriveWire 4 to crash.
- Resolving a crash when selecting Display Timers from the Tools menu.
This issue was caused by a null shell reference for the timers dialog; using the main shell reference from the Display now prevents the crash entirely.
Prepackaged releases are available for:
- Windows
- Linux x86_64
- Linux aarch_64
Each release is bundled with its own Java Runtime Environment (JRE) in a self-contained directory.
Installation scripts are provided that will:
- Copy DriveWire 4 and its bundled JRE to your system
- Create a desktop launcher
- Create an uninstall script
These installers do not install Java system-wide and will not interfere with existing Java installations, allowing DriveWire 4 to run as a fully standalone application.
Before running DriveWire 4 for the first time on Linux, ensure that the package
libswt-webkit-gtk-4-jni is installed.
If this library is missing, DriveWire 4 may behave abnormally and alter its installation files.
In such cases, reinstalling DriveWire 4 after installing libswt-webkit-gtk-4-jni will be necessary.
This version of DriveWire 4 has been tested and confirmed to work on:
- Ubuntu (x86_64)
- Raspbian aarch64 (Raspberry Pi)
- Windows 10
- Windows 11
Although startup scripts are included for Intel and ARM Macs, functionality has not been verified due to lack of hardware for testing.
This repo holds two netbeans projects for two versions of DriveWire 4 by Aaron Wolfe that have been slightly modified so that they can be compiled and run with newer versions of java.
- drivewire4_from_source is DriveWire4 version 4.3.3p assembled from the source files available on sourceforge.
Get the original source files from sourceforge. https://sourceforge.net/projects/drivewireserver/
To compile and run, make sure you have:
- Java JDK 17 or greater installed.
- ant
- NetBeans 16 or higher.(you don't stricly need this if you just want to compile)
The following was tested under linux but it should work the same under Windows. With ant installed, navigate to the project directory "drivewire4/drivewire4_from_source" and type the following to compile:
antDepending on the version of ant you have this step might produce an error. you'll see something like the following.
BUILD FAILED
/home/rockyhill/Downloads/src/drivewire4/drivewire4_from_source/nbproject/build-impl.xml:1560: /home/rockyhill/Downloads/src/drivewire4/drivewire4_from_source/build/test/classes does not exist.to solve this all you need to do is create test/classes directory inside of the newly created build directory. on linux you can issue the following command.
mkdir -p build/test/classesRun the ant command again.
antFor use on ARM64 you'll need to compile a small shared library so you'll need.
- g++
- X11 development headers
If you are going to run this on a raspberry pi that uses the X11 windowing system, then you'll need a small library that calls XInitThreads(). In order to use SWT, XInitThreads() needs to be called beforehand. For whatver reason, SWT does not take care of this so we must. I found and modified a small library "xdll.cpp" that someone made to solve this issue and it can be found in drivewire4/drivewire4_from_source
Make sure you are compiling this on a raspberry pi and and that you have the X11 develeopment headers and g++ installed. to compile issue the following command. You can also cross compile this for arm64 from your dev computer but I haven't tried that yet.
g++ -o libx.so -shared -fPIC -Wl,-soname,libx.so -L/usr/lib/X11 -I/usr/include/X11 xdll.cpp -lX11Copy the newly created shared library "libx.so" to "drivewire4/drivewire4_from_source/lib"
You can now start DriveWire 4 using the included script for arm64.
./drivewire4_linux_arm_64For the drivewire4_from_source project use the script for your Operating system after compiling.
- drivewire4_linux_x86_64
- drivewire4_linux_arm_64
- drivewire4_windows_x86_64.bat
- drivewire4_macosx.x86_64
- drivewire4_macosx.aarch64
Ant uses "nbproject/private/private.properties" to get the path to the JDK from NetBeans. In my case "user.properties.file=/home/rockyhill/snap/netbeans/74/build.properties".
This is quickly solved by either updating that path manually or opening the project in NetBeans and building once. This is a minor annoyance but it's solvable.
After running it, you'll notice that the UI is very differnt from the UI that one sees when running the latest version of DriveWire 4.
I suspect this might be a version isssue so hopefully someone will have the source for that and one day this repo can be updated.
See screenshots of the UI below.



