home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 5 / ctrom5b.zip / ctrom5b / PROGRAM / ASM / AS09_107 / AS09.MAN < prev    next >
Text File  |  1994-11-22  |  27KB  |  740 lines

  1. Kingswood Software Development Tools                                 AS09
  2. -------------------------------------------------------------------------
  3.  
  4. NAME
  5.    as09 - assembler for M6809 and H6309 microprocessors.
  6.  
  7.  
  8. SYNOPSIS
  9.    as09 [-cghlnopqstvwxz] file
  10.  
  11.  
  12. DESCRIPTION
  13.    This documentation is for as09 [1.07].
  14.    Copyright 1990-1994, Frank A. Vorstenbosch, Kingswood Software.
  15.  
  16.    AS09 is an assembler for the Motorola 6809 and Hitachi 6309
  17.    microprocessors.  It reads input from an ASCII text file, assembles
  18.    this into memory, and then writes a listing and a binary or hex file.
  19.  
  20.    AS09 is case sensitive, not only does it differentiate between the
  21.    labels XYZ and xyz, but it also requires all (pseudo) instruction and
  22.    register names to be lower case.  This way, the listing is the most
  23.    readable.  Option -i can be used to make the assembler case insensitive.
  24.    Alternatively, the included TOLOWER program can be used to convert
  25.    sources to lower case.
  26.  
  27.  
  28. OPTIONS
  29.    As09 recognizes the following options:
  30.  
  31.       -c   Show number of cycles per instruction in listing.  This
  32.            decreases the number of columns available for listing by 5.
  33.            The number of cycles is printed between brackets [ and ].
  34.  
  35.       -g   Generate source-level debug information file.  This file
  36.            can then be used in in-system debugging or a software
  37.            simulator.
  38.  
  39.       -h<lines>
  40.            Specify height of page for listing.  This option determines
  41.            the number of lines per printed page.  Each page has a header
  42.            and is terminated by a form-feed character.  The special
  43.            case -h0 indicates an infinite page length.  In this case,
  44.            page breaks are only inserted between the two passes and
  45.            the symbol table (if present).
  46.  
  47.       -i   Ignore case in opcodes.  In this way, the assembler does not
  48.            differentiate between 'add' and 'ADD', for example.  Labels
  49.            are still case sensitive.
  50.  
  51.       -l   Generate pass 2 listing.
  52.  
  53.       -l<filename>
  54.             Listing file name.  The listing file is used for pass 1 and
  55.             pass 2 listing, for the symbol table (printed between the
  56.             two passes), and some statistics.  When neither -p nor -t
  57.             is specified, and -l<filename> is given, then the assembler
  58.             automatically generates a pass 2 listing.  When -p or -t is
  59.             specified, an additional -l should be given is a pass 2
  60.             listing is required.  The filename - can be used to direct
  61.             the listing to standard output.
  62.  
  63.       -l   Generate pass 2 listing.
  64.  
  65.       -n   Disable optimizations.  When this option is specified no
  66.            optimizations will be done, even when the _opt_ pseudo-
  67.            instruction is used in the source code.
  68.  
  69.       -o<filename>
  70.            Specify binary or s-records output file name.  The assembler
  71.            automatically adds ".bin" for binary output or ".s19" for
  72.            s-records output when no extension is given.
  73.  
  74.       -p   Generate pass 1 listing.  This may be used to examine any
  75.            optimizations/bugs generated in pass 2.
  76.  
  77.       -q   Quiet mode.  No running line counter is displayed on standard
  78.            error output.
  79.  
  80.       -s   Write s-records instead of binary file.  The s-records file
  81.            contains data for (only) the used memory; the binary file
  82.            begins at the lowest used address, and continues up to the
  83.            highest used address; filling unused memory between these
  84.            two addresses with either $ff or $00.
  85.  
  86.       -s2  Write intel-hex file instead of binary file.  The intel-hex
  87.            file contains data for (only) the used memory.
  88.  
  89.       -t   Generate symbol table.  The symbol table is listed between
  90.            passes one and two, displaying the name, hexadecimal and
  91.            decimal value of each label, using 4-digit hexadecimal
  92.            numbers where possible, otherwise 8-digit numbers.  The
  93.            decimal value is followed by an asterisk if the label is
  94.            redefinable (defined using _set_ instead of _equ_).
  95.  
  96.       -v   Verbose mode.  More information is displayed on standard
  97.            output.
  98.  
  99.       -w<width>
  100.            Specify column width.  Normally, the listing is printed using
  101.            79 columns for output to a 80-column screen or printer.  If
  102.            the -w option is given without a number following it, then
  103.            the listing will be 131 columns wide, otherwise it will be
  104.            the number of colulmns specified (between 60 and 200).
  105.  
  106.       -x   Use 6309 extensions.  The 63(C)09 CPU from Hitachi has many
  107.            additional instructions and addressing modes, but is otherwise
  108.            software and hardware compatible to the 6809.  When this
  109.            option is not specified the assembler rejects these extensions.
  110.  
  111.       -z   Fill unused memory with zeros.  Normally when a binary file
  112.            is generated, unused bytes between the lowest and highest
  113.            used addresses are filled with $ff, the unprogrammed state
  114.            of EPROMs.  If this is not wanted, the -z option can be used
  115.            to initialize this memory to $00.  With s-records, unused
  116.            memory is not output to the file, and this option forces the
  117.            creation of an S9 (start address) record instead, even if no 
  118.            start address is specified in the file with the _end_ pseudo-
  119.            instruction.
  120.  
  121.    Commandline options can be catenated, but no other option can follow
  122.    one that may have a parameter.  Thus:
  123.       -tlfile
  124.    is correct (specifying symbol table and pass 2 listing), but
  125.       -h5t
  126.    is not.
  127.  
  128.    It is possible to discard any of the the output files by specifying
  129.    the name 'nul'.
  130.  
  131.  
  132. EXPRESSIONS
  133.  
  134.    The assembler recognizes most C-language expressions.  The operators
  135.    are listed here in order of precedence, highest first:
  136.  
  137.        ()            braces to group subexpressions
  138.        * $           current location counter
  139.        unary + - ! ~ unary + (no-operation), negation, logical NOT,
  140.                      binary NOT
  141.        * / %         multiplication, division, modulo
  142.        + -           addition, subtraction
  143.        << >>         shift left, shift right
  144.        < > <= >=     comparison for greater/less than
  145.        = !=          comparison for equality (== can be used for =)
  146.        &             binary AND
  147.        ^             binary XOR
  148.        |             binary OR
  149.  
  150.    The logical NOT (!) evaluates to zero if the parameter is nonzero,
  151.    and vice versa.  The binary NOT (~) complements all the bits in its
  152.    parameter.
  153.  
  154.    Note: the asterisk is both used as the multiplication operator, and
  155.    as symbol for the current location.  The assembler determines from
  156.    the context which is which. Thus:
  157.  
  158.        5**
  159.  
  160.    is a valid expression, evaluating to five times the current location
  161.    counter, and:
  162.  
  163.        2+*/2
  164.  
  165.    is too, evaluating to the current location counter divided by two, to
  166.    which two is added.  In the same way, the % sign is both used as the
  167.    modulo operator and the prefix for binary numbers.
  168.  
  169.    Numbers can be specified in any number base between 2 and 36.
  170.    Decimal numbers can be used without a prefix, hexadecimal numbers
  171.    can be prefixed by $, octal numbers by @, and binary numbers by %.
  172.    Other number bases can be used by using the following format:  
  173.       <base>#<number>, 
  174.    where the base is the number base to use (must be specified in 
  175.    decimal), and number is the value.  Thus:
  176.       1000    - decimal number, value 10*10*10=1000
  177.       %1000   - binary number, value 2*2*2=8
  178.       @1000   - octal number, value 8*8*8=512
  179.       $1000   - hexadecimal number, value 16*16*16=4096
  180.       2#1000  - binary number, value 2*2*2=8
  181.       4#1000  - base-4 number, value 4*4*4=64
  182.       7#1000  - base-7 number, value 7*7*7=343
  183.       36#1000 - base-36 number, value 36*36*36=444528
  184.    For number bases greater than 10, additional digits are represented
  185.    by letters, starting from A.  Both lower and upper case letters can
  186.    be used.
  187.       11#aa = 120
  188.       16#ff = 255
  189.       25#oo = 624
  190.       36#zz = 1295
  191.  
  192.  
  193. PSEUDO-INSTRUCTIONS
  194.  
  195.    align <expression>
  196.  
  197.       Align fills zero or more bytes with zeros until the new address
  198.       modulo <expression> equals zero.  If the expression is not present,
  199.       align fills zero or one bytes with zeros until the new address
  200.       is even.
  201.  
  202.       Example 1:
  203.                       align  256             ; continue assembly on the
  204.                                              ; next 256-byte page
  205.  
  206.       Example 2:
  207.                       align                  ; make sure table begins
  208.       Table           dw     1,2,3           ; on an even address
  209.  
  210.  
  211.  
  212.    bss
  213.  
  214.       Put all following data in the bss segment.  Only data pseudo-instructions 
  215.       can be used in the bss segment, and these only increment the location 
  216.       counter.  It is up to the programmer to initialize the bss segment.  The 
  217.       bss segment is especially meaningful in a ROM based system where
  218.       variables must be placed in RAM, and RAM is not automatically initialized.
  219.  
  220.       The assembler internally maintains three separate location counters,
  221.       one for the code segment, one for the data segment and one for the
  222.       uninitialized data segment.  The user is responsible for not overlapping
  223.       the segments by setting appropriate origins.  The code, data and bss
  224.       pseudo-instructions can be used to interleave code and data in the source
  225.       listing, while separating the three in the generated program.  The
  226.       assembler starts with the code segment if none is specified.
  227.  
  228.       Example:
  229.                      code
  230.                      org    $f000           ; Assuming 4 kbyte code ROM
  231.                      data                   ; with 2 kbyte program and
  232.                      org    $f800           ; 2 kbyte initialized data
  233.                      bss
  234.                      org    0               ; bss segment is in RAM
  235.  
  236.       Buffer         ds     100
  237.  
  238.                      code
  239.       Begin          ldx    #Table
  240.                      ldy    #Buffer
  241.                      lda    ,x+
  242.                      sta    ,y+
  243.                      .
  244.                      .
  245.                      .
  246.  
  247.                      data
  248.       Table          db     1,2,3
  249.  
  250.                      code
  251.       MyFunc         ldx    #Table
  252.                      .
  253.                      .
  254.  
  255.    code
  256.  
  257.       Put all following assembled instructions and data in the code segment.
  258.       See _bss_
  259.  
  260.  
  261.    data
  262.  
  263.       Put all following assembled instructions and data in the data segment.
  264.       See _bss_
  265.  
  266.  
  267.    db <bytelist>
  268.  
  269.       Define bytes.  The bytes may be specified as expressions or strings,
  270.       and are placed in the current (code or data) segment.  This pseudo
  271.       instruction is similar to the Motorola-defined fcb and fcc pseudo-
  272.       instructions.
  273.  
  274.       Example:
  275.       Message         db     7,"Error",13,10,0
  276.  
  277.  
  278.    direct <expression>
  279.  
  280.       Direct informs the assembler to which 256-byte page the direct
  281.       page register (dp or dpr) points.
  282.       The value can be either 0...255 indicating the value of the dp
  283.       register, or 0,256,512,...65280 indicating the dp value multiplied
  284.       by 256.  If <expression> equals -1, the assembler assumes the dp
  285.       register is uninitialized, and will not generate direct addressing
  286.       mode instructions.  It is the responsibility of the user to set
  287.       the dp register.  Note that the direct pseudo-instruction does
  288.       only influence assembly following it, and only when optimization
  289.       is enabled.
  290.  
  291.       Example:
  292.                      lda    #Table>>8
  293.                      tfr    a,dp
  294.                      direct Table & $ff00   ; mask off low bits.
  295.  
  296.                      lda    Table           ; these instructions will
  297.                      ldb    Table+1         ; use direct addressing
  298.  
  299.                      direct -1              ; disable use of dpr
  300.  
  301.  
  302.    ds <expression>
  303.  
  304.       Define zero or more bytes empty space.  The specified number of
  305.       bytes are filled with zeros.  This pseudo-instruction is identical
  306.       to the Motorola-defined pseudo-instruction rmb.
  307.  
  308.       Example:
  309.                      ds     100             ; reserve 100 bytes here
  310.  
  311.  
  312.    dw <wordlist>
  313.  
  314.       Define words.  The words are placed in the current (code or data)
  315.       segment.  This pseudo-instruction is identical to the Motorola-
  316.       defined fcw and fdb pseudo-instructions.
  317.  
  318.       Example:
  319.                      ldb    Function        ; number of function
  320.                      ldx    #JumpTable
  321.                      lslb
  322.                      jmp    [b,x]           ; jump to function
  323.  
  324.       JumpTable      dw     Function0
  325.                      dw     Function1
  326.                      dw     Function2
  327.  
  328.  
  329.    else
  330.  
  331.       The else pseudo-instruction can be used for if-then-else
  332.       constructions. It must be placed between an if and an endif
  333.       instruction.  For an example, see the if pseudo-instruction.
  334.  
  335.  
  336.    end <expression>
  337.  
  338.       The end pseudo-instruction is optional, and need not be used.  If
  339.       it is used, its optional operand specifies the staring address of
  340.       the program.  This address is displayed when the program is
  341.       assembled, and is also placed in the s-record output file.
  342.  
  343.       Example:
  344.                      end    Start
  345.  
  346.    endif
  347.  
  348.       The endif pseudo-instruction must be used to close an if-endif
  349.       or if-else-endif construction.  For an example, see the if
  350.       pseudo-instruction.
  351.  
  352.  
  353.    <label> equ <expression>
  354.  
  355.       The equ (equate) pseudo-instruction sets the specified label to
  356.       the value of the expression.  The label may not already exist.
  357.       Some programmers choose to use only upper-case identifiers for
  358.       labels defined in this way to differentiate them from addresses.
  359.  
  360.       Example:
  361.       ESCAPE          equ    27
  362.  
  363.  
  364.    fcb <bytelist>
  365.  
  366.       Define bytes (form constant byte).  The bytes may be specified
  367.       only as expressions, and are placed in the current (code or data)
  368.       segment.  This pseudo-instruction was originally defined
  369.       by Motorola and is similar to the db pseudo-instruction.
  370.  
  371.       Example:
  372.       Message        fcb    7
  373.                      fcc    "Error"
  374.                      fcb    13,10,0
  375.  
  376.  
  377.    fcc <string>
  378.  
  379.       Define bytes (form constant character).  The bytes may be
  380.       specified only as a string, and are placed in the current (code or
  381.       data) segment.  This pseudo-instruction was originally defined
  382.       by Motorola and is similar to the db pseudo-instruction.
  383.  
  384.  
  385.    fcw <wordlist>
  386.  
  387.       Define words (form constant word).  The words are placed in the
  388.       current (code or data) segment.  This pseudo instruction is
  389.       identical to the fdb and dw pseudo-instructions.
  390.  
  391.  
  392.    fdb <wordlist>
  393.  
  394.       Define words (form double byte).  The words are placed in the
  395.       current (code or data) segment.  This pseudo instruction is
  396.       identical to the fcw and dw pseudo-instructions.
  397.  
  398.  
  399.    if <expression>
  400.  
  401.       The if pseudo-instruction can be used in conjunction with the
  402.       endif and possibly the else pseudo-instructions to selectively
  403.       enable and disable pieces of code in the source.  If the expression
  404.       given evaluates to zero, then the following code up to the matching
  405.       else or endif is not included in the assembly.  If the expression
  406.       is nonzero, then the following code is included, but any code
  407.       between the matching else and endif is not.
  408.  
  409.       Example:
  410.                      if COUNT=2 | COUNT=4
  411.                      aslb                   ; shift left for counts
  412.                      if COUNT=4             ; of 2 and 4
  413.                      aslb
  414.                      endif
  415.                      else
  416.                      pshs    a
  417.                      lda     #COUNT         ; otherwise use slow multiply
  418.                      mul
  419.                      puls    a
  420.                      endif
  421.  
  422.  
  423.    include <string>
  424.  
  425.       The named file is included in the assembly at this point.  After
  426.       it has been read, assembly continues with the next line of the
  427.       current file. Include files may be nested.
  428.  
  429.       Example:
  430.                      include "defines.i"
  431.  
  432.  
  433.    list
  434.  
  435.       Enable generation of the listing in the list-file.  If the listing
  436.       has been disabled twice, it must be enabled twice before it is
  437.       generated.  When no -p or -l option has been specified on the
  438.       command line, this pseudo-instruction has no effect.
  439.  
  440.  
  441.    nolist
  442.  
  443.       Disable generation of the listing in the list-file.
  444.  
  445.  
  446.    noopt
  447.  
  448.       Disable optimizations.  If the -n option has been specified on the
  449.       command line, this pseudo-instruction has no effect.
  450.  
  451.  
  452.    nop <expression>
  453.  
  454.       No operation.  When the optional expression is not present, this
  455.       is simply the nop instruction of the processor.  When the
  456.       expression is present, the specified number of nop instructions
  457.       are inserted.
  458.  
  459.       Example:
  460.                      nop    10
  461.  
  462.  
  463.    opt
  464.  
  465.       Enable optimizations.  If the -n option has been specified on the
  466.       command line, this pseudo-instruction has no effect.
  467.       When optimization is enabled, the assembler tries to use the
  468.       shortest and fastest instructions possible which have the effect
  469.       the user wants.  It may replace any extended-address instruction
  470.       by direct-address instructions (provided the direct pseudo-
  471.       instruction has been used).  It replaces long branches with jumps
  472.       or short branches, calls with branches to subroutines, and
  473.       replaces zero-offset indexed instructions by no-offset indexed
  474.       instructions.  The effects of optimizations is clearly visible if
  475.       both a pass one and a pass two listing is generated.
  476.  
  477.  
  478.    org <expression>
  479.  
  480.       The org (origin) pseudo-instruction specifies the next address to
  481.       be used for assembly.  When no origin has been specified, the
  482.       assembler uses the value 0.  The assembler maintains three separate
  483.       location counters: one for the code segment, one for the data
  484.       segment, and one for the bss segment.  See the code and pseudo-
  485.       instruction for more information.
  486.  
  487.  
  488.    page <expression>
  489.  
  490.       When the optional expression is not present, the assembly listing
  491.       is continued on the next page.  When the expression is present,
  492.       the listing is continued on the next page only if the specified
  493.       number of lines do not fit on the current page.
  494.  
  495.  
  496.    rmb <expression>
  497.  
  498.       Define zero or more bytes empty space.  The specified number of
  499.       bytes are filled with zeros.  This pseudo-instruction is identical
  500.       to the pseudo-instruction ds.
  501.  
  502.  
  503.    <label> set <expression>
  504.    <label> = <expression>
  505.  
  506.       The set pseudo-instruction sets the specified label to the value
  507.       of the expression.  The label may or may not already exist.
  508.       Some programmers choose to use only upper-case identifiers for
  509.       labels defined in this way to differentiate them from addresses.
  510.  
  511.       Example:
  512.       CURRENT         set    0
  513.  
  514.                       .
  515.                       .
  516.                       .
  517.  
  518.       CURRENT         set    CURRENT+1
  519.  
  520.  
  521.    struct <name>
  522.    struct <name>,<expression>
  523.  
  524.       The struct (structure) pseudo-instruction can be used to define
  525.       data structures in memory more easily.
  526.  
  527.       The name of the structure is set to the total size of the structure;
  528.       if the expression is present, the starting offset is the value of
  529.       the expression in stead of zero.
  530.  
  531.       Between the struct and end struct pseudo-instructions the following
  532.       pseudo-instructions can be used: db, dw, ds, label, align.
  533.       Within structures these pseudo-instructions take a slightly different
  534.       format than normally:
  535.  
  536.          db <name>                element is one byte
  537.  
  538.          dw <name>                element is two bytes
  539.  
  540.          ds <name>,<expression>   element is the specified number of bytes
  541.  
  542.          ds <expression>          skip the specified number of bytes
  543.  
  544.          label <name>             element is zero bytes, i.e. set the name
  545.                                   to the current structure offset
  546.  
  547.          align <expression>       skip until (offset%expression)=0
  548.  
  549.          align                    skip until offset is even
  550.  
  551.  
  552.       Example:
  553.                      struct ListNode,4
  554.                      dw     LN_Next
  555.                      dw     LN_Previous
  556.                      db     LN_Type
  557.                      align
  558.                      label  LN_Simple       ; size of structure so far
  559.                      align  8
  560.                      ds     LN_Data,10
  561.                      end struct
  562.  
  563.       This is identical to:
  564.  
  565.       LN_Next        equ     4       ;\
  566.       LN_Previous    equ     6       ; offset of structure elements
  567.       LN_Type        equ     8       ;/
  568.       LN_Simple      equ     10      ; size of structure so far
  569.       LN_Data        equ     16      ; offset of structure element
  570.       ListNode       equ     26      ; size of structure
  571.  
  572.  
  573.    title <string>
  574.  
  575.       The title pseudo-instruction sets the title to be used in the
  576.       header of each listing page.  The string should be no longer than
  577.       80 characters.
  578.  
  579.       Example:
  580.                    title  "DIS09 : A disassembler for a 6809 CPU"
  581.  
  582.  
  583. ADDRESSING MODES
  584.    The assembler allows all 6809 (and when enabled also 6309) addressing
  585.    modes.  Expressions can be prefixed by < to force 8 bit direct addres
  586.    or 8 bit offset; << to force 5 bit offset and > to force 16 bit
  587.    address or offset.  >> is provided for symmetry, and functions as >.
  588.    Normally, the assembler will automagically select the 'best' (least
  589.    instruction bytes) addressing mode, although when forward references
  590.    are used it may be necessary to specify a prefix.
  591.  
  592.    Note that although the "address,pc" mode looks similar to the indexed
  593.    addressing modes, it actually defines a program-counter-relative
  594.    address.  In the list, x can be replaced by y, s or u; address is
  595.    the label (or expression) of the data, and offset is the signed offset
  596.    relative to the specified index register.
  597.  
  598.    List of available modes:
  599.       address
  600.       ,x
  601.       ,x+
  602.       ,x++
  603.       ,-x
  604.       ,--x
  605.       a,x
  606.       b,x
  607.       d,x
  608.       offset,x
  609.       address,pc
  610.       [address]
  611.       [,x]
  612.       [,x++]
  613.       [,--x]
  614.       [a,x]
  615.       [b,x]
  616.       [d,x]
  617.       [offset,x]
  618.       [address,pc]
  619.  
  620.    Additional addressing modes for the 6309:
  621.       ,w
  622.       ,w++
  623.       ,--w
  624.       e,x
  625.       f,x
  626.       w,x or x,w
  627.       offset,w
  628.       [,w]
  629.       [,w++]
  630.       [,--w]
  631.       [e,x]
  632.       [f,x]
  633.       [w,x] or [x,w]
  634.       [offset,w]
  635.  
  636.  
  637. LIST OF ACCEPTED INSTRUCTIONS
  638.    abx adc adca adcb adcd adcr add adda addb addd adde addf addr addw aim
  639.    align and anda andb andcc andd andr asl asla aslb asld aslw asr asra asrb
  640.    asrd asrw band bcc bcs beor beq bge bgt bhi bhs biand bieor bior bita
  641.    bitb bitd bitmd ble blo bls blt bmi bne bor bpl bra brn bsr bss bvc bvs clr
  642.    clra clrb clrd clre clrf clrs clrv clrw clrx clry cmp cmpa cmpb cmpd cmpe
  643.    cmpf cmpr cmps cmpu cmpw cmpx cmpy code com coma comb comd come comf comw
  644.    cwai daa data db dd dec deca decb decd dece decf decw direct divd divq
  645.    ds dw eim else end endif eor eora eorb eord eorr equ exg fcb fcc fcw
  646.    fdb if inc inca incb incd ince incf include incw jmp jsr lbcc lbcs lbeq
  647.    lbge lbgt lbhi lbhs lble lblo lbls lblt lbmi lbne lbpl lbra lbrn lbsr
  648.    lbvc lbvs lda ldb ldbt ldd lde ldf ldmd ldq lds ldu ldw ldx ldy leas leau
  649.    leax leay list lsl lsla lslb lsr lsra lsrb lsrd lsrw mul muld neg nega
  650.    negb negd negw nolist noopt nop oim opt or ora orb orcc ord org orr page
  651.    pshs pshsw pshu pshuw puls pulsw pulu puluw rmb rol rola rolb rold rolw
  652.    ror rora rorb rord rorw rti rts sbc sbca sbcb sbcd sbcr set sex sexw sta
  653.    stb stbt std ste stf stq struct sts stu stw stx sty sub suba subb subd
  654.    sube subf subr subw swi swi2 swi3 sync tfm tfr tim title tst tsta tstb
  655.    tstd tste tstf tstw
  656.  
  657.    Of these instructions, the following are (more or less) synonymous,
  658.    and can be used interchangably.
  659.    YOU CAN USE     WHERE YOU WOULD PREVIOUSLY USE
  660.       adc       -  adcr
  661.       add       -  addr
  662.       and       -  andr
  663.       cmp       -  cmpr
  664.       eor       -  eorr
  665.       or        -  orr
  666.       sbc       -  sbcr
  667.       sub       -  subr
  668.       tfr       -  tfm
  669.       clrs      -  tfr z,s
  670.       clrv      -  tfr z,v
  671.       clrx      -  tfr z,x
  672.       clry      -  tfr z,y
  673.       nop 6     -  nop nop nop ....
  674.       swi 1     -  swi
  675.       swi 2     -  swi2
  676.       swi 3     -  swi3
  677.       pshs w    -  pshsw -- can't mix with other registers though
  678.       puls w    -  pulsw
  679.       pshu w    -  pshuw
  680.       pulu w    -  puluw
  681.       pshs all  -  pshs pc,u,y,x,dp,b,a,cc
  682.       pshu all  -  pshs pc,s,y,x,dp,b,a,cc
  683.  
  684.    And pseudo-instructions:
  685.       db        -  fcb, fcc
  686.       dw        -  fcw, fdb
  687.       ds        -  rmb
  688.       =         -  set
  689.       struct    -  lots of EQUs
  690.       direct    -  < in referencing instructions
  691.  
  692.  
  693. LIST OF OTHER KEYWORDS
  694.    !  !=  #  %  &  (  )  *  +  ++  ,  -  --  /  <
  695.    <<  <=  =  >  >=  >>  [  ]  ^  | ~
  696.    a all b c cc ccr d dp dpr e f h i n pc s sp u v w x y z
  697.  
  698.  
  699. FILES
  700.    <file>.a09 - source file.
  701.    <file>.asm - source file -- alternative.
  702.    <file>.lst - List file.
  703.    <file>.s19 - Motorola S-records output file.
  704.    <file>.hex - Intel hex output file.
  705.    <file>.bin - Binary output file.
  706.  
  707.  
  708. BUGS
  709.    No provision for linking other pre-assembled modules is made.
  710.  
  711.  
  712. RETURNS
  713.    As09 returns one of the following values:
  714.  
  715.       0 - Source file assembled without errors.
  716.       1 - Incorrect parameter specified on the commandline.
  717.       2 - Unable to open input or output file.
  718.       3 - Assembly gave errors.
  719.       4 - No memory could be allocated.
  720.  
  721.  
  722. DIAGNOSTICS
  723.    Help message if only parameter is a question mark, or if an
  724.    illegal option has been specified.
  725.  
  726.  
  727. AUTHOR
  728.    This is copyrighted software, but may be distributed freely as long
  729.    as this document accompanies the assembler, and no copyright messages
  730.    are removed.  You are explicitly _not_ allowed to sell this software
  731.    for anything more than a reasonable copying fee, say US$5.
  732.    To contact the author:
  733.       Frank A. Vorstenbosch
  734.       Kingswood Software
  735.       P.O. Box 85800              Phone: +31-(70)-355 5241
  736.       2508CM  The Hague           BBS:   +31-(70)-355 8674
  737.       Netherlands                 Email: prompt@xs4all.nl
  738.  
  739. -------------------------------------------------------------------------
  740.