The significant differences between CP/M interpreters (say, the Kaypro
version vs. the Osborne version) consisted largely in a few patch points
toward the front of the .COM file for screen control. Other than that,
they're interchangeable (the Kaypro .COM file should run on the Osborne,
for example, or vice versa). Specifically, a Kaypro .COM file is easily
patched to 52 columns to accomadate an Osborne screen.
The following is a little information I put together about ten years ago
for patching the .COM file (note: the recommended hex values given are
for ADM3A terminals).
Also note that the later Infocom games (generally, those whose .DAT files
are >128kb) will not run under CP/M. The newer format (what Infocom
called "Plus") allowed for larger, more complex games (.DAT files up to
256kb), but CP/M with it's memory constraints couldn't handle them. Keep
in mind that several of the "Plus" format games -- e.g., Leather
Goddesses of Phobos -- were also released in "classic" format, and that
most of the "classic" format games (Zork, Enchanter, etc.) were
re-released in "Plus" format, with additions such as on-line hints. Only
the classic versions of Infocom games can be played under CP/M.
VIDEO CONTROL PATCH POINTS FOR INFOCOM'S GAMES:
Use any CP/M patch utility to modify the .COM file - Zap, Superzap, or
Patch all work equally well.
Starting at location 05h is room for up to 8 characters; this is where
you put the name of the .DAT file of the game you wish to run. For
example, if I insert the string WISHBRIN, then run the .COM file, it
loads Wishbringer; if I change the string to CUTTHROA and run the .COM
file, it runs Cutthroat.
(This is particularly handy under the Z-System. I've set up a series of
aliases which load a generic INFOCOM.COM into memory, POKE in the proper
string for whichever game I want to play, and then run it. Instead of 23
different .COM files on disk, then, I only need one.)
Near the beginning of the CP/M version of each Infocom COM file is room
for four video control code strings, beginning at addresses 0110h, 0131h,
0152h and 0173h with room for up to 20h bytes per string. The first byte
of each string holds the length of the string, followed by the string
itself. All bytes after the indicated end of string are ignored.
0110h : Screen initialization. Used at game startup to prepare screen,
position cursor for first line of output. Suggest including clear screen
code and code for positioning cursor at beginning of last line of screen.
05 1A 1B 3D 37 20
0131H : Screen uninitialization. Used when exiting the game to
de-initialize the screen. Probably not needed unless you want to clear
the screen on exit. 00
0152h : Status line. Used just before printing status line. Suggest
including code for nondestructive home cursor, inverse video. 05 0F 1B 3D
20 20
0173h : Prompt line string. Used just before printing '>' prompt. Suggest
turning off status line video attributes (e.g. inverse video),
positioning cursor at beginning of last line of screen. 05 0E 1B 3D 37
20.
0103h : Screen width in hex. Must be 0C to 85h. Warning: Anything less
than 20h causes funny things to happen to the output. 4F
Hope some of this helps!
-Calvin
cric...@itis.com