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:
- Processor Tech software
- PROTEUS Cassette Software
- CP/M programs
- Northstar disk subsystem
- other standalone programs
- miscellaneous collections
- utility programs
- retreads for TRS-80
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.
- Grab the *.ent file you are interested from one of the tables below.
- Connect a serial cable from your PC to your Sol
- 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.
- Test that the link works. Use the TERM command to do so.
- 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.
- On the PC, transfer the *.ent file over the serial link as a straight ASCII file.
- To run the program, type "EX xxxx", where xxxx is the load address, and off she goes!
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 ... ?
Most of this software comes courtesy of Paul Schaper and Bob Stek, who were kind enough to archive this information for posterity.
|als8.ent||P.T. 8080 program development system||als8.pdf
|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
|chess.ent||P.T. 8080 Chess Cassette; P/N 727152||chess.pdf
|dbg8.ent||P.T. DEBUG, Advanced 8080 Debugger; P/N 727132
(different versions for different sized memory systems)
|debug.zip||a zip file containing all the above files|
|edit.ent||P.T. EDIT, Advanced 8080 Editor; P/N 727142||edit-img.pdf
|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
|focal.ent||P.T. 8080 Cassette Focal(tm); P/N 727027||focal.pdf
|three focal programs:
|pilot.ent||P.T. 8080 PILOT 2.2 (MOD 000)||pilot-img.pdf||pilot||Ralph Hopkins|
|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|
|life.ent||conway's life||gamepac1.pdf||life||Bob Stek
|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: 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|
|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.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.zip||a zip file containing all the above files|
|sol-music.zip||a zip file containing 26 other scores|
Sol Printer I/O Software P/N 727056, Rev. A
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 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.
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).
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.
|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.
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.
|aster.ent||asteroids; not to be confused with arcade game||spacegames.pdf
|space.zip||a .zip file containing the above programs|
|trap.ent||person-against-person "growing snake" game||strategygames2.pdf
|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|
|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|
|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|
|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|
|atc.ent||P.T. air traffic controller game
(Creative Computing Software)
|random walk (non-interactive)||notes||beastie|
|evade robots before they grab you||notes||chase|
|(wanted)||dynamic debugging system
the .ent binary which was here was not the full debugger; please contact me if you have a valid copy
|reaction type game||notes||deflect|
|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|
|use the keypad to evade swarming piranhas
(proteus7.zip has a different binary, same game)
|Space Invaders clone, by Steve Maguire. The source code is worth looking at -- beautiful.||notes||raiders||Steve Maguire|
|not much of a game, barely interesting||notes||robot|
|really simple game (not the famous target)||notes||target|
|tinyc.zip||Metron TinyC system||tape contents
|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|
|a screen saver, of sorts (newly restored)
Watch it go on this youtube video
|four tiny games in one, from Access Vol 1, #4||notes||winzi|
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|
|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|
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.
accepts a .ENT file on standard in, ignores addresses, converts each data byte to a character on output. It is useful for converting source files to something an editor can chew on.
accepts a .ENT file on standard in and echos it on standard out. Each line of hex input, though, has a corresponding ascii decoding on the right side of the output. Only printable characters are output.
accepts a .ENT file on standard in, decodes the byte stream, and produces a BASIC/5 listing on output. You can tell that the binary is for BASIC/5 because the starting address is 1AD9.
accepts a .ENT file on standard in, decodes the byte stream, and produces an Extended BASIC listing on output. You can tell that the binary is for Extended BASIC because the starting address is 3C20. Besides having more keywords than BASIC/5, the token values are different for the set of keywords that overlap.
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.
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.
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.