Serial Slave

Serial Slave is a system that allows you to use a PC as a virtual disk drive for your C64 or C128. It communicates using RS-232 and doesn't require any custom hardware. The PC server also runs well under multitasking operating systems, so you don't have to dedicate a machine to running Serial Slave. Serial Slave is fast: 3.8 kB/s with a SwiftLink, 11.5 kB/s with a Turbo232 or Silver Surfer, and even 23 kB/s with a SuperCPU if your PC supports 230400 baud.


  1. A Commodore C64 or Commodore C128
  2. A SwiftLink, Turbo232, or Silver Surfer interface
  3. A null modem serial cable
  4. A PC or a workstation with a serial port
  5. Perl 5.x with the Win32::SerialPort or Device::SerialPort module installed


The software has two parts, the C= driver and the PC server. You have three options on the C= side:
  1. $CE00 driver

    This loads the necessary code into ram and patches the LOAD and SAVE vectors. This has a few drawbacks: if you reset the machine you'll have to reactivate Serial Slave with a SYS command. If you try to load a program that's larger than 199 blocks (202 blocks is the largest you can normally load) it'll crash. If you start an application that uses the $CE00-$CFFF area while it's running (many do) you'll have to reload the driver.

  2. Burn a new kernal ROM

    By removing the kernal RS-232 routines you free up enough space to fit the Serial Slave driver in ROM. This way the driver will always be available and won't risk being overwritten. All software that uses the kernal routines for loading and saving should work. The obvious drawback is that you need an EPROM burner and possibly an EPROM -> ROM adapter.

  3. Softkick the kernal ROM

    With a SuperCPU you can actually load new code into the kernal ROM. The old ROMs in the C64 or C128 are too slow for the SuperCPU so it mirrors them in bank 01. As this is writeable RAM it's possible to patch them while the computer's running and without having to use an EPROM burner. It'll even survive a soft (normal) reset, but a hard reset (with the rocket animation) or a power cycle will erase it. The only drawback is that it requires a SuperCPU.

Which option you use depends on your hardware. All three drivers are functionally equivalent, there are no differences in features or performance. As of version 0.7 only the $CE00 driver has been implemented.

The PC server runs on any computer with Perl 5.x and a serial port module:

After Perl is installed, download Serial Slave and unzip it in a folder of your choice.


Start the PC server with perl serslave.perl and it'll sit and wait for commands from the C=. Everything is controlled from the C= side using the LOAD and SAVE commands. The default device number for Serial Slave is 6. This can be changed when the driver is installed, but 6 will be used in all examples.
The basic usage is simply loading and saving to the PC's hard disk:
load"ik+.prg",6 - loads ik+.prg from the PC
save"test.bas",6 - saves a basic program as test.bas

To list the current directory, load $:
load"$",6 - loads the current directory. Use list to list it, just like a normal drive.

Serial Slave supports basic pattern matching:
load"$a*",6 - list all files starting with a
load"a??*",6 - load the first file starting with a that has three or more characters in the name

To change directory, simply load it:
load"..",6 - go up one directory
load"games",6 - change to the games directory

Serial Slave supports loading from d64 images. Basically they work like a directory:
load"ik+.d64",6 - mount the ik+.d64 image
load"$",6 - load the directory of the mounted d64
load"..",6 - unmount the d64 and return to the hard disk directory

Serial Slave also supports loading URLs from the internet. For this to work you must include the protocol prefix:
load"",6,1 - loads the program straight from the net

You can even load d64 disk images straight from the net:
load"",6 - mount ik+.d64
load"$",6 - load the directory of the mounted d64
load"..",6 - unmount the d64 and return to the hard disk directory

To copy files, load and run the provided sscopy program:
Once started it will display directory listing. Select the files you want to copy with cursor up/down and space. Press <- to switch between copying to or from the PC. Press D to select a different drive to copy to or from. Press enter to start copying. Once you're done, press q to quit.
Hint: you don't actually need to load the SS driver for sscopy to work, it uses its own transfer routines.

NEW: You can load and view jpeg images:
Any file or URL prepended with jpg2mci: will be converted from a jpeg to a MultiColour Interlace picture. Just run it to view it. A precompiled Win32 binary is included, users on other platforms need to compile tools/jpg2mci-1.0.1/jpg2mci.c. Stupid bug alert: jpeg conversion only works in the home directory of Serial Slave -- if you change to another directory loading will fail. Yeah, it's stupid, but it's 4 am.

Upcoming features

CBM side:
D64 reader/writer - beta version included in the latest snapshots
Text viewer (bare bones web browser?)
Kernal patches
C128 and Plus/4 drivers - sscopy is working on both

PC side:
HTML -> basic listing
Image viewers - jpeg -> MCI converter done
gzip and zip support
T64/P00/LNX/etc support


-> To download area


Note that version numbering of the individual components don't necessarily follow the version number of the release they appear in.
C64 driver
0.1  LOAD patch
0.2  Bug fixes, partial rewrite
0.3  SAVE patch
0.4  handle '.' result
0.5  support for 16550, and prepared code for multiple targets
     renamed source file
0.6  makes sure it's not already installed before hijacking vectors
SS Copy
0.1  working but limited to < 120 blocks or so
0.2  major bugfixes
0.3  fixed short dir listing
     copied file-1 bytes, fixed
     prints file size when copying
0.4  support for 16550, and prepared code for multiple targets
     copy from SS to IEC
0.5  better filename and type recognition
     directory scrolling sped up
     added select all, none, inverse
     added reread function
0.6  ported to the C128
     fixed copying past end of list
     fixed a, n, i not updating nsel
     swapped out basic roms on C64 and C128
     maxentries changed to 144
     added status line
PC Server
0.1  loading, directory listing, cd
0.2  wildcard support, minor code cleanup
0.3  code restructured, rudimentary d64 support
0.4  URL loading
0.5  saving, URL d64 mounting
0.6  . status code for positive result but no data
     d64 file loading
     code now uses strict parsing and is split into modules
0.7  fixed file corruption due to cr/lf conversion under win32
     fixed broken d64 loading
     added block mode reading


Serial Slave is released under the GNU General Public License and is free.

Serial Slave is Copyright © 2002