home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / language / motasm / asembler.doc < prev   
Text File  |  1993-10-23  |  10KB  |  279 lines

  1.  
  2.  
  3.           The IBM PC 6800/01/04/05/09/11 cross assemblers
  4.           (Now also for Atari ST)
  5.  
  6. GENERAL
  7.     The assemblers are named as*.exe (as*.ttp for Atari ST) where '*'
  8.     is  any of 0,1,h1,4,5,9 or 11 depending on which one you're using. 
  9.     Command line arguments specify the filenames to assemble.
  10.  
  11.     The assemblers accept options from the command line to be
  12.     included in the assembly.  These options are the following:
  13.  
  14.         l       enable output listing.
  15.         nol    disable output listing (default).
  16.         cre    generate cross reference table.
  17.         s       generate a symbol table.
  18.         c       enable cycle count.
  19.         noc    disable cycle count.
  20.  
  21.     The command line looks like this :
  22.  
  23.            as* file1 file2 ... [ - option1 option2 ...]
  24.  
  25.     If this method of passing commands to the assembler is
  26.     used rather than the OPT pseudo op code, a space should
  27.     separate the minus sign from the last file name and the
  28.     first option.  Example:
  29.  
  30.        as5 program -l cre
  31.  
  32.     This command assembles file 'program' with an output
  33.     listing and a cross reference table.
  34.  
  35.     The `S1' formatted object file is placed in file
  36.     `filename.S19', the listing and error messages are
  37.     written to  the standard output.  If multiple files are
  38.     assembled, the 'S1' file will be placed under the first
  39.     file's name.S19.
  40.  
  41.     The listing file contains the address and bytes assembled for each
  42.     line of input followed by the original input line (unchanged, but
  43.     moved over to the right some).    If an input line causes more than 6
  44.     bytes to be output (e.g. a long FCC directive), additional bytes
  45.     (up to 64) are listed on succeding lines with no address preceding
  46.     them.
  47.  
  48.     Equates cause the value of the expression to replace the address
  49.     field in the listing.
  50.  
  51.     Equates that have forward references cause Phasing Errors in Pass
  52.     2.
  53.  
  54.     Expressions may consist of symbols, constants or the character    '*'
  55.     (denoting the current value of the program counter) joined together
  56.     by one of the operators: +-*/%&|^.  The operators are the same as
  57.     in C:
  58.  
  59.         +    add
  60.         -    subtract
  61.         *    multiply
  62.         /    divide
  63.         %    remainder after division
  64.         &    bitwise and
  65.         |    bitwise or
  66.         ^    bitwise exclusive-or
  67.  
  68.     Expressions are evaluated left to right and there is no provision
  69.     for parenthesized expressions.    Arithmetic is carried out in signed
  70.     twos-complement integer precision (16 bits on the IBM PC, also 16
  71.     bit on the Atari ST)
  72.  
  73.     Constants are constructed with the same syntax as the Motorola MDOS
  74.     assembler:
  75.  
  76.         '       followed by ASCII character
  77.         $    followed by hexadecimal constant
  78.         @    followed by octal constant
  79.         %    followed by binary constant
  80.         digit    decimal constant
  81.  
  82. ERRORS
  83.  
  84.     Error diagnostics are placed in the listing file just before the
  85.     line containing the error.  Format of the error line is:
  86.  
  87.         Line_number: Description of error
  88.             or
  89.         Line_number: Warning --- Description of error
  90.  
  91.     Errors of the first type in pass one  cause  cancellation  of  pass
  92.     two.  Warnings    do  not  cause    cancellation of pass two but should
  93.     cause you to wonder where they came from.
  94.  
  95.     Error messages are meant to be self-explanatory.
  96.  
  97.     If more than one file is being assembled, the  file  name  precedes
  98.     the error:
  99.  
  100.         File_name,Line_number: Description of error
  101.  
  102.     Finally, some errors are classed as fatal and  cause  an  immediate
  103.     termination  of  the assembly.    Generally these errors occur when a
  104.     temporary file cannot be created or is lost  during  the  assembly.
  105.     Consult your local guru if this happens.
  106.  
  107.  
  108. DIFFERENCES
  109.  
  110.     For indexed addressing, the comma is required before the  register;
  111.     `inc x' and `inc ,x' are not the same.
  112.  
  113.         Macros are not supported.  (try M4 or M6)
  114.  
  115.     The force size operators ('>' and  '<')  are  implemented  for  all
  116.     assemblers.
  117.  
  118.         The only pseudo-ops supported are:
  119.  
  120.             ORG, FCC, FDB, FCB, EQU, RMB, BSZ, ZMB, FILL
  121.             PAGE and OPT.
  122.  
  123.         The OPT pseudo-op allows the following operands:
  124.  
  125.             nol    Turn off output listing
  126.             l    Turn on output listing (default)
  127.             noc    Disable cycle counts in listing (default)
  128.             c    Enable cycle counts in listing (clear total cycles)
  129.             contc    Re-enable cycle counts (don't clear total cycles)
  130.             cre    Enable printing of a cross reference table
  131.             s    generate a symbol table
  132.  
  133.         Some of the more common pseudo-ops are not present:
  134.  
  135.             SPC    Use blank lines instead
  136.             END    The assembly ends when there is no more input
  137.             TTL    use `pr' to get headings and page numbers
  138.             NAM[E]    Did you ever use this one anyway?
  139.  
  140.         The above 4 pseudo-ops are recognized, but ignored.
  141.  
  142.         ZMB (Zero Memory Bytes) is equivalent to BSZ (Block Store  Zeroes).
  143.         FILL can be used to initialize memory to something other than zero:
  144.         FILL val,nbytes.
  145.  
  146. TARGET MACHINE SPECIFICS
  147.  
  148.  (as0)    6800:    Use for 6802 and 6808 too.
  149.  
  150.  (as1)    6801:    You could use this one for  the  6800  and  avoid
  151.         LSRD, ASLD, PULX, ABX, PSHX, MUL, SUBD, ADDD, LDD
  152.         and STD.
  153.  
  154.  (as4)    6804:    The symbols 'a', 'x' and 'y'  are  predefined  as
  155.         $FF, $80 and $81 respectively.    Also  defined  as
  156.         'A',   'X'   and   'Y'.    Because  of  the  6804
  157.         architecture, this means that 'clr x'  will  work
  158.         since  the  x register is just a memory location.
  159.         To  use  short-direct  addressing,   the   symbol
  160.         involved  must    not  be a forward reference (i.e.
  161.         undefined) and must be in the range $80-$83.
  162.  
  163.         Remember  that    bytes  assembled  in  the   range
  164.         $10-$7F  will go into the data space; There is no
  165.         program space ROM for these locations.
  166.  
  167.         The syntax for Register indirect addressing is as
  168.         follows:
  169.               menmonic [<x>or<y>]
  170.         an example is:
  171.                 lda [x]
  172.         the comma ',' is not allowed.
  173.  
  174.         The MVI instruction (move immediate) has its own
  175.         format :
  176.  
  177.              mvi address,#data   where address is
  178.            an 8-bit address in page zero, and data is
  179.            the value to be written to specified location.
  180.  
  181.  (as5)    6805:    There is no 'opt cmos' pseudo, so be careful  not
  182.         to use STOP or WAIT in a program that is destined
  183.         for  an  NMOS  version    of  the  6805.     The  MUL
  184.         instruction   should   also  be  avoided  on  all
  185.         versions of the 6805 except the C4.  Cycle  times
  186.         are for the NMOS versions.
  187.  
  188.  (as9)    6809:    The SETDP pseudo-op is not implemented.
  189.         Use the '>' and '<` operators to force the size of
  190.         operands.
  191.  
  192.             For compatibility, CPX is equal to CMPX.
  193.  
  194.  (as11) 68HC11: Bit manipulation operands are separated by  blanks  instead
  195.         of commas since the 'HC11 has bit manipulation instructions
  196.         that operate on indexed addresses.
  197.  
  198. DETAILS
  199.     Symbol:  A string of  characters  with    a  non-initial    digit.    The
  200.         string of characters may be from the set:
  201.  
  202.                [a-z][A-Z]_.[0-9]$
  203.  
  204.         ( . and _ count as non-digits ).  The `$' counts as a digit
  205.         to   avoid   confusion    with  hexadecimal  constants.    All
  206.         characters of a symbol    are  significant,  with  upper    and
  207.         lower  case  characters being distinct.  The maximum number
  208.         of characters in a symbol is currently set at 15.
  209.  
  210.         The symbol table has room for  at  least  2000    symbols  of
  211.         length 8 characters or less.
  212.  
  213.     Label:    A symbol starting in the first column is a  label  and    may
  214.         optionally  be    ended  with a ':'.  A label may appear on a
  215.         line by itself and is then interpreted as:
  216.  
  217.             Label    EQU    *
  218.  
  219.     Mnemonic:  A symbol preceded by at least one whitespace  character.
  220.         Upper  case characters in this field are converted to lower
  221.         case before being checked as a legal mnemonic.    Thus `nop',
  222.         `NOP' and even `NoP' are recognized as the same mnemonic.
  223.  
  224.         Note that register names that sometimes appear at  the    end
  225.         of  a  mnemonic (e.g. nega or stu) must not be separated by
  226.         any  whitespace  characters.   Thus  `clra'   means   clear
  227.         accumulator A, but that `clr a' means clear memory location
  228.         `a'.
  229.  
  230.     Operand:  Follows mnemonic, separated by at  least  one  whitespace
  231.         character.   The   contents   of   the     operand  field  is
  232.         interpreted by each instruction.
  233.  
  234.     Whitespace: A blank or a tab
  235.  
  236.     Comment:  Any text after all operands for  a  given  mnemonic  have
  237.         been  processed or, a line beginning with '*' up to the end
  238.         of line or, an empty line.
  239.  
  240.     Continuations:    If a line ends with a backslash (\) then  the  next
  241.         line  is  fetched  and    added to the end of the first line.
  242.         This continues until a line is seen which doesn't end in  \
  243.         or  until  MAXBUF characters have been collected (MAXBUF >=
  244.         256 ).
  245.  
  246. FILES
  247.     filename.S19    S-record output file
  248.     STDOUT        listing and errors (use redirection for listing file)
  249.     Fwd_refs    Temporary file for forward references.
  250.  
  251.     For the Atari ST, it is better to use these assemblers from within
  252.     a CLI. This way you can redirect the STDOUT to a file if you require
  253.     a listing file.
  254.  
  255. IMPLEMENTATION NOTES
  256.     This is a classic 2-pass assembler.  Pass 1 establishes the  symbol
  257.     table and pass 2 generates the code.
  258.  
  259.                             12/11/84 E.J.Rupp
  260.  
  261.     This version of the cross assemblers ported to the IBM PC 4/13/87
  262.     This latest version ported to Atari ST 16/12/90 By N.Benci.
  263.  
  264. Atari ST notes
  265.  
  266.     All of the assemblers were tested using a mixture of mnemonics.
  267.     As far as possible they seemed to produce the correct code. I have
  268.     only tested the 6809 code. This was OK. The port was direct, ie;
  269.     now additions or deletion to the original code. The source code
  270.     is included for your perusal. If you improve on the code please
  271.     send either binaries or source to comp.*.atari.st so that others
  272.     may benefit.
  273.  
  274.     The port was performed using HI-TECH C, a reasonable ANSI C 
  275.     compiler. Although the code is not strictly ANSI C, not too many
  276.     complaints were forthcoming from the compiler.
  277.  
  278.     Nino Benci. email - rdt154k%monu6.cc.monash.edu.au@uunet.uu.net
  279.