Man Linux: Main Page and Category List

NAME

       crasm - Cross assembler for 6800/6801/6803/6502/65C02/Z80

SYNOPSIS

       crasm [-o codefile] [-slx] asmfile

       Assemble  the  microprocessor  program  asmfile and produce output file
       codefile in Intel HEX or Motorola S Code format.  A program listing and
       a  symbol  table are also produced on the standard output.  The current
       version of crasm can assemble programs for the 6800, 6801, 6803,  6502,
       65C02,  and  Z80  processors.  The full list is printed when you invoke
       crasm without arguments.

OPTIONS

       -o codefile
              Specify the name of the output file.  No output file is produced
              without this option.

       -s     Disable warnings.

       -l     Disable program listing output.

       -x     Disable symbol table output.

SYNTAX

       Each  line  of  the assembly program should follow one of the following
       templates, where the brackets delimit optional parts.

              [;comment]
              label = expression [;comment]
              [label] mnemonic operand [;comment]

       Comments are introduced by a semicolon (;) and extend to the end of the
       line.    Labels  are  identifiers  containing  up  to  36  alphanumeric
       characters (including period and underscore). Labels cannot start  with
       a digit.  The format of the mnemonics and operands field depends on the
       selected micro-processor.  A few mnemonics are valid for all processors
       and  are  used to give directives to the assembled.  These are known as
       "pseudo-mnemonics".

   Labels
       Labels are identifiers representing
       — an absolute address,
       — a relative address (position independent code),
       — a register,
       — a list of registers,
       — a specific bit at a specific address,
       — or a mnemonic.

       Most labels are composed of at most 36 alphanumeric characters, periods
       (.)   or  underscores (_).  Labels cannot start with a digit.  They are
       case insensitive.

       Labels starting with a period (.)  are  local  labels  whose  scope  is
       either  limited  to the macro in which they are defined, or to the code
       segment delimited by the pseudo-mnemonics CODE or DUMMY.

       The predefined "star" label (*) represents the current program counter,
       that  is  to  say, the address where the next assembly code instruction
       will be encoded.  Other predefined labels include all pseudo-mnemonics,
       micro-processor specific mnemonics and register names.

   Constants
       The  assembled  recognizes  numerical  constants  expressed in decimal,
       hexadecimal, octal, binary, or ascii.

             +----------------------------------------------------------+
             |Type          Format   Examples                           |
             +----------------------------------------------------------+
             |decimal       dddd     1234, 675, 12, 1, but not 0.12.    |
             +----------------------------------------------------------+
             |hexadecimal   $dddd    $fd12, $2AC, $0.                   |
             |              ddddH    03H, 2da7H, 0FC84H, but not FC84H. |
             |              0Xdddd   0x03, 0x2AC, 0Xfc84.               |
             +----------------------------------------------------------+
             |octal         ddddQ    377Q, 012412Q.                     |
             +----------------------------------------------------------+
             |binary        %dddd    %01110110, %1100.                  |
             |              ddddB    01110110B, 1100B.                  |
             |              0Bdddd   0b1100                             |
             +----------------------------------------------------------+
             |ascii         ’cccc’   ’a’, ’AB’, ’"’, ’\n’, ’\’’.        |
             |              "cccc"   "\t", "\"", "ab".                 |
             +----------------------------------------------------------+

   Expressions
       Like labels, expressions can represent an  absolute  address  (abs),  a
       relative address for position independent code (rel), a register (reg),
       or a list of registers (reglist), or a reference to a specific bit at a
       specific address (bspec).

       The following operators are recognized on expressions.

            +-----------------------------------------------------------+
            |Syntax           Result    Description                     |
            +-----------------------------------------------------------+
            | abs{abs}        bspec     bit reference, e.g. pia{3}      |
            | ADDR(abs)       abs       address from a bit reference    |
            | BIT(abs)        abs       bit number from a bit reference |
            +-----------------------------------------------------------+
            | - abs           abs       two’s complement                |
            | ~ abs           abs       one’s complement                |
            +-----------------------------------------------------------+
            | abs << abs      abs       left shift                      |
            | abs >> abs      abs       right shift                     |
            +-----------------------------------------------------------+
            | abs | abs       abs       bitwise or                      |
            | abs & abs       abs       bitwise and                     |
            | abs ^ abs       abs       bitwise xor                     |
            +-----------------------------------------------------------+
            | abs * abs       abs       multiplication                  |
            | abs * abs       abs       division                        |
            +-----------------------------------------------------------+
            | abs + abs       abs       addition                        |
            | rel + abs       rel       addition                        |
            | abs - abs       abs       subtraction                     |
            | rel - abs       rel       subtraction                     |
            | rel - rel       abs       subtraction                     |
            +-----------------------------------------------------------+
            | reg - reg       reglist   register range                  |
            | reglist \ reg   reglist   register list                   |
            +-----------------------------------------------------------+
       The   table   lists   operators  in  order  of  decreasing  precedence.
       Parenthesis can be used to avoid ambiguities.  A warning  is  generated
       when  an  entire  expression  is surrounded with parenthesis and can be
       confused with a micro-processor addressing mode.

       Examples:

               (base+$12) >> 8 & 0xff00A-80H
               (base+0x12)

       The last example causes a warning  because  the  parenthesis  were  not
       necessary and might suggest a micro-processor addressing mode.

       All  arithmetic  expressions  are  evaluated  on  32  bits.  Arithmetic
       operations overflow silently.  The arithmetic values are then truncated
       to  the  size implied by the micro-processor mnemonic.  This truncation
       might cause a warning message.

       Examples: all the following instructions

              (6502)         lda #$1234
              (6800)         ldaa $1234,x
              (Z80)          ld (ix+0C2H),b

       cause a warning

              >>> WARNING: Operand overflow

       However expression

              $1123454 * 1298992

       overflows silently.

   Pseudo-mnemonics
       The following pseudo-mnemonics are always recognized.

       CPU cpuname
              Indicates the selected micro-processor type.  This  must  appear
              before  anu  micro-processor specific instruction.  The possible
              values of cpuname are  listed  when  you  invoke  crasm  without
              arguments.   The  current  list includes 6800, 6801, 6803, 6502,
              65C02, and Z80

       OUTPUT binformat
              Indicates the format of the output file.  Argument binformat can
              take  values SCODE for producing an output file using Motorola’s
              S code, or HEX for Intel’s Hex format.  The default  depends  on
              the selected micro-processor.

       CODE
              Delimit  the  scope  of  local  labels  and  introduce a program
              section.

       DUMMY  Delimit the scope of local labels and introduce a  fake  program
              section whose sole effect is to define labels without generating
              code.

       label EQU expression
       label = expression
              Define the value of label label.   Labels  defined  using  these
              directives can be redefined later in the program.

       [label] DB expression[,...,expression]
              Insert the specified data bytes (8 bits).

       [label] DW expression[,...,expression]
              Insert  the  specified  data words (16 bits).  The byte ordering
              depends on the selected micro-processor.

       [label] DL expression[,...,expression]
              Insert the specified data longs (32 bits).   The  byte  ordering
              depends on the selected micro-processor.

       [label] DDB expression[,...,expression]
              Insert  the specified double bytes (16 bits).  The byte ordering
              is the opposite of the usual  byte  ordering  for  the  selected
              micro-processor.

       [label] ASC stringconstant
              Insert  the  ascii representation of the string stringconstant .
              The string must be delimited by double  quotes.   The  C  escape
              sequences \r, \n, \t, \0, \’, \", and \\ are recognized.

       [label] ASC countexpr,[valexpr]
              Insere  countexpr  bytes  with value valexpr.        The default
              value is zero.

       [label] ALIGN EVEN
       [label] ALIGN ODD
              Insert a null byte in order to make the program counter even  or
              odd.

       IF condexpr
        ...
       ELSE
        ...
       ENDC
              Conditional  assembly:  If  expression  condexpr  is  non  zero,
              process the lines located between the IF and  the  ELSE  pseudo-
              mnemonics.  Otherwise process the lines located between the ELSE
              and   the   ENDC   pseudo-mnemonics.     Conditional    assembly
              instructions can be nested. The ELSE part can be omitted.

       label MACRO
               ...
             ENDM
              Define  a  new mnemonic label equivalent to all the instructions
              located   between   the   MACRO   and   ENDM   pseudo-mnemonics.
              Invocations  of  the macro can specify a list of comma separated
              operands.  The character sequences \1, \2, ... \N in  the  macro
              definition are replaced by the supplied operands.  The character
              sequence \0 is replaced by the number of supplied operands.

       EXITM
              This pseudo mnemonic can be used inside a  macro  definition  to
              exit  the  macro.   This  is  useful  in  conjunction  with  the
              conditional assembly pseudo-mnemonics.

       INCLUDE filename
              Force the assembler  to  process  file  named  filename  at  the
              current point.

       LIST ON
       LIST OFF
              Enable or disable the production of a listing (default is on.)

       CLIST ON
       CLIST OFF
              Enable or disable the production of a listing for the non active
              branches of a conditional assembly construct (default is on.)

       ILIST ON
       ILIST OFF
              Enable or disable the production of a listing for included files
              (default is off.)

       MLIST ON
       MLIST OFF
              Enable  or  disable  the  production  of a listing for the macro
              expansions (default is off.)

       NAM title
              Provide name title for the header of the listing pages.

       PAGE
              Start a new listing page.

       PAGE columns,rows
              Specify the size of a listing page.

       SKIP number
              Skip number lines.

       FAIL message
              Generate an error message message.

EXAMPLE

       Here is a small 6502 program:

              cpu 6502
          cout = $fded ; display a character
             * = $300  ; assemble at $300
               code
          pstring  ldy #0
          .1       lda message,y
                   beq .2
                   jsr cout
                   iny
          .2       bne .1
                   rts
          message  asc "This is the message "
               code

CREDITS

       Leon Bottou, September 1987.