home *** CD-ROM | disk | FTP | other *** search
/ 300 Favorite Games / 300GAMES.iso / 316 / atrobots.doc < prev    next >
Text File  |  1992-12-30  |  72KB  |  1,680 lines

  1.                           
  2.                           
  3.                           
  4.                           
  5.                           
  6.                           
  7.                           
  8.                           
  9.                             ____________________
  10.                           /                      \
  11.                         /  Advanced T-Robots v1.1  \
  12.                       /        --------------        \
  13. ----------===========<      By:  Ed T. Toton III      >===========----------
  14.                       \      (c) copyright 1992      /
  15.                         \   All rights reserved.   /
  16.                           \______________________/  
  17.                           
  18.                       Special thanks to Jeremy Kusnetz
  19.                             & Kenneth B. Foreman
  20.                               & Erik McClenney
  21.  
  22.  
  23.  
  24.             Note- I wish to apologize in advance for the spelling
  25.                   errors and other such nonsense. I also would like
  26.                   to apologize for the arcane nature of the text,
  27.                   as writing technical documentation is not one
  28.                   of my stronger points.
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 0 
  61.  
  62.                          ---  Table of Contents  ---
  63.  
  64.  
  65.             Things you should have............................2
  66.  
  67.             Legal Stuff.......................................2
  68.  
  69.             Introduction to AT-robots.........................2
  70.  
  71.             Technical information.............................3
  72.  
  73.             Running AT-Robots.................................3
  74.  
  75.             Acronyms..........................................5
  76.  
  77.             Update/History....................................5
  78.  
  79.             Basics of AT-Robots...............................6
  80.  
  81.             Compiler..........................................7
  82.  
  83.             The programming language..........................7
  84.  
  85.             Registers.........................................9
  86.  
  87.             Command lists and descriptions....................9
  88.  
  89.             Ports............................................12
  90.  
  91.             Interrupts.......................................14
  92.  
  93.             Vars, Memory.....................................15
  94.  
  95.             Peicing it all together..........................15
  96.  
  97.             Errors...........................................18
  98.  
  99.             Programming the robots...........................20
  100.  
  101.             Mnemonics and Constants..........................22
  102.  
  103.             Staging a competition............................23
  104.  
  105.             Trouble-shooting and Speed-control...............23
  106.  
  107.             More legal stuff.................................24
  108.  
  109.             Final Notes......................................25
  110.  
  111.             Other Software...................................25
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  [ ED. Note- It is HIGHLY suggested that you make a print-out of this file! ]
  119.  
  120.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 1 
  121. -----------------------------------------------------------------------------
  122. THINGS YOU SHOULD HAVE
  123.  
  124.    You need a text editor! Writing programs will be very difficult without 
  125.  one. DOS 5.0 has a nice editor (that's what I'm using to write this), or you
  126.  can use a programming environment (like Turbo Pascal or C or Quick-Basic),
  127.  or you can even use some word processors. If you use basic or or something
  128.  like Word Perfect, you will need to remember to save it as "dos text" or
  129.  "ascii format".
  130.  
  131.    Here are the files you should have:
  132.  
  133.   ATROBOTS.EXE    -   The program.
  134.   ATROBOTS.DOC    -   This file.
  135.   PRINTDOC.BAT    -   Batch file to print out this documentation.
  136.   COMMENTS.TXT    -   Comments written by other AT-robots users.
  137.   README.1ST      -   Important notices. You should have read it by now.
  138.   DEMO.BAT        -   The demonstration run. Run this for a demo.
  139.   DEMO.DAT        -   The demonstration config file.
  140.   SAMPLE.ATR     \
  141.   RANDMAN.ATR     >-  These are some sample robots.
  142.   SNIPER.ATR     /
  143.   ????????.ATR    -   Other robots written for use with this program.
  144.                       ALL AT-Robots robots MUST have the .ATR extension.
  145.  
  146.  
  147.   
  148. -----------------------------------------------------------------------------
  149. TRADEMARKS & COPYRIGHTS:
  150.  
  151.       AT-Robots  (c) 1992        Ed T. Toton III 
  152.       T-Robots   (c) 1991, 1992  Ed T. Toton III
  153.       P-Robots   (c) 1988        David Malmberg
  154.       C-Robots   (c) 1985        Tom Poindexter
  155.       Turbo Pascal is a registered trademark of Borland International.
  156.  
  157.  
  158. -----------------------------------------------------------------------------
  159. AT-ROBOTS:    "Ay-Tee Robots"
  160.  
  161.    AT-Robots is designed to allow people to design and program robots to 
  162. fight one another. Competitions between people is what it's all about!!
  163. The robots are programmed in a simple language which will be explained 
  164. shortly.
  165.    AT-Robots stands for "Advanced T-Robots". T-Robots was the predecessor 
  166. program to this. It was inspired by P-Robots (written by David Malmberg), 
  167. which was in turn inspired by C-robots (written by Tom Poindexter). T-Robots 
  168. and AT-Robots are designed with the idea of programming robots, without going 
  169. to the lengths of learning to program in high-level languages, but to still 
  170. allow fairly simple program design. In the case of AT-Robots, the language 
  171. has some similarities to assembly. Basically, T-Robots allowed you to use 
  172. T-Robot-Basic to program the robots, and now in AT-Robots you use T-Robot 
  173. assembly. Instead of having simple commands for complex tasks, you have 
  174. simple commands to do simple tasks. You will have to design subroutines to
  175. access the specific devices/ports/memory areas of the robot specifically in 
  176. your program. The language has a small amount of available commands, thus 
  177. making it easy to learn, while offering experienced programmers an interesting
  178.  
  179.  
  180.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 2 
  181.  
  182. challenge. Though it is not a real programming language of sorts, it can
  183. still teach the basic concepts of programming and logical thinking.
  184.    The system may still have bugs or discrepencies. Please contact me 
  185. if you spot one!! Also, please let me know if I have left anything out of 
  186. the documentation that you think I should include. And in addition to that,
  187. please inform me if you have any ideas of new commands to add to the 
  188. programming language.
  189.  
  190.  
  191. -----------------------------------------------------------------------------
  192. TECHNICAL INFO:      (most graphic cards supported!)
  193.    
  194.    AT-Robots requires a VGA (graphic driver #9 with the -M setting and
  195. mode #2 with the -L setting) for some specific features, but otherwise 
  196. supports most graphic cards.
  197.    AT-Robots is written in Turbo Pascal 6.0 and Turbo Assembler. It does 
  198. not multi-task, it simulates it.
  199.    AT-Robots should be used on 286's and better. It may run too slowly on 
  200. slower computers.
  201.    AT-Robots consists of over 2500 lines of source code.
  202.  
  203. -----------------------------------------------------------------------------
  204. RUNNING AT-ROBOTS
  205.  
  206.    To run AT-robots, you must have at least one robot program ready, and you 
  207. must make a configuration file to use it. To run AT-Robots, you type 
  208. "atrobots", then a space, then the name of the config file.
  209.       ex:   ATROBOTS MYFILE.DAT
  210. The config file tells AT-Robots what settings to use, and which robots to run.
  211. Inside the file you put ONE item per line. Settings start with a dash (-), 
  212. and sometimes have a parameter number. For the robots you put the name of the 
  213. robot file, but without the ATR extension. The settings will be explained 
  214. shortly. Here is an example:
  215.  
  216. -d0
  217. -gn
  218. -s100
  219. myrobot
  220. robot1
  221. robot1
  222.  
  223.    This file would tell AT-robots to have no delay (thus run at the maximum 
  224. speed), with NO graphics (so as to get a quick result), and to update the 
  225. output every 100 cycles (again to increase speed. This setting usually 
  226. defaults to 10). It then loads MYROBOT.ATR into robot #1, ROBOT1.ATR into
  227. robot #2, and ROBOT1.ATR into robot #3. There can be up to 6 robots,
  228. and in this case only 3 are used.
  229.  
  230.   On the following page you will find the settings and graphic modes. There
  231. are some features that will be unavailable to those not using mode #9 (VGA).
  232. These are:
  233.              1.  Fancy status bars that are easy to read.
  234.              2.  On-screen display of error-codes generated
  235.                  by robots.
  236.  
  237.  
  238.  
  239.  
  240.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 3 
  241.  
  242.   Note that all those things can only be used if the -A option is used,
  243. and you are using mode 9. If you have an 8514 and want these, you'll need
  244. to put a -M9 in the config file.
  245.   
  246.  
  247.    The settings are as follows:
  248.  
  249.  -D##  Sets the delay in hundredths of a second. Should never be over 20 
  250.        (unless in combination with -N#).
  251.  -A    If graphics are on, this will allow the status bars to be displayed.
  252.  -GN   Turns the graphics OFF.
  253.  -S##  Number of cycles between output updates. (increase for greater speed)
  254.        only works with the graphics turned off.
  255.  -N##  Cycles between each delay. Usually 1, but can be increased when using
  256.        it with -D1 to speed things up (to make it faster than -D1 by itself).
  257.  -P##  Increases the number of program commands each robot executes each
  258.        cycle. Can be useful when using complicated programs. Don't set too 
  259.        high though, it can mess things up.
  260.  -R##  Tells AT-robots to Run a number of battles as you specify.
  261.  -TN   Turns off the title screen. Once you've seen it a few times, you'll
  262.        get tired of it and this is here for that purpose.
  263.  -Q    Sets AT-Robots to run in Quiet mode.
  264.  -C    Tell AT-Robots to save compiled versions of the robots in binary 
  265.        files. As of yet there is no purpose for it.
  266.  -M#   Force a specific graphic driver (usually automatic). Drivers are listed
  267.        later. Modes are set automatically ONLY if driver is automatic.
  268.  -L#   Graphics mode setting.
  269.  
  270. Here are the default settings:
  271.  -D    1
  272.  -A    off, you must use -A if you want status bars on.
  273.  -GN   on,  you must use -GN if you want the graphics off.
  274.  -TN   on,  you must use -TN if you want the the title screen off.
  275.  -S    10
  276.  -N    1
  277.  -P    9
  278.  -R    1
  279.  -Q    on, you must use -Q if you want the sound off.
  280.  -M    0 (auto-detect)
  281.  -L    0 (auto-detect if -M is 0, otherwise it's the mode number)
  282.  
  283. Graphic drivers:
  284.  0  :  Autodetect (default)          6  :  IBM 8514 SVGA
  285.  1  :  CGA                           7  :  Hercules
  286.  2  :  MCGA                          8  :  AT&T400
  287.  3  :  EGA                           9  :  VGA  *
  288.  4  :  EGA64                         10 :  PC3270
  289.  5  :  EGA mono 
  290.  
  291.    * Vga is required for a few special features (with -L2).
  292.      (for a list of modes, see the file called MODES.DOC)
  293.  There are several keyboard commands you must know before you start. One is
  294. the quit key, which is 'Q'. Another command, which only works if you are
  295. running multiple matches, is the 'N' key, which aborts the present match
  296. and starts the next. The final one is the 'P' key, it pauses the simulation
  297. until you press another key.
  298.  
  299.  
  300.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 4 
  301.  
  302.   If you want to run the included demo, drop to dos and run the batch file
  303. called DEMO. That's right, in dos type DEMO and hit enter. It will run
  304. the demo for you.
  305.   When running multiple matches you should still baby-sit the program because
  306. somtimes robots will end up in opposite corners, or whatever, and will be
  307. unable to hit each other, in which case you need to press 'N' to skip to the
  308. next round.
  309.  
  310.  
  311.  
  312.     [  Special Note-  In your robot programs you may put a setting   ]
  313.     [  which will over-ride the -P setting in the config file. It    ]
  314.     [  will only take effect if the new setting is smaller than the  ]
  315.     [  -P in the config. Here is the usage: #SPD <speed>             ]
  316.     [  Example:                                                      ]
  317.     [           #SPD 5                                               ]
  318.     [                                                                ]
  319.     [    In this example, it would let the robot do no more than 5   ]
  320.     [  program cycles at a time, as if the -P setting were 5. Useful ]
  321.     [  to keep robots from over-heating, and moving before turning   ]
  322.     [  all the way, etc...                                           ]
  323.  
  324. -----------------------------------------------------------------------------
  325. ACRONYMS:
  326.  
  327.   Here in ATR (see, there's one already) we use several acronyms that you
  328. may or may not already be familiar with. At anyrate, here they are:
  329.  
  330.   Acronym:          Meaning:
  331.     ATR                 Advanced T-Robots.
  332.     ATRA                Advanced T-Robots Assembly.
  333.     BIOS                Basic Input/Output System
  334.     ERR                 Error
  335.     GSB                 Gosub (a call to a subroutine)
  336.     I/O                 Input/Output
  337.     INT                 Interrupt
  338.     JMP                 Jump  (like a GOTO in basic)
  339.     OP                  Op-Code (numeric codes that commands get turned into)
  340.     RAM                 Random-Access Memory.
  341.     REG                 Register
  342.     ROM                 Read-Only Memory.
  343.     ROS                 Robot Operating System.
  344.     SPD                 Speed
  345.     VAR                 Variable
  346.  
  347. -----------------------------------------------------------------------------
  348. UPDATES & HISTORY:
  349.  
  350.   For those of you already familiar with T-Robots, you will have a fairly 
  351. easy time adjusting to AT-Robots. The arena is the same, the robots have been
  352. slightly modified, but are otherwise the same as well. The most significant 
  353. changes are the programming language, and some improvements to the workings
  354. of the main program.
  355.   Once a maintenance crewman got killed by an accident involving the missile
  356. launchers, they were instantly banned from the arena. However, to replace
  357. the missile launchers on the robots, they started installing swivel mounts to 
  358.  
  359.  
  360.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 5 
  361.  
  362. the lasers. This gives the laser the ability to swivel up to 8 degrees in 
  363. either direction without moving the turret.
  364.   Since then, the robot's main processors have gone under major revision 
  365. also. The now outdated T10 and XT20 processors (used on T-Robots) have been 
  366. replaced with the new 16-bit AT version (The AT10).
  367.  
  368.   For those of you who are interested, the names for those processors were
  369. quite easy to decide upon. The T10 is for T-Robots v1.0, hence "T10". The
  370. XT20 is for T-Robots v2.0, and is the eXtended processor, hence "XT20". The
  371. AT10 is the Advanced T-Robots v1.0 processor, and thus it is called the
  372. "AT10". The second reason for these names is that it pokes fun at the chips
  373. for the IBM compatable computers. The XT is the outdated series, while the AT
  374. series of processors are current.
  375.  
  376.  
  377. -----------------------------------------------------------------------------
  378. BASICS:
  379.  
  380.   The arena is 1 kilometer wide and 1 kilometer long. The coordinate system is 
  381. set up such that (0,0) is at the upper-left corner and (1000,1000) is at the 
  382. lower-right.
  383.   The screen is set up as follows:
  384.  
  385.    0,0  ________________________________________  1000,0  
  386.        |                                        |          |
  387.        |                                        |          |
  388.        |                                        |----------|
  389.        |                                        | status   |
  390.        |                                        |   areas  |
  391.        |                                        |----------| (side of
  392.        |               Arena                    |          |  screen)
  393.        |                                        |          |
  394.        |                                        |----------|
  395.        |                                        |          |
  396.        |                                        |          |
  397.        |                                        |----------|
  398.        |                                        |          |
  399.        |                                        |          |
  400.        |                                        |          |
  401. 0,1000 |________________________________________| 1000,1000|
  402.  
  403.  
  404.  
  405.  
  406.    Navigation is done in a 360 degree circle. Here are the directions for 
  407. each course:
  408.                        0 (360)
  409.                        |
  410.                   315  |  45
  411.                      \ | /
  412.              270 ----- + ----- 90
  413.                      / | \
  414.                   225  |   135
  415.                        |
  416.                       180
  417.  
  418.    The Robots are all equipped with a scanner, armor, and a laser.
  419.  
  420.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 6 
  421.  
  422.    Robots don't stop, start, or turn on a dime. When you tell the robot to 
  423. move at a certain speed, it will accelerate until it reaches that speed or
  424. it collides with something. Once it has reached that speed it will remain 
  425. there until you change it or it collides with something. 
  426.    When you instruct the robot to turn, it will rotate until it faces the 
  427. new direction, or you tell it to do otherwise. The robot will always rotate 
  428. in the direction that is shortest to face the target heading. if you tell
  429. it to turn 270 degrees to the right, it will turn 90 to the left (it's 
  430. shorter, and is still the same heading). Also note that since it takes time
  431. to start/stop/turn, that the program may have executed many commands before
  432. the thing actually gets to it's new speed or heading.
  433.    Each robot has two status bars (if you used the -A option). The upper one,
  434. which is in the same color as the robot if you have a color display, is
  435. the robot's armor. The one below it is the robot's heat scale.
  436.  
  437.  
  438. -----------------------------------------------------------------------------
  439. THE COMPILER:
  440.  
  441.   AT-Robots is equipped with a compiler. It reads in your robot programs and
  442. turns them into numeric data that the robots follow as a set of instructions.
  443. These numeric codes are called OP-CODES. If you use the -C option in the
  444. config file you can see these op-codes saved in binary format. 
  445.   The compiler writes the programs to the screen as it compiles them. Thus,
  446. if there's an error, you can see where it was in your program.
  447.   When a program is compiled, EACH word is directly converted into a 
  448. pre-defined op-code, no matter where it is. As explained in more detail 
  449. later, you can interchange variables, registers, numbers, and commands,
  450. and still get a clean compile, AND a functional program.
  451.  
  452. -----------------------------------------------------------------------------
  453. THE PROGRAMMING LANGUAGE IN GENERAL:
  454.  
  455.  
  456. The language is used as follows:
  457.  
  458. The programming language consists of four basic types of statements.
  459.  
  460. 1) Remarks. - These are not compiled into your program, they are simply
  461.               notes that you can read when viewing programs.
  462. 2) Var Defs - Variable definitions. This is how you define variable names.
  463.               Read on..
  464. 3) Labels.  - These are the target locations for JUMP and GOSUB commands.
  465.               They are not executed and do not use your robots time.
  466. 4) Commands.- These are the functions of your robot. They command the robot
  467.               to perform specified activities.
  468. 5) Variables- Variables are a major programming thingie. They may have values
  469.               from -9999 to 9999. You may define up to 80 of them, and they 
  470.               may be no longer than 16 characters long. They must contain
  471.               only letters and underscores. NO numbers or symbol-characters!
  472.   
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 7 
  481.  
  482. Remarks: 
  483.  
  484.   Syntax:
  485.           ;      <statement>
  486.      The semi-colon MUST be the FIRST character on the line (other than 
  487.    spaces), and whatever you put on the line with it will be ignored by the 
  488.    compiler.
  489.    OP-CODE: none
  490.  
  491.  
  492. Labels:
  493.   
  494.   Syntax:
  495.           :####
  496.      The colon MUST be the FIRST character on the line (except for spacs). 
  497.    RIGHT after it, without any spaces in-between, you put a number anywhere 
  498.    from 1 to 8999. That number is the label. Do not use the same number 
  499.    twice within the same program.
  500.    NOTE- labels 9000 or higher are INVALID.
  501.    OP-CODE: 1000 + <label number>
  502.  
  503.  
  504.  
  505. Commands:
  506.  
  507.   Syntax: 
  508.           Command [parameters]
  509.      The command may or may not have parameters, but if there are, you 
  510.    seperate them from the command with spaces. Only one command may be
  511.    put on each line. Also note that you must not use any punctuation unless
  512.    it is a remark, or a label.
  513.    OP-CODE: defined on chart below.
  514.  
  515.  
  516. Variable Definitions:
  517.  
  518.   Syntax:
  519.         #def <variable name>
  520.      The definition MUST come BEFORE the first time the variable is used
  521.    in the program. Don't worry about putting the definitions inside loops,
  522.    or after the program starts, these can be put just about anywhere, and 
  523.    are not compiled into the program. They are used to figure out how to 
  524.    compile the program, but do not get turned into executable code.
  525.    OP-CODE: none
  526.  
  527. Variables:
  528.  
  529.      Once a variable has been declared, it can be used anywhere in the 
  530.    program any way you like. The compiler is VERY flexible. All the things 
  531.    you can get away with are described later, but remember, you can do just 
  532.    about anything with these suckers..
  533.    OP-CODE: 10000 + <mem address>
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 8 
  541. ------------------------------------------------------------------------------
  542. REGISTERS:
  543.  
  544.   The ROS (Robot Operating System) has a series of several memory locations
  545. that are set aside for certain functions. They are called registers. They
  546. are used for various things, mostly for interrupts and comparisons. The
  547. following are their most common uses and their memory-locations and op-codes.
  548.  
  549.   Register:   Mem:     Op:      Function:
  550.      AX        100    10100       Interrupt-instruction
  551.      AY        101    10101       Reserved for your use.
  552.      AZ        102    10102       Interrupt returns
  553.      BX        103    10103       Interrupt instructions and returns
  554.      BY        104    10104       Interrupt returns
  555.      BZ        105    10105       Reserved for your use.
  556.      CX        106    10106       Interrupt-instruction (rarely)
  557.      CY        107    10107       Variable exchanges (XCHG command)
  558.      CZ        108    10108       Comparisons only.
  559.      CT        118    10118       Loop-Counts
  560.      FL        119    10119       Status flags (not yet functional)
  561.    
  562.  
  563.  
  564. ------------------------------------------------------------------------------
  565. COMMANDS:
  566.  
  567.   These are the instructions that the robots use to do things. The Op-Codes
  568. are what the robots actually use (this holds true for everything). These 
  569. code-words however are used in place of the numbers for understandability.
  570. Note that the compiler turns them into the op-codes, and leaves numbers as
  571. they are, and thus if you wish you may program your robots using the op-codes
  572. instead of the command-names.
  573.  
  574.      (The speeds listed are actually execution-time numbers. Those numbers
  575.       indicate how much of your robot's time each command uses. The amount
  576.       of time your robot gets total is determined by the -P setting in the
  577.       config file)
  578.  
  579.      (Also note that below, if parameters are listed as VARs then they 
  580.       MUST be variables or pointers. If they are VALs they can be anything).
  581.   
  582. OP: Spd:  Name:    Function & syntax:
  583.  
  584.   1    1   set     Syntax:  SET <var1> <val1>          
  585.                    -Sets VAR1 equal to VAL1.
  586.  
  587.   2    1   add     Syntax:  ADD <var1> <val1> <val2>
  588.                    -Adds VAL1 and VAL2 and puts the result in VAR1.
  589.  
  590.   3    1   sub     Syntax:  SUB <var1> <val1> <val2>
  591.                    -Subtracts VAL2 from VAL1 and puts the result in VAR1.
  592.  
  593.   4    3   mpy     Syntax:  MPY <var1> <val1> <val2>
  594.                    -Multiplies VAL1 by VAL2 and puts the result in VAR1.
  595.  
  596.   5    3   div     Syntax:  DIV <var1> <val1> <val2>
  597.                    -Divides VAL1 by VAL2 and puts the integer result in VAR1
  598.  
  599.  
  600.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 9 
  601.  
  602.   6    1   put     Syntax:  PUT <val1> <mem location>
  603.                    -Sets the byte at the given location equal to VAL1.
  604.                     NOTE- the location is not a pointer.
  605.  
  606.   7   3/0  int     Syntax:  INT <num>
  607.                    -Executes an interrupt. (interrupt number <num>)
  608.                    (has speed of 3 usually, but if you re-define the
  609.                     interrupt vector to run a subroutine, then it is
  610.                     speed 0).
  611.  
  612.   8    1   get     Syntax:  GET <var1> <mem location>
  613.                    -Sets VAR1 equal to data at mem location.
  614.  
  615.   9    1   loc     Syntax:  LOC <var1> <var2>
  616.                    -Sets VAR1 equal to the address of the memory location 
  617.                     that VAR2 is stored in (not a pointer though).
  618.  
  619.  10    1   cmp     Syntax:  CMP <val1> <val2>
  620.                    -Compares VAL1 and VAL2 (by subtraction) and puts the 
  621.                     result in the CZ register. 
  622.                     Note- same as "SUB cz <val1> <val2>"
  623.  
  624.  11    0   gsb     Syntax:  GSB <label>
  625.                    -"GOSUB". Goes to label as defined. Returns to the GOSUB 
  626.                     call when a RET is encounterd. Same as GOSUB in basic.
  627.  
  628.  12    0   ret     Syntax:  RET
  629.                    -"RETURN". Returns after a gosub or a conditional jump
  630.                     that was set to "gosub". Same as RETURN in basic.
  631.           
  632.  13    0   jmp     Syntax:  JMP <label>
  633.                    -"GOTO". Goes to label as specified. Does not return
  634.                     with a RET. Same as GOTO in basic.
  635.  
  636.  14    0   jls     Syntax:  JLS <label> [code]
  637.                    -Like "jmp" but only actually does the jump if the CZ
  638.                     register is negative (in a comparison with "CMP", the
  639.                     cz register would be negative if the first value was 
  640.                     less than the other). If the CODE is present, AND it is
  641.                     not zero, this command will act more like "GSB", and 
  642.                     thus GOSUB to the label.
  643.  
  644.  15    0   jgr     Syntax:  JGR <label> [code]
  645.                    -Like "jmp" but only actually does the jump if the CZ
  646.                     register is positive (in a comparison with "CMP", the
  647.                     cz register would be positive if the first value was 
  648.                     greater than the other). If the CODE is present, AND 
  649.                     it is not zero, this command will act more like "GSB", 
  650.                     and thus GOSUB to the label.
  651.  
  652.  16    0   jeq     Syntax:  JEQ <label> [code]
  653.                    -Like "jmp" but only actually does the jump if the CZ
  654.                     register is zero (in a comparison with "CMP", the CZ 
  655.                     register would be zero if the first value was equal to 
  656.                     the other). If the CODE is present, AND it is not zero, 
  657.                     this command will act more like "GSB", and thus GOSUB 
  658.                     to the label.
  659.  
  660.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 10
  661.  
  662.  17    0   jne     Syntax:  JNE <label> [code]
  663.                    -Like "jmp" but only actually does the jump if the CZ
  664.                     register is not zero (in a comparison with "CMP", the
  665.                     cz register wouldn't be zero if the first value was 
  666.                     not equal to the other). If the CODE is present, AND 
  667.                     it is not zero, this command will act more like "GSB", 
  668.                     and thus GOSUB to the label.
  669.  
  670.  18    3?  ipo     Syntax:  IPO <port num> <var1> 
  671.                    -Input to from port. This command takes a byte of input
  672.                     from the given port and puts it into VAR1. Note that
  673.                     the command will do nothing if the port is an input 
  674.                     port.
  675.                    NOTE- Accessing certain ports can have a slow-down effect
  676.                     
  677.  19    3?  opo     Syntax:  OPO <port num> <var1> 
  678.                    -Output to port. This command takes what's stored in 
  679.                     VAR1 and sends it to the given port. Note that the 
  680.                     command will do nothing if the port is an output port.
  681.                    NOTE- Accessing certain ports can have a slow-down effect
  682.  
  683.  20    ?   del     Syntax:  DEL <val1>
  684.                    -Delays for length of time defined by VAL1. Time is
  685.                    in increments of program commands. Thus if you set it
  686.                    to 5, then the robot will not execute commands for
  687.                    the amount of time in which 5 commands could be executed.
  688.  
  689.  21    1   mod     Syntax:  MOD <var1> <val1> <val2>
  690.                    -MOD's VAL1 and VAL2 and puts the result in VAR1.
  691.                    For an example, look below.
  692.  
  693.  22    2   and     Syntax:  AND <var1> <val1> <val2>
  694.                    -AND's VAL1 and VAL2 and puts the result in VAR1.
  695.  
  696.  23    2   or      Syntax:  OR  <var1> <val1> <val2>
  697.                    -OR's VAL1 and VAL2 and puts the result in VAR1.
  698.  
  699.  24    2   xor     Syntax:  XOR <var1> <val1> <val2>
  700.                    -XOR's VAL1 and VAL2 and puts the result in VAR1.
  701.  
  702.  25    2   not     Syntax:  NOT <var1> <val1>
  703.                    -NOT's VAL1 and puts the result in VAR1.
  704.  
  705.  26    3   xchg    Syntax:  XCHG <var1> <var2>
  706.                    -Exchanges the values of VAR1 and VAR2.
  707.                    NOTE- changes the CY register (it uses it 
  708.                          as a temporary storage facility).
  709.                    ALSO NOTE- You can use the word SWAP instead of XCHG.
  710.                               It may be easier to remember.
  711.  
  712.  27    1   do      Syntax:  DO <val1>
  713.                    -Sets the CT register (counter) to VAL1. When using loops
  714.                    this has the effect of determining how many times to 
  715.                    execute that which is in the loop.
  716.  
  717.  
  718.  
  719.  
  720.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 11
  721.  
  722.  28    1   loop    Syntax:  LOOP <label>
  723.                    -This decrements the CT register and loops back to 
  724.                    <label> if the CT register is greater than 0 after
  725.                    the decrement.
  726.  
  727.  29    1   push    Syntax:  PUSH <val1>
  728.                    -This takes VAL1 and puts it on the stack.
  729.  
  730.  30    1   pop     Syntax:  POP  <var1>
  731.                    -Takes the last number put onto the stack, pops it
  732.                    off the stack, and returns the value in VAR1.
  733.  
  734.  
  735.   AT-Robots has several mathematical instructions for your use. If you
  736. already understand them, you can skip to the next section. For those who
  737. don't know what MOD does, read on.
  738.  
  739.   If you don't understand OR, XOR, AND, and NOT, don't worry about it. You
  740. don't need these instructions, they were simply included just in case someone
  741. needs them somewhere sometime.
  742.  
  743.   When you divide two numbers, what you get is the integer part of the
  744. result. Example:
  745.  
  746.    DIV  result 11 3
  747.  
  748.   In this example, it would divide 11 by 3, which is 3.66666. Thus, the
  749. variable "result" would now equal 3.
  750.  
  751.   The MOD instruction returns the remainder in such a division operation.
  752. since 11 divided by 3 is 3 with a remainder of 2, then the same example can
  753. be applied below and have a result of 2.
  754.  
  755.    MOD  result 11 3
  756.  
  757.   As stated, "result" would now equal 2.
  758.  
  759. -----------------------------------------------------------------------------
  760. PORTS:
  761.  
  762.   Each robot is equipped with various peripheral devices. Each one has one 
  763. or more I/O ports through which the robot's program accesses them. Each
  764. port does either input OR output and not both. Some ports take more time to 
  765. access than others, and so a number will be given for slow ones indicating
  766. just how much slower they are.
  767.  
  768.       (The speeds listed below are actually the additional amount of time
  769.        used by the robot to access the port. It simply means that those
  770.        particular ports require different lengths of time to do their
  771.        jobs).
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 12
  781.  
  782.  Port: Spd:  Name:        I/O:  Function:
  783.  
  784.     1    0    Spedometer    I     Returns present speed.     (0-100)
  785.  
  786.     2    0    Heat sensors  I     Returns present heat level (0-500)
  787.  
  788.     3    0    Compass       I     Returns present heading    (0-360)
  789.  
  790.     4    0    Turret Sensor I     Returns offset of turret
  791.  
  792.     5    0    Turret Sensor I     Returns absolute heading of turret.
  793.  
  794.     6    0    Damage Sensor I     Returns armor level remaining (0-100)
  795.  
  796.     7    1    Scan enemies  I     Returns range to nearest enemy within
  797.                                   scan arc (points in direction of turret,
  798.                                   and has arc radius set by port 18) and 
  799.                                   within max range set by port 20. Sets 
  800.                                   Laser accuracy setting based upon present 
  801.                                   settings. Returns a number greater than
  802.                                   1000 (maximum laser range) if no enemy
  803.                                   found (specifically, 5000).
  804.  
  805.     8    0    Accuracy set  I     Returns accuracy setting that was
  806.                                   determined by last run of port 7.
  807.  
  808.     9    0    Radar         I     Returns range to nearest target but is not
  809.                                   limited to the arc width setting. 
  810.  
  811.    10    0    Random GeneratIr    Returns a random number from 0 to 9999.
  812.  
  813.    11    0    Drive System  O     Sets throttle to given setting.
  814.  
  815.    12    0    Turret        O     Offsets turret from present setting by
  816.                                   given angle. (cumulative)
  817.  
  818.    13    0    Turret        O     Sets turret offset to given direction.
  819.                                   (0=forward, 180=back)  (absolute).
  820.  
  821.    14    0    Steering      O     Sets Heading relative to current direction.
  822.  
  823.    15    1    Laser         O     Fires laser with given accuracy setting.
  824.  
  825.    16    0    Sonar         I     Not installed.
  826.  
  827.    17    0    Arc-width     I     Returns present scan-arc width.
  828.  
  829.    18    0    Arc-width     O     Sets scan-arc width to given setting.
  830.  
  831.    19    0    Range         I     Returns present max-range.
  832.  
  833.    20    0    Range         O     Sets max-range to given setting.
  834.  
  835.    21    0    Over-burn     I     Returns present overburn status
  836.                                   (0=off, 1=on).
  837.  
  838.    22    0    Over-burn     O     Sets overburn status to given setting.
  839.                                   (0=off, non-0=on);
  840.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 13
  841. -----------------------------------------------------------------------------
  842. BIOS INTERRUPTS:       (BIOS= Basic Input/Output System)
  843.  
  844.   In addition to I/O ports, the robot is equipped with some built-in 
  845. functions that can be used. These functions are called interrupts. When
  846. and interrupt is generated, the computer makes a note on the stack (so it
  847. knows where to return to), then it stops what it's doing and executes the
  848. interrupt funtion. Afterwards, it checks the stack, and returns to what it
  849. was doing. In your programs you can use the INT command to execute an 
  850. interrupt. When you call an interrupt, you will often need to set some of 
  851. the system registers before executing it, to tell it what to do.
  852.   Note that in the robot's RAM there are interrupt-vectors. If these are 
  853. set to 0, they execute the following. If you re-define an interrupt vector,
  854. then the interrupt will doa GOSUB to the label you set the vector to, instead
  855. of doing the following (as explained later).
  856.   Also note that there are 20 interrupts, but only the following have 
  857. pre-determined functions.
  858.  
  859.       (The speeds listed below are the additional amount of time
  860.        used by the interrupt to do it's job).
  861.  
  862.  
  863.  Int: Spd: AX:      BX:      CX:           Returns/Function:
  864.  
  865.    1    0   -        -        -                Reset's Robot.
  866.  
  867.    2    0   -        -        -                Destruct.
  868.  
  869.    3    0   port     Output   -                Accesses a port. If you are
  870.                                                sending data, set the BX 
  871.                                                register. If receiving data, 
  872.                                                the AZ register holds that
  873.                                                data.
  874.  
  875.    4    0   port     -        -                Returns status of port
  876.                                                (0=functional,
  877.                                                 1=damaged,
  878.                                                 2=destroyed).
  879.                                                (not yet installed)
  880.  
  881.    5    0   -        -        -                Returns location of your 
  882.                                                robot. (BX=x, BY=y)
  883.  
  884.    6    0   Int #    label    -                Sets an interrupt vector as
  885.                                                noted in AX to the label as
  886.                                                specified in BX.
  887.  
  888.    7    0   Direction -       -                Turns Robot number of degrees
  889.                                                specified in AX, and turn
  890.                                                turret same amount in opposite
  891.                                                direction.
  892.  
  893.    8    0   Heading   -       -                Turns robot to face the new
  894.                                                absolute heading specified 
  895.                                                in AX.
  896.  
  897.  
  898.  
  899.  
  900.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 14
  901.  
  902.    9    0   Error     -       -                Generates the error-code you
  903.                                                specify in the AX register.
  904.                                                Particularly useful if you
  905.                                                want to be informed of how
  906.                                                often something in your 
  907.                                                program happens, or whatever.
  908.                                                errors can be from 0 to 99,
  909.                                                0 itself will never be 
  910.                                                generated as a real Error.
  911.  
  912.   10    0   -         -       -                Scans for enemies, just like
  913.                                                port 7. The distance is to the
  914.                                                nearest enemy within scan arc
  915.                                                is returned in AX. The ID
  916.                                                number for the robot is
  917.                                                returned in BX. This can be
  918.                                                used for team robots, etc.
  919.  
  920.   11    0   -         -       -                Get's ID code. Basically,
  921.                                                this routine returns what YOUR
  922.                                                robot's ID number is in AX.
  923.  
  924.  
  925. ------------------------------------------------------------------------------
  926. VARIABLES, MEMORY, & PIECING IT ALL TOGETHER:
  927.  
  928.   In your programs, you may use variables as you wish (up to 80). The 
  929. compiler uses the #DEF statements to find out what YOU call your variables,
  930. but in the end they get converted into OP-codes. Likewise you can simply
  931. use the op-codes in your program without ever defining a variable and get
  932. the same effect.
  933.  
  934.   First you should be made aware of the memory set-up...
  935.  
  936.   Each robot is equipped with 300 bytes of RAM (random-access memory). The
  937. robot-program itself is stored elsewhere in ROM (read-only memory). Each byte
  938. consists of 16 bits and stores a signed integer value (-32767 to +32767).
  939. (We realize usually one byte is 8-bit, but this is A. T-Robots). The first 
  940. 100 bytes are system-memory (0 to 99). Not all of it is used, but it is set 
  941. aside for future improvements. In this range is where the interrupt vectors 
  942. are stored. The next 20 bytes after that (100-119) are reserved for 
  943. system-registers. Not all 20 are used, so far there are only 9 registers,
  944. but they are set aside for future improvements to the ROS (Robot Operating
  945. System). The remaining 180 bytes are free RAM. Everytime you declare a 
  946. variable, it is assigned a memory location in this area, and everywhere that 
  947. variable is encountered in the program, it is replaced with a pointer to that
  948. memory location. You can use this memory directly as well for whatever you 
  949. wish.
  950.   
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 15
  961.  
  962. Here is a listing of memory locations and their uses:
  963.  
  964.   Address:      Function:
  965.        0          Target speed   (speed your robot is trying to acheive) 
  966.        1          Target heading (heading your robot is trying to acheive) 
  967.        2          Turret position.
  968.        3          Accuracy setting (set by port 7).
  969.     4-29          Not in use
  970.       30          Random numbers from 0 to 9999.
  971.    31-50          Interrupt vectors 1 to 20 respectively.
  972.    51-99          Not in use.
  973.      100          AX register
  974.      101          AY register
  975.      102          AZ register
  976.      103          BX register
  977.      104          BY register
  978.      105          BZ register
  979.      106          CX register
  980.      107          CY register
  981.      108          CZ register
  982.  109-117          Not in use. (additions to register table will go here)
  983.      118          CT register
  984.      119          FL (flags) register (not yet in use)
  985.  120-299          Free RAM. Within the range of 120-199 is where variables
  986.                   are placed. All RAM thereafter is useable RAM for anything
  987.                   else (200 to 299).
  988.  
  989.   A memory location that is defined in the range of 0 to 299 is called a
  990. "memory address". The op-code for a memory location is 10000 + <mem address>,
  991. and that is called a "pointer". Anytime the robot comes across a pointer
  992. in the program (unless specified otherwise by a particular command), it
  993. instantly accesses that location in RAM to get a value to use. This holds 
  994. true even for commands. This means you can store commands in your RAM, which
  995. your robot can change later, thus making it possible to make self-rewriting
  996. programs.
  997.   Example:
  998.      #def com
  999.      set  com   7
  1000.      com  2
  1001.  
  1002.   This sample code would destruct the robot. It defines a variable called
  1003. "com", then sets "com" equal to "7". The third line basically makes the 
  1004. robot look inside "com" to find out what command to execute. It finds a "7"
  1005. which is an interrupt call. The parameter is a "2" which thus means that
  1006. interrupt #2 is to be executed, which is "Destruct". The same set of code
  1007. can be re-written as the following:
  1008.      #def com
  1009.      set  com   7
  1010.      com  add
  1011.    
  1012.   The word "add" has an op-code of "2". Since it is the second thing on the
  1013. line, it is used as a parameter instead of a command, thus it means "2".
  1014. If the variable "com" was the first variable declared in the program, it's
  1015. memory address would be "120". It's op-code would then be "10120", thus the 
  1016. same thing could be done like this:
  1017.      set   10120   7
  1018.      10120 add
  1019.  
  1020.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 16
  1021.  
  1022.   The same thing can be done using a register:
  1023.  
  1024.      set   az   7
  1025.      az    add
  1026.  
  1027.   Or the address of the register:
  1028.  
  1029.      set   10102   7
  1030.      10102 add
  1031.  
  1032.   In fact the whole thing can be done using only op-codes:
  1033.  
  1034.      1      10102   7
  1035.      10102  2  
  1036.  
  1037.   Note that in all of these examples, no one particular method is more 
  1038. effective. They all mean the same thing, they all do the same thing, they're
  1039. simply different ways of phrasing the commands.
  1040.  
  1041.  
  1042. CMP's:
  1043.   Now, remember that comparisons (CMP command) set the CZ register to the
  1044. result. Since the CMP command is the only thing that can change the CZ 
  1045. register without you specifically accessing it, you'll be able to make 
  1046. multiple references to it with conditional jumps (JMP et. al.), and since
  1047. the jump commands don't use your robots time, there is nothing to be lost in
  1048. using several of them. The following is an example...
  1049.  
  1050.         CMP     armor   50
  1051.         jls     100
  1052.         jgr     200
  1053.         jeq     300
  1054.  
  1055.   In that set of code, if ARMOR is less than 50, the program will jump to
  1056. the label "100". If it's greater, it'll go to "200" and if it equals it, then
  1057. it'll go to "300". And the whole list of commands will only take up one of
  1058. your robot's program cycles. The CMP command uses time, but not the jumps.
  1059.  
  1060. LOOP's:
  1061.   In loops, the code will be executed the number of times you set in CT. In
  1062. this way it is like a FOR loop in other languages. They are set up like this:
  1063.  
  1064.       DO        <number of times>
  1065.       :<label>
  1066.       ..<commands>
  1067.       ..<commands>
  1068.       LOOP      <label>
  1069.  
  1070.   An example is:
  1071.  
  1072.       DO        5
  1073.       :444
  1074.       opo       15      0
  1075.       LOOP      444
  1076.  
  1077.  
  1078.  
  1079.  
  1080.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 17
  1081.  
  1082.   In this example the commands would instruct the robot to fire 5 times. It
  1083. would take a total of 26 program cycles to execute. Note that the following
  1084. code is not good. It will repeat the loop until your robot lies dead.
  1085.  
  1086.       :444
  1087.       DO        5
  1088.       opo       15      0
  1089.       LOOP      444
  1090.  
  1091.   It would keep looping and keep setting the CT register back to 5, and since
  1092. it never reaches 0, it never stops.
  1093.   Also note that nested loops are not possible without a little extra effort.
  1094. Here is an example of a nested loop:
  1095.  
  1096.       DO        10
  1097.       :444
  1098.       set       bz      ct
  1099.  
  1100.       DO        5
  1101.       :555
  1102.       opo       15      0
  1103.       Loop      555
  1104.  
  1105.       set       ct      bz
  1106.       opo       14      9
  1107.       LOOP      444
  1108.  
  1109.   In that example, you save the contents of CT in BZ while you do the inner
  1110. loop, and then set it back. This code would have the effect that you would 
  1111. fire 5 times, then rotate 9 degrees to the right, and repeat that whole 
  1112. sequence 10 times. Another way to do it would be to use the stack as shown
  1113. here:
  1114.  
  1115.       DO        10
  1116.       :444
  1117.       push      ct
  1118.  
  1119.       DO        5
  1120.       :555
  1121.       opo       15      0
  1122.       Loop      555
  1123.  
  1124.       pop       ct
  1125.       opo       14      9
  1126.       LOOP      444
  1127.  
  1128.  
  1129. -----------------------------------------------------------------------------
  1130. ERRORS AND OTHER USEFUL INFO:
  1131.  
  1132.   Your robots should never generate a runtime error (either in terms of the
  1133. robot, OR the main game itself, but in this case we mean in terms of the 
  1134. robot). If they do make one, and you have the graphics and status bars turned
  1135. on, you'll be made aware of it. If the sound is on, then you'll hear it as 
  1136. well. If you have the graphics off, the bottom row of the status reports
  1137. shows the last error code genereated by your robot. If your robot works 
  1138. properly, it should always be 0.
  1139.  
  1140.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 18
  1141.  
  1142.   When a robot has a runtime error, the program will continue on and simply
  1143. not do the command that created the error. Note that the command that had
  1144. the error STILL uses your robot's time.
  1145.   If you have all the stuff on listed above, you'll be able to find out what 
  1146. the error is. In the status area for your robot, next to the name, a number 
  1147. will appear. This is the error code. It will change color everytime an error
  1148. is generated, so that even if the same code keeps coming up you'll be able to
  1149. tell that another error was generated. 
  1150.  
  1151.  
  1152.   [ Note- on-screen error codes will be displayed only if you use the ]
  1153.   [ -A option in the config file and are using VGA driver 9 & mode 2  ]
  1154.  
  1155.  
  1156. Here is a list of the error codes:
  1157.  
  1158.   Code:    Meaning:
  1159.  
  1160.     0         User-Error
  1161.                 Hmmm, if you got this error you must have programmed it in 
  1162.                 yourself. I certainly hope you know what to do with this 
  1163.                 one.
  1164.  
  1165.     1         Stack full. 
  1166.                 This means that you are trying to call GSB or a conditional 
  1167.                 jump with a non-zero second parameter (which makes it act 
  1168.                 like GSB) and the stack is full. Since the stack is a pretty 
  1169.                 decent size, you either wrote an immensely complex (TOO 
  1170.                 complex) program, or you have left out a RET somewhere.
  1171.                 It's also possible that you are using too many PUSH commands,
  1172.                 as it puts data onto the stack.
  1173.  
  1174.     2         Label not found. 
  1175.                 This means you are calling a GSB, JMP, etc. that is supposed 
  1176.                 to go to a label that doesn't exist. This one is easy to fix.
  1177.  
  1178.     3         Cannot assign value/Illegal memory reference.
  1179.                 Ok, this basically means that you were using a pointer that
  1180.                 points to a non-existent memory location, OR you were trying
  1181.                 to assign a value to a numeric constant (an example of which
  1182.                 would be: SET 5 5).
  1183.  
  1184.     4         Non-Existent port.
  1185.                 To fix this, go check and see just what port you were trying
  1186.                 to access..
  1187.  
  1188.     5         Non-Existent Interrupt.
  1189.                 Ahah! Cought you trying to create a new interrupt! There are
  1190.                 20 interrupts, not all of which are already in use. If you
  1191.                 use one of those, you won't get this error.
  1192.  
  1193.     6         Stack Empty.
  1194.                 Ouch. I hope you aren't reading this because you got this 
  1195.                 error. At anyrate, it means you are calling too many RET's.
  1196.                 Anytime you jump or GSB into a subroutine, you should have
  1197.                 it generate one and only one RET in the subroutine, no more
  1198.  
  1199.  
  1200.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 19
  1201.  
  1202.                 no less. You can have more, but make sure you only execute
  1203.                 one per GSB or a GSB-like conditional jump. Never enter a
  1204.                 subroutine that uses RET with a JMP or non-GSB-like 
  1205.                 conditional jump. Make sure for every PUSH there is one POP.
  1206.                 The PUSH command puts data on the stack, and POP takes it
  1207.                 off. This error could be caused by using too many POP's.
  1208.  
  1209.   For those of you who program in REAL assembly, we have some programming 
  1210. aids for you. There are alternate spellings for some commands that you can 
  1211. use (but remember, NO punctuation marks! That includes commas!! I know how
  1212. attached you get to those commas, but you can't use them!!). 
  1213. Here they are:
  1214.  
  1215.  Command:      Alternate spellings:
  1216.    SET            MOV
  1217.    JEQ            JE
  1218.    JGR            JA
  1219.    JLS            JB
  1220.    XCHG           SWAP
  1221.    IPO            IN
  1222.    OPO            OUT
  1223.  
  1224. -----------------------------------------------------------------------------
  1225. PROGRAMMING THE ROBOTS:
  1226.  
  1227.   Ok, I'll bet you just glanced through the above information and are
  1228. thinking, "Ok, great. It looks nice, but how do I use it?" I hope to explain
  1229. a few details here, but I think the sample robot programs are by far the
  1230. best source of information. Below are a few charts to refer back to at later
  1231. times, and a few general rules to go by. Afterwards is some more text to help
  1232. teach you about those strange little features that make the robots so much
  1233. more deadly, but require some understanding first.
  1234.  
  1235.   General rules:
  1236.            1.  Try to make all the parameters line up in single columns,
  1237.                they're easier to read that way.
  1238.            2.  You MAY leave blank lines. The compiler ignores them.
  1239.            3.  One command is executed each cycle unless otherwise noted.
  1240.            4.  Examining the sample robots is the best teacher.
  1241.            5.  Commands may be upper-case, lower-case, or any combination.
  1242.            6.  Never make multiple labels of the same ID number within the 
  1243.                same program.
  1244.            7.  All robots MUST have the extension ATR.
  1245.                   ex- MYROBOT.ATR, or THISGUY.ATR
  1246.  
  1247.    Each command is executed in one program-cycle. 
  1248.                 (unless it is a particularly slow command)
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 20
  1261.  
  1262. WATCH YOUR HEAT!!  Over-heated robots can easily become DEAD robots!
  1263.  
  1264.   Here is the heat scale:
  1265.  
  1266.     100+   Max speed reduced to 95%.
  1267.     150+   Max speed reduced to 85%.
  1268.     200+   Max speed reduced to 70%.
  1269.     250+   Max speed reduced to 50%.
  1270.     300+   Heat starts burning armor off.
  1271.     400+   Robot stops executing commands until cools below 400 (shutdown).
  1272.     500+   Robot explodes.
  1273.  
  1274.  
  1275. OVER-BURN SHOULD BE USED WITH CAUTION!!!
  1276.  
  1277.   Overburn effects the following:
  1278.              1) better acceleration, but more heat from it.
  1279.              2) better turn speed,   but more heat from it.
  1280.              3) better laser effect, but more heat from it.
  1281.              4) bigger explosion from death or self-destruct.
  1282.              5) worse heat dissipation.
  1283.  
  1284.    (note that most things add to your heat, and on top 
  1285.     of that your heat dissipation is lower. In other 
  1286.     words, time to cook dinner on the armor plating).
  1287.  
  1288.   As you may have seen above, in the port listings, there is something
  1289. called an "accuracy setting". This is a number from -2 to 2 that is set
  1290. when you do a scan. Say for example that you have your arc-width set to 
  1291. 20 degrees. In this case, a robot can be 20 to the left OR right OR anywhere
  1292. in between and still be registered in the scan. Now let's say the target is 
  1293. 20 degrees to the left. The scan would then set the accuracy to -2. It's
  1294. negative because it's on the left, and it's 2 because the robot was at the
  1295. edge of the scan arc. Likewise, if the robot were only 10 degrees to the 
  1296. left, the accuracy would be -1, because it was half-way to the side of the 
  1297. arc. Now let's say the robot is again 20 degrees off. Now when you fire the 
  1298. laser and give it the accuracy rating, it compares it to the arc-width and
  1299. figures out that it's 20 degrees to the side. But the laser can only swivel 
  1300. up to 8 degrees, so it sets it to 8 and fires. Now if the robot was indeed
  1301. 10 degrees to the side, the laser would still have to fire at 8 degrees,
  1302. but it could be quite close, and perhaps the robot has moved into arc since
  1303. the scan itself. Now of course, if you set your scan width to 8 or less, 
  1304. you'll never have to worry about a robot being beyond the laser's swivel 
  1305. range.
  1306.  
  1307.   There are several "setting" ports, such as the turret, and angle ports. The
  1308. default settings are as follows:  (in other words, it's as if these settings
  1309. were at the front of your program, but they don't take time to execute):
  1310.  
  1311.   Item:            Value:
  1312.   -----------------------
  1313.    Turret Offset      0
  1314.    Scan arc radius   10
  1315.    Max Range       1000
  1316.    Overburn         off
  1317.  
  1318.   All variables are set to 0 at the beginning of the battle.
  1319.  
  1320.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 21
  1321.  
  1322.   Note that when you rotate the turret, EVERYthing that is on it turns 
  1323. with it. This includes the scanner AND the laser.
  1324.  
  1325.   If you really want to you can leave spaces before the commands, but the 
  1326. first non-space character must still be a semicolon for remarks, a colon
  1327. for labels, and so forth..
  1328.  
  1329.   Another thing you will want to remember is that the stack for your robot is
  1330. only 100 in size. That means you can call 100 GOSUB's or conditional JUMPS
  1331. or PUSH's before calling a return (RET command) or a POP command. Be careful:
  1332. if the stack fills up, and you call a GOSUB, it will be ignored. There is no
  1333. problem with having excess RETURNS (in your main-loop anyway), if you call
  1334. one when the stack is empty, it too will be ignored. Having misused or
  1335. improperly used these two commands is the greatest cause of robot malfunction.
  1336.  
  1337.   There is an interrupt (int 9) that is used to generate errors. This can be
  1338. useful for debugging robots. You can use it to see if your robot is executing
  1339. a particular subroutine, or be informed of how often a certain area of code
  1340. is executed, etc.. You should use either 0 or numbers in the 90's. This is
  1341. a good safety precaution since more REAL error codes may be added in future
  1342. versions of this program.
  1343.  
  1344. -----------------------------------------------------------------------------
  1345. MNEMONICS, CONSTANTS, ETC:
  1346.  
  1347.   There are many commands, constants, and so forth that can be used in this
  1348. programming language. The constants are particularly useful, since with them
  1349. you need not know which port and interrupt numbers are which.
  1350.  
  1351. Number:     Mnemonic:   Port-Constant:   Interrupt-Constant:
  1352.   1          SET, MOV     _SPEDOMETER      _RESET
  1353.   2          ADD          _HEAT_SENSE      _DESTRUCT
  1354.   3          SUB          _COMPASS         _PORT
  1355.   4          MPY          _TURRET_OFS
  1356.   5          DIV          _TURRET_ABS      _LOCATION
  1357.   6          PUT          _DAMAGE          _SET_INT_VEC
  1358.   7          INT          _SCAN_ENEMY      _TURN_NOTURRET
  1359.   8          GET          _ACCURACY        _HEADING
  1360.   9          LOC          _RADAR           _ERROR
  1361.  10          CMP          _RANDOM
  1362.  11          GSB          _THROTTLE
  1363.  12          RET          _OFS_TURRET
  1364.  13          JMP          _ABS_TURRET
  1365.  14          JLS, JB      _STEERING
  1366.  15          JGR, JA      _LASER
  1367.  16          JEQ, JE      
  1368.  17          JNE          _GET_ARC
  1369.  18          IPO, IN      _SET_ARC
  1370.  19          OPO, OUT     _GET_RANGE
  1371.  20          DEL          _SET_RANGE
  1372.  21          MOD          _GET_OVERBURN
  1373.  22          AND          _SET_OVERBURN
  1374.  23          OR
  1375.  24          XOR
  1376.  25          NOT
  1377.  26          XCHG, SWAP
  1378.  
  1379.  
  1380.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 22
  1381.  
  1382.  27          DO
  1383.  28          LOOP
  1384.  29          PUSH
  1385.  30          POP
  1386.  
  1387.  
  1388.  
  1389. -----------------------------------------------------------------------------
  1390. STAGING A COMPETITION
  1391.  
  1392.    When starting a competition, you should set up several "rules" in advance
  1393. so that everyone involved can take them into account when writing their 
  1394. programs. Among the most important rules are:
  1395.                                     1. Program speed. (the -P# setting)
  1396.                                     2. What the other settings are.
  1397.  
  1398.  
  1399.  
  1400. -----------------------------------------------------------------------------
  1401. TROUBLE-SHOOTING & SPEED-CONTROL
  1402.  
  1403.   The AT-Robots program is basically fully automatic and self-contained. It
  1404. will probably either work or it won't. If there is a problem, most likely
  1405. (but not definitely) you are out of luck. Here are some possible causes of
  1406. your difficulty:
  1407.  
  1408.                  1.  Not enough memory.
  1409.                  2.  Incompatable graphics adapter.
  1410.                  3.  Damaged copy of AT-robots.
  1411.                  4.  Computer is not sufficiently IBM compatable.
  1412.                  5.  You haven't followed any of the instructions.
  1413.                  6.  Computer is damaged or not performing properly.
  1414.                  7.  You're using too early a version of DOS.
  1415.                      (suggest DOS 3.3 or higher)
  1416.  
  1417.  
  1418.   If you HAVE gotten the program to run, but it's too slow, there are some
  1419. things you can do to speed it up. First, You can try putting only 2 or 3 
  1420. robots in the arena at once. You will find that the program slows down a lot
  1421. when you put 5 or 6. Another thing you can do is put the -D0 setting in. That
  1422. will turn off the delay that is placed in the program to keep it running at
  1423. the proper speed on faster computers.
  1424.  
  1425.   If the problem is that the program runs TOO fast, then put the -D1 setting 
  1426. in. You can also put the -N command. Keep playing with different settings on
  1427. the -N until you get it where you want it. If the speed is too fast, you
  1428. may want to put more robots, since there's nothing to stop you from doing it.
  1429.  
  1430.   Also keep in mind that the -A command slows the entire simulation 
  1431. dramatically. It is suggested that you use it when you have the speed to
  1432. spare, and not when it's too slow.
  1433.  
  1434.   The correlation between -D and -N needs to be explained. The delay will be
  1435. implemented every N cycles. Now here's how the delay works: If the number of 
  1436. hundredths of a second (as determined by -D) haven't gone by yet, then the 
  1437.  
  1438.  
  1439.  
  1440.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 23
  1441.  
  1442. program will sit and wait for the time to go by. If the amount of time HAS
  1443. gone by, then it doesn't bother to wait for it. So if you set -N10 and -D10,
  1444. you will probably not see any effect at all (unless your computer is pretty
  1445. fast), simply because it will probably take more than ten hundredths 
  1446. (or rather one tenth) of a second to perform 10 cycles.
  1447.  
  1448. -----------------------------------------------------------------------------
  1449. NOTICE:
  1450.  
  1451.    This program is being distributed on the "shareware" concept. It is by
  1452. no means completely free. If you think the program is of use to you, please
  1453. send a registration fee of $14. If you think that is rediculous, then send
  1454. less (or more for that matter). If you hate the program or found too many
  1455. bugs, write me and tell me, and include a graphic explanation (but don't
  1456. be too harsh!! Heheheh). In any event, write to:
  1457.  
  1458.                            Ed T. Toton III
  1459.                          7101  Talisman Lane
  1460.                           Columbia Md 21045
  1461.  
  1462.  
  1463.  
  1464.       And WHY should you register it?
  1465.         1.  Because you're supposed to. If you use AT-robots somewhat often,
  1466.              or several people use a copy off the same computer, or you
  1467.              keep it on your hard drive for lengthy periods, then it
  1468.              should be registered!
  1469.         2.  To support my continuing efforts to bring you some level of
  1470.              functional programs. If I get no cash, you get no improvements
  1471.              in these programs, and I won't be encouraged to make new and
  1472.              better software!
  1473.         3.  To get that warm glow for knowing that you supported the author 
  1474.              of at least one of the many shareware programs you probably use.
  1475.         4.  To find out if there is a newer version. All you need to do is 
  1476.              ask! But letters with money take priority!
  1477.         5.  You could be sick and demented and thus register everything you
  1478.              get your hands on.
  1479.         6.  To find out about my other programs you need only ask!
  1480.              But again, letters with money take precedence.
  1481.  
  1482.  
  1483.       Source code is not yet available. It may be in later versions.
  1484.  
  1485.  I regret to say that the free StratSys registrations have been discontinued.
  1486.  
  1487. -----------------------------------------------------------------------------
  1488. DISCLAIMER:
  1489.  
  1490.    This program is provided "AS IS" and I make no gauruntees about it's
  1491. performance. I will not be and can not be held responsible for any damages 
  1492. incurred during it's use, or as a result of it's use. It's on a "use at your 
  1493. own risk" basis. Nothing at all should happen, the program is harmless, 
  1494. but I have to say it anyway
  1495.  
  1496.   
  1497.  
  1498.  
  1499.  
  1500.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 24
  1501. -----------------------------------------------------------------------------
  1502. COPYRIGHT:
  1503.  
  1504.    This program may be freely distributed (which is actually encouraged) 
  1505. AS IS. No one may modify this program in ANY way. ESPECIALLY where names
  1506. and credit is given, and INCLUDING all the documentation, data files, and
  1507. executable program files. It may NOT be used for commercial or profit-turning
  1508. ventures of any kind, including sale by disk vendors, without the written 
  1509. consent by ME, with ONE exception: Disk vendors MAY sell it without my 
  1510. written consent ONLY if they charge no more than $5 higher then the cost of 
  1511. the disk (excluding any shipping and handling charges). NOTHING may be added 
  1512. to it either (except in the case of writing to the file COMMENTS.TXT, and
  1513. in the case of adding more robot program files). NO BBS ads are allowed EXCEPT 
  1514. as zip comments, or as a single SEPERATE text file.
  1515.    Any robots you write for use with AT-Robots are yours and you may do what 
  1516. you wish with them. It is encouraged that you distribute robots around as 
  1517. well as this program.
  1518.  
  1519.  
  1520.  
  1521. -----------------------------------------------------------------------------
  1522. FINAL NOTE:
  1523.  
  1524.    If you have any questions, concerns, suggestions, criticisms, donations,
  1525. remarks, praise or opinions, please write! I WANT TO HEAR FROM YOU!! 
  1526. (the address is listed above).
  1527.  
  1528.  
  1529.                                                 Ed T. Toton III
  1530.                                                  "Necromancer"
  1531.                                                      -1992
  1532.  
  1533.  
  1534.    Oh, and one more thing. Your comments are welcome! If there are any 
  1535. statements or comments or suggestions you would like to make to those who
  1536. later try to use AT-Robots, please feel free to add them to the file called
  1537. COMMENTS.TXT. And if you think the comments are good (either yours, or the
  1538. ones already in your COMMENTS.TXT file), please send them to me! I might
  1539. make them a part of the next release of the program (if there is one).
  1540.  
  1541.  
  1542. OTHER SOFTWARE:
  1543.  
  1544.   I have made several programs that may be of interest to you. Here is
  1545.   a list of some of them:     (as of 12/17/92)
  1546.  
  1547.  
  1548.   Ramble v1.0       : =Ramble combines all the elements of Nonsense and
  1549.                        Quick-Quotes into one full-color real-time
  1550.                        environment where you can set the priority and
  1551.                        influence each time of sentance generator has
  1552.                        on the output. Ramble is better than the sum
  1553.                        of it's parts (blab and Quick-Quotes)!
  1554.  
  1555.   SourceGen v1.0    : =Generates silly source code based upon text
  1556.                        files you supply. Can generate gigabytes of
  1557.                        meaningless babble at the press of a key!
  1558.  
  1559.  
  1560.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 25
  1561.  
  1562.   Nonsense v1.2     : =Generates silly text based upon text files you
  1563.                        supply. Can generate gigabytes of meaningless
  1564.                        babble at the press of a key!
  1565.  
  1566.   Quick-Quotes 2.3  : =Generates silly random quotes and text. You can have
  1567.                        it do a "quote of the day" when you boot your computer,
  1568.                        or a quote for when someone logs onto your bbs, or
  1569.                        you can generate megs of nonsensical text.
  1570.  
  1571.   PigLatin v1.0     : =Turns text into pig-latin!!!
  1572.  
  1573.   Anti-Speller v1.0 : =Destroys your spelling. It is the opposite of a
  1574.                        spell-checker. I don't think it is humanly
  1575.                        possible to spell this badly, even on purpose!
  1576.  
  1577.   Blaze v2.6        : =VGA screen-saver. Supports password security,
  1578.                        and a customization system (config file). Has 
  1579.                        been known to travel quickly through BBS's.
  1580.  
  1581.   FireDots v1.3     : =VGA Screen-Saver. Fireworks program, even simulates
  1582.                        duds! Highly configurable.
  1583.  
  1584.   GeoSave v1.2      : =VGA Screen-Saver. Small geometric shapes and strange
  1585.                        objects float and bounce around the screen.
  1586.                        Configurable, supports password, and includes an
  1587.                        image editor so that you can edit the existing images
  1588.                        or create your own.
  1589.  
  1590.   CompWar v2.6      : =Latest release of CompWar, the on-line game for 
  1591.                        use with WWIV BBS systems.
  1592.  
  1593.   Date-Matcher v1.5 : =On-line match-maker program for BBS's that support
  1594.                        DOS interrupt driven door programs (such as WWIV).
  1595.  
  1596.   Virus Farm        : =On-line game. Players are viruses attempting
  1597.                        to take over the hard drive. Designed mostly for
  1598.                        WWIV BBS's.
  1599.  
  1600.   T-Robots v2.0     : =(one of my masterpeices) T-Robots is a system in 
  1601.                        which you program robots to fight one another. It
  1602.                        uses a simple programming language, and you create 
  1603.                        the programs with your favorite text-editor. Great
  1604.                        for competitions! Supports VGA, EGA, CGA, MCGA,
  1605.                        Hercules, and many more graphics devices.
  1606.  
  1607.   AT-Robots v1.1    : =Advanced T-robots. Extremely similar to T-Robots 2.0
  1608.                        except the system has been improved. It supports most
  1609.                        graphics adapters in existance (CGA, EGA, VGA, MCGA,
  1610.                        Hercules, etc). In this one you program the robots 
  1611.                        using ATR assembly (Advanced T-Robots Assembly). Now 
  1612.                        you design your own subroutines, and access specific 
  1613.                        device ports and memory locations. The ultimate in 
  1614.                        competions of logical thought.
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 26
  1621.  
  1622.   StratSys v2.1     : =A 2-player VGA combat strategy game. VERY flexible.
  1623.                        Comes with 4 game scenarios (Cival War, Naval Battle,
  1624.                        Robot Conquest, and a medieval scenario). Expansion
  1625.                        packs are available (at the moment one with 12 
  1626.                        scenarios). Comes with an editor for the images and
  1627.                        maps, so you can make your own scenarios!
  1628.  
  1629.   Dragon's Domain 1 : =A graphic adventure game. The first in the series.
  1630.                        Each sequal also brings improvements to the graphics
  1631.                        and the interface.
  1632.  
  1633.   Dragon's Domain 2 : =The story continues, and the challenge gets more 
  1634.                        challenging!
  1635.  
  1636.   Dragon's Domain 3 : =Yet another one!! Will it never end??
  1637.  
  1638.   Dragon's Domain 4 : =Now it supports Adlib! Will wonders never cease??
  1639.  
  1640.   My-Gags set 2.2   : =A set of small gag programs that I have made. They
  1641.                        are designed to be placed in the autoexec.bat file. 
  1642.                        Over Half of them are TSR's, including one that 
  1643.                        creates "line-noise" through the keyboard buffer,
  1644.                        one that beeps occasionally, and one that keeps 
  1645.                        changing you caps-lock/numlock/scroll-lock. 
  1646.  
  1647.   Toton Utilities 1.0 =A set of 8 SMALL but potentially useful utilities.
  1648.                        Most are TSR's. Several of them make alternate 
  1649.                        drive-lights out of other peripherals. You can make
  1650.                        a drive LED on your screen in the corner, or make
  1651.                        your scroll-lock act as a drive light. Included
  1652.                        is also a program to make clicking sounds as you 
  1653.                        press keys, and a program to turn your num-lock
  1654.                        off during boot-up (for those of you that hate your
  1655.                        num-lock staying on after boot-up).
  1656.  
  1657.  
  1658.  
  1659.  
  1660.  
  1661.  
  1662.  
  1663.  
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.   A. T-Robots  = (c) 1992  =  Ed T. Toton III                          pg 27