pc-serial-loader
Overview
The pc-serial-loader is a small ecosystem of tools that help transferring data to and from old IBM compatible PCs. It consists of
- an initial loader that needs to be placed on the target
- a toolbox which is downloaded to the target and executed in RAM
- a frontend client that runs on a "modern" PC (Windows 95 or later)
Communication happens via RS232 using a null-modem cable. On the modern PC side, a USB to RS232 converter of any kind can be used; it is regular serial 8N1 communication, no bitbanging-shenanigans or otherwise timing critical tricks.
Initial loader
The initial loader is written in x86 assembly, in a way that avoids zero bytes and some other control characters. It can be transported to the target in several ways:
- place
initld.comdirectly in the file system - enter assembler instructions via
DEBUG.COM - use
echoand output redirection into a file
The last option requires the least amount of working infrastructure, you basically enter the code directly via keybord (ALT + numpad) and nothing more than a booted DOS command interpreter and some sort of permanent storage is needed.
RAM toolbox
The toolbox is also written in assembler, but is transferred and executed automatically using the frontend client and the initial loader. It simply contains the "tricks" the program can do, which are
- discover installed physical drives
- read and write sectors on a drive
- read and write files in the file system
With the first two options, you can create disk images using a floppy drive built into the target PC, e.g. creating a new MS-DOS 3.3 boot floppy on a 5.25 inch drive, which is something you usually cannot do with your modern PC or notebook...
GUI client
On the modern PC you can use toolbox-client, which is a Win32 program written in C, using a subset of the Win32-API that is available on Windows 95, Windows NT 4.0 and any later versions.
It allows automatic toolbox download, easy interfacing with drive discovery, reading / writing disk images, and file transfer. Files can be either transferred using a list / receive / send interface (especially useful for slow connections), or a more elaborated graphical interface that supports drag & drop.
References
- Binary package (Version 1.2 from 2020-12-19)
- Source code (Version 1.2 from 2020-12-19)
- Article on main page (German)