home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
300 Favorite Games
/
300GAMES.iso
/
316
/
atrobots.doc
< prev
next >
Wrap
Text File
|
1992-12-30
|
72KB
|
1,680 lines
____________________
/ \
/ Advanced T-Robots v1.1 \
/ -------------- \
----------===========< By: Ed T. Toton III >===========----------
\ (c) copyright 1992 /
\ All rights reserved. /
\______________________/
Special thanks to Jeremy Kusnetz
& Kenneth B. Foreman
& Erik McClenney
Note- I wish to apologize in advance for the spelling
errors and other such nonsense. I also would like
to apologize for the arcane nature of the text,
as writing technical documentation is not one
of my stronger points.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 0
--- Table of Contents ---
Things you should have............................2
Legal Stuff.......................................2
Introduction to AT-robots.........................2
Technical information.............................3
Running AT-Robots.................................3
Acronyms..........................................5
Update/History....................................5
Basics of AT-Robots...............................6
Compiler..........................................7
The programming language..........................7
Registers.........................................9
Command lists and descriptions....................9
Ports............................................12
Interrupts.......................................14
Vars, Memory.....................................15
Peicing it all together..........................15
Errors...........................................18
Programming the robots...........................20
Mnemonics and Constants..........................22
Staging a competition............................23
Trouble-shooting and Speed-control...............23
More legal stuff.................................24
Final Notes......................................25
Other Software...................................25
[ ED. Note- It is HIGHLY suggested that you make a print-out of this file! ]
A. T-Robots = (c) 1992 = Ed T. Toton III pg 1
-----------------------------------------------------------------------------
THINGS YOU SHOULD HAVE
You need a text editor! Writing programs will be very difficult without
one. DOS 5.0 has a nice editor (that's what I'm using to write this), or you
can use a programming environment (like Turbo Pascal or C or Quick-Basic),
or you can even use some word processors. If you use basic or or something
like Word Perfect, you will need to remember to save it as "dos text" or
"ascii format".
Here are the files you should have:
ATROBOTS.EXE - The program.
ATROBOTS.DOC - This file.
PRINTDOC.BAT - Batch file to print out this documentation.
COMMENTS.TXT - Comments written by other AT-robots users.
README.1ST - Important notices. You should have read it by now.
DEMO.BAT - The demonstration run. Run this for a demo.
DEMO.DAT - The demonstration config file.
SAMPLE.ATR \
RANDMAN.ATR >- These are some sample robots.
SNIPER.ATR /
????????.ATR - Other robots written for use with this program.
ALL AT-Robots robots MUST have the .ATR extension.
-----------------------------------------------------------------------------
TRADEMARKS & COPYRIGHTS:
AT-Robots (c) 1992 Ed T. Toton III
T-Robots (c) 1991, 1992 Ed T. Toton III
P-Robots (c) 1988 David Malmberg
C-Robots (c) 1985 Tom Poindexter
Turbo Pascal is a registered trademark of Borland International.
-----------------------------------------------------------------------------
AT-ROBOTS: "Ay-Tee Robots"
AT-Robots is designed to allow people to design and program robots to
fight one another. Competitions between people is what it's all about!!
The robots are programmed in a simple language which will be explained
shortly.
AT-Robots stands for "Advanced T-Robots". T-Robots was the predecessor
program to this. It was inspired by P-Robots (written by David Malmberg),
which was in turn inspired by C-robots (written by Tom Poindexter). T-Robots
and AT-Robots are designed with the idea of programming robots, without going
to the lengths of learning to program in high-level languages, but to still
allow fairly simple program design. In the case of AT-Robots, the language
has some similarities to assembly. Basically, T-Robots allowed you to use
T-Robot-Basic to program the robots, and now in AT-Robots you use T-Robot
assembly. Instead of having simple commands for complex tasks, you have
simple commands to do simple tasks. You will have to design subroutines to
access the specific devices/ports/memory areas of the robot specifically in
your program. The language has a small amount of available commands, thus
making it easy to learn, while offering experienced programmers an interesting
A. T-Robots = (c) 1992 = Ed T. Toton III pg 2
challenge. Though it is not a real programming language of sorts, it can
still teach the basic concepts of programming and logical thinking.
The system may still have bugs or discrepencies. Please contact me
if you spot one!! Also, please let me know if I have left anything out of
the documentation that you think I should include. And in addition to that,
please inform me if you have any ideas of new commands to add to the
programming language.
-----------------------------------------------------------------------------
TECHNICAL INFO: (most graphic cards supported!)
AT-Robots requires a VGA (graphic driver #9 with the -M setting and
mode #2 with the -L setting) for some specific features, but otherwise
supports most graphic cards.
AT-Robots is written in Turbo Pascal 6.0 and Turbo Assembler. It does
not multi-task, it simulates it.
AT-Robots should be used on 286's and better. It may run too slowly on
slower computers.
AT-Robots consists of over 2500 lines of source code.
-----------------------------------------------------------------------------
RUNNING AT-ROBOTS
To run AT-robots, you must have at least one robot program ready, and you
must make a configuration file to use it. To run AT-Robots, you type
"atrobots", then a space, then the name of the config file.
ex: ATROBOTS MYFILE.DAT
The config file tells AT-Robots what settings to use, and which robots to run.
Inside the file you put ONE item per line. Settings start with a dash (-),
and sometimes have a parameter number. For the robots you put the name of the
robot file, but without the ATR extension. The settings will be explained
shortly. Here is an example:
-d0
-gn
-s100
myrobot
robot1
robot1
This file would tell AT-robots to have no delay (thus run at the maximum
speed), with NO graphics (so as to get a quick result), and to update the
output every 100 cycles (again to increase speed. This setting usually
defaults to 10). It then loads MYROBOT.ATR into robot #1, ROBOT1.ATR into
robot #2, and ROBOT1.ATR into robot #3. There can be up to 6 robots,
and in this case only 3 are used.
On the following page you will find the settings and graphic modes. There
are some features that will be unavailable to those not using mode #9 (VGA).
These are:
1. Fancy status bars that are easy to read.
2. On-screen display of error-codes generated
by robots.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 3
Note that all those things can only be used if the -A option is used,
and you are using mode 9. If you have an 8514 and want these, you'll need
to put a -M9 in the config file.
The settings are as follows:
-D## Sets the delay in hundredths of a second. Should never be over 20
(unless in combination with -N#).
-A If graphics are on, this will allow the status bars to be displayed.
-GN Turns the graphics OFF.
-S## Number of cycles between output updates. (increase for greater speed)
only works with the graphics turned off.
-N## Cycles between each delay. Usually 1, but can be increased when using
it with -D1 to speed things up (to make it faster than -D1 by itself).
-P## Increases the number of program commands each robot executes each
cycle. Can be useful when using complicated programs. Don't set too
high though, it can mess things up.
-R## Tells AT-robots to Run a number of battles as you specify.
-TN Turns off the title screen. Once you've seen it a few times, you'll
get tired of it and this is here for that purpose.
-Q Sets AT-Robots to run in Quiet mode.
-C Tell AT-Robots to save compiled versions of the robots in binary
files. As of yet there is no purpose for it.
-M# Force a specific graphic driver (usually automatic). Drivers are listed
later. Modes are set automatically ONLY if driver is automatic.
-L# Graphics mode setting.
Here are the default settings:
-D 1
-A off, you must use -A if you want status bars on.
-GN on, you must use -GN if you want the graphics off.
-TN on, you must use -TN if you want the the title screen off.
-S 10
-N 1
-P 9
-R 1
-Q on, you must use -Q if you want the sound off.
-M 0 (auto-detect)
-L 0 (auto-detect if -M is 0, otherwise it's the mode number)
Graphic drivers:
0 : Autodetect (default) 6 : IBM 8514 SVGA
1 : CGA 7 : Hercules
2 : MCGA 8 : AT&T400
3 : EGA 9 : VGA *
4 : EGA64 10 : PC3270
5 : EGA mono
* Vga is required for a few special features (with -L2).
(for a list of modes, see the file called MODES.DOC)
There are several keyboard commands you must know before you start. One is
the quit key, which is 'Q'. Another command, which only works if you are
running multiple matches, is the 'N' key, which aborts the present match
and starts the next. The final one is the 'P' key, it pauses the simulation
until you press another key.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 4
If you want to run the included demo, drop to dos and run the batch file
called DEMO. That's right, in dos type DEMO and hit enter. It will run
the demo for you.
When running multiple matches you should still baby-sit the program because
somtimes robots will end up in opposite corners, or whatever, and will be
unable to hit each other, in which case you need to press 'N' to skip to the
next round.
[ Special Note- In your robot programs you may put a setting ]
[ which will over-ride the -P setting in the config file. It ]
[ will only take effect if the new setting is smaller than the ]
[ -P in the config. Here is the usage: #SPD <speed> ]
[ Example: ]
[ #SPD 5 ]
[ ]
[ In this example, it would let the robot do no more than 5 ]
[ program cycles at a time, as if the -P setting were 5. Useful ]
[ to keep robots from over-heating, and moving before turning ]
[ all the way, etc... ]
-----------------------------------------------------------------------------
ACRONYMS:
Here in ATR (see, there's one already) we use several acronyms that you
may or may not already be familiar with. At anyrate, here they are:
Acronym: Meaning:
ATR Advanced T-Robots.
ATRA Advanced T-Robots Assembly.
BIOS Basic Input/Output System
ERR Error
GSB Gosub (a call to a subroutine)
I/O Input/Output
INT Interrupt
JMP Jump (like a GOTO in basic)
OP Op-Code (numeric codes that commands get turned into)
RAM Random-Access Memory.
REG Register
ROM Read-Only Memory.
ROS Robot Operating System.
SPD Speed
VAR Variable
-----------------------------------------------------------------------------
UPDATES & HISTORY:
For those of you already familiar with T-Robots, you will have a fairly
easy time adjusting to AT-Robots. The arena is the same, the robots have been
slightly modified, but are otherwise the same as well. The most significant
changes are the programming language, and some improvements to the workings
of the main program.
Once a maintenance crewman got killed by an accident involving the missile
launchers, they were instantly banned from the arena. However, to replace
the missile launchers on the robots, they started installing swivel mounts to
A. T-Robots = (c) 1992 = Ed T. Toton III pg 5
the lasers. This gives the laser the ability to swivel up to 8 degrees in
either direction without moving the turret.
Since then, the robot's main processors have gone under major revision
also. The now outdated T10 and XT20 processors (used on T-Robots) have been
replaced with the new 16-bit AT version (The AT10).
For those of you who are interested, the names for those processors were
quite easy to decide upon. The T10 is for T-Robots v1.0, hence "T10". The
XT20 is for T-Robots v2.0, and is the eXtended processor, hence "XT20". The
AT10 is the Advanced T-Robots v1.0 processor, and thus it is called the
"AT10". The second reason for these names is that it pokes fun at the chips
for the IBM compatable computers. The XT is the outdated series, while the AT
series of processors are current.
-----------------------------------------------------------------------------
BASICS:
The arena is 1 kilometer wide and 1 kilometer long. The coordinate system is
set up such that (0,0) is at the upper-left corner and (1000,1000) is at the
lower-right.
The screen is set up as follows:
0,0 ________________________________________ 1000,0
| | |
| | |
| |----------|
| | status |
| | areas |
| |----------| (side of
| Arena | | screen)
| | |
| |----------|
| | |
| | |
| |----------|
| | |
| | |
| | |
0,1000 |________________________________________| 1000,1000|
Navigation is done in a 360 degree circle. Here are the directions for
each course:
0 (360)
|
315 | 45
\ | /
270 ----- + ----- 90
/ | \
225 | 135
|
180
The Robots are all equipped with a scanner, armor, and a laser.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 6
Robots don't stop, start, or turn on a dime. When you tell the robot to
move at a certain speed, it will accelerate until it reaches that speed or
it collides with something. Once it has reached that speed it will remain
there until you change it or it collides with something.
When you instruct the robot to turn, it will rotate until it faces the
new direction, or you tell it to do otherwise. The robot will always rotate
in the direction that is shortest to face the target heading. if you tell
it to turn 270 degrees to the right, it will turn 90 to the left (it's
shorter, and is still the same heading). Also note that since it takes time
to start/stop/turn, that the program may have executed many commands before
the thing actually gets to it's new speed or heading.
Each robot has two status bars (if you used the -A option). The upper one,
which is in the same color as the robot if you have a color display, is
the robot's armor. The one below it is the robot's heat scale.
-----------------------------------------------------------------------------
THE COMPILER:
AT-Robots is equipped with a compiler. It reads in your robot programs and
turns them into numeric data that the robots follow as a set of instructions.
These numeric codes are called OP-CODES. If you use the -C option in the
config file you can see these op-codes saved in binary format.
The compiler writes the programs to the screen as it compiles them. Thus,
if there's an error, you can see where it was in your program.
When a program is compiled, EACH word is directly converted into a
pre-defined op-code, no matter where it is. As explained in more detail
later, you can interchange variables, registers, numbers, and commands,
and still get a clean compile, AND a functional program.
-----------------------------------------------------------------------------
THE PROGRAMMING LANGUAGE IN GENERAL:
The language is used as follows:
The programming language consists of four basic types of statements.
1) Remarks. - These are not compiled into your program, they are simply
notes that you can read when viewing programs.
2) Var Defs - Variable definitions. This is how you define variable names.
Read on..
3) Labels. - These are the target locations for JUMP and GOSUB commands.
They are not executed and do not use your robots time.
4) Commands.- These are the functions of your robot. They command the robot
to perform specified activities.
5) Variables- Variables are a major programming thingie. They may have values
from -9999 to 9999. You may define up to 80 of them, and they
may be no longer than 16 characters long. They must contain
only letters and underscores. NO numbers or symbol-characters!
A. T-Robots = (c) 1992 = Ed T. Toton III pg 7
Remarks:
Syntax:
; <statement>
The semi-colon MUST be the FIRST character on the line (other than
spaces), and whatever you put on the line with it will be ignored by the
compiler.
OP-CODE: none
Labels:
Syntax:
:####
The colon MUST be the FIRST character on the line (except for spacs).
RIGHT after it, without any spaces in-between, you put a number anywhere
from 1 to 8999. That number is the label. Do not use the same number
twice within the same program.
NOTE- labels 9000 or higher are INVALID.
OP-CODE: 1000 + <label number>
Commands:
Syntax:
Command [parameters]
The command may or may not have parameters, but if there are, you
seperate them from the command with spaces. Only one command may be
put on each line. Also note that you must not use any punctuation unless
it is a remark, or a label.
OP-CODE: defined on chart below.
Variable Definitions:
Syntax:
#def <variable name>
The definition MUST come BEFORE the first time the variable is used
in the program. Don't worry about putting the definitions inside loops,
or after the program starts, these can be put just about anywhere, and
are not compiled into the program. They are used to figure out how to
compile the program, but do not get turned into executable code.
OP-CODE: none
Variables:
Once a variable has been declared, it can be used anywhere in the
program any way you like. The compiler is VERY flexible. All the things
you can get away with are described later, but remember, you can do just
about anything with these suckers..
OP-CODE: 10000 + <mem address>
A. T-Robots = (c) 1992 = Ed T. Toton III pg 8
------------------------------------------------------------------------------
REGISTERS:
The ROS (Robot Operating System) has a series of several memory locations
that are set aside for certain functions. They are called registers. They
are used for various things, mostly for interrupts and comparisons. The
following are their most common uses and their memory-locations and op-codes.
Register: Mem: Op: Function:
AX 100 10100 Interrupt-instruction
AY 101 10101 Reserved for your use.
AZ 102 10102 Interrupt returns
BX 103 10103 Interrupt instructions and returns
BY 104 10104 Interrupt returns
BZ 105 10105 Reserved for your use.
CX 106 10106 Interrupt-instruction (rarely)
CY 107 10107 Variable exchanges (XCHG command)
CZ 108 10108 Comparisons only.
CT 118 10118 Loop-Counts
FL 119 10119 Status flags (not yet functional)
------------------------------------------------------------------------------
COMMANDS:
These are the instructions that the robots use to do things. The Op-Codes
are what the robots actually use (this holds true for everything). These
code-words however are used in place of the numbers for understandability.
Note that the compiler turns them into the op-codes, and leaves numbers as
they are, and thus if you wish you may program your robots using the op-codes
instead of the command-names.
(The speeds listed are actually execution-time numbers. Those numbers
indicate how much of your robot's time each command uses. The amount
of time your robot gets total is determined by the -P setting in the
config file)
(Also note that below, if parameters are listed as VARs then they
MUST be variables or pointers. If they are VALs they can be anything).
OP: Spd: Name: Function & syntax:
1 1 set Syntax: SET <var1> <val1>
-Sets VAR1 equal to VAL1.
2 1 add Syntax: ADD <var1> <val1> <val2>
-Adds VAL1 and VAL2 and puts the result in VAR1.
3 1 sub Syntax: SUB <var1> <val1> <val2>
-Subtracts VAL2 from VAL1 and puts the result in VAR1.
4 3 mpy Syntax: MPY <var1> <val1> <val2>
-Multiplies VAL1 by VAL2 and puts the result in VAR1.
5 3 div Syntax: DIV <var1> <val1> <val2>
-Divides VAL1 by VAL2 and puts the integer result in VAR1
A. T-Robots = (c) 1992 = Ed T. Toton III pg 9
6 1 put Syntax: PUT <val1> <mem location>
-Sets the byte at the given location equal to VAL1.
NOTE- the location is not a pointer.
7 3/0 int Syntax: INT <num>
-Executes an interrupt. (interrupt number <num>)
(has speed of 3 usually, but if you re-define the
interrupt vector to run a subroutine, then it is
speed 0).
8 1 get Syntax: GET <var1> <mem location>
-Sets VAR1 equal to data at mem location.
9 1 loc Syntax: LOC <var1> <var2>
-Sets VAR1 equal to the address of the memory location
that VAR2 is stored in (not a pointer though).
10 1 cmp Syntax: CMP <val1> <val2>
-Compares VAL1 and VAL2 (by subtraction) and puts the
result in the CZ register.
Note- same as "SUB cz <val1> <val2>"
11 0 gsb Syntax: GSB <label>
-"GOSUB". Goes to label as defined. Returns to the GOSUB
call when a RET is encounterd. Same as GOSUB in basic.
12 0 ret Syntax: RET
-"RETURN". Returns after a gosub or a conditional jump
that was set to "gosub". Same as RETURN in basic.
13 0 jmp Syntax: JMP <label>
-"GOTO". Goes to label as specified. Does not return
with a RET. Same as GOTO in basic.
14 0 jls Syntax: JLS <label> [code]
-Like "jmp" but only actually does the jump if the CZ
register is negative (in a comparison with "CMP", the
cz register would be negative if the first value was
less than the other). If the CODE is present, AND it is
not zero, this command will act more like "GSB", and
thus GOSUB to the label.
15 0 jgr Syntax: JGR <label> [code]
-Like "jmp" but only actually does the jump if the CZ
register is positive (in a comparison with "CMP", the
cz register would be positive if the first value was
greater than the other). If the CODE is present, AND
it is not zero, this command will act more like "GSB",
and thus GOSUB to the label.
16 0 jeq Syntax: JEQ <label> [code]
-Like "jmp" but only actually does the jump if the CZ
register is zero (in a comparison with "CMP", the CZ
register would be zero if the first value was equal to
the other). If the CODE is present, AND it is not zero,
this command will act more like "GSB", and thus GOSUB
to the label.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 10
17 0 jne Syntax: JNE <label> [code]
-Like "jmp" but only actually does the jump if the CZ
register is not zero (in a comparison with "CMP", the
cz register wouldn't be zero if the first value was
not equal to the other). If the CODE is present, AND
it is not zero, this command will act more like "GSB",
and thus GOSUB to the label.
18 3? ipo Syntax: IPO <port num> <var1>
-Input to from port. This command takes a byte of input
from the given port and puts it into VAR1. Note that
the command will do nothing if the port is an input
port.
NOTE- Accessing certain ports can have a slow-down effect
19 3? opo Syntax: OPO <port num> <var1>
-Output to port. This command takes what's stored in
VAR1 and sends it to the given port. Note that the
command will do nothing if the port is an output port.
NOTE- Accessing certain ports can have a slow-down effect
20 ? del Syntax: DEL <val1>
-Delays for length of time defined by VAL1. Time is
in increments of program commands. Thus if you set it
to 5, then the robot will not execute commands for
the amount of time in which 5 commands could be executed.
21 1 mod Syntax: MOD <var1> <val1> <val2>
-MOD's VAL1 and VAL2 and puts the result in VAR1.
For an example, look below.
22 2 and Syntax: AND <var1> <val1> <val2>
-AND's VAL1 and VAL2 and puts the result in VAR1.
23 2 or Syntax: OR <var1> <val1> <val2>
-OR's VAL1 and VAL2 and puts the result in VAR1.
24 2 xor Syntax: XOR <var1> <val1> <val2>
-XOR's VAL1 and VAL2 and puts the result in VAR1.
25 2 not Syntax: NOT <var1> <val1>
-NOT's VAL1 and puts the result in VAR1.
26 3 xchg Syntax: XCHG <var1> <var2>
-Exchanges the values of VAR1 and VAR2.
NOTE- changes the CY register (it uses it
as a temporary storage facility).
ALSO NOTE- You can use the word SWAP instead of XCHG.
It may be easier to remember.
27 1 do Syntax: DO <val1>
-Sets the CT register (counter) to VAL1. When using loops
this has the effect of determining how many times to
execute that which is in the loop.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 11
28 1 loop Syntax: LOOP <label>
-This decrements the CT register and loops back to
<label> if the CT register is greater than 0 after
the decrement.
29 1 push Syntax: PUSH <val1>
-This takes VAL1 and puts it on the stack.
30 1 pop Syntax: POP <var1>
-Takes the last number put onto the stack, pops it
off the stack, and returns the value in VAR1.
AT-Robots has several mathematical instructions for your use. If you
already understand them, you can skip to the next section. For those who
don't know what MOD does, read on.
If you don't understand OR, XOR, AND, and NOT, don't worry about it. You
don't need these instructions, they were simply included just in case someone
needs them somewhere sometime.
When you divide two numbers, what you get is the integer part of the
result. Example:
DIV result 11 3
In this example, it would divide 11 by 3, which is 3.66666. Thus, the
variable "result" would now equal 3.
The MOD instruction returns the remainder in such a division operation.
since 11 divided by 3 is 3 with a remainder of 2, then the same example can
be applied below and have a result of 2.
MOD result 11 3
As stated, "result" would now equal 2.
-----------------------------------------------------------------------------
PORTS:
Each robot is equipped with various peripheral devices. Each one has one
or more I/O ports through which the robot's program accesses them. Each
port does either input OR output and not both. Some ports take more time to
access than others, and so a number will be given for slow ones indicating
just how much slower they are.
(The speeds listed below are actually the additional amount of time
used by the robot to access the port. It simply means that those
particular ports require different lengths of time to do their
jobs).
A. T-Robots = (c) 1992 = Ed T. Toton III pg 12
Port: Spd: Name: I/O: Function:
1 0 Spedometer I Returns present speed. (0-100)
2 0 Heat sensors I Returns present heat level (0-500)
3 0 Compass I Returns present heading (0-360)
4 0 Turret Sensor I Returns offset of turret
5 0 Turret Sensor I Returns absolute heading of turret.
6 0 Damage Sensor I Returns armor level remaining (0-100)
7 1 Scan enemies I Returns range to nearest enemy within
scan arc (points in direction of turret,
and has arc radius set by port 18) and
within max range set by port 20. Sets
Laser accuracy setting based upon present
settings. Returns a number greater than
1000 (maximum laser range) if no enemy
found (specifically, 5000).
8 0 Accuracy set I Returns accuracy setting that was
determined by last run of port 7.
9 0 Radar I Returns range to nearest target but is not
limited to the arc width setting.
10 0 Random GeneratIr Returns a random number from 0 to 9999.
11 0 Drive System O Sets throttle to given setting.
12 0 Turret O Offsets turret from present setting by
given angle. (cumulative)
13 0 Turret O Sets turret offset to given direction.
(0=forward, 180=back) (absolute).
14 0 Steering O Sets Heading relative to current direction.
15 1 Laser O Fires laser with given accuracy setting.
16 0 Sonar I Not installed.
17 0 Arc-width I Returns present scan-arc width.
18 0 Arc-width O Sets scan-arc width to given setting.
19 0 Range I Returns present max-range.
20 0 Range O Sets max-range to given setting.
21 0 Over-burn I Returns present overburn status
(0=off, 1=on).
22 0 Over-burn O Sets overburn status to given setting.
(0=off, non-0=on);
A. T-Robots = (c) 1992 = Ed T. Toton III pg 13
-----------------------------------------------------------------------------
BIOS INTERRUPTS: (BIOS= Basic Input/Output System)
In addition to I/O ports, the robot is equipped with some built-in
functions that can be used. These functions are called interrupts. When
and interrupt is generated, the computer makes a note on the stack (so it
knows where to return to), then it stops what it's doing and executes the
interrupt funtion. Afterwards, it checks the stack, and returns to what it
was doing. In your programs you can use the INT command to execute an
interrupt. When you call an interrupt, you will often need to set some of
the system registers before executing it, to tell it what to do.
Note that in the robot's RAM there are interrupt-vectors. If these are
set to 0, they execute the following. If you re-define an interrupt vector,
then the interrupt will doa GOSUB to the label you set the vector to, instead
of doing the following (as explained later).
Also note that there are 20 interrupts, but only the following have
pre-determined functions.
(The speeds listed below are the additional amount of time
used by the interrupt to do it's job).
Int: Spd: AX: BX: CX: Returns/Function:
1 0 - - - Reset's Robot.
2 0 - - - Destruct.
3 0 port Output - Accesses a port. If you are
sending data, set the BX
register. If receiving data,
the AZ register holds that
data.
4 0 port - - Returns status of port
(0=functional,
1=damaged,
2=destroyed).
(not yet installed)
5 0 - - - Returns location of your
robot. (BX=x, BY=y)
6 0 Int # label - Sets an interrupt vector as
noted in AX to the label as
specified in BX.
7 0 Direction - - Turns Robot number of degrees
specified in AX, and turn
turret same amount in opposite
direction.
8 0 Heading - - Turns robot to face the new
absolute heading specified
in AX.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 14
9 0 Error - - Generates the error-code you
specify in the AX register.
Particularly useful if you
want to be informed of how
often something in your
program happens, or whatever.
errors can be from 0 to 99,
0 itself will never be
generated as a real Error.
10 0 - - - Scans for enemies, just like
port 7. The distance is to the
nearest enemy within scan arc
is returned in AX. The ID
number for the robot is
returned in BX. This can be
used for team robots, etc.
11 0 - - - Get's ID code. Basically,
this routine returns what YOUR
robot's ID number is in AX.
------------------------------------------------------------------------------
VARIABLES, MEMORY, & PIECING IT ALL TOGETHER:
In your programs, you may use variables as you wish (up to 80). The
compiler uses the #DEF statements to find out what YOU call your variables,
but in the end they get converted into OP-codes. Likewise you can simply
use the op-codes in your program without ever defining a variable and get
the same effect.
First you should be made aware of the memory set-up...
Each robot is equipped with 300 bytes of RAM (random-access memory). The
robot-program itself is stored elsewhere in ROM (read-only memory). Each byte
consists of 16 bits and stores a signed integer value (-32767 to +32767).
(We realize usually one byte is 8-bit, but this is A. T-Robots). The first
100 bytes are system-memory (0 to 99). Not all of it is used, but it is set
aside for future improvements. In this range is where the interrupt vectors
are stored. The next 20 bytes after that (100-119) are reserved for
system-registers. Not all 20 are used, so far there are only 9 registers,
but they are set aside for future improvements to the ROS (Robot Operating
System). The remaining 180 bytes are free RAM. Everytime you declare a
variable, it is assigned a memory location in this area, and everywhere that
variable is encountered in the program, it is replaced with a pointer to that
memory location. You can use this memory directly as well for whatever you
wish.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 15
Here is a listing of memory locations and their uses:
Address: Function:
0 Target speed (speed your robot is trying to acheive)
1 Target heading (heading your robot is trying to acheive)
2 Turret position.
3 Accuracy setting (set by port 7).
4-29 Not in use
30 Random numbers from 0 to 9999.
31-50 Interrupt vectors 1 to 20 respectively.
51-99 Not in use.
100 AX register
101 AY register
102 AZ register
103 BX register
104 BY register
105 BZ register
106 CX register
107 CY register
108 CZ register
109-117 Not in use. (additions to register table will go here)
118 CT register
119 FL (flags) register (not yet in use)
120-299 Free RAM. Within the range of 120-199 is where variables
are placed. All RAM thereafter is useable RAM for anything
else (200 to 299).
A memory location that is defined in the range of 0 to 299 is called a
"memory address". The op-code for a memory location is 10000 + <mem address>,
and that is called a "pointer". Anytime the robot comes across a pointer
in the program (unless specified otherwise by a particular command), it
instantly accesses that location in RAM to get a value to use. This holds
true even for commands. This means you can store commands in your RAM, which
your robot can change later, thus making it possible to make self-rewriting
programs.
Example:
#def com
set com 7
com 2
This sample code would destruct the robot. It defines a variable called
"com", then sets "com" equal to "7". The third line basically makes the
robot look inside "com" to find out what command to execute. It finds a "7"
which is an interrupt call. The parameter is a "2" which thus means that
interrupt #2 is to be executed, which is "Destruct". The same set of code
can be re-written as the following:
#def com
set com 7
com add
The word "add" has an op-code of "2". Since it is the second thing on the
line, it is used as a parameter instead of a command, thus it means "2".
If the variable "com" was the first variable declared in the program, it's
memory address would be "120". It's op-code would then be "10120", thus the
same thing could be done like this:
set 10120 7
10120 add
A. T-Robots = (c) 1992 = Ed T. Toton III pg 16
The same thing can be done using a register:
set az 7
az add
Or the address of the register:
set 10102 7
10102 add
In fact the whole thing can be done using only op-codes:
1 10102 7
10102 2
Note that in all of these examples, no one particular method is more
effective. They all mean the same thing, they all do the same thing, they're
simply different ways of phrasing the commands.
CMP's:
Now, remember that comparisons (CMP command) set the CZ register to the
result. Since the CMP command is the only thing that can change the CZ
register without you specifically accessing it, you'll be able to make
multiple references to it with conditional jumps (JMP et. al.), and since
the jump commands don't use your robots time, there is nothing to be lost in
using several of them. The following is an example...
CMP armor 50
jls 100
jgr 200
jeq 300
In that set of code, if ARMOR is less than 50, the program will jump to
the label "100". If it's greater, it'll go to "200" and if it equals it, then
it'll go to "300". And the whole list of commands will only take up one of
your robot's program cycles. The CMP command uses time, but not the jumps.
LOOP's:
In loops, the code will be executed the number of times you set in CT. In
this way it is like a FOR loop in other languages. They are set up like this:
DO <number of times>
:<label>
..<commands>
..<commands>
LOOP <label>
An example is:
DO 5
:444
opo 15 0
LOOP 444
A. T-Robots = (c) 1992 = Ed T. Toton III pg 17
In this example the commands would instruct the robot to fire 5 times. It
would take a total of 26 program cycles to execute. Note that the following
code is not good. It will repeat the loop until your robot lies dead.
:444
DO 5
opo 15 0
LOOP 444
It would keep looping and keep setting the CT register back to 5, and since
it never reaches 0, it never stops.
Also note that nested loops are not possible without a little extra effort.
Here is an example of a nested loop:
DO 10
:444
set bz ct
DO 5
:555
opo 15 0
Loop 555
set ct bz
opo 14 9
LOOP 444
In that example, you save the contents of CT in BZ while you do the inner
loop, and then set it back. This code would have the effect that you would
fire 5 times, then rotate 9 degrees to the right, and repeat that whole
sequence 10 times. Another way to do it would be to use the stack as shown
here:
DO 10
:444
push ct
DO 5
:555
opo 15 0
Loop 555
pop ct
opo 14 9
LOOP 444
-----------------------------------------------------------------------------
ERRORS AND OTHER USEFUL INFO:
Your robots should never generate a runtime error (either in terms of the
robot, OR the main game itself, but in this case we mean in terms of the
robot). If they do make one, and you have the graphics and status bars turned
on, you'll be made aware of it. If the sound is on, then you'll hear it as
well. If you have the graphics off, the bottom row of the status reports
shows the last error code genereated by your robot. If your robot works
properly, it should always be 0.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 18
When a robot has a runtime error, the program will continue on and simply
not do the command that created the error. Note that the command that had
the error STILL uses your robot's time.
If you have all the stuff on listed above, you'll be able to find out what
the error is. In the status area for your robot, next to the name, a number
will appear. This is the error code. It will change color everytime an error
is generated, so that even if the same code keeps coming up you'll be able to
tell that another error was generated.
[ Note- on-screen error codes will be displayed only if you use the ]
[ -A option in the config file and are using VGA driver 9 & mode 2 ]
Here is a list of the error codes:
Code: Meaning:
0 User-Error
Hmmm, if you got this error you must have programmed it in
yourself. I certainly hope you know what to do with this
one.
1 Stack full.
This means that you are trying to call GSB or a conditional
jump with a non-zero second parameter (which makes it act
like GSB) and the stack is full. Since the stack is a pretty
decent size, you either wrote an immensely complex (TOO
complex) program, or you have left out a RET somewhere.
It's also possible that you are using too many PUSH commands,
as it puts data onto the stack.
2 Label not found.
This means you are calling a GSB, JMP, etc. that is supposed
to go to a label that doesn't exist. This one is easy to fix.
3 Cannot assign value/Illegal memory reference.
Ok, this basically means that you were using a pointer that
points to a non-existent memory location, OR you were trying
to assign a value to a numeric constant (an example of which
would be: SET 5 5).
4 Non-Existent port.
To fix this, go check and see just what port you were trying
to access..
5 Non-Existent Interrupt.
Ahah! Cought you trying to create a new interrupt! There are
20 interrupts, not all of which are already in use. If you
use one of those, you won't get this error.
6 Stack Empty.
Ouch. I hope you aren't reading this because you got this
error. At anyrate, it means you are calling too many RET's.
Anytime you jump or GSB into a subroutine, you should have
it generate one and only one RET in the subroutine, no more
A. T-Robots = (c) 1992 = Ed T. Toton III pg 19
no less. You can have more, but make sure you only execute
one per GSB or a GSB-like conditional jump. Never enter a
subroutine that uses RET with a JMP or non-GSB-like
conditional jump. Make sure for every PUSH there is one POP.
The PUSH command puts data on the stack, and POP takes it
off. This error could be caused by using too many POP's.
For those of you who program in REAL assembly, we have some programming
aids for you. There are alternate spellings for some commands that you can
use (but remember, NO punctuation marks! That includes commas!! I know how
attached you get to those commas, but you can't use them!!).
Here they are:
Command: Alternate spellings:
SET MOV
JEQ JE
JGR JA
JLS JB
XCHG SWAP
IPO IN
OPO OUT
-----------------------------------------------------------------------------
PROGRAMMING THE ROBOTS:
Ok, I'll bet you just glanced through the above information and are
thinking, "Ok, great. It looks nice, but how do I use it?" I hope to explain
a few details here, but I think the sample robot programs are by far the
best source of information. Below are a few charts to refer back to at later
times, and a few general rules to go by. Afterwards is some more text to help
teach you about those strange little features that make the robots so much
more deadly, but require some understanding first.
General rules:
1. Try to make all the parameters line up in single columns,
they're easier to read that way.
2. You MAY leave blank lines. The compiler ignores them.
3. One command is executed each cycle unless otherwise noted.
4. Examining the sample robots is the best teacher.
5. Commands may be upper-case, lower-case, or any combination.
6. Never make multiple labels of the same ID number within the
same program.
7. All robots MUST have the extension ATR.
ex- MYROBOT.ATR, or THISGUY.ATR
Each command is executed in one program-cycle.
(unless it is a particularly slow command)
A. T-Robots = (c) 1992 = Ed T. Toton III pg 20
WATCH YOUR HEAT!! Over-heated robots can easily become DEAD robots!
Here is the heat scale:
100+ Max speed reduced to 95%.
150+ Max speed reduced to 85%.
200+ Max speed reduced to 70%.
250+ Max speed reduced to 50%.
300+ Heat starts burning armor off.
400+ Robot stops executing commands until cools below 400 (shutdown).
500+ Robot explodes.
OVER-BURN SHOULD BE USED WITH CAUTION!!!
Overburn effects the following:
1) better acceleration, but more heat from it.
2) better turn speed, but more heat from it.
3) better laser effect, but more heat from it.
4) bigger explosion from death or self-destruct.
5) worse heat dissipation.
(note that most things add to your heat, and on top
of that your heat dissipation is lower. In other
words, time to cook dinner on the armor plating).
As you may have seen above, in the port listings, there is something
called an "accuracy setting". This is a number from -2 to 2 that is set
when you do a scan. Say for example that you have your arc-width set to
20 degrees. In this case, a robot can be 20 to the left OR right OR anywhere
in between and still be registered in the scan. Now let's say the target is
20 degrees to the left. The scan would then set the accuracy to -2. It's
negative because it's on the left, and it's 2 because the robot was at the
edge of the scan arc. Likewise, if the robot were only 10 degrees to the
left, the accuracy would be -1, because it was half-way to the side of the
arc. Now let's say the robot is again 20 degrees off. Now when you fire the
laser and give it the accuracy rating, it compares it to the arc-width and
figures out that it's 20 degrees to the side. But the laser can only swivel
up to 8 degrees, so it sets it to 8 and fires. Now if the robot was indeed
10 degrees to the side, the laser would still have to fire at 8 degrees,
but it could be quite close, and perhaps the robot has moved into arc since
the scan itself. Now of course, if you set your scan width to 8 or less,
you'll never have to worry about a robot being beyond the laser's swivel
range.
There are several "setting" ports, such as the turret, and angle ports. The
default settings are as follows: (in other words, it's as if these settings
were at the front of your program, but they don't take time to execute):
Item: Value:
-----------------------
Turret Offset 0
Scan arc radius 10
Max Range 1000
Overburn off
All variables are set to 0 at the beginning of the battle.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 21
Note that when you rotate the turret, EVERYthing that is on it turns
with it. This includes the scanner AND the laser.
If you really want to you can leave spaces before the commands, but the
first non-space character must still be a semicolon for remarks, a colon
for labels, and so forth..
Another thing you will want to remember is that the stack for your robot is
only 100 in size. That means you can call 100 GOSUB's or conditional JUMPS
or PUSH's before calling a return (RET command) or a POP command. Be careful:
if the stack fills up, and you call a GOSUB, it will be ignored. There is no
problem with having excess RETURNS (in your main-loop anyway), if you call
one when the stack is empty, it too will be ignored. Having misused or
improperly used these two commands is the greatest cause of robot malfunction.
There is an interrupt (int 9) that is used to generate errors. This can be
useful for debugging robots. You can use it to see if your robot is executing
a particular subroutine, or be informed of how often a certain area of code
is executed, etc.. You should use either 0 or numbers in the 90's. This is
a good safety precaution since more REAL error codes may be added in future
versions of this program.
-----------------------------------------------------------------------------
MNEMONICS, CONSTANTS, ETC:
There are many commands, constants, and so forth that can be used in this
programming language. The constants are particularly useful, since with them
you need not know which port and interrupt numbers are which.
Number: Mnemonic: Port-Constant: Interrupt-Constant:
1 SET, MOV _SPEDOMETER _RESET
2 ADD _HEAT_SENSE _DESTRUCT
3 SUB _COMPASS _PORT
4 MPY _TURRET_OFS
5 DIV _TURRET_ABS _LOCATION
6 PUT _DAMAGE _SET_INT_VEC
7 INT _SCAN_ENEMY _TURN_NOTURRET
8 GET _ACCURACY _HEADING
9 LOC _RADAR _ERROR
10 CMP _RANDOM
11 GSB _THROTTLE
12 RET _OFS_TURRET
13 JMP _ABS_TURRET
14 JLS, JB _STEERING
15 JGR, JA _LASER
16 JEQ, JE
17 JNE _GET_ARC
18 IPO, IN _SET_ARC
19 OPO, OUT _GET_RANGE
20 DEL _SET_RANGE
21 MOD _GET_OVERBURN
22 AND _SET_OVERBURN
23 OR
24 XOR
25 NOT
26 XCHG, SWAP
A. T-Robots = (c) 1992 = Ed T. Toton III pg 22
27 DO
28 LOOP
29 PUSH
30 POP
-----------------------------------------------------------------------------
STAGING A COMPETITION
When starting a competition, you should set up several "rules" in advance
so that everyone involved can take them into account when writing their
programs. Among the most important rules are:
1. Program speed. (the -P# setting)
2. What the other settings are.
-----------------------------------------------------------------------------
TROUBLE-SHOOTING & SPEED-CONTROL
The AT-Robots program is basically fully automatic and self-contained. It
will probably either work or it won't. If there is a problem, most likely
(but not definitely) you are out of luck. Here are some possible causes of
your difficulty:
1. Not enough memory.
2. Incompatable graphics adapter.
3. Damaged copy of AT-robots.
4. Computer is not sufficiently IBM compatable.
5. You haven't followed any of the instructions.
6. Computer is damaged or not performing properly.
7. You're using too early a version of DOS.
(suggest DOS 3.3 or higher)
If you HAVE gotten the program to run, but it's too slow, there are some
things you can do to speed it up. First, You can try putting only 2 or 3
robots in the arena at once. You will find that the program slows down a lot
when you put 5 or 6. Another thing you can do is put the -D0 setting in. That
will turn off the delay that is placed in the program to keep it running at
the proper speed on faster computers.
If the problem is that the program runs TOO fast, then put the -D1 setting
in. You can also put the -N command. Keep playing with different settings on
the -N until you get it where you want it. If the speed is too fast, you
may want to put more robots, since there's nothing to stop you from doing it.
Also keep in mind that the -A command slows the entire simulation
dramatically. It is suggested that you use it when you have the speed to
spare, and not when it's too slow.
The correlation between -D and -N needs to be explained. The delay will be
implemented every N cycles. Now here's how the delay works: If the number of
hundredths of a second (as determined by -D) haven't gone by yet, then the
A. T-Robots = (c) 1992 = Ed T. Toton III pg 23
program will sit and wait for the time to go by. If the amount of time HAS
gone by, then it doesn't bother to wait for it. So if you set -N10 and -D10,
you will probably not see any effect at all (unless your computer is pretty
fast), simply because it will probably take more than ten hundredths
(or rather one tenth) of a second to perform 10 cycles.
-----------------------------------------------------------------------------
NOTICE:
This program is being distributed on the "shareware" concept. It is by
no means completely free. If you think the program is of use to you, please
send a registration fee of $14. If you think that is rediculous, then send
less (or more for that matter). If you hate the program or found too many
bugs, write me and tell me, and include a graphic explanation (but don't
be too harsh!! Heheheh). In any event, write to:
Ed T. Toton III
7101 Talisman Lane
Columbia Md 21045
And WHY should you register it?
1. Because you're supposed to. If you use AT-robots somewhat often,
or several people use a copy off the same computer, or you
keep it on your hard drive for lengthy periods, then it
should be registered!
2. To support my continuing efforts to bring you some level of
functional programs. If I get no cash, you get no improvements
in these programs, and I won't be encouraged to make new and
better software!
3. To get that warm glow for knowing that you supported the author
of at least one of the many shareware programs you probably use.
4. To find out if there is a newer version. All you need to do is
ask! But letters with money take priority!
5. You could be sick and demented and thus register everything you
get your hands on.
6. To find out about my other programs you need only ask!
But again, letters with money take precedence.
Source code is not yet available. It may be in later versions.
I regret to say that the free StratSys registrations have been discontinued.
-----------------------------------------------------------------------------
DISCLAIMER:
This program is provided "AS IS" and I make no gauruntees about it's
performance. I will not be and can not be held responsible for any damages
incurred during it's use, or as a result of it's use. It's on a "use at your
own risk" basis. Nothing at all should happen, the program is harmless,
but I have to say it anyway
A. T-Robots = (c) 1992 = Ed T. Toton III pg 24
-----------------------------------------------------------------------------
COPYRIGHT:
This program may be freely distributed (which is actually encouraged)
AS IS. No one may modify this program in ANY way. ESPECIALLY where names
and credit is given, and INCLUDING all the documentation, data files, and
executable program files. It may NOT be used for commercial or profit-turning
ventures of any kind, including sale by disk vendors, without the written
consent by ME, with ONE exception: Disk vendors MAY sell it without my
written consent ONLY if they charge no more than $5 higher then the cost of
the disk (excluding any shipping and handling charges). NOTHING may be added
to it either (except in the case of writing to the file COMMENTS.TXT, and
in the case of adding more robot program files). NO BBS ads are allowed EXCEPT
as zip comments, or as a single SEPERATE text file.
Any robots you write for use with AT-Robots are yours and you may do what
you wish with them. It is encouraged that you distribute robots around as
well as this program.
-----------------------------------------------------------------------------
FINAL NOTE:
If you have any questions, concerns, suggestions, criticisms, donations,
remarks, praise or opinions, please write! I WANT TO HEAR FROM YOU!!
(the address is listed above).
Ed T. Toton III
"Necromancer"
-1992
Oh, and one more thing. Your comments are welcome! If there are any
statements or comments or suggestions you would like to make to those who
later try to use AT-Robots, please feel free to add them to the file called
COMMENTS.TXT. And if you think the comments are good (either yours, or the
ones already in your COMMENTS.TXT file), please send them to me! I might
make them a part of the next release of the program (if there is one).
OTHER SOFTWARE:
I have made several programs that may be of interest to you. Here is
a list of some of them: (as of 12/17/92)
Ramble v1.0 : =Ramble combines all the elements of Nonsense and
Quick-Quotes into one full-color real-time
environment where you can set the priority and
influence each time of sentance generator has
on the output. Ramble is better than the sum
of it's parts (blab and Quick-Quotes)!
SourceGen v1.0 : =Generates silly source code based upon text
files you supply. Can generate gigabytes of
meaningless babble at the press of a key!
A. T-Robots = (c) 1992 = Ed T. Toton III pg 25
Nonsense v1.2 : =Generates silly text based upon text files you
supply. Can generate gigabytes of meaningless
babble at the press of a key!
Quick-Quotes 2.3 : =Generates silly random quotes and text. You can have
it do a "quote of the day" when you boot your computer,
or a quote for when someone logs onto your bbs, or
you can generate megs of nonsensical text.
PigLatin v1.0 : =Turns text into pig-latin!!!
Anti-Speller v1.0 : =Destroys your spelling. It is the opposite of a
spell-checker. I don't think it is humanly
possible to spell this badly, even on purpose!
Blaze v2.6 : =VGA screen-saver. Supports password security,
and a customization system (config file). Has
been known to travel quickly through BBS's.
FireDots v1.3 : =VGA Screen-Saver. Fireworks program, even simulates
duds! Highly configurable.
GeoSave v1.2 : =VGA Screen-Saver. Small geometric shapes and strange
objects float and bounce around the screen.
Configurable, supports password, and includes an
image editor so that you can edit the existing images
or create your own.
CompWar v2.6 : =Latest release of CompWar, the on-line game for
use with WWIV BBS systems.
Date-Matcher v1.5 : =On-line match-maker program for BBS's that support
DOS interrupt driven door programs (such as WWIV).
Virus Farm : =On-line game. Players are viruses attempting
to take over the hard drive. Designed mostly for
WWIV BBS's.
T-Robots v2.0 : =(one of my masterpeices) T-Robots is a system in
which you program robots to fight one another. It
uses a simple programming language, and you create
the programs with your favorite text-editor. Great
for competitions! Supports VGA, EGA, CGA, MCGA,
Hercules, and many more graphics devices.
AT-Robots v1.1 : =Advanced T-robots. Extremely similar to T-Robots 2.0
except the system has been improved. It supports most
graphics adapters in existance (CGA, EGA, VGA, MCGA,
Hercules, etc). In this one you program the robots
using ATR assembly (Advanced T-Robots Assembly). Now
you design your own subroutines, and access specific
device ports and memory locations. The ultimate in
competions of logical thought.
A. T-Robots = (c) 1992 = Ed T. Toton III pg 26
StratSys v2.1 : =A 2-player VGA combat strategy game. VERY flexible.
Comes with 4 game scenarios (Cival War, Naval Battle,
Robot Conquest, and a medieval scenario). Expansion
packs are available (at the moment one with 12
scenarios). Comes with an editor for the images and
maps, so you can make your own scenarios!
Dragon's Domain 1 : =A graphic adventure game. The first in the series.
Each sequal also brings improvements to the graphics
and the interface.
Dragon's Domain 2 : =The story continues, and the challenge gets more
challenging!
Dragon's Domain 3 : =Yet another one!! Will it never end??
Dragon's Domain 4 : =Now it supports Adlib! Will wonders never cease??
My-Gags set 2.2 : =A set of small gag programs that I have made. They
are designed to be placed in the autoexec.bat file.
Over Half of them are TSR's, including one that
creates "line-noise" through the keyboard buffer,
one that beeps occasionally, and one that keeps
changing you caps-lock/numlock/scroll-lock.
Toton Utilities 1.0 =A set of 8 SMALL but potentially useful utilities.
Most are TSR's. Several of them make alternate
drive-lights out of other peripherals. You can make
a drive LED on your screen in the corner, or make
your scroll-lock act as a drive light. Included
is also a program to make clicking sounds as you
press keys, and a program to turn your num-lock
off during boot-up (for those of you that hate your
num-lock staying on after boot-up).
A. T-Robots = (c) 1992 = Ed T. Toton III pg 27