Sol Anachronistic Computer Emulation
I was lucky enough to find a (nearly) working Sol computer for not much money. Most people aren't so lucky. It is also possible to buy a Sol computer on EBay, as they pop up from time to time, but that has its own problems, in particular being relatively expensive (anywhere from $300 to $1200, depending on condition and peripherals).
One thing that has bothered me is that I've invested way too much time in archiving Sol information and maintaining these web pages yet only a handful of people can make use of the information.
The answer was obvious – to write an emulator (click the image below to watch it in action on youtube).
If you are new to emulation, the idea is this. Because today's machines are so much faster than the machines of yesterday, it is possible to write a program that exactly interprets the machine code of the older machine, opcode by opcode, yet still be as fast (or much faster) than the old machine. There are plenty of problems of course. Besides the CPU, anything that the CPU interacts with must be modeled too. In the case of the Sol, this means the keyboard, the display, dip switches, parallel and serial I/O, and cassette interfaces. Because the Sol is an S-100 machine, it also means that any of the thousands of S-100 add-in cards could be modeled as well. It isn't always necessary to model everything exactly, but the more accurate the modeling job, the more likely it is a given piece of software will operate properly.
So, with this emulator and an x86 windows machine, anybody can have the experience of running two decade old Sol programs. A Pentium-class machine (probably 100 MHz and higher) is required to get full speed emulation. This emulator runs under Windows as a Win32 application, not as a DOS program, as many other emulators do.
Gilbert Gutierrez informs me that the emulator works on Mac OSX using the Wine and Winebottler application. It is funny to think of running an interpreted BASIC program on an x86 Windows emulator, running under an OSX translation layer, using an ARM-based x86 emulator.
Solace features an integrated debugger, which can be quite handy for new code development, patching old programs, or doing reverse engineering.
In a case of wicked overkill, Solace has support for virtual cassette storage. Using the emulated cassettes is just about as clumsy and tedious as the real thing, except it is probably a lot more reliable than the real thing.
Once you get tired of fiddling with virtual cassette tapes, you can step up to a virtual Northstar DS/DD floppy disk system.
Emulation isn't complete. Currently the serial port and parallel port are not at all supported. One long-term goal is to emulate the Helios disk subsystem and get PT-DOS running again.
Let me know if you have any problems with Solace, have any suggestions, enjoyed it, hated it, or are from the Processor Technology legal department.
This release, version 3.2, is a bug fix release over version 3.1. Read the release notes for the details.
The .zip file below contains the emulator, the SOLOS ROM, and a few programs (in .ENT format) to get you started. The .zip also has some release notes and my ongoing TODO list, so you can see what direction I'm headed with Solace. You can go to the Sol-20 Program Binaries and Source page and download other programs to run.
Download the emulator here (version 3.2, 1.2 MB; source code included)
Don't worry, there is no install program, no registry changes, or other hassles. Just unzip into a directory and away you go.
January 2021: 17 years after the last time this page was updated, here is a bit of news. Michael Gardi has written a Sol-20 emulator, written in Python, as part of his Sol-20 reproduction computer.
To use Michael Gardi's python-based Sol-20 emulator, follow these rough steps:
- install Python 3 if isn't already there; make sure it works
- download a zip file of the github source
- unpack it in some directory
- open a windows shell in that folder
- type "py -3 -m pip list" to see which modules are already installed
- type "py -3 -m pip install pygame" (if it isn't installed yet)
- type "py -3 -m pip install pyserial" (if it isn't installed yet)
- type "py -3 main.py" to launch the emulator
- from the emulator, type "CAT" or "CAT /1" to see what is on TAPE1, or type "CAT /2" to see what is on TAPE2. it will seem to hang as it reads the tape indefinitely. hit the Pause/Break key to get back to a prompt.
- from the emulator, type, eg, "GET ASTER" to load that program. the load message indicates the start location, eg, "3000 0901"; the first number is the start address; the second number is the length.
- from the emulator type "EX 3000" (or whatever that first number was) to run the loaded program
If you have difficulties installing modules with pip, please don't bug me about it; I have that problem too. I don't use python enough to know how to solve such problems when they crop up. Do what I do: google it. Keep trying things until either it works or you give up.