]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gas/doc/c-z80.texi
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / gas / doc / c-z80.texi
CommitLineData
250d07de 1@c Copyright (C) 2011-2021 Free Software Foundation, Inc.
3c9b82ba
NC
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
3c9b82ba
NC
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
7a6bf3be 27@section Command-line Options
3c9b82ba
NC
28@cindex Z80 options
29@cindex options for Z80
7a6bf3be
SB
30@c man begin OPTIONS
31@table @gcctabopt
fcaaac0a 32
0d832e7f 33@cindex @code{-march=} command-line option, Z80
fcaaac0a
SB
34@item -march=@var{CPU}[-@var{EXT}@dots{}][+@var{EXT}@dots{}]
35This option specifies the target processor. The assembler will issue
36an error message if an attempt is made to assemble an instruction which
37will not execute on the target processor. The following processor names
38are recognized:
39@code{z80},
40@code{z180},
41@code{ez80},
42@code{gbz80},
43@code{z80n},
44@code{r800}.
45In addition to the basic instruction set, the assembler can be told to
46accept some extention mnemonics. For example,
47@code{-march=z180+sli+infc} extends @var{z180} with @var{SLI} instructions and
0d832e7f 48@var{IN F,(C)}. The following extentions are currently supported:
fcaaac0a 49@code{full} (all known instructions),
0d832e7f 50@code{adl} (ADL CPU mode by default, eZ80 only),
fcaaac0a
SB
51@code{sli} (instruction known as @var{SLI}, @var{SLL} or @var{SL1}),
52@code{xyhl} (instructions with halves of index registers: @var{IXL}, @var{IXH},
53@var{IYL}, @var{IYH}),
54@code{xdcb} (instructions like @var{RotOp (II+d),R} and @var{BitOp n,(II+d),R}),
55@code{infc} (instruction @var{IN F,(C)} or @var{IN (C)}),
56@code{outc0} (instruction @var{OUT (C),0}).
57Note that rather than extending a basic instruction set, the extention
58mnemonics starting with @code{-} revoke the respective functionality:
59@code{-march=z80-full+xyhl} first removes all default extentions and adds
60support for index registers halves only.
9fc0b501 61
0d832e7f
SB
62If this option is not specified then @code{-march=z80+xyhl+infc} is assumed.
63
7a6bf3be
SB
64@cindex @code{-local-prefix} command-line option, Z80
65@item -local-prefix=@var{prefix}
66Mark all labels with specified prefix as local. But such label can be
67marked global explicitly in the code. This option do not change default
68local label prefix @code{.L}, it is just adds new one.
69
70@cindex @code{-colonless} command-line option, Z80
71@item -colonless
0d832e7f 72Accept colonless labels. All symbols at line begin are treated as labels.
6655dba2 73
7a6bf3be
SB
74@cindex @code{-sdcc} command-line option, Z80
75@item -sdcc
76Accept assembler code produced by SDCC.
77
78@cindex @code{-fp-s} command-line option, Z80
79@item -fp-s=@var{FORMAT}
80Single precision floating point numbers format. Default: ieee754 (32 bit).
6655dba2 81
7a6bf3be
SB
82@cindex @code{-fp-d} command-line option, Z80
83@item -fp-d=@var{FORMAT}
84Double precision floating point numbers format. Default: ieee754 (64 bit).
6655dba2 85@end table
7a6bf3be
SB
86@c man end
87
88Floating point numbers formats.
89@table @option
90@item @code{ieee754}
91Single or double precision IEEE754 compatible format.
92
93@item @code{half}
94Half precision IEEE754 compatible format (16 bits).
95
96@item @code{single}
97Single precision IEEE754 compatible format (32 bits).
98
99@item @code{double}
100Double precision IEEE754 compatible format (64 bits).
101
102@item @code{zeda32}
10332 bit floating point format from z80float library by Zeda.
104
105@item @code{math48}
10648 bit floating point format from Math48 package by Anders Hejlsberg.
107@end table
3c9b82ba 108
3c9b82ba
NC
109@cindex Z80 Syntax
110@node Z80 Syntax
111@section Syntax
112The assembler syntax closely follows the 'Z80 family CPU User Manual' by
113Zilog.
114In expressions a single @samp{=} may be used as ``is equal to''
34bca508 115comparison operator.
3c9b82ba
NC
116
117Suffices can be used to indicate the radix of integer constants;
118@samp{H} or @samp{h} for hexadecimal, @samp{D} or @samp{d} for decimal,
119@samp{Q}, @samp{O}, @samp{q} or @samp{o} for octal, and @samp{B} for
120binary.
121
34bca508 122The suffix @samp{b} denotes a backreference to local label.
3c9b82ba
NC
123
124@menu
125* Z80-Chars:: Special Characters
126* Z80-Regs:: Register Names
127* Z80-Case:: Case Sensitivity
7a6bf3be 128* Z80-Labels:: Labels
3c9b82ba
NC
129@end menu
130
131@node Z80-Chars
132@subsection Special Characters
133
134@cindex line comment character, Z80
135@cindex Z80 line comment character
34bca508 136The semicolon @samp{;} is the line comment character;
3c9b82ba 137
7c31ae13
NC
138If a @samp{#} appears as the first character of a line then the whole
139line is treated as a comment, but in this case the line could also be
140a logical line number directive (@pxref{Comments}) or a preprocessor
141control command (@pxref{Preprocessing}).
142
143@cindex line separator, Z80
144@cindex statement separator, Z80
145@cindex Z80 line separator
146The Z80 assembler does not support a line separator character.
147
3c9b82ba
NC
148@cindex location counter, Z80
149@cindex hexadecimal prefix, Z80
150@cindex Z80 $
151The dollar sign @samp{$} can be used as a prefix for hexadecimal numbers
152and as a symbol denoting the current location counter.
153
154@cindex character escapes, Z80
155@cindex Z80, \
156A backslash @samp{\} is an ordinary character for the Z80 assembler.
34bca508 157
3c9b82ba
NC
158@cindex character constant, Z80
159@cindex single quote, Z80
160@cindex Z80 '
161The single quote @samp{'} must be followed by a closing quote. If there
b45619c0 162is one character in between, it is a character constant, otherwise it is
3c9b82ba
NC
163a string constant.
164
165@node Z80-Regs
166@subsection Register Names
167@cindex Z80 registers
168@cindex register names, Z80
169
170The registers are referred to with the letters assigned to them by
34bca508 171Zilog. In addition @command{@value{AS}} recognizes @samp{ixl} and
3c9b82ba 172@samp{ixh} as the least and most significant octet in @samp{ix}, and
34bca508 173similarly @samp{iyl} and @samp{iyh} as parts of @samp{iy}.
3c9b82ba
NC
174
175@c The @samp{'} in @samp{ex af,af'} may be omitted.
176
177@node Z80-Case
178@subsection Case Sensitivity
179@cindex Z80, case sensitivity
180@cindex case sensitivity, Z80
181
182Upper and lower case are equivalent in register names, opcodes,
34bca508 183condition codes and assembler directives.
3c9b82ba
NC
184The case of letters is significant in labels and symbol names. The case
185is also important to distinguish the suffix @samp{b} for a backward reference
186to a local label from the suffix @samp{B} for a number in binary notation.
187
7a6bf3be
SB
188@node Z80-Labels
189@subsection Labels
190
191@cindex labels, Z80
192@cindex Z80 labels
193Labels started by @code{.L} acts as local labels. You may specify custom local
194label prefix by @code{-local-prefix} command-line option.
195Dollar, forward and backward local labels are supported. By default, all labels
196are followed by colon.
197Legacy code with colonless labels can be built with @code{-colonless}
198command-line option specified. In this case all tokens at line begin are treated
199as labels.
200
3c9b82ba
NC
201@node Z80 Floating Point
202@section Floating Point
203@cindex floating point, Z80
204@cindex Z80 floating point
7a6bf3be
SB
205Floating-point numbers of following types are supported:
206
207@table @option
208@item @code{ieee754}
209Supported half, single and double precision IEEE754 compatible numbers.
210
211@item @code{zeda32}
21232 bit floating point numbers from z80float library by Zeda.
213
214@item @code{math48}
21548 bit floating point numbers from Math48 package by Anders Hejlsberg.
216@end table
3c9b82ba
NC
217
218@node Z80 Directives
219@section Z80 Assembler Directives
0d832e7f 220@cindex Z80-only directives
3c9b82ba
NC
221
222@command{@value{AS}} for the Z80 supports some additional directives for
34bca508 223compatibility with other assemblers.
3c9b82ba 224
3c9b82ba
NC
225These are the additional directives in @code{@value{AS}} for the Z80:
226
227@table @code
0d832e7f
SB
228@item @code{.assume ADL = @var{expression}}
229@cindex @code{.assume} directive, Z80
7a6bf3be 230Set ADL status for eZ80. Non-zero value enable compilation in ADL mode else
6655dba2
SB
231used Z80 mode. ADL and Z80 mode produces incompatible object code. Mixing
232both of them within one binary may lead problems with disassembler.
233
0d832e7f
SB
234@item @code{db @var{expression}|@var{string}[,@var{expression}|@var{string}...]}
235@cindex @code{db} directive, Z80
236@itemx @code{defb @var{expression}|@var{string}[,@var{expression}|@var{string}...]}
237@cindex @code{defb} directive, Z80
238@itemx @code{defm @var{string}[,@var{string}...]}
239@cindex @code{defm} directive, Z80
3c9b82ba 240For each @var{string} the characters are copied to the object file, for
34bca508
L
241each other @var{expression} the value is stored in one byte.
242A warning is issued in case of an overflow.
7a6bf3be 243Backslash symbol in the strings is generic symbol, it cannot be used as
266803a2 244escape character. @xref{Ascii,,@code{.ascii}}.
3c9b82ba 245
0d832e7f
SB
246@item @code{dw @var{expression}[,@var{expression}...]}
247@cindex @code{dw} directive, Z80
248@itemx @code{defw @var{expression}[,@var{expression}...]}
249@cindex @code{defw} directive, Z80
3c9b82ba 250For each @var{expression} the value is stored in two bytes, ignoring
34bca508 251overflow.
3c9b82ba 252
0d832e7f
SB
253@item @code{d24 @var{expression}[,@var{expression}...]}
254@cindex @code{d24} directive, Z80
255@itemx @code{def24 @var{expression}[,@var{expression}...]}
256@cindex @code{def24} directive, Z80
134dcee5 257For each @var{expression} the value is stored in three bytes, ignoring
34bca508 258overflow.
134dcee5 259
0d832e7f
SB
260@item @code{d32 @var{expression}[,@var{expression}...]}
261@cindex @code{d32} directive, Z80
262@itemx @code{def32 @var{expression}[,@var{expression}...]}
263@cindex @code{def32} directive, Z80
134dcee5 264For each @var{expression} the value is stored in four bytes, ignoring
34bca508 265overflow.
134dcee5 266
0d832e7f
SB
267@item @code{ds @var{count}[, @var{value}]}
268@cindex @code{ds} directive, Z80
269@itemx @code{defs @var{count}[, @var{value}]}
270@cindex @code{defs} directive, Z80
34bca508 271@c Synonyms for @code{ds.b},
b45619c0 272@c which should have been described elsewhere
3c9b82ba
NC
273Fill @var{count} bytes in the object file with @var{value}, if
274@var{value} is omitted it defaults to zero.
275
0d832e7f
SB
276@item @code{@var{symbol} defl @var{expression}}
277@cindex @code{defl} directive, Z80
266803a2
L
278The @code{defl} directive is like @code{.set} but with different
279syntax. @xref{Set,,@code{.set}}.
0d832e7f
SB
280It set the value of @var{symbol} to @var{expression}. Symbols defined
281with @code{defl} are not protected from redefinition.
282
283@item @code{@var{symbol} equ @var{expression}}
284@cindex @code{equ} directive, Z80
266803a2
L
285The @code{equ} directive is like @code{.equiv} but with different
286syntax. @xref{Equiv, ,@code{.equiv}}.
0d832e7f
SB
287It set the value of @var{symbol} to @var{expression}. It is an error
288if @var{symbol} is already defined. Symbols defined with @code{equ}
289are not protected from redefinition.
290
291@item @code{psect @var{name}}
292@cindex @code{psect} directive, Z80
266803a2
L
293A synonym for @code{.section}, no second argument should be given.
294@xref{Section,,@code{.section}}.
0d832e7f
SB
295
296@item @code{xdef @var{symbol}}
297@cindex @code{xdef} directive, Z80
266803a2
L
298A synonym for @code{.global}, make @var{symbol} is visible to linker.
299@xref{Global,,@code{.global}}.
0d832e7f
SB
300
301@item @code{xref @var{name}}
302@cindex @code{xref} directive, Z80
303A synonym for @code{.extern} (@ref{Extern,,@code{.extern}}).
3c9b82ba
NC
304@ignore
305
b45619c0 306The following attributes will possibly be recognized in the future
3c9b82ba
NC
307@table @code
308@item abs
309The section is to be absolute. @code{@value{AS}} will issue an error
310message because it can not produce an absolute section.
311@item global
312The section is to be concatenated with other sections of the same name
313by the linker, this is the default.
314@item local
315The section is not global. @code{@value{AS}} will issue a warning if
316object file format is not soff.
317@item ovrld
318The section is to be overlapped with other sections of the same name by
319the linker. @code{@value{AS}} will issue an error message
320because it can not mark a section as such.
321@item pure
322The section is marked as read only.
323@end table
324@end ignore
325
326@end table
327
328@node Z80 Opcodes
329@section Opcodes
6655dba2 330In line with common practice, Z80 mnemonics are used for the Z80,
fcaaac0a 331Z80N, Z180, eZ80, Ascii R800 and the GameBoy Z80.
3c9b82ba
NC
332
333In many instructions it is possible to use one of the half index
334registers (@samp{ixl},@samp{ixh},@samp{iyl},@samp{iyh}) in stead of an
3358-bit general purpose register. This yields instructions that are
6655dba2
SB
336documented on the eZ80 and the R800, undocumented on the Z80 and
337unsupported on the Z180.
338Similarly @code{in f,(c)} is documented on the R800, undocumented on
339the Z80 and unsupported on the Z180 and the eZ80.
3c9b82ba
NC
340
341The assembler also supports the following undocumented Z80-instructions,
6655dba2 342that have not been adopted in any other instruction set:
3c9b82ba
NC
343@table @code
344@item out (c),0
7a6bf3be 345Sends zero to the port pointed to by register @code{C}.
3c9b82ba
NC
346
347@item sli @var{m}
348Equivalent to @code{@var{m} = (@var{m}<<1)+1}, the operand @var{m} can
349be any operand that is valid for @samp{sla}. One can use @samp{sll} as a
350synonym for @samp{sli}.
351
352@item @var{op} (ix+@var{d}), @var{r}
34bca508 353This is equivalent to
3c9b82ba
NC
354
355@example
356ld @var{r}, (ix+@var{d})
fcaaac0a 357@var{op} @var{r}
3c9b82ba
NC
358ld (ix+@var{d}), @var{r}
359@end example
360
fcaaac0a 361The operation @samp{@var{op}} may be any of @samp{res @var{b},},
3c9b82ba
NC
362@samp{set @var{b},}, @samp{rl}, @samp{rlc}, @samp{rr}, @samp{rrc},
363@samp{sla}, @samp{sli}, @samp{sra} and @samp{srl}, and the register
364@samp{@var{r}} may be any of @samp{a}, @samp{b}, @samp{c}, @samp{d},
365@samp{e}, @samp{h} and @samp{l}.
366
fcaaac0a 367@item @var{op} (iy+@var{d}), @var{r}
3c9b82ba
NC
368As above, but with @samp{iy} instead of @samp{ix}.
369@end table
370
371The web site at @uref{http://www.z80.info} is a good starting place to
372find more information on programming the Z80.
373
6655dba2
SB
374You may enable or disable any of these instructions for any target CPU
375even this instruction is not supported by any real CPU of this type.
376Useful for custom CPU cores.