Python Implementation of DriveWire 4 and EmCee Protocols
PyDriveWire is a nearly complete DriveWire4 Server written in Python. The goal is to eventually implement all of the features available. The server also implements additional features that are not available in DriveWire4.
PyDriveWire also has support for the EmCee Protocol for use with MCX Basic on the TRS-80 MC-10.
DriveWire 4 and EmCee Procotols can be used simultaneously on the server without reconfiguration.
- (new for v0.5c) New Easy Installation Methods: Binary Package, Docker
- (new for v0.5c)
dw config show
command - (new for v0.5c)
dw config save
command - (new for v0.5c)
dw disk create
command - (new for v0.5c) Major re-work of Virtual Serial Channels
- (new for v0.5c) Printing Support Enhancements
- Web User Interface (
--ui-port
) - Configuration File support
- Multiple Instance Support — Requires config file
- Daemon Mode - Linux/macOS Only - Requires config file
- Enhanced
pyDwCli
command console tool - Comprehensive and detailed manual for server features
- Printing: EmCee/MCX-Basic Printing Support
- HDB-DOS Mode and Disk image offset
- Remote dw command input on TCP port
- EmCee Protocol Support
- Supported on Linux, macOS, and Windows
dw server dir
anddw server list
enhanced to run on ALL OSes (Mac/Windows/Linux, etc)- Experimental printing support prints to PDF or text file
- Connections to serial ports at all supported baud rates: 38400, 57600, 115200, 230400, 460800, 921600
- Listen for incoming connection on any TCP port with a default of 65504
- Ability to make outgoing TCP connections for serial-net converters
- Disks to be mounted can be specified on the command line
- Interactive CLI allowing all dw commands to be run
- Support for DriveWire 4 virtual ports
dw
commmands over vportAT
Modem-style connections- Outbound connections with
ATD
/ATDT
ortcp connect
- Inbound vports via
tcp listen/join/kill
commands
- MIDI
- OS9
/Z
console windows - MShell Support
(new for v0.5c) pyDriveWire has two Easy Installtion Methods: Binary Package and Docker. These options are designed for Ease Of Use and do not require a complex series of installation steps. pyDriveWire can also be run directly from any pypy
or python
install if it meets the appropriate requirements.
In terms of performance, the Python and Binary Package installation methods are fully functional but have the lowest performance. Docker provides a medium level of performance. pypy should be used to get the maximum performance out of pyDriveWire.
Binary packages are available at the following location:
https://github.com/n6il/pyDriveWire/releases/latest
Packages are available for the following operating systems:
linux-x86_64
-- Any modern 64-bit Linuxwin-x64
-- 64-bit Windows (Windows 7 or later)win32
-- 32-bit Windows (Windows 7 or later)rpi3
-- Raspberry Pi 3 (Raspbian Buster)rpi4
-- Raspberry Pi 4 (Raspbian Jesse)macOs
-- macOs (High Sierra or later)
Using a Binary Package is very simple:
- Download the package for your operating system
- Unzip the package
- The package contains two executable programs
pyDriveWire
andpyDwCli
and a copy of this manual. - Run the
pyDriveWire
executable. See next section for examples: - Full details of the command line options are in the Command Line and Config File Options section.
Example: Run pyDriveWire with the HTTP UI on port 6800 and use a serial port:
pyDriveWire --ui-port 6800 --port /dev/ttyUSB0 --speed 460800
Example: Run pyDriveWire with the HTTP UI on port 6800 and use a serial port and mount two disk images:
pyDriveWire --ui-port 6800 --port /dev/ttyUSB0 --speed 460800 \
/demo/test1.dsk /demo/test2.dsk
Example: Run pyDriveWire with the HTTP UI on port 6800 and the Becker port connection on port 65504:
pyDriveWire --ui-port 6800 --accept --port 65504
- Install Docker Desktop
- Clone the container:
docker pull mikeyn6il/pydrivewire
- Run the container. See next section for examples.
- Full details of the command line options are in the Command Line and Config File Options section.
Example: Run pyDriveWire with the HTTP UI on port 6800 and use a serial port:
docker run -i -p 6800:6800/tcp -p 65504:65504/tcp \
--device /dev/ttyUSB0:/dev/ttyUSB0 mikeyn6il/pydrivewire:latest \
--ui-port 6800 --port /dev/ttyUSB0 --speed 460800
For Windows use the following --device
option:
--device COM4:/dev/ttyUSB0
Example: Run pyDriveWire with the HTTP UI on port 6800 and use a serial port and use a HTTP disk image:
docker run -i -p 6800:6800/tcp -p 65504:65504/tcp \
--device /dev/ttyUSB0:/dev/ttyUSB0 mikeyn6il/pydrivewire:latest \
--ui-port 6800 --port /dev/ttyUSB0 --speed 460800 \
http://www.ocs.net/~n6il/DWTERM.dsk
Example: Run pyDriveWire with the HTTP UI on port 6800 and the Becker port connection on port 65504:
docker run -i -p 6800:6800/tcp -p 65504:65504/tcp \
mikeyn6il:pydrivewire/latest \
--ui-port 6800 --accept --port 65504
- pypy -- For maximum performance it is recommended to run the server with pypy. pypy is a Python interpreter that does JIT compilation and results in greatly increased speed
- pyserial -- Install using pip
- Any OS where you can run Python, including but not limited to:
- Linux
- macOS
- Windows
Please see The pyDriveWire Manual - Chapter 2 for detailed installation instructions