home *** CD-ROM | disk | FTP | other *** search
/ ftp.pasteur.org/FAQ/ / ftp-pasteur-org-FAQ.zip / FAQ / games / corewar-faq < prev    next >
Encoding:
Text File  |  2004-05-12  |  45.7 KB  |  1,098 lines

  1. Path: senator-bedfellow.mit.edu!dreaderd!not-for-mail
  2. Message-ID: <games/corewar-faq_1084272547@rtfm.mit.edu>
  3. Supersedes: <games/corewar-faq_1082972703@rtfm.mit.edu>
  4. Expires: 8 Jun 2004 10:49:07 GMT
  5. X-Last-Updated: 1999/09/04
  6. Organization: none
  7. From: anton@paradise.net.nz (Anton Marsden)
  8. Newsgroups: rec.games.corewar,rec.answers,news.answers
  9. Subject: Core War Frequently Asked Questions (rec.games.corewar FAQ)
  10. Followup-To: rec.games.corewar
  11. Approved: news-answers-request@MIT.EDU
  12. Originator: faqserv@penguin-lust.MIT.EDU
  13. Date: 11 May 2004 10:51:04 GMT
  14. Lines: 1079
  15. NNTP-Posting-Host: penguin-lust.mit.edu
  16. X-Trace: 1084272664 senator-bedfellow.mit.edu 574 18.181.0.29
  17. Xref: senator-bedfellow.mit.edu rec.games.corewar:14491 rec.answers:86984 news.answers:271153
  18.  
  19. Archive-name: games/corewar-faq
  20. Last-Modified: September 4, 1999
  21. Version: 4.2
  22. URL: http://homepages.paradise.net.nz/~anton/cw/corewar-faq.html
  23. Copyright: (c) 1999 Anton Marsden
  24. Maintainer: Anton Marsden <anton@paradise.net.nz>
  25. Posting-Frequency: once every 2 weeks
  26.  
  27. Core War Frequently Asked Questions
  28.  
  29. (rec.games.corewar FAQ)
  30.  
  31. These are the Frequently Asked Questions (and answers) from the Usenet
  32. newsgroup rec.games.corewar. A plain text version of this document is posted
  33. every two weeks. The latest hypertext version is available at
  34. http://homepages.paradise.net.nz/~anton/cw/corewar-faq.html and the latest
  35. plain text version is available at
  36. http://homepages.paradise.net.nz/~anton/cw/corewar-faq.txt.
  37.  
  38. This document is currently being maintained by Anton Marsden
  39. (anton@paradise.net.nz).
  40.  
  41. Last modified: Sat Sep 4 00:22:22 NZST 1999
  42.   ------------------------------------------------------------------------
  43.  
  44. To Do
  45.  
  46.    * Add the new No-PSpace '94 hill location
  47.    * Add online location of Dewdney's articles
  48.    * Make question 17 easier to understand. Add a state diagram?
  49.    * Add info about infinite hills, related games (C-Robots, Tierra?, ...)
  50.    * New question: How do I know if my warrior is any good? Refer to
  51.      beginners' benchmarks, etc.
  52.    * Add a Who's Who list?
  53.    * Would very much like someone to compile a collection of the
  54.      "revolutionary" warriors so that beginners can see how the game has
  55.      developed over the years. Mail me if interested.
  56.  
  57.   ------------------------------------------------------------------------
  58.  
  59. What's New
  60.  
  61.    * Changed primary location of FAQ (again!)
  62.    * Changed Philip Kendall's home page address.
  63.    * Updated list server information
  64.    * Changed primary location of FAQ
  65.    * Vector-launching code was fixed thanks to Ting Hsu.
  66.    * Changed the location of Ryan Coleman's paper (LaunchPad -> Launchpad)
  67.    * Changed pauillac.inria.fr to para.inria.fr
  68.  
  69.   ------------------------------------------------------------------------
  70.  
  71. Table of Contents
  72.  
  73.   1. What is Core War
  74.   2. Is it "Core War" or "Core Wars"?
  75.   3. Where can I find more information about Core War?
  76.   4. Core War has changed since Dewdney's articles. Where do I get a copy of
  77.      the current instruction set?
  78.   5. What is ICWS'94? Which simulators support ICWS'94?
  79.   6. What is the ICWS?
  80.   7. What is Core Warrior?
  81.   8. Where are the Core War archives?
  82.   9. Where can I find a Core War system for ...?
  83.  10. Where can I find warrior code?
  84.  11. I do not have FTP. How do I get all this great stuff?
  85.  12. I do not have access to Usenet. How do I post and receive news?
  86.  13. Are there any Core War related WWW sites?
  87.  14. What is KotH? How do I enter?
  88.  15. Is it DAT 0, 0 or DAT #0, #0? How do I compare to core?
  89.  16. How does SLT (Skip if Less Than) work?
  90.  17. What is the difference between in-register and in-memory evaluation?
  91.  18. What is P-space?
  92.  19. What does "Missing ;assert .." in my message from KotH mean?
  93.  20. How should I format my code?
  94.  21. Are there any other Core War related resources I should know about?
  95.  22. What does (expression or term of your choice) mean?
  96.  23. Other questions?
  97.  
  98.   ------------------------------------------------------------------------
  99.  
  100. 1. What is Core War?
  101.  
  102. Core War is a game played by two or more programs (and vicariously by their
  103. authors) written in an assembly language called Redcode and run in a virtual
  104. computer called MARS (for Memory Array Redcode Simulator). The object of the
  105. game is to cause all processes of the opposing program to terminate, leaving
  106. your program in sole posession of the machine.
  107.  
  108. There are Core War systems available for most computer platforms. Redcode
  109. has been standardised by the ICWS, and is therefore transportable between
  110. all standard Core War systems.
  111.  
  112. The system in which the programs run is quite simple. The core (the memory
  113. of the simulated computer) is a continuous array of instructions, empty
  114. except for the competing programs. The core wraps around, so that after the
  115. last instruction comes the first one again.
  116.  
  117. There are no absolute addresses in Core War. That is, the address 0 doesn't
  118. mean the first instruction in the memory, but the instruction that contains
  119. the address 0. The next instruction is 1, and the previous one obviously -1.
  120. However, all numbers are treated as positive, and are in the range 0 to
  121. CORESIZE-1 where CORESIZE is the amount of memory locations in the core -
  122. this means that -1 would be treated as CORESIZE-1 in any arithmetic
  123. operations, eg. 3218 + 7856 = (3218 + 7856) mod CORESIZE. Many people get
  124. confused by this, and it is particularly important when using the SLT
  125. instruction. Note that the source code of a program can still contain
  126. negative numbers, but if you start using instructions like DIV #-2, #5 it is
  127. important to know what effect they will have when executed.
  128.  
  129. The basic unit of memory in Core War is one instruction. Each Redcode
  130. instruction contains three parts:
  131.  
  132.    * the opcode
  133.    * the source address (a.k.a. the A-field)
  134.    * the destination address (a.k.a. the B-field)
  135.  
  136. The execution of the programs is equally simple. The MARS executes one
  137. instruction at a time, and then proceeds to the next one in the memory,
  138. unless the instruction explicitly tells it to jump to another address. If
  139. there is more than one program running, (as is usual) the programs execute
  140. alternately, one instruction at a time. The execution of each instruction
  141. takes the same time, one cycle, whether it is MOV, DIV or even DAT (which
  142. kills the process).
  143.  
  144. Each program may have several processes running. These processes are stored
  145. in a task queue. When it is the program's turn to execute an instruction it
  146. dequeues a process and executes the corresponding instruction. Processes
  147. that are not killed during the execution of the instruction are put back
  148. into the task queue. Processes created by a SPL instruction are added to the
  149. task queue after the creating process is put back into the task queue.
  150.  
  151. [ToC]
  152.   ------------------------------------------------------------------------
  153.  
  154. 2. Is it "Core War" or "Core Wars"?
  155.  
  156. Both terms are used. Early references were to Core War. Later references
  157. seem to use Core Wars. I prefer "Core War" to refer to the game in general,
  158. "core wars" to refer to more than one specific battle.
  159.  
  160. [ToC]
  161.   ------------------------------------------------------------------------
  162.  
  163. 3. Where can I find more information about Core War?
  164.  
  165. Core War was first described in the Core War Guidelines of March, 1984 by D.
  166. G. Jones and A. K. Dewdney of the Department of Computer Science at The
  167. University of Western Ontario (Canada). Dewdney wrote several "Computer
  168. Recreations" articles in Scientific American which discussed Core War,
  169. starting with the May 1984 article. Those articles are contained in two
  170. anthologies:
  171.  
  172.                                                                 Library of
  173.   Author         Title         Published          ISBN           Congress
  174.                                                                 Call Number
  175.            The Armchair
  176.  Dewdney,  Universe: An       New York: W.                     QA76.6 .D517
  177.  A. K.     Exploration of     H. Freeman ⌐0-7167-1939-8        1988
  178.            Computer Worlds    1988
  179.            The Magic                      0-7167-2125-2
  180.  Dewdney,  Machine: A         New York: W.(Hardcover),         QA76.6
  181.  A. K.     Handbook of        H. Freeman ⌐0-7167-2144-9        .D5173 1990
  182.            Computer Sorcery   1990        (Paperback)
  183.  
  184. A.K. Dewdney's articles are still the most readable introduction to Core
  185. War, even though the Redcode dialect described in there is no longer
  186. current. For those who are interested, Dewdney has a home page at
  187. http://www.csd.uwo.ca/faculty/akd/.
  188.  
  189. [ToC]
  190.   ------------------------------------------------------------------------
  191.  
  192. 4. Core War has changed since Dewdney's articles. Where do I get a copy of
  193. the current instruction set?
  194.  
  195. A draft of the official standard (ICWS'88) is available as
  196. ftp://www.koth.org/corewar/documents/standards/redcode-icws-88.Z. This
  197. document is formatted awkwardly and contains ambiguous statements. For a
  198. more approachable intro to Redcode, take a look at Mark Durham's tutorials,
  199. ftp://www.koth.org/corewar/documents/tutorial.1.Z and
  200. ftp://www.koth.org/corewar/documents/tutorial.2.Z.
  201.  
  202. Steven Morrell has prepared a more practically oriented Redcode tutorial
  203. that discusses different warrior classes with lots of example code. This and
  204. various other tutorials can be found at http://www.koth.org/papers.html.
  205.  
  206. Even though ICWS'88 is still the "official" standard, you will find that
  207. most people are playing by ICWS'94 draft rules and extensions.
  208.  
  209. [ToC]
  210.   ------------------------------------------------------------------------
  211.  
  212. 5. What is ICWS'94? Which simulators support ICWS'94?
  213.  
  214. There is an ongoing discussion about future enhancements to the Redcode
  215. language. A proposed new standard, dubbed ICWS'94, is currently being
  216. evaluated. A major change is the addition of "instruction modifiers" that
  217. allow instructions to modify A-field, B-field or both. Also new is a new
  218. addressing modes and unrestricted opcode and addressing mode combination
  219. ("no illegal instructions"). ICWS'94 is backwards compatible; i.e. ICWS'88
  220. warriors will run correctly on an ICWS'94 system. Take a look at the ICWS'94
  221. draft at ftp://www.koth.org/corewar/documents/icws94.0202.Z for more
  222. information. There is a HTML version of this document available at
  223. http://www.koth.org/info/icws94.html. You can try out the new standard by
  224. submitting warriors to the '94 hills of the KotH servers. Two corewar
  225. systems currently support ICWS'94, pMARS (many platforms) and Redcoder
  226. (Mac), both available at ftp://www.koth.org/corewar. Note that Redcoder only
  227. supports a subset of ICWS'94.
  228.  
  229. [ToC]
  230.   ------------------------------------------------------------------------
  231.  
  232. 6. What is the ICWS?
  233.  
  234. About one year after Core War first appeared in Scientific American, the
  235. "International Core War Society" (ICWS) was established. Since that time,
  236. the ICWS has been responsible for the creation and maintenance of Core War
  237. standards and the running of Core War tournaments. There have been six
  238. annual tournaments and two standards (ICWS'86 and ICWS'88). The ICWS is no
  239. longer active.
  240.  
  241. [ToC]
  242.   ------------------------------------------------------------------------
  243.  
  244. 7. What is Core Warrior?
  245.  
  246. Following in the tradition of the Core War News Letter, Push Off, and The 94
  247. Warrior, Core Warrior is a newsletter about strategies and current standings
  248. in Core War. Started in October 1995, back issues of Core Warrior (and the
  249. other newsletters) are available at http://para.inria.fr/~doligez/corewar/.
  250. There is also a Core Warrior index page at
  251. http://www.kendalls.demon.co.uk/pak21/corewar/warrior.html which has a
  252. summary of the contents of each issue of Core Warrior. Many of the earlier
  253. issues contain useful information for beginners.
  254.  
  255. [ToC]
  256.   ------------------------------------------------------------------------
  257.  
  258. 8. Where are the Core War archives?
  259.  
  260. Many documents such as the guidelines and the ICWS standards along with
  261. previous tournament Redcode entries and complete Core War systems are
  262. available via anonymous ftp from ftp://ftp.csua.berkeley.edu/pub/corewar.
  263. Also, most of past rec.games.corewar postings (including Redcode source
  264. listings) are archived there. Jon Blow (blojo@csua.berkeley.edu) is the
  265. archive administrator. When uploading to /pub/corewar/incoming, ask Jon to
  266. move your upload to the appropriate directory and announce it on the net.
  267.  
  268. This site is mirrored at:
  269.  
  270.    * http://www.koth.org/corewar/
  271.    * ftp://www.koth.org/corewar/
  272.    * ftp://ftp.inria.fr/INRIA/Projects/para/doligez/cw/mirror
  273.  
  274. The plain text version of this FAQ is automatically archived by news.answers
  275. (but this version is probably out-of-date).
  276.  
  277. [ToC]
  278.   ------------------------------------------------------------------------
  279.  
  280. 9. Where can I find a Core War system for . . . ?
  281.  
  282. Core War systems are available via anonymous FTP from www.koth.org in the
  283. corewar/systems directory. Currently, there are UNIX, IBM PC-compatible,
  284. Macintosh, and Amiga Core War systems available there. It is a good idea to
  285. check ftp://www.koth.org/corewar/incoming for program updates first.
  286.  
  287. CAUTION! There are many, many Core War systems available which are NOT
  288. ICWS'88 (or even ICWS'86) compatible available at various archive sites
  289. other than www.koth.org. Generally, the older the program - the less likely
  290. it will be ICWS compatible.
  291.  
  292. If you are looking for an ICWS'94 simulator, get pMARS, which is available
  293. for many platforms and can be downloaded from:
  294.  
  295.    * ftp://ftp.csua.berkeley.edu/pub/corewar (original site)
  296.    * ftp://www.koth.org/corewar (koth.org mirror)
  297.    * ftp://ftp.inria.fr/INRIA/Projects/para/doligez/cw/mirror (Planar
  298.      mirror)
  299.    * http://www.nc5.infi.net/~wtnewton/corewar/ (Terry Newton)
  300.    * ftp://members.aol.com/ofechner/corewar (Fechter)
  301.  
  302. Notes:
  303.  
  304.    * If you have trouble running pMARS with a graphical display under Win95
  305.      then check out http://www.koth.org/pmars.html which should have a
  306.      pointer to the latest compilation of pMARS for this environment.
  307.    * RPMs for the Alpha, PowerPC, Sparc and i386 can be found at
  308.      ftp://ftp.inria.fr/INRIA/Projects/para/doligez/cw/pmars-rpm/
  309.  
  310. Reviews of Core War systems would be greatly appreciated in the newsgroup
  311. and in the newsletter.
  312.  
  313. Below is a not necessarily complete or up-to-date list of what's available
  314. at www.koth.org:
  315. MADgic41.lzh            corewar for the Amiga, v4.1
  316. MAD4041.lzh             older version?
  317. MAD50B.lha              corewar for the Amiga, beta version 5.0
  318.  
  319. Redcoder-21.hqx         corewar for the Mac, supports ICWS'88 and '94
  320.                         (without extensions)
  321. core-11.hqx             corewar for the Mac
  322. core-wars-simulator.hqx same as core-11.hqx?
  323.  
  324. corewar_unix_x11.tar.Z  corewar for UNIX/X-windows, ICWS'86 but not ICWS'88
  325.                         compatible
  326.  
  327. koth31.tar.Z            corewar for UNIX/X-windows. This program ran the
  328.                         former KotH server at intel.com
  329. koth.shar.Z             older version
  330. kothpc.zip              port of older version of KotH to the PC
  331.  
  332. deluxe20c.tar.Z         corewar for UNIX (broken X-windows or curses) and
  333.                         PC
  334. mars.tar.Z              corewar for UNIX, likely not ICWS'88 compatible
  335. icons.zip               corewar icons for MS-Windows
  336. macrored.zip            a redcode macro-preprocessor (PC)
  337. c88v49.zip              PC corewar, textmode display
  338. mars88.zip              PC corewar, graphics mode display
  339. corwp302.zip            PC corewar, textmode display, slowish
  340. mercury2.zip            PC corewar written in assembly, fast!
  341. mtourn11.zip            tournament scheduler for mercury (req. 4DOS)
  342.  
  343. pmars08s.zip            portable system, ICWS'88 and '94, runs on UNIX, PC,
  344.                         Mac, Amiga. C source archive
  345. pmars08s.tar.Z          same as above
  346. pmars08.zip             PC executables with graphics display, req 386+
  347.  
  348. macpmars02.sit.hqx      pMARS executable for Mac (port of version 0.2)
  349.                         buggy, no display
  350. MacpMARS1.99a.cpt.hqx   port of v0.8 for the Mac, with display and debugger
  351. MacpMARS1.0s.cpt.hqx    C source (MPW, ThinkC) for Mac frontend
  352.  
  353. pvms08.zip              pMARS v0.8 for VMS build files/help (req.
  354.                         pmars08s.zip)
  355. ApMARS03.lha            pMARS executable for Amiga (port of version 0.3.1)
  356. wincor11.zip            MS-Windows system, shareware ($15)
  357.  
  358. [ToC]
  359.   ------------------------------------------------------------------------
  360.  
  361. 10. Where can I find warrior code?
  362.  
  363. To learn the game, it is a good idea to study previously posted warrior
  364. code. The FTP archives have code in the ftp://www.koth.org/corewar/redcode
  365. directory. A clearly organized on-line warrior collection is available at
  366. the Core War web sites (see below).
  367.  
  368. [ToC]
  369.   ------------------------------------------------------------------------
  370.  
  371. 11. I do not have FTP. How do I get all this great stuff?
  372.  
  373. There is an FTP email server at bitftp@pucc.princeton.edu. This address may
  374. no longer exist. I haven't tested it yet. Send email with a subject and body
  375. text of "help" (without the quotes) for more information on its usage. Note
  376. that many FTP email gateways are shutting down due to abuse. To get a
  377. current list of FTP email servers, look at the Accessing the Internet by
  378. E-mail FAQ posted to news.answers. If you don't have access to Usenet, you
  379. can retrieve this FAQ one of the following ways:
  380.  
  381.    * Send mail to mail-server@rtfm.mit.edu with the body containing "send
  382.      usenet/news.answers/internet-services/access-via-email".
  383.    * Send mail to mailbase@mailbase.ac.uk with the body containing "send
  384.      lis-iis e-access-inet.txt".
  385.  
  386. [ToC]
  387.   ------------------------------------------------------------------------
  388.  
  389. 12. I do not have access to Usenet. How do I post and receive news?
  390.  
  391. To receive rec.games.corewar articles by email, join the COREWAR-L list run
  392. on the Koth.Org list processor. To join, send the message
  393.  
  394.      SUB COREWAR-L FirstName LastName
  395.  
  396. to listproc@koth.org. You can send mail to corewar-l@koth.org to post even
  397. if you are not a member of the list. Responsible for the listserver is Scott
  398. J. Ellentuch (ttsg@ttsg.com).
  399.  
  400. Servers that allow you to post (but not receive) articles are available.
  401. Refer to the Accessing the Internet by E-Mail FAQ for more information.
  402.  
  403. [ToC]
  404.   ------------------------------------------------------------------------
  405.  
  406. 13. Are there any Core War related WWW sites?
  407.  
  408. You bet. Each of the two KotH sites sport a world-wide web server.
  409. Stormking's Core War page is http://www.koth.org; pizza's is
  410. http://www.ecst.csuchico.edu/~pizza/koth . Damien Doligez (a.k.a. Planar)
  411. has a web page that features convenient access to regular newsletters (Push
  412. Off, The '94 Warrior, Core Warrior) and a well organized library of
  413. warriors: http://para.inria.fr/~doligez/corewar/. Convenient for U.S. users,
  414. this site is also mirrored at koth.org.
  415.  
  416. [ToC]
  417.   ------------------------------------------------------------------------
  418.  
  419. 14. What is KotH? How do I enter?
  420.  
  421. King Of The Hill (KotH) is an ongoing Core War tournament available to
  422. anyone with email. You enter by submitting via email a Redcode program
  423. (warrior) with special comment lines. You will receive a reply indicating
  424. how well your program did against the current top programs "on the hill".
  425.  
  426. There are two styles of KotH tournaments, "classical" and "multi-warrior".
  427. The "classical" KotH is a one-on-one tournament, that is your warrior will
  428. play 100 battles against each of the 20 other programs currently on the
  429. Hill. You receive 3 points for each win and 1 point for each tie. (The
  430. existing programs do not replay each other, but their previous battles are
  431. recalled.) All scores are updated to reflect your battles and all 21
  432. programs are ranked from high to low. If you are number 21 you are pushed
  433. off the Hill, if you are higher than 21 someone else is pushed off.
  434.  
  435. In "multi-warrior" KotH, all warriors on the hill fight each other at the
  436. same time. Score calculation is a bit more complex than for the one-on-one
  437. tournament. Briefly, points are awarded based on how many warriors survive
  438. until the end of a round. A warrior that survives by itself gets more points
  439. than a warrior that survives together with other warriors. Points are
  440. calculated from the formula (W*W-1)/S, where W is the total number of
  441. warriors and S the number of surviving warriors. The pMARS documentation has
  442. more information on multi-warrior scoring.
  443.  
  444. The idea for an email-based Core War server came from David Lee. The
  445. original KotH was developed and run by William Shubert at Intel starting in
  446. 1991, and discontinued after almost three years of service. Currently, KotHs
  447. based on Bill's UNIX scripts but offering a wider variety of hills are are
  448. running at two sites: koth@koth.org is maintained by Scott J. Ellentuch
  449. (tuc@ttsg.com) and pizza@ecst.csuchico.edu by Thomas H. Davies
  450. (sd@ecst.csuchico.edu). Up until May '95, the two sites provided overlapping
  451. services, i.e. the some of the hill types were offered by both "pizza" and
  452. "stormking". To conserve resources, the different hill types are now divided
  453. up among the sites. The way you submit warriors to both KotHs is pretty much
  454. the same. Therefore, the entry rules described below apply to both "pizza"
  455. and "stormking" unless otherwise noted.
  456.  
  457. Entry Rules for King of the Hill Corewar
  458.  
  459.    * Write a corewar program. KotH is fully ICWS '88 compatible, EXCEPT that
  460.      a comma (",") is required between two arguments.
  461.  
  462.    * Put a line starting with ";redcode" (or ";redcode-94", etc., see below)
  463.      at the top of your program. This MUST be the first line. Anything
  464.      before it will be lost. If you wish to receive mail on every new
  465.      entrant, use ";redcode verbose". Otherwise you will only receive mail
  466.      if a challenger makes it onto the hill. Use ";redcode quiet" if you
  467.      wish to receive mail only when you get shoved off the hill.
  468.  
  469.      Additionally, adding ";name <program name>" and ";author <your name>"
  470.      will be helpful in the performance reports. Do NOT have a line
  471.      beginning with ";address" in your code; this will confuse the mail
  472.      daemon and you won't get mail back. Using ";name" is mandatory on the
  473.      Pizza hills.
  474.  
  475.      In addition, it would be nice if you have lines beginning with
  476.      ";strategy" that describe the algorithm you use.
  477.  
  478.      There are currently seven separate hills you can select by starting
  479.      your program with ;redcode-94, ;redcode-b, ;redcode-lp, ;redcode-x,
  480.      ;redcode, ;redcode-94x or ;redcode-94m. The former four run at "pizza",
  481.      the latter three at "stormking". More information on these hills is
  482.      listed below.
  483.  
  484.    * Mail this file to koth@koth.org or pizza@ecst.csuchico.edu. "Pizza"
  485.      requires a subject of "koth" (use the -s flag on most mailers).
  486.  
  487.    * Within a few minutes you should get mail back telling you whether your
  488.      program assembled correctly or not. If it did assemble correctly, sit
  489.      back and wait; if not, make the change required and re-submit.
  490.  
  491.    * In an hour or so you should get more mail telling you how your program
  492.      performed against the current top 20 (or 10) programs. If no news
  493.      arrives during that time, don't worry; entries are put in a queue and
  494.      run through the tournament one at a time. A backlog may develop. Be
  495.      patient.
  496.  
  497. If your program makes it onto the hill, you will get mail every time a new
  498. program makes it onto the hill. If this is too much mail, you can use
  499. ";redcode[-??] quiet" when you first mail in your program; then you will
  500. only get mail when you make it on the top 25 list or when you are knocked
  501. off. Using ";redcode[-??] verbose" will give you even more mail; here you
  502. get mail every time a new challenger arrives, even if they don't make it
  503. onto the top 25 list.
  504.  
  505. Often programmers want to try out slight variations in their programs. If
  506. you already have a program named "foo V1.0" on the hill, adding the line
  507. ";kill foo" to a new program will automatically bump foo 1.0 off the hill.
  508. Just ";kill" will remove all of your programs when you submit the new one.
  509. The server kills programs by assigning an impossibly low score; it may
  510. therefore take another successful challenge before a killed program is
  511. actually removed from the hill.
  512.  
  513. Sample Entry
  514.  
  515. ;redcode
  516. ;name Dwarf
  517. ;author A. K. Dewdney
  518. ;strategy Throw DAT bombs around memory, hitting every 4th memory cell.
  519. ;strategy This program was presented in the first Corewar article.
  520. bomb  DAT   #0
  521. dwarf ADD   #4,    bomb
  522.       MOV   bomb, @bomb
  523.       JMP   dwarf
  524.       END   dwarf          ; Programs start at the first line unless
  525.                            ; an "END start" pseudo-op appears to indicate
  526.                            ; the first logical instruction.  Also, nothing
  527.                            ; after the END instruction will be assembled.
  528.  
  529.                                           Duration  Max.
  530.      Hill Name      Hill  Core    Max.     Before  Entry     Min.   Rounds   Instr.
  531.                     Size  Size Processes                   Distance Fought    Set
  532.                                             Tie    Length
  533.  Pizza's ICWS '94
  534.  Draft Hill                                                                 Extended
  535.  (Accessed with       25  8000       8000    80000    100       100     200 ICWS '94
  536.  ";redcode-94")                                                             Draft
  537.  Pizza's Beginner's                                                         Extended
  538.  Hill (Accessed       25  8000       8000    80000    100       100     200 ICWS '94
  539.  with ";redcode-b")                                                         Draft
  540.  Pizza's
  541.  Experimental                                                               Extended
  542.  (Small) Hill         25   800        800     8000     20        20     200 ICWS '94
  543.  (Accessed with                                                             Draft
  544.  ";redcode-x")
  545.  Pizza's Limited
  546.  Process (LP) Hill                                                          Extended
  547.  (Accessed with       25  8000          8    80000    200       200     200 ICWS '94
  548.  ";redcode-lp")                                                             Draft
  549.  Stormking's ICWS
  550.  '88 Standard Hill
  551.  (Accessed with       20  8000       8000    80000    100       100     250 ICWS '88
  552.  ";redcode")
  553.  Stormking's ICWS
  554.  '94 No Pspace Hill
  555.  (Accessed with       20  8000       8000    80000    100       100     250 ICWS '94
  556.  ";redcode-94nop")
  557.  Stormking's ICWS
  558.  '94 Experimental                                                           Extended
  559.  (Big) Hill           20 55440      55440   500000    200       200     250 ICWS '94
  560.  (Accessed with                                                             Draft
  561.  ";redcode-94x")
  562.  Stormking's ICWS
  563.  '94 Multi-Warrior                                                          Extended
  564.  Hill (Accessed       10  8000       8000    80000    100       100     200 ICWS '94
  565.  with                                                                       Draft
  566.  ";redcode-94m")
  567.  
  568. Note: Warriors on the beginner's hill are retired at age 100.
  569.  
  570. If you just want to get a status report without actually challenging the
  571. hills, send email with ";status" as the message body (and don't forget
  572. "Subject: koth" for "pizza"). If you send mail to "pizza" with "Subject:
  573. koth help" you will receive instructions that may be more up to date than
  574. those contained in this document.
  575.  
  576. At "stormking", a message body with ";help" will return brief instructions.
  577. If you submit code containing a ";test" line, your warrior will be assembled
  578. but not actually pitted against the warriors on the hill.
  579.  
  580. At "pizza", you can use ";redcode[-??] test" to do a test challenge of the
  581. Hill without affecting the status of the Hill. These challenges can be used
  582. to see how well your warrior does against the current Hill warriors.
  583.  
  584. All hills run portable MARS (pMARS) version 0.8, a platform-independent Core
  585. War system available at www.koth.org.
  586.  
  587. The '94 and '94x hills allow five experimental opcodes and three
  588. experimental addressing modes currently not covered in the ICWS'94 draft
  589. document:
  590.  
  591.    * LDP - Load P-Space
  592.    * STP - Store P-Space
  593.    * SEQ - Skip if EQual (synonym for CMP)
  594.    * SNE - Skip if Not Equal
  595.    * NOP - (No OPeration)
  596.  
  597.    * * - indirect using A-field as pointer
  598.    * { - predecrement indirect using A-field
  599.    * } - postincrement indirect using A-field
  600.  
  601. [ToC]
  602.   ------------------------------------------------------------------------
  603.  
  604. 15. Is it DAT 0, 0 or DAT #0, #0? How do I compare to core?
  605.  
  606. Core is initialized to DAT 0, 0. This is an illegal instruction (in source
  607. code) under ICWS'88 rules and strictly compliant assemblers (such as KotH or
  608. pmars -8) will not let you have a DAT 0, 0 instruction in your source code -
  609. only DAT #0, #0. So this begs the question, how to compare something to see
  610. if it is empty core. The answer is, most likely the instruction before your
  611. first instruction and the instruction after your last instruction are both
  612. DAT 0, 0. You can use them, or any other likely unmodified instructions, for
  613. comparison. Note that under ICWS'94, DAT 0, 0 is a legal instruction.
  614.  
  615. [ToC]
  616.   ------------------------------------------------------------------------
  617.  
  618. 16. How does SLT (Skip if Less Than) work?
  619.  
  620. SLT gives some people trouble because of the way modular arithmetic works.
  621. It is important to note that all negative numbers are converted to positive
  622. numbers before a battles begins. Example: -1 becomes M-1 where M is the
  623. memory size (core size).
  624.  
  625. Once you realize that all numbers are treated as positive, it is clear what
  626. is meant by "less than". It should also be clear that no number is less than
  627. zero.
  628.  
  629. [ToC]
  630.   ------------------------------------------------------------------------
  631.  
  632. 17. What is the difference between in-register and in-memory evaluation?
  633.  
  634. These terms refer to the way instruction operands are evaluated. The '88
  635. Redcode standard ICWS'88 is unclear about whether a simulator should
  636. "buffer" the result of A-operand evaluation before the B-operand is
  637. evaluated. Simulators that do buffer are said to use in-register evaluation,
  638. those that don't, in-memory evaluation. ICWS'94 clears this confusion by
  639. mandating in-register evaluation. Instructions that execute differently
  640. under these two forms of evaluation are MOV, ADD, SUB, MUL, DIV and MOD
  641. where the effective address of the A-operand is modified by evaluation of
  642. the B-operand. This is best illustrated by an example:
  643.  
  644.    L1  mov L2, <L2
  645.    L2  dat #0, #1
  646.  
  647. Under in-register evaluation, the L2 instruction is saved in a buffer before
  648. the L2 memory location is decremented by evaluation of the B-operand of L1.
  649. The saved DAT #0,#1 instruction is then written to L2, leaving it unchanged.
  650.  
  651. Under in-memory evaluation, the L2 instruction is not buffered and thus
  652. decremented by evaluation of the B-operand. After execution of L1, L2
  653. changes to DAT #0,#0.
  654.  
  655. [ToC]
  656.   ------------------------------------------------------------------------
  657.  
  658. 18. What is P-space?
  659.  
  660. P-space is an area of memory which only your program's processes can access.
  661. The contents of each memory location are preserved between rounds in a
  662. multi-round match.
  663.  
  664. P-space is in many ways different from the core. First of all, each P-space
  665. location can only store one number, not a whole instruction. Also, the
  666. addressing in P-space is absolute, ie. the P-space address 1 is always 1
  667. regardless of where in the core the instruction containing it is. And last
  668. but not least, P-space can only be accessed by two special instructions, LDP
  669. and STP.
  670.  
  671. The syntax of these two instructions is a bit unusual. STP, for example, has
  672. an ordinary value in the core as its source, which is put into the P-space
  673. field pointed to by the destination. So the P-space location isn't
  674. determined by the destination address, but by its value, ie. the value that
  675. would be overwritten if this were a MOV. So STP.AB #Q, #R would put the
  676. value Q into the P-space field R mod PSPACESIZE. Similarly,
  677.  
  678.         stp.b  2, 3
  679.         dat    0, 0
  680.         dat    0, 9
  681.         dat    0, 7
  682.  
  683. would put the value 9 into the P-space field 7. LDP works the same way,
  684. except that now the source is a P-space field and the destination a core
  685. instruction. The P-space location 0 is a special location. It is initialised
  686. to a special value before each round. This value is:
  687.  
  688.    * -1 (or CORESIZE-1) at the beginning of the first round
  689.    * 0 if the program died in the previous round
  690.    * The number of surviving programs if the program did not die in the
  691.      previous round
  692.  
  693. This means that for one-on-one matches, loss=0, win=1 and tie=2.
  694.  
  695. The default size of P-space is 1/16 of the core size. This size is the value
  696. of the predefined variable PSPACESIZE. The addresses in the P-space wrap
  697. around just like in the core, ie. you can store a value from 0 to CORESIZE-1
  698. in each P-space location. All P-space values (except for location 0) are 0
  699. initially.
  700.  
  701. [ToC]
  702.   ------------------------------------------------------------------------
  703.  
  704. 19. What does "Missing ;assert .." in my message from KotH mean?
  705.  
  706. This means you have omitted an ";assert" line in your submission. ";assert"
  707. is used to specify which environments your code will work under or was
  708. designed for. For example, if your warrior was written for the '94 draft
  709. hill then you can put:
  710.  
  711. ;assert CORESIZE==8000
  712.  
  713. in your code, meaning that an error will occur if you attempt you compile
  714. the code for a different core size. If you don't want to use the features of
  715. ";assert" and you want to get rid of the annoying warning just put:
  716.  
  717. ;assert 1
  718.  
  719. in your code, which means it will compile unconditionally.
  720.  
  721. [ToC]
  722.   ------------------------------------------------------------------------
  723.  
  724. 20. How should I format my code?
  725.  
  726. The way you format your code is really your own choice in the end. If you
  727. are new to the game then use the style you feel most comfortable with.
  728. However, using a common format helps others to understand your code quicker.
  729. Most players tend to use the following conventions when writing code:
  730.  
  731.    * use lower case for location names and opcode names
  732.    * don't add opcode modifiers if you don't need to, eg. add.ab #1, #2 is
  733.      the same as add #1, #2
  734.    * use whitespace after every comma
  735.    * use tabs to align the opcodes, the instruction field(s) and any
  736.      comments
  737.    * do not use $ (direct addressing mode) or : (suffix of some labels)
  738.  
  739. [ToC]
  740.   ------------------------------------------------------------------------
  741.  
  742. 21. Are there any other Core War related resources I should know about?
  743.  
  744. Using genetic algorithms to generate warriors has been attempted by a number
  745. of people. There are a number of resources available for people who are
  746. interested in doing some experimentation:
  747.  
  748.    * There is a Core War genetic algorithms mailing list at
  749.      corewar-ga-request@sunsite.auc.dk. The FTP site for this list is at
  750.      ftp://sunsite.auc.dk/pub/local/corewar/. The administrator is Martin
  751.      Pedersen (martin.pedersen@person.dk).
  752.    * Jason's Core War project page
  753.      (http://www.avalon.net/~jboer/projects/corewar/corewar.html) contains a
  754.      C program which can evolve warriors, along with some previously
  755.      generated warriors.
  756.    * Core Wars Genetics: The Evolution of Predation by John Perry can be
  757.      found at http://www.koth.org/evolving_warriors.html.
  758.    * The most recent paper on Core War evolution is by Ryan Coleman and can
  759.      be found at
  760.      http://www.geocities.com/CapeCanaveral/Launchpad/6898/paper.html.
  761.  
  762. [ToC]
  763.   ------------------------------------------------------------------------
  764.  
  765. 22. What does (expression or term of your choice) mean?
  766.  
  767. Here is a selected glossary of terms. If you have a definition and/or term
  768. you wish to see here, please send it to me.
  769.  
  770. (References to an X-like program mean that the term X is derived from the
  771. specific program X and has become a generic term).
  772.  
  773. Binary launch
  774.      One of several means to start an imp-spiral running. The fastest launch
  775.      technique, but requires the most code. See also JMP/ADD Launch and
  776.      Vector Launch.
  777.  
  778.          impsize   equ 2667
  779.          example   spl 4               ; extend by adding spl 8, spl 16, etc.
  780.                    spl 2
  781.                    jmp imp+(0*impsize) ; jmp's execute in order
  782.                    jmp imp+(1*impsize)
  783.                    spl 2
  784.                    jmp imp+(2*impsize)
  785.                    jmp imp+(3*impsize)
  786.          imp       mov 0, impsize      ; in '94 use -> mov.i #0, impsize
  787.  
  788. Bootstrapping
  789.      Strategy of copying the active portion of the program away from the
  790.      initial location, leaving a decoy behind and making the relocated
  791.      program as small as possible.
  792.  
  793. B-Scanners
  794.      Scanners which only recognize non-zero B-fields.
  795.  
  796.          example   add #10, scan
  797.          scan      jmz example, 10
  798.  
  799. c
  800.      Measure of speed, equal to one location per cycle. Speed of light.
  801.  
  802. CMP-Scanner
  803.      A Scanner which uses a CMP instruction to look for opponents.
  804.  
  805.          example   add step, scan
  806.          scan      cmp 10, 30
  807.                    jmp attack
  808.                    jmp example
  809.          step      dat #20, #20
  810.  
  811. Colour
  812.      Property of bombs making them visible to scanners, causing them to
  813.      attack useless locations, thus slowing them down.
  814.  
  815.          example   dat #100
  816.  
  817. Core-Clear
  818.      Code that sequentially overwrites core with DAT instructions; usually
  819.      the last part of a program.
  820.  
  821. Decoys
  822.      Bogus or unused instructions meant to slow down scanners. Typically,
  823.      DATs with non-zero B-fields.
  824.  
  825. Decrement Resistant
  826.      Property of warriors making them functional (or at least partially
  827.      functional) when overrun by a DJN-stream.
  828.  
  829. DJN-Stream (also DJN-Train)
  830.      Using a DJN command to rapidly decrement core locations.
  831.  
  832.          example   ...
  833.                    ...
  834.                    djn example, <4000
  835.  
  836. Dwarf
  837.      The prototypical small bomber.
  838.  
  839. Gate-busting (also gate-crashing)
  840.      technique to "interweave" a decrement-resistant imp-spiral (e.g. MOV 0,
  841.      2668) with a standard one to overrun imp-gates.
  842.  
  843. Hybrids
  844.      warriors that combine two or more of the basic strategies, either in
  845.      sequence (e.g. stone->paper) or in parallel (e.g. imp/stone).
  846.  
  847. Imp
  848.      Program which only uses the MOV instruction.
  849.  
  850.          example   mov 0, 1
  851.  
  852.      or
  853.  
  854.          example   mov 0, 2
  855.                    mov 0, 2
  856.  
  857. Imp-Gate
  858.      A location in core which is bombed or decremented continuously so that
  859.      an Imp can not pass. Also used to describe the program-code which
  860.      maintains the gate.
  861.  
  862.          example   ...
  863.                    ...
  864.                    spl 0, <example
  865.                    dat <example, #0
  866.  
  867. Imp-Ring
  868.      A minimal Imp-Spiral.
  869.  
  870.          D         EQU (CORESIZE+1)/3
  871.          a         mov 0, D   ; copy self to b
  872.          b         mov 0, D   ; copy self to c
  873.          c         mov 0, D   ; copy self to a+1
  874.  
  875. Imp-Spiral
  876.      An Imp-like program with two or more processes supporting each other. A
  877.      three-point spiral, with six processes running in this sequence:
  878.  
  879.          D         EQU (CORESIZE+1)/3
  880.          a         mov 0, D   ; copy self to b
  881.          b         mov 0, D   ; copy self to c
  882.          c         mov 0, D   ; copy self to a+1
  883.          a+1       mov 0, D   ; copy self to b+1
  884.          b+1       mov 0, D   ; copy self to c+1
  885.          c+1       mov 0, D   ; copy self to a+2
  886.  
  887. Incendiary Bomb
  888.      A type of Stun bomb which creates a SPL 0 carpet.
  889.  
  890.          example   spl 0, 8
  891.                    mov -1, <-1
  892.  
  893. JMP/ADD Launch
  894.      one of several means to start an imp-spiral running. The slowest launch
  895.      technique, but requires the least code. See also Binary Launch and
  896.      Vector Launch.
  897.  
  898.          IMPSIZE   EQU 2667
  899.          example   spl 1               ; extend by adding more spl 1's
  900.                    spl 1
  901.                    spl 2
  902.                    jmp @0, imp
  903.                    add #IMPSIZE, -1    ; bump address by impsize after each jmp
  904.                    dat #0, #0          ; excess processes must die!
  905.          imp       mov 0, IMPSIZE      ; in '94 use -> mov.i #0,IMPSIZE
  906.  
  907. Mirror
  908.      see reflection.
  909.  
  910. On-axis/off-axis
  911.      On-axis scanners compare two locations M/2 apart, where M is the memory
  912.      size. Off-axis scanners use some other separation.
  913.  
  914. Optimal Constants
  915.      (also optima-type constants) Bomb or scan increments chosen to cover
  916.      core most effectively, i.e. leaving gaps of uniform size. Programs to
  917.      calculate optimal constants and lists of optimal numbers are available
  918.      at www.koth.org.
  919.  
  920. Paper
  921.      A Paper-like program is one which replicates itself many times. Part of
  922.      the Scissors (beats) Paper (beats) Stone (beats Scissors) analogy.
  923.  
  924. P-Warrior
  925.      A warrior which uses the results of previous round(s) in order to
  926.      determine which strategy it will use.
  927.  
  928. Pit-Trapper
  929.      (also Slaver, Vampire). A program which enslaves another. Usually
  930.      accomplished by bombing with JMPs to a SPL 0 pit with an optional
  931.      core-clear routine.
  932.  
  933. Q^2 Scan
  934.      A modern version of the Quick Scan where anything found is attacked
  935.      almost immediately.
  936.  
  937. Quick Scan
  938.      2c scan of a set group of core locations with bombing if anything is
  939.      found. Both of the following codes snips scan 16 locations and check
  940.      for a find. If anything is found, it is attacked, otherwise 16 more
  941.      locations are scanned.
  942.  
  943.      Example:
  944.  
  945.           start
  946.           s1 for 8    ;'88 scan
  947.                  cmp  start+100*s1, start+100*s1+4000 ;check two locations
  948.                  mov  #start+100*s1-found, found      ;they differ so set pointer
  949.           rof
  950.                  jmn  attack,   found    ;if we have something, get it
  951.           s2 for 8
  952.                  cmp  start+100*(s2+6), start+100*(s2+6)+4000
  953.                  mov  #start+100*(s2+6)-found, found
  954.           rof
  955.           found  jmz  moveme,  #0        ;skip attack if qscan found nothing
  956.           attack cmp  @found,  start-1   ;does found points to empty space?
  957.                  add  #4000,   found     ;no, so point to correct location
  958.                  mov  start-1, @found    ;move a bomb
  959.           moveme jmp  0,       0
  960.  
  961.      In ICWS'94, the quick scan code is more compact because of the SNE
  962.      opcode:
  963.  
  964.           start       ;'94 scan
  965.           s1 for 4
  966.                  sne  start+400*s1, start+400*s1+100     ;check two locations
  967.                  seq  start+400*s1+200, start+400*s1+300 ;check two locations
  968.                  mov  #start+400*s1-found, found       ;they differ so set pointer
  969.           rof
  970.                  jmn  which,   found     ;if we have something, get it
  971.           s2 for 4
  972.                  sne  start+400*(s2+4), start+400*(s2+4)+100
  973.                  seq  start+400*(s2+4)+200, start+400*(s2+4)+300
  974.                  mov  #start+400*(s2+4)-found-100, found
  975.           rof
  976.           found  jmz  moveme,  #0        ;skip attack if qscan found nothing
  977.                  add  #100,    -1        ;increment pointer till we get the
  978.           which  jmn  -1,      @found    ;right place
  979.                  mov  start-1, @found    ;move a bomb
  980.           moveme jmp  0,       0
  981.  
  982. Reflection
  983.      Copy of a program or program part, positioned to make the active
  984.      program invisible to a CMP-scanner.
  985.  
  986. Replicator
  987.      Generic for Paper. A program which makes many copies of itself, each
  988.      copy also making copies.
  989.  
  990. Self-Splitting
  991.      Strategy of amplifying the number of processes executing a piece of
  992.      code.
  993.  
  994.          example    spl 0
  995.          loop       add #10, example
  996.                     mov example, @example
  997.                     jmp loop
  998.  
  999. Scanner
  1000.      A program which searches through core for an opponent rather than
  1001.      bombing blindly.
  1002.  
  1003. Scissors
  1004.      A program designed to beat replicators, usually a (B-field scanning)
  1005.      vampire. Part of the Paper-Scissors-Stone analogy.
  1006.  
  1007. Self-Repair
  1008.      Ability of a program to fix it's own code after attack.
  1009.  
  1010. Silk
  1011.      A replicator which splits off a process to each new copy before
  1012.      actually copying the code. This allows it to replicate extremely
  1013.      quickly. This technique is only possible under the '94 draft, because
  1014.      it requires post-increment indirect addressing. Example:
  1015.  
  1016.                  spl   1
  1017.                  mov   -1, 0
  1018.                  spl   1                ;generate 6 consecutive processes
  1019.          silk    spl   3620,   #0       ;split to new copy
  1020.                  mov   >-1, }-1      ;copy self to new location
  1021.                  mov   bomb,   >2000 ;linear bombing
  1022.                  mov   bomb,   }2042    ;A-indirect bombing for anti-vamp
  1023.                  jmp   silk,   {silk    ;reset source pointer, make new copy
  1024.          bomb    dat   >2667,  >5334  ;anti-imp bomb
  1025.  
  1026. Slaver
  1027.      see Pit-Trapper.
  1028.  
  1029. Stealth
  1030.      Property of programs, or program parts, which are invisible to
  1031.      scanners, accomplished by using zero B-fields and reflections.
  1032.  
  1033. Stone
  1034.      A Stone-like program designed to be a small bomber. Part of the
  1035.      Paper-Scissors-Stone analogy.
  1036.  
  1037. Stun
  1038.      A type of bomb which makes the opponent multiply useless processes,
  1039.      thus slowing it down. Example is referred to as a SPL-JMP bomb.
  1040.  
  1041.          example    spl   0
  1042.                     jmp   -1
  1043.  
  1044. Two-Pass Core-Clear (also SPL/DAT Core-Clear)
  1045.      core clear that fills core first with SPL instructions, then with DATs.
  1046.      This is very effective in killing paper and certain imp-spiral
  1047.      variations.
  1048.  
  1049. Vampire
  1050.      see Pit-Trapper.
  1051.  
  1052. Vector Launch
  1053.      one of several means to start an imp-spiral running. As fast as Binary
  1054.      Launch, but requiring much less code. See also JMP/ADD Launch and
  1055.      Binary Launch. This example is one form of a Vector Launch:
  1056.  
  1057.          sz      EQU   2667
  1058.  
  1059.                  spl   1
  1060.                  spl   1
  1061.                  jmp   @vt, }0
  1062.          vt      dat   #0, imp+0*sz ; start of vector table
  1063.                  dat   #0, imp+1*sz
  1064.                  dat   #0, imp+2*sz
  1065.                  dat   #0, imp+3*sz ; end of vector table
  1066.          imp     mov.i #0, sz
  1067.  
  1068. [ToC]
  1069.   ------------------------------------------------------------------------
  1070.  
  1071. 23. Other questions?
  1072.  
  1073. Just ask in the rec.games.corewar newsgroup or contact me. If you are shy,
  1074. check out the Core War archives first to see if your question has been
  1075. answered before.
  1076.  
  1077. [ToC]
  1078.   ------------------------------------------------------------------------
  1079.  
  1080. Credits
  1081.  
  1082. Additions, corrections, etc. to this document are solicited. Thanks in
  1083. particular to the following people who have contributed major portions of
  1084. this document:
  1085.  
  1086.    * Mark Durham (wrote the original version of the FAQ)
  1087.    * Paul Kline
  1088.    * Randy Graham
  1089.    * Stefan Strack (maintained a recent version of the FAQ)
  1090.  
  1091.   ------------------------------------------------------------------------
  1092.  
  1093. Copyright ⌐ 1999 Anton Marsden.
  1094.  
  1095. Verbatim copying and distribution of this entire article is permitted in any
  1096. medium, provided this notice is preserved.
  1097.   ------------------------------------------------------------------------
  1098.