REDCODE(6)                  (5/20/84)                  REDCODE(6)

     NAME
          redcode - assembler for mars game

     SYNOPSIS
          redcode file1 file2 ...

     DESCRIPTION
          Redcode is an assembler for the Redcode assembly language
          specified by Dr. Kee Dewdney in the "Computer Recreations"
          column in the May 1984 issue of Scientific American. The
          command line contains a list of source file names (including
          the extension ".red") to be assembled.  The result is a cor-
          responding number of object files with extension ".obj".
          For example, the following command:

               redcode dwarf.red gemini.red imp.red

          would assemble these three programs and create files
          dwarf.obj gemini.obj imp.obj.

     SOURCE FILES
          A source file consists of a name directive which specifies
          the program's name, followed by any number of program and
          data statements, followed by an end directive which speci-
          fies the starting location of the program.  Statements have
          the following syntax:

               [label] opcode arg1 [arg2] [; comment]

     ADDRESSING MODES
          There are three addressing modes; all address calculations
          are done modulo 8000.

          Syntax         Meaning

          #[0-9]+        immediate
          [0-9]+         relative
          @[0-9]+        indirect, relative

     OPCODES
          The following opcodes are implemented, along with the corre-
          sponding semantics specified in pseudo-C:
          Instruction    Mnem Opcode    Args Explanation

          Move      mov  1    A B  B=A
          Add       add  2    A B  B+=A
          Subtract  sub  3    A B  B-=A
          Jump      jmp  4    A    PC=A
          Jump if zero   jmz  5    A B  PC=(B==0)?A:PC+1
          Jump if greater     jmg  6    A B  PC=(B<4000)?A:PC+1

     REDCODE(6)                  (5/20/84)                  REDCODE(6)

          Dec, Jmp if 0  djz  7    A B  PC=(--B==0)?A:PC+1
          Compare        cmp  8    A B  PC=(A==B)?PC+1:PC+2

     PSEUDO-OPS
          The following non-executable directives may be used to
          reserve and initialize data space:

          Directive Mnem Arg  Explanation

          Buffer space   bss  n    Reserve n words
          Data      data A    Initialize 1 word
          Name      name 't'  Name of program
          End       end  start     Specify starting location

     A SAMPLE REDCODE PROGRAM
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;; Dwarf, a sample Redcode program
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

               name 'dwarf'
          site data -1        ; address of last 0 'bomb'
          start     add  #5   site ; move site forward
               mov  #0   @site     ; write 0 'bomb'
               jmp  start          ; loop
               end  start

     OBJECT FILES
          For documentation on the object code format, see mars(6).

     SEE ALSO
          mars(6)

     HISTORY
          20-May-84 Paul Milazzo (milazzo) at RICE
               Created.