Sol20.org

Programs and Source

There is a lot of stuff here. There is enough that it needs organization, yet how to organize it: by function, contributor, alphabetically, language? Some of what is presented is just binaries, sometimes reconstructed source code, and sometimes the actual, official source. Things on this page are broken down into these categories:

Use the navigation menu to get to other program groups.

By "other standalone programs" I mean that they don't use CP/M services, and can just be entered from the monitor and run. In the tables below, the "Addr" column says where the program loads.

If you want to try and download these programs to your Sol, here's how to do it.

  1. Grab the *.ent file you are interested from one of the tables below.
  2. Connect a serial cable from your PC to your Sol
  3. Set the baud rate, data bits, parity bits, and stop bits the same on the two machines. I have difficulty getting my Sol to transfer reliably if the baud rate is higher than 1200. YMMV.
  4. Test that the link works. Use the TERM command to do so.
  5. On the Sol, type "SET I=1". This makes it accept subsequent input from the serial port, as if you were entering it from the keyboard.
  6. On the PC, transfer the *.ent file over the serial link as a straight ASCII file.
  7. To run the program, type "EX xxxx", where xxxx is the load address, and off she goes!

Mike Douglas has having troubles getting ENT programs to load into his machine at 9600 baud. After puzzling over it a bit, he found that some .ENT files are saved with CR/LF line endings. He found that deleting the line feeds from the files and telling his term program (TerraTerm) to insert a 100 ms delay after each CR fixed it -- he could then reliably send data at 9600 baud. That 100ms is to give SOLOS enough time to scroll the screen after each line.

If you have a better way of doing it, let me know!


Bill Sudbrink wrote a utility, called RUNENT. The ENT files below are in a format that is immediately digestible by the SOLOS monitor, as described above. Bill's program allows loading files in this same format and running the program under CP/M.

RUNENT is better documented and explained and is available for download from Bill's website.

My great apologies to Bill for taking so long to posting a link here. Where does time go ... ?

Processor Technology software (link)

Most of this software comes courtesy of Paul Schaper and Bob Stek, who were kind enough to archive this information for posterity.

Processor Tech Software
Program Brief description Docs Screen Contributor
als8.ent P.T. 8080 program development system als8.pdf
cheatsheet
als8-errors
notes
als8 Paul Schaper
basic5.ent
basic5_48K.ent
P.T. Basic/5 -- a simple BASIC
The released version assumes system has 8KB of RAM. Use "SET M=xxxxx" to change this. basic5_48K.ent has been patched to assume a 48KB system
basic5.pdf
notes
basic5 Paul Schaper
chess.ent P.T. 8080 Chess Cassette; P/N 727152 chess.pdf
notes
Appendix 4
chess Paul Schaper
dbg8.ent P.T. DEBUG, Advanced 8080 Debugger; P/N 727132
(different versions for different sized memory systems)
debug.pdf
notes
debug Paul Schaper
dbg16.ent
dbg32.ent
dbg48.ent
dbg64.ent
debug.zip a zip file containing all the above files
edit.ent P.T. EDIT, Advanced 8080 Editor; P/N 727142 edit-img.pdf
notes
edit Paul Schaper
unpac.ent
pack.ent
extbasic.ent
extbasic_patched.ent
P.T. Extended Cassette BASIC; P/N 727019
See the notes to the right as to why there are two versions of the program here
extbasic.pdf
notes
extbasic Paul Schaper
focal.ent P.T. 8080 Cassette Focal(tm); P/N 727027 focal.pdf
src listing
notes
focal Paul Schaper
three focal programs:
  • solve a specific system of equations
  • compute pi to N digits
  • timing loops to benchmark primitive speed
    Paul Schaper
pilot.ent P.T. 8080 PILOT 2.2 (MOD 000) pilot-img.pdf pilot Ralph Hopkins
pilot.ent
pilot.zip
The version of PILOT here has the same label as the above version, but isn't binary equivalent. The zip file contains the other programs that came on the cassette too. tape contents pilot  
trk80.ent P.T. TREK80; Sol-specific version of the famous star trek game trek80.pdf trk80 Tim Shoppa
Gamepac1
Program Brief description Docs Screen Contributor
life.ent conway's life gamepac1.pdf life Bob Stek
Tim Shoppa
ptrn.ent simple kaleidoscope ptrn
targ.ent the famous target game -- shoot down ASCII spaceships. by placing an AM radio near the computer and playing with the tuner, you can get sound effects with the game. presented is a 14 second selection of the resulting racket: You can watch a game played on this youtube video targ
zing.ent a multi-ball pong-like game; requires external input device zing
gamepac1.zip a zip file containing all four programs  
Gamepac2
Program Brief description Docs Screen Contributor
hang.ent hangman -- in speedy assembly language gamepac2.pdf hang Bob Stek
qubic.ent play 3D tic-tac-toe against the computer qubic
gamepac2.zip a zip file containing both programs  
Music, by Software Technology Corp., a division of Processor Technology
Program Brief description Docs Screen Contributor
music.ent This is the music program that caused the disappearance of CPMUG disk 39.

It toggles the interrupt enable line on the CPU on and off at a fast rate; after a low pass filter, three part harmony was generated. This worked because the Sol did not use the interrupt line. The price was right considering any other method of making music cost over $100 per voice.

Here is a 24 second clip of a JS Bach fugue:

music.pdf
notes
music Paul Schaper
Scores:
air.ent
air.asc
alleg.ent
alleg.asc
boure.ent
boure.asc
chorl.ent
chorl.asc
preld.ent
preld.asc
sarab.ent
sarab.asc
music.zip a zip file containing all the above files
sol-music.zip a zip file containing 26 other scores

A Russan gentleman (Russel Alikberov) has written a couple programs which can read a PT MUSIC score files and generate audio. Both are located in his code repository.

Other
Program Brief description Docs Screen Contributor
io_printer_sw.zip ProcessorTechnology
Sol Printer I/O Software P/N 727056, Rev. A
tape contents  

PROTEUS Cassette Software (link)

PROTEUS was a user's group for Sol computers and published a newsletter for a number of years. They also solicited contributions of programs, which they would periodically bundle up and sell on cassette tape. Here are some of those collections. Below the zip file contains the binary .ENT version of each of the programs, an ASCII version of text programs, and a Solace Virtual Tape (.svt) tape image. You can also read a summary of all the PROTEUS bundles.

PROTEUS Cassette Collections
Collection ZIP file Contents Description
PROTEUS C1 proteus_1.zip tape contents ECB Programs
PROTEUS C2 proteus_2.zip tape contents ECB Programs
PROTEUS C3 proteus_3.zip tape contents ECB Programs
PROTEUS C7 proteus_7.zip tape contents Assembly source and object
proteus_c7.pdf (courtesy Bob Stek)
PROTEUS C8 proteus_8.zip tape contents ECB Programs

If you have any of the other collections hiding in a shoebox in your basement and want to help preserve the bits, please contact me.

CP/M programs (link)

These programs use the CP/M system in some manner or other. There are no end of interesting CP/M programs that could be run on the Sol; my intention here is to capture those that have some Sol-specific feature (most likely, it has bypassed CP/M I/O for direct VDM manipulation).

CP/M Programs
Binary Source Docs
basic-5.ent basic-5.asm basic-5.txt
life8.ent life8.asm life8.txt
pong.ent pong.asm tennis, anyone?

If you want to grab any of these programs, follow the procedure as for standalone programs, then boot CP/M. Be careful not to run any transient programs. When you get the CP/M command prompt, use the SAVE command to save the transient area to a .COM file for later use. That's it.

Another way that would conceivably work would be to have the program in the form of an Intel HEX file. Boot CP/M and do a "PIP a:foo.hex=RDR:[H]" from CP/M. RDR: might not be the right device; use whatever your serial port is mapped to. The "[H]" option tells PIP that it is an Intel hex format, so PIP can do stronger error checking. After you get the HEX file, you can use the CP/M LOAD command to convert the .HEX file to a .COM file. Well, that's in theory. I found that when I transferred large programs, the Sol would have to save a block to disk on occasion and the serial line would drop characters. I don't (yet) know enough about the serial interface chip on the Sol to know if it supports hardware flow control, which would prevent this exact problem. If you can get this to work on your machine, or know why it doesn't work on mine, let me know.

Northstar software (link)

Northstar Disk Related Programs
Source Docs
nsboot.asm Disassembled and commented boot PROM program
dboot.asm Disassembled boot sector
cbios.asm Disassembled CP/M custom bios (updated 12-22-01)
cpmug.zip a collection of sources and binaries taken from the CPMUG (CP/M Users' Group) archives

The first program, nsboot.asm, is a disassembly of the 256B boot PROM located on the disk controller card. There is some relocation trickery involved in the process. Although most of it makes sense, there are a few things that I am unsure of in the program. If you know what is going on there, or even have just some guesses, let me know. The boot PROM reads sector 4 of track 0 off the disk and jumps to that code. The boot PROM knows nothing of CP/M -- in fact, this boot PROM will load a northstar OS just fine too. There is nothing in the boot prom that is Sol-specific either.

The second program, dboot.asm, is the disassembled and commented boot sector --- sector 4, track 0. This is 512B long and has some other black magic and vestigial code. If you have any insight into it, let me know. It loads sectors 5-9 from track 0 and sectors 0-9 of track 1 into memory, performs a relocation patch if required, and then jumps into the code.

The third program, cbios.asm, is a disassembled and commented CBIOS. It assembles and produces a binary exactly like that captured from memory after loading CP/M, but it hasn't actually been used to "close the loop" and build a new system. There is some cruft in there to ensure the output is identical to the reference image, when in reality many uninitialized data sections are don't-cares. Ideally when this is all done, it will be possible to customize things a bit, such as adding better disk error reporting.

cpmug.zip is a number of sources and binaries taken from the CP/M Users' Group archives. Although there are many very useful programs in the archive, this subset is just those that are relevant to the Sol or to machines that used the VDM display. Some of the sources had to be modified a bit to work on the Sol. These programs also appear on a virtual disk image that is distributed with the emulator, Solace.

Claudio Larini points out that line 115 of FOCAL.ASM in the cpmug.zip file is corrupted. If anybody happens to have a clean version, please let me know so I can repair it.

Other standalone software (link)

Here are some programs and oftentimes the source code for some Sol programs, gleaned from various places, mostly the CPMUG collections located here and there on the net. If anybody has authorship attributions for any of these programs, let me know.

Space Games (from Creative Computing)
Program Brief description Docs Screen Contributor
aster.ent asteroids; not to be confused with arcade game spacegames.pdf
notes
aster Bob Stek
lunar.ecb lunar lander lunar
strwr.ecb star wars strwr
romln.ecb romulan romln
space.zip a .zip file containing the above programs  
Strategy Games 2 (from Creative Computing)
Program Brief description Docs Screen Contributor
trap.ent person-against-person "growing snake" game strategygames2.pdf
notes
trap Bob Stek
wmpus.ecb Hunt the Wumpus wmpus
wmps2.ecb Hunt the Wumpus II wmps2
race.ecb race your car around one of three courses race
kngdm.ecb a version of Hamurabi  
strategy.zip a zip file containing all the above programs, including all of the BASIC programs as a .SVT file  
Various games written by Ray White
Program Brief description Screen Contributor
deathmaze_instr.ent instructions for the deathmaze game deathmaze_instr Ray White
deathmaze_play.ent dungeons & dragons game deathmaze_play
feudal.ent run a simulated kingdom (hammurabi-like) feudal
gobble.ent race the clock to pick up as many pieces as you can gobble
pacman.ent pacman "clone" pacman
reversi.ent play reversi against the computer reversi
robot_instr.ent instructions for the robot game robot_instr
robot_play.ent write robot programs then pit them against each other robot_play
skullcave.ent adventure game skullcave
stomp.ent try to swat the flies stomp
tic_tac_toe.ent play tic-tac-toe against the computer tic_tac_toe
raywhite.zip a zip file containing all of the above programs  
Standalone software of various origins
Program Brief description Docs Screen Contributor
atc.ent P.T. air traffic controller game
(Creative Computing Software)
atc.pdf
notes
atc Paul Schaper
beastie.ent
beastie.asm
random walk (non-interactive) notes beastie  
chase.ent
chase.asm
evade robots before they grab you notes chase  
chkr2.ent checkers   chkr2 Bob Stek
(wanted) dynamic debugging system
the .ent binary which was here was not the full debugger; please contact me if you have a valid copy
dds.pdf
dds_review.txt
  Bob Stek
Emmanuel Roche
deflect.ent
deflect.asm
reaction type game notes deflect  
galaxy.ent
galaxy.asm
logic game from Access Vol 1, #4 notes galaxy  
memest.zip Memory tests written for a CDC 64KB RAM card for use in a Sol notes Phil Lord
microchess.ent minefield game; payware notes microchess Don Senzig, Jr.
minefield.ent minefield game; payware notes minefield Paul Schaper
modpg.ent patch; converts cassette PT BASIC into CP/M BASIC     Bob Stek
msbasic.ent Microsoft BASIC   msbasic Bob Stek
pencl.ent electric pencil word processor pencil.pdf pencl Bob Stek
piranha.ent
piranha.asm
use the keypad to evade swarming piranhas
(proteus7.zip has a different binary, same game)
notes piranha  
raiders.ent
raiders.zip
Space Invaders clone, by Steve Maguire. The source code is worth looking at -- beautiful. notes raiders Steve Maguire
robot.ent
robot.asm
not much of a game, barely interesting notes robot  
target.ent
target.asm
really simple game (not the famous target) notes target  
tinyc.zip Metron TinyC system tape contents
terse document
   
tinytrek.ent
startrek.asc
tinytrek.zip
tinytrek.ent contains both the tiny basic interpreter and the tiny basic program for playing a tiny version of Star Trek. The game itself is startrek.asc. startrek.zip contains the previous two and more. notes tinytrek Joseph F. Gaffney
train.ent
train.asm
a screen saver, of sorts (newly restored)
Watch it go on this youtube video
notes train  
winzi.ent
winzi.asm
four tiny games in one, from Access Vol 1, #4 notes winzi  

Miscellaneous collections (link)

This section contains bundles of programs contributed by various people. Being lazy, I just bundled them up as ZIP files, although I did try and sort through and comment on what each file does.

Program Source Comments Brief Description Contributor
als_pgms.zip als_pgms.txt A collection of assembly sources in ALS format Ralph Hopkins
asm_pgms.zip asm_pgms.txt A collection of assembly sources in CP/M ASM format Ralph Hopkins
com-ent.zip com-ent_dir.txt
com-ent_notes.txt
A collection of mostly CP/M programs in binary ENT format Ralph Hopkins
sol_character_roms.zip The zip file contains ROM images for the Sol character generators, one image for each of the two possible versions. These aren't executables, but there really is no other suitable place on the website for them, so here they are. These could be useful for repairing an old machine by hacking a 2716 EPROM to replace a broken character generator. Philip Lord
lib_pgms.zip lib_pgms.txt A collection if assembly language library routines Ralph Hopkins
quebbeman.zip quebbeman.txt collection of source and binaries (ed: some redundant programs removed) Doug Quebbeman

Useful utilities (link)

I have written a few scripts that help me convert between different file formats. Perhaps the most useful are the following perl scripts. To use them, your machine needs to have a perl interpreter, of course. Perl has been ported to many environments, including MS Windows. I've only used these scripts on Windows, but they should work anywhere. ActiveState Perl is what you want. The files will need to be unzipped before use.

Martin Eberhard wrote a utility for loading Intel HEX files from CUTER or SOLOS. The first step is to load a tiny loader which then loads the HEX loader. The source and binary are located in this zip file.

Retreads for TRS-80 (link)

The display subsystem of the TRS-80 was quite similar to that of the Sol-20 computer and the VDM-1 S-100 card that came before them. A 1 KB block of RAM was mapped to a 64x16 text display. While the Sol-20 had no graphics capability, the TRS-80 mapped 64 high codes to 2x3 block graphics, enabling a coarse 128x48 bitmap to be intermixed with text.

This similarity was helpful in that a number of programs were ported from the Sol-20 to the TRS-80 without too much difficulty. This includes a couple of the most popular games on the Sol-20, TARGET and TREK80. The details of how Radio Shack came to sell these games is unknown to me, but it is probably not a coincidence that they started selling these games in June, 1979, shortly after Processor Technology closed its doors in May, 1979.

"Flying Saucers" (RS #26-1905) is an obvious port of TARGET, and "Invasion Force" (RS #26-1906) is an obvious port of TREK80. Interestingly, at the same time Small Systems Software was selling a game called AIR RAID that is also a simple port of TARGET.

Here is a compressed virtual disk image containing these three programs, suitable for running on myriad TRS-80 emulators.

You can even play the Radio Shack version of TARGET (Flying Saucers) via a javascript TRS-80 emulator, assuming a relatively modern web browser, here or here.

Here is the Radio Shack description of Flying Saucers (aka TARGET):

The problem: years of launching spy satellites have filled the sky so much that plane travel is limited to Wednesdays -- every other Wednesday, in fact.

The solution: your reflexes, marksmanship, and a big cannon. Shoot as many "spy saucers" out of the sky as you can, in a limited time and as accurately as possible. At the bottom center of the screen is the cannon, which you can angle in five different positions. Some saucers are worth more than others, and on rare occasion you get a shot at one which will destroy all the others if you hit it. Go light on the trigger: missiles are expensive, which means you lose points for misses, not to mention saucers which get away.

Here is the Radio Shack description of Invasion Force (aka TREK80):

Protect the galaxy against the hated and feared Jovians. You are in command of the USS Hephaestus in this space action game. You will have to manage your energy resources carefully so that you don't run out and get stranded in space. Keep close watch for any available space stations, while managing energy levels and weapons, and responding to Jovian attacks.

This game requires quick decisions on your part, as all action is in real-time. While the clock on your screen is running, energy will be consumed and Jovian ships in your sector of space will change position.

There are 10 levels of difficulty, which also changes the speed of the Jovians' attack.