SOL computer games

A lot of computer games for CP/M machines especially written in BASIC are available (e.g. here).

On the Internet I found also games written in assembler for an older computer (SOL-20, produced between 1977 and 1979 by the Processor Technology Corporation). (A very good link referring to this machine is A Sol-20 Web Page). The programs do not base upon CP/M but are easily to adapt.

More games and other tools for the SOL will be found here. By the way, all games are written in Intel 8080 mnemonics. For conversion into Z80 code use the utility XIZ.COM. (Here with the counterpart XZI.COM as XIZI-3.LBR)

SOL Computer

This machine differs from the JOYCE insofar that the video memory resides in the normal memory area (TPA). This allows to display a character by writing it into memory directly. Reading from memory allows determining a character in the video memory.
The JOYCE handles the video memory in a different way. Thus I mapped the video memory of the SOL into the TPA memory of the JOYCE. Now it is possible determining any character simply reading it from memory. Unfortunately there is more work to do than writing it into same memory - in fact characters must also be displayed on screen on the right place. I wrote a simulator to analyze SOL programs.
Another special feature is that the SOL handles a unique character set but the JOYCE does not.

I tried to port the games on the JOYCE with a minimum of work. I proceeded as follows:

Look here for auxiliary files:
SOLVDM.LIB A definition file for SOL. Find hex values of SOL characters as well as the defintion of RST instructions here. Furthermore find here the instruction .request solcpm which links following routines automatically. This file should be included by the instruction include solvdm.lib into the game to be assembled.
SOLCPM.MAC A collection of utilities for
 
the SOL character definitiones Tables for the new characters as well as routines for changing the character matrices.
some SOL routines Routines for accessing the video memory.
some JOYCE routines Routines for video control such as cursor setting, screen erasure.
some CP/M based routines Routines for keyboard input as well as console output.
Look here for the adapted SOL source files which are tested succesfully on the JOYCE:

CHASE.MAC
This is a classic, fun little game. You are stuck in a room which has electrified walls and electrified obstacles filling the room. Making it worse, the room has a number of zombie robots that attempt to catch you. For every step you take, they take one step. The goal is to evade them without walking into any electrified obstacles while at the same time trying to lead them to walk into the obstacles.
PONG.MAC
Tennis - what else?
There are three modes available:
  1. Stand alone
  2. Warm up
  3. Against the machine
TARGET.MAC
The famous target game -- shoot down ASCII spaceships.
PIRANHA.MAC
A charming little game. Little asterisk piranhas swim around and if they run into you, you die. The longer you live, the higher your score. The fish have different behaviors: sometimes swarming, sometimes just swimming past.
If you hit a key twice, it goes that way quickly.
DEFLECT.MAC
Deflect is another VDM game. This one involves more coordination than piranha, but is more simple-minded in its plot.
ROBOT.MAC
ROBOT let your VDM moonman bump around the boundaries of the screen. It is not a real game.
GALAXY.MAC
This game is a logic puzzle where you try to "shoot stars" (flip bits) to change the starting pattern to the goal pattern.
The above listed games will be found on the SOL-20 Web Page as 8080 sources (type .ASM) while the following files are binary files (type .ENT1). The files are not „real" binary files but ASCII coded such as the DUMP listing. E.g.:
ENTER 0000
0000: 00 00 00 00 C3 5A 06 19 D2 20 45 20 D6 20 45 20
    ....
    ....
0DD0: 00 00/
The item used for synchronisation ENTER may be also EN . The start address follows may be composed of one up to four hex digits.
To convert them into a binary file I wrote a conversion tool, here as (MALLARD-)BASIC- and here as (TURBO-)PASCAL version.
Loading files by web download the end of line characters may look Unix stylish as Line Feed (0X0A) rather than Carriage Return/Line Feed (0X0D 0X0A) as used by CP/M. Missing End of File (0X1A) characters are also possible. Thus the PASCAL program could hang. Find here a corrected (TURBO-)PASCAL version.
Some addresses in the disassembled sources are referring to the SOL video memory. This memory consists of 16 lines with 64 colums in each line. It starts at address 0xCC00 and ends at 0xCFFF. For calculating the coordinates (line and column) based upon the video address I wrote another tool, here as (MALLARD-)BASIC- and here as (TURBO-)PASCAL version.
SREVERSI.MAC
(Disassembled original)
The players alternatingly set stones on the board. Any stones of the opponent that get caught between two of your stones by a newly set stone are flipped, i.e., they change color. The game ends when either the board is full, or neither player can make a move.
1. In 2006 Bill Sudbrink wrote an comp.os.cpm-article referring .ENT files. He described a program loading an .ENT-file for execution into memory.
In the same year Emmanuel Roche ("French Luser") published a "ENT-to-COM File Converter" written in BASIC (here corrected) also in comp.os.cpm.