Provided by: crasm_1.8-2_amd64 bug

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", "\"", "a'b".                 │
                              └──────────────────────────────────────────────────────────┘
   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 & 0xff00
               'A'-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] DS 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.