home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
mbug
/
mbug022.arc
/
MCHASE.DOC
< prev
next >
Wrap
Text File
|
1979-12-31
|
7KB
|
259 lines
MAZE CHASE
(C) 1985 by Tom P Jansing
INTRODUCTION
MAZE CHASE is an action game designed for any character-mode
ASCII terminal that has an addressable cursor and a 24x80 or
larger format. No special graphic capabilities are needed.
Complete instructions for customization are provided in this
document. This version requires the CP/M-80 operating system and
about 24k of memory. It is written in Small C and may eventually
appear on other operating systems.
Legal stuff: The compiled code (or any modified versions) of
MAZE CHASE for CP/M-80 may be freely distributed subject to the
following two restrictions:
- It shall not be offered for sale without my prior written
consent. Giving it away is OK, however.
- The program shall not be distributed without this
documentation file and the on-line help file, both in
unmodified form.
INSTALLATION
MAZE CHASE comes distributed as 3 files, as follows:
MCHASE.COM - The game itself.
MCHASE.HLP - The on-line instructions. This file explains
the game play in detail, and should be on the
currently logged disk.
MCHASE.DOC - You're reading it.
(MCHASE.DAT) - This file will contain the game's high scores
for posterity. This file is NOT included, as
it'll simply be created if MAZE CHASE cannot
find one by this name. To reset the scores
to zero, simply erase this file.
PATCHING
To accommodate almost any terminal type, MAZE CHASE was designed
to allow easy patching of the terminal functions it uses. The
distributed version is configured for the common Lear Siegler
ADM-3A codes, so owners of Kaypros, Osbornes, etc. should have
little need to patch this program. For the rest of you, here's
what's involved:
CURSOR POSITIONING STRING
This is located at 017Fh. The first byte will be the length of
the cursor positioning string, and should be followed immediately
by the string itself. The positions where the X and Y values
will be inserted can contain anything for now. (X is the column
number, starting with 0 for the left edge, and Y is the row
number, starting with 0 for the top row). The current settings
are:
Address Value Description
(hex)
017F 04 Length of the following:
0180 27 ESC (1)
0181 61 = (2)
0182 00 Y+offset goes here, as defined below. (3)
0183 00 X+offset, ditto. (4)
0184 00 (extra)
...
0189 00 End of patch string.
Y AND X POSITIONS IN THE SEQUENCE
These two bytes tell the program where to insert the Y and X
values in the cursor positioning string.
019A 03 Y position is 3rd in sequence.
019B 04 X position is 4th in sequence.
Y AND X OFFSETS
Many terminals require a constant value to be added to the Y and
X screen addresses. The following values will be added before
insertion into the cursor positioning string:
01AC 20 Y offset, in hexadecimal (=32 decimal)
01AD 20 X offset, " " "
CLEAR SCREEN STRING
This will be a byte containing the length of the string, followed
by the string itself. If your terminal does not have a clear-
screen function, you should set the length byte to 0, and code
your own subroutine to, possibly, print 48 linefeeds.
01B8 01 Length of one.
01B9 26 CTRL-Z (1)
01BA 00 Extras
01BB 00 ..
01BC 00 ..
CURSOR-ON AND CURSOR-OFF STRINGS (Optional)
If your terminal allows the cursor to be turned on or off, patch
these strings; otherwise leave the length bytes as 0. For a
Kaypro, just set the length bytes to 3, as the codes are already
in place.
CURSOR ON:
01CC 00 Length (0 means currently disabled)
01CD 27 ESC For Kaypro
01CE 42 'B'
01CF 34 '4'
01D0 00 Extra
CURSOR OFF:
01E0 00 Length (0 means currently disabled)
01E1 27 ESC
01E2 43 'C'
01E3 34 '4'
01E4 00 Extra
STRINGS TO INITIALIZE AND DE-INITIALIZE TERMINAL
The initialize string will be sent to your terminal before any
other I/O is done. Likewise, the de-initialize string will be
the last thing sent when the program terminates. You probably
won't need this, especially since there's a separate (and
preferred) function for controlling the cursor.
INITIALIZE:
01F5 00 Length (0 means currently disabled)
01F6 00 Up to ten bytes can go here.
...
01FF 00
DE-INITIALIZE:
0212 00 Length (0 means currently disabled)
0213 00 Up to 10 bytes again.
...
021C 00
NOISE
If you don't like the sound of your terminal's bell, change the
following byte to 0. This can also be toggled on/off from the
game's title page by pressing CTRL-B.
022F 07 "Bell" character.
GAME SPEED
This is the initial speed of the game (which can still be changed
on the fly). This must be in the range of 1 to 9.
0237 01 Initial speed of 1.
CPU SPEED
This should be set to match your CPU's clock speed, in MHz (use
the nearest whole number).
0245 04 4 Mhz.
MAZE WALL CHARACTER
This is the character used to draw the walls of the maze. If
your terminal can display a solid-block character, you may prefer
to use that instead.
024C 23 23 hex is the character '#'.
EXTRA-LIFE THRESHOLD
Every (this many * 100) points, you get another "p".
0259 64 = 100 decimal = 10000 points.
NUMBER OF LIVES
This is the number of lives you start with every game.
0265 04 Four to start. (pppp)
GENERAL PURPOSE PATCH AREA
If you can't adapt MAZE CHASE to your terminal with the above
patches, you may have to rewrite some of the I/O subroutines (see
below). An area of memory has been set aside for this purpose:
026E Start of patch area.
...
02A6 Last usable byte.
If this is not enough, then you can use all the memory you need
above 63A0. This'll make your .COM file somewhat larger, though.
I/O SUBROUTINE ENTRY POINTS
If you need to change any of the following routines (perhaps to
support memory-mapped video), just patch a JMP instruction at the
address given, and use the patch area mentioned above to hold the
custom code.
06A1 Cursor positioning routine.
The parameters are kept on the stack. To get the
X address into register A, go
LXI H,6
DAD SP
MOV A,M
To get the Y address, use LXI H,4 instead.
0896 Clear screen routine.
089F Turn the cursor on.
08A8 Turn the cursor off.
08B1 Send the initialize string (first thing).
08BA Send the de-initialize string (last thing).
FEEDBACK
I welcome your criticisms, suggestions, etc. about this program.
I can be reached on most Edmonton-area CP/M bulletin boards, or
by mail at the following address:
Tom P Jansing
86 Mission Avenue
St. Albert, Alberta
CANADA
T8N 1H8
Enjoy!