Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 2011-2016 Free Software Foundation, Inc.
      2 @c This is part of the GAS manual.
      3 @c For copying conditions, see the file as.texinfo.
      4 
      5 @ifset GENERIC
      6 @page
      7 @node Z80-Dependent
      8 @chapter Z80 Dependent Features
      9 @end ifset
     10 
     11 
     12 @ifclear GENERIC
     13 @node Machine Dependencies
     14 @chapter Z80 Dependent Features
     15 @end ifclear
     16 
     17 @cindex Z80 support
     18 @menu
     19 * Z80 Options::              Options
     20 * Z80 Syntax::               Syntax
     21 * Z80 Floating Point::       Floating Point
     22 * Z80 Directives::           Z80 Machine Directives
     23 * Z80 Opcodes::              Opcodes
     24 @end menu
     25 
     26 @node Z80 Options
     27 @section Options
     28 @cindex Z80 options
     29 @cindex options for Z80
     30 The Zilog Z80 and Ascii R800 version of @code{@value{AS}} have a few machine
     31 dependent options.
     32 @table @option
     33 @cindex @code{-z80} command line option, Z80
     34 @item -z80
     35 Produce code for the Z80 processor. There are additional options to
     36 request warnings and error messages for undocumented instructions.
     37 @item  -ignore-undocumented-instructions
     38 @itemx -Wnud
     39 Silently assemble undocumented Z80-instructions that have been adopted
     40 as documented R800-instructions.
     41 @item  -ignore-unportable-instructions
     42 @itemx -Wnup
     43 Silently assemble all undocumented Z80-instructions.
     44 @item  -warn-undocumented-instructions
     45 @itemx -Wud
     46 Issue warnings for undocumented Z80-instructions that work on R800, do
     47 not assemble other undocumented instructions without warning.
     48 @item  -warn-unportable-instructions
     49 @itemx -Wup
     50 Issue warnings for other undocumented Z80-instructions, do not treat any
     51 undocumented instructions as errors.
     52 @item  -forbid-undocumented-instructions
     53 @itemx -Fud
     54 Treat all undocumented z80-instructions as errors.
     55 @item  -forbid-unportable-instructions
     56 @itemx -Fup
     57 Treat undocumented z80-instructions that do not work on R800 as errors.
     58 
     59 @cindex @code{-r800} command line option, Z80
     60 @item -r800
     61 Produce code for the R800 processor. The assembler does not support
     62 undocumented instructions for the R800.
     63 In line with common practice, @code{@value{AS}} uses Z80 instruction names
     64 for the R800 processor, as far as they exist.
     65 @end table
     66 
     67 @cindex Z80 Syntax
     68 @node Z80 Syntax
     69 @section Syntax
     70 The assembler syntax closely follows the 'Z80 family CPU User Manual' by
     71 Zilog.
     72 In expressions a single @samp{=} may be used as ``is equal to''
     73 comparison operator.
     74 
     75 Suffices can be used to indicate the radix of integer constants;
     76 @samp{H} or @samp{h} for hexadecimal, @samp{D} or @samp{d} for decimal,
     77 @samp{Q}, @samp{O}, @samp{q} or @samp{o} for octal, and @samp{B} for
     78 binary.
     79 
     80 The suffix @samp{b} denotes a backreference to local label.
     81 
     82 @menu
     83 * Z80-Chars::                Special Characters
     84 * Z80-Regs::                 Register Names
     85 * Z80-Case::                 Case Sensitivity
     86 @end menu
     87 
     88 @node Z80-Chars
     89 @subsection Special Characters
     90 
     91 @cindex line comment character, Z80
     92 @cindex Z80 line comment character
     93 The semicolon @samp{;} is the line comment character;
     94 
     95 If a @samp{#} appears as the first character of a line then the whole
     96 line is treated as a comment, but in this case the line could also be
     97 a logical line number directive (@pxref{Comments}) or a preprocessor
     98 control command (@pxref{Preprocessing}).
     99 
    100 @cindex line separator, Z80
    101 @cindex statement separator, Z80
    102 @cindex Z80 line separator
    103 The Z80 assembler does not support a line separator character.
    104 
    105 @cindex location counter, Z80
    106 @cindex hexadecimal prefix, Z80
    107 @cindex Z80 $
    108 The dollar sign @samp{$} can be used as a prefix for hexadecimal numbers
    109 and as a symbol denoting the current location counter.
    110 
    111 @cindex character escapes, Z80
    112 @cindex Z80, \
    113 A backslash @samp{\} is an ordinary character for the Z80 assembler.
    114 
    115 @cindex character constant, Z80
    116 @cindex single quote, Z80
    117 @cindex Z80 '
    118 The single quote @samp{'} must be followed by a closing quote. If there
    119 is one character in between, it is a character constant, otherwise it is
    120 a string constant.
    121 
    122 @node Z80-Regs
    123 @subsection Register Names
    124 @cindex Z80 registers
    125 @cindex register names, Z80
    126 
    127 The registers are referred to with the letters assigned to them by
    128 Zilog. In addition @command{@value{AS}} recognizes @samp{ixl} and
    129 @samp{ixh} as the least and most significant octet in @samp{ix}, and
    130 similarly @samp{iyl} and  @samp{iyh} as parts of @samp{iy}.
    131 
    132 @c The @samp{'} in @samp{ex af,af'} may be omitted.
    133 
    134 @node Z80-Case
    135 @subsection Case Sensitivity
    136 @cindex Z80, case sensitivity
    137 @cindex case sensitivity, Z80
    138 
    139 Upper and lower case are equivalent in register names, opcodes,
    140 condition codes  and assembler directives.
    141 The case of letters is significant in labels and symbol names. The case
    142 is also important to distinguish the suffix @samp{b} for a backward reference
    143 to a local label from the suffix @samp{B} for a number in binary notation.
    144 
    145 @node Z80 Floating Point
    146 @section Floating Point
    147 @cindex floating point, Z80
    148 @cindex Z80 floating point
    149 Floating-point numbers are not supported.
    150 
    151 @node Z80 Directives
    152 @section Z80 Assembler Directives
    153 
    154 @command{@value{AS}} for the Z80 supports some additional directives for
    155 compatibility with other assemblers.
    156 
    157 @cindex Z80-only directives
    158 These are the additional directives in @code{@value{AS}} for the Z80:
    159 
    160 @table @code
    161 @item db @var{expression}|@var{string}[,@var{expression}|@var{string}...]
    162 @itemx defb @var{expression}|@var{string}[,@var{expression}|@var{string}...]
    163 For each @var{string} the characters are copied to the object file, for
    164 each other @var{expression} the value is stored in one byte.
    165 A warning is issued in case of an overflow.
    166 
    167 @item dw @var{expression}[,@var{expression}...]
    168 @itemx defw @var{expression}[,@var{expression}...]
    169 For each @var{expression} the value is stored in two bytes, ignoring
    170 overflow.
    171 
    172 @item d24 @var{expression}[,@var{expression}...]
    173 @itemx def24 @var{expression}[,@var{expression}...]
    174 For each @var{expression} the value is stored in three bytes, ignoring
    175 overflow.
    176 
    177 @item d32 @var{expression}[,@var{expression}...]
    178 @itemx def32 @var{expression}[,@var{expression}...]
    179 For each @var{expression} the value is stored in four bytes, ignoring
    180 overflow.
    181 
    182 @item ds @var{count}[, @var{value}]
    183 @itemx defs @var{count}[, @var{value}]
    184 @c Synonyms for @code{ds.b},
    185 @c which should have been described elsewhere
    186 Fill @var{count} bytes in the object file with @var{value}, if
    187 @var{value} is omitted it defaults to zero.
    188 
    189 @item @var{symbol} equ @var{expression}
    190 @itemx @var{symbol} defl @var{expression}
    191 These directives set the value of @var{symbol} to @var{expression}. If
    192 @code{equ} is used, it is an error if @var{symbol} is already defined.
    193 Symbols defined with @code{equ} are not protected from redefinition.
    194 
    195 @item set
    196 This is a normal instruction on Z80, and not an assembler directive.
    197 
    198 @item psect @var{name}
    199 A synonym for @xref{Section}, no second argument should be given.
    200 @ignore
    201 
    202 The following attributes will possibly be recognized in the future
    203 @table @code
    204 @item abs
    205 The section is to be absolute. @code{@value{AS}} will issue an error
    206 message because it can not produce an absolute section.
    207 @item global
    208 The section is to be concatenated with other sections of the same name
    209 by the linker, this is the default.
    210 @item local
    211 The section is not global. @code{@value{AS}} will issue a warning if
    212 object file format is not soff.
    213 @item ovrld
    214 The section is to be overlapped with other sections of the same name by
    215 the linker. @code{@value{AS}} will issue an error message
    216 because it can not mark a section as such.
    217 @item pure
    218 The section is marked as read only.
    219 @end table
    220 @end ignore
    221 
    222 @end table
    223 
    224 @node Z80 Opcodes
    225 @section Opcodes
    226 In line with common practice, Z80 mnemonics are used for both the Z80 and
    227 the R800.
    228 
    229 In many instructions it is possible to use one of the half index
    230 registers (@samp{ixl},@samp{ixh},@samp{iyl},@samp{iyh}) in stead of an
    231 8-bit general purpose register. This yields instructions that are
    232 documented on the R800 and undocumented on the Z80.
    233 Similarly @code{in f,(c)} is documented on the R800 and undocumented on
    234 the Z80.
    235 
    236 The assembler also supports the following undocumented Z80-instructions,
    237 that have not been adopted in the R800 instruction set:
    238 @table @code
    239 @item out (c),0
    240 Sends zero to the port pointed to by register c.
    241 
    242 @item sli @var{m}
    243 Equivalent to @code{@var{m} = (@var{m}<<1)+1}, the operand @var{m} can
    244 be any operand that is valid for @samp{sla}. One can use @samp{sll} as a
    245 synonym for @samp{sli}.
    246 
    247 @item @var{op} (ix+@var{d}), @var{r}
    248 This is equivalent to
    249 
    250 @example
    251 ld @var{r}, (ix+@var{d})
    252 @var{opc} @var{r}
    253 ld (ix+@var{d}), @var{r}
    254 @end example
    255 
    256 The operation @samp{@var{opc}} may be any of @samp{res @var{b},},
    257 @samp{set @var{b},}, @samp{rl}, @samp{rlc}, @samp{rr}, @samp{rrc},
    258 @samp{sla}, @samp{sli}, @samp{sra} and @samp{srl}, and the register
    259 @samp{@var{r}} may be any of @samp{a}, @samp{b}, @samp{c}, @samp{d},
    260 @samp{e}, @samp{h} and @samp{l}.
    261 
    262 @item @var{opc} (iy+@var{d}), @var{r}
    263 As above, but with @samp{iy} instead of @samp{ix}.
    264 @end table
    265 
    266 The web site at @uref{http://www.z80.info} is a good starting place to
    267 find more information on programming the Z80.
    268 
    269