annotate doc/manual.docbook.sgml @ 147:6efe1e02043d

Just a bogus commit to note that the last two commits included a basically complete version of the LWASM documentation
author lost
date Thu, 29 Jan 2009 06:14:54 +0000
parents 6c0a30278982
children f0881c115010
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109
f21a5593a661 Updated docs
lost
parents:
diff changeset
1 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.5//EN">
f21a5593a661 Updated docs
lost
parents:
diff changeset
2 <book>
f21a5593a661 Updated docs
lost
parents:
diff changeset
3 <bookinfo>
f21a5593a661 Updated docs
lost
parents:
diff changeset
4 <title>LW Tool Chain</title>
f21a5593a661 Updated docs
lost
parents:
diff changeset
5 <author><firstname>William</firstname><surname>Astle</surname></author>
f21a5593a661 Updated docs
lost
parents:
diff changeset
6 <copyright><year>2009</year><holder>William Astle</holder></copyright>
f21a5593a661 Updated docs
lost
parents:
diff changeset
7 </bookinfo>
f21a5593a661 Updated docs
lost
parents:
diff changeset
8 <chapter>
f21a5593a661 Updated docs
lost
parents:
diff changeset
9
f21a5593a661 Updated docs
lost
parents:
diff changeset
10 <title>Introduction</title>
f21a5593a661 Updated docs
lost
parents:
diff changeset
11
f21a5593a661 Updated docs
lost
parents:
diff changeset
12 <para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
13 The LW tool chain provides utilities for building binaries for MC6809 and
f21a5593a661 Updated docs
lost
parents:
diff changeset
14 HD6309 CPUs. The tool chain includes a cross-assembler and a cross-linker
f21a5593a661 Updated docs
lost
parents:
diff changeset
15 which support several styles of output.
f21a5593a661 Updated docs
lost
parents:
diff changeset
16 </para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
17
f21a5593a661 Updated docs
lost
parents:
diff changeset
18 <section>
f21a5593a661 Updated docs
lost
parents:
diff changeset
19 <title>History</title>
f21a5593a661 Updated docs
lost
parents:
diff changeset
20 <para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
21 For a long time, I have had an interest in creating an operating system for
f21a5593a661 Updated docs
lost
parents:
diff changeset
22 the Coco3. I finally started working on that project around the beginning of
f21a5593a661 Updated docs
lost
parents:
diff changeset
23 2006. I had a number of assemblers I could choose from. Eventually, I settled
f21a5593a661 Updated docs
lost
parents:
diff changeset
24 on one and started tinkering. After a while, I realized that assembler was not
f21a5593a661 Updated docs
lost
parents:
diff changeset
25 going to be sufficient due to lack of macros and issues with forward references.
f21a5593a661 Updated docs
lost
parents:
diff changeset
26 Then I tried another which handled forward references correctly but still did
f21a5593a661 Updated docs
lost
parents:
diff changeset
27 not support macros. I looked around at other assemblers and they all lacked
f21a5593a661 Updated docs
lost
parents:
diff changeset
28 one feature or another that I really wanted for creating my operating system.
f21a5593a661 Updated docs
lost
parents:
diff changeset
29 </para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
30
f21a5593a661 Updated docs
lost
parents:
diff changeset
31 <para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
32 The solution seemed clear at that point. I am a fair programmer so I figured
f21a5593a661 Updated docs
lost
parents:
diff changeset
33 I could write an assembler that would do everything I wanted an assembler to
f21a5593a661 Updated docs
lost
parents:
diff changeset
34 do. Thus the LWASM probject was born. After more than two years of on and off
f21a5593a661 Updated docs
lost
parents:
diff changeset
35 work, version 1.0 of LWASM was released in October of 2008.
f21a5593a661 Updated docs
lost
parents:
diff changeset
36 </para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
37
f21a5593a661 Updated docs
lost
parents:
diff changeset
38 <para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
39 As the aforementioned operating system project progressed further, it became
f21a5593a661 Updated docs
lost
parents:
diff changeset
40 clear that while assembling the whole project through a single file was doable,
f21a5593a661 Updated docs
lost
parents:
diff changeset
41 it was not practical. When I found myself playing some fancy games with macros
f21a5593a661 Updated docs
lost
parents:
diff changeset
42 in a bid to simulate sections, I realized I needed a means of assembling
f21a5593a661 Updated docs
lost
parents:
diff changeset
43 source files separately and linking them later. This spawned a major development
f21a5593a661 Updated docs
lost
parents:
diff changeset
44 effort to add an object file support to LWASM. It also spawned the LWLINK
f21a5593a661 Updated docs
lost
parents:
diff changeset
45 project to provide a means to actually link the files.
f21a5593a661 Updated docs
lost
parents:
diff changeset
46 </para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
47
f21a5593a661 Updated docs
lost
parents:
diff changeset
48 </section>
f21a5593a661 Updated docs
lost
parents:
diff changeset
49
f21a5593a661 Updated docs
lost
parents:
diff changeset
50 </chapter>
f21a5593a661 Updated docs
lost
parents:
diff changeset
51
f21a5593a661 Updated docs
lost
parents:
diff changeset
52 <chapter>
f21a5593a661 Updated docs
lost
parents:
diff changeset
53 <title>Output Formats</title>
f21a5593a661 Updated docs
lost
parents:
diff changeset
54
f21a5593a661 Updated docs
lost
parents:
diff changeset
55 <para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
56 The LW tool chain supports multiple output formats. Each format has its
f21a5593a661 Updated docs
lost
parents:
diff changeset
57 advantages and disadvantages. Each format is described below.
f21a5593a661 Updated docs
lost
parents:
diff changeset
58 </para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
59
f21a5593a661 Updated docs
lost
parents:
diff changeset
60 <section>
f21a5593a661 Updated docs
lost
parents:
diff changeset
61 <title>Raw Binaries</title>
f21a5593a661 Updated docs
lost
parents:
diff changeset
62 <para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
63 A raw binary is simply a string of bytes. There are no headers or other
f21a5593a661 Updated docs
lost
parents:
diff changeset
64 niceties. Both LWLINK and LWASM support generating raw binaries. ORG directives
f21a5593a661 Updated docs
lost
parents:
diff changeset
65 in the source code only serve to set the addresses that will be used for
f21a5593a661 Updated docs
lost
parents:
diff changeset
66 symbols but otherwise have no direct impact on the resulting binary.
f21a5593a661 Updated docs
lost
parents:
diff changeset
67 </para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
68
f21a5593a661 Updated docs
lost
parents:
diff changeset
69 </section>
f21a5593a661 Updated docs
lost
parents:
diff changeset
70 <section>
f21a5593a661 Updated docs
lost
parents:
diff changeset
71 <title>DECB Binaries</title>
f21a5593a661 Updated docs
lost
parents:
diff changeset
72
f21a5593a661 Updated docs
lost
parents:
diff changeset
73 <para>A DECB binary is compatible with the LOADM command in Disk Extended
f21a5593a661 Updated docs
lost
parents:
diff changeset
74 Color Basic on the CoCo. They are also compatible with CLOADM from Extended
f21a5593a661 Updated docs
lost
parents:
diff changeset
75 Color Basic. These binaries include the load address of the binary as well
f21a5593a661 Updated docs
lost
parents:
diff changeset
76 as encoding an execution address. These binaries may contain multiple loadable
f21a5593a661 Updated docs
lost
parents:
diff changeset
77 sections, each of which has its own load address.</para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
78
f21a5593a661 Updated docs
lost
parents:
diff changeset
79 <para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
80 Each binary starts with a preamble. Each preamble is five bytes long. The
f21a5593a661 Updated docs
lost
parents:
diff changeset
81 first byte is zero. The next two bytes specify the number of bytes to load
f21a5593a661 Updated docs
lost
parents:
diff changeset
82 and the last two bytes specify the address to load the bytes at. Then, a
f21a5593a661 Updated docs
lost
parents:
diff changeset
83 string of bytes follows. After this string of bytes, there may be another
f21a5593a661 Updated docs
lost
parents:
diff changeset
84 preamble or a postamble. A postamble is also five bytes in length. The first
f21a5593a661 Updated docs
lost
parents:
diff changeset
85 byte of the postamble is $FF, the next two are zero, and the last two are
f21a5593a661 Updated docs
lost
parents:
diff changeset
86 the execution address for the binary.
f21a5593a661 Updated docs
lost
parents:
diff changeset
87 </para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
88
f21a5593a661 Updated docs
lost
parents:
diff changeset
89 <para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
90 Both LWASM and LWLINK can output this format.
f21a5593a661 Updated docs
lost
parents:
diff changeset
91 </para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
92 </section>
f21a5593a661 Updated docs
lost
parents:
diff changeset
93
f21a5593a661 Updated docs
lost
parents:
diff changeset
94 <section>
f21a5593a661 Updated docs
lost
parents:
diff changeset
95 <title>Object Files</title>
f21a5593a661 Updated docs
lost
parents:
diff changeset
96 <para>LWASM supports generating a proprietary object file format which is
f21a5593a661 Updated docs
lost
parents:
diff changeset
97 described in <xref linkend="objchap">. LWLINK is then used to link these
f21a5593a661 Updated docs
lost
parents:
diff changeset
98 object files into a final binary in any of LWLINK's supported binary
f21a5593a661 Updated docs
lost
parents:
diff changeset
99 formats.</para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
100
f21a5593a661 Updated docs
lost
parents:
diff changeset
101 <para>Object files are very flexible in that they allow references that are not
f21a5593a661 Updated docs
lost
parents:
diff changeset
102 known at assembly time to be resolved at link time. However, because the
f21a5593a661 Updated docs
lost
parents:
diff changeset
103 addresses of such references are not known, there is no way for the assembler
f21a5593a661 Updated docs
lost
parents:
diff changeset
104 has to use sixteen bit addressing modes for these references. The linker
f21a5593a661 Updated docs
lost
parents:
diff changeset
105 will always use sixteen bits when resolving a reference which means any
f21a5593a661 Updated docs
lost
parents:
diff changeset
106 instruction that requires an eight bit operand cannot use external references.
f21a5593a661 Updated docs
lost
parents:
diff changeset
107 </para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
108
f21a5593a661 Updated docs
lost
parents:
diff changeset
109 <para>Object files also support the concept of sections which are not valid
f21a5593a661 Updated docs
lost
parents:
diff changeset
110 for other output types. This allows related code from each object file
f21a5593a661 Updated docs
lost
parents:
diff changeset
111 linked to be collapsed together in the final binary.</para>
f21a5593a661 Updated docs
lost
parents:
diff changeset
112
f21a5593a661 Updated docs
lost
parents:
diff changeset
113 </section>
f21a5593a661 Updated docs
lost
parents:
diff changeset
114
f21a5593a661 Updated docs
lost
parents:
diff changeset
115 </chapter>
f21a5593a661 Updated docs
lost
parents:
diff changeset
116
145
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
117 <chapter>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
118 <title>LWASM</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
119 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
120 The LWTOOLS assembler is called LWASM. This chapter documents the various
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
121 features of the assembler. It is not, however, a tutorial on 6x09 assembly
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
122 language programming.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
123 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
124
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
125 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
126 <title>Command Line Options</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
127 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
128 The binary for LWASM is called "lwasm". Note that the binary is in lower
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
129 case. lwasm takes the following command line arguments.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
130 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
131
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
132 <variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
133 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
134 <term><option>--decb</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
135 <term><option>-b</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
136 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
137 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
138 Select the DECB output format target. Equivalent to <option>--format=decb</option>.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
139 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
140 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
141 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
142
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
143 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
144 <term><option>--format=type</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
145 <term><option>-f type</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
146 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
147 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
148 Select the output format. Valid values are <option>obj</option> for the object
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
149 file target, <option>decb</option> for the DECB LOADM format, and <option>raw</option>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
150 for a raw binary.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
151 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
152 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
153 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
154
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
155 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
156 <term><option>--list[=file]</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
157 <term><option>-l[file]</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
158 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
159 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
160 Cause LWASM to generate a listing. If <option>file</option> is specified,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
161 the listing will go to that file. Otherwise it will go to the standard output
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
162 stream. By default, no listing is generated.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
163 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
164 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
165 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
166
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
167 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
168 <term><option>--obj</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
169 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
170 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
171 Select the proprietary object file format as the output target.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
172 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
173 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
174 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
175
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
176 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
177 <term><option>--pragma=pragma</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
178 <term><option>-p pragma</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
179 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
180 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
181 Specify assembler pragmas. Multiple pragmas are separated by commas. The
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
182 pragmas accepted are the same as for the PRAGMA assembler directive described
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
183 below.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
184 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
185 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
186 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
187
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
188 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
189 <term><option>--raw</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
190 <term><option>-r</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
191 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
192 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
193 Select raw binary as the output target.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
194 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
195 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
196 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
197
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
198 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
199 <term><option>--help</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
200 <term><option>-?</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
201 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
202 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
203 Present a help screen describing the command line options.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
204 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
205 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
206 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
207
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
208 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
209 <term><option>--usage</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
210 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
211 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
212 Provide a summary of the command line options.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
213 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
214 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
215 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
216
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
217 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
218 <term><option>--version</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
219 <term><option>-V</option></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
220 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
221 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
222 Display the software version.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
223 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
224 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
225 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
226
146
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
227 <varlistentry>
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
228 <term><option>--debug</option></term>
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
229 <term><option>-d</option></term>
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
230 <listitem>
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
231 <para>
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
232 Increase the debugging level. Only really useful to people hacking on the
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
233 LWASM source code itself.
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
234 </para>
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
235 </listitem>
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
236 </varlistentry>
6c0a30278982 Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 145
diff changeset
237
145
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
238 </variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
239
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
240 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
241
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
242 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
243 <title>Dialects</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
244 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
245 LWASM supports all documented MC6809 instructions as defined by Motorola.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
246 It also supports all known HD6309 instructions. There is some variation,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
247 however, in the pneumonics used for the block transfer instructions. LWASM
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
248 uses TFM for all four of them as do several other assemblers. Others, such
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
249 as CCASM, use four separate opcodes for it (compare: copy+, copy-, implode,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
250 and explode). There are advantages to both methods. However, it seems like
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
251 TFM has the most traction and thus, this is what LWASM supports. Support
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
252 for such variations may be added in the future.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
253 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
254
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
255 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
256 The standard addressing mode specifiers are supported. These are the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
257 hash sign ("#") for immediate mode, the less than sign ("&lt;") for forced
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
258 eight bit modes, and the greater than sign ("&gt;") for forced sixteen bit modes.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
259 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
260
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
261 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
262
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
263 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
264 <title>Source Format</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
265
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
266 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
267 LWASM accepts plain text files in a relatively free form. It can handle
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
268 lines terminated with CR, LF, CRLF, or LFCR which means it should be able
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
269 to assemble files on any platform on which it compiles.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
270 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
271 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
272 Each line may start with a symbol. If a symbol is present, there must not
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
273 be any whitespace preceding it. It is legal for a line to contain nothing
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
274 but a symbol.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
275 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
276 The op code is separated from the symbol by whitespace. If there is
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
277 no symbol, there must be at least one white space character preceding it.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
278 If applicable, the operand follows separated by whitespace. Following the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
279 opcode and operand is an optional comment.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
280 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
281 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
282 A comment can also be introduced with a * or a ;. The comment character is
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
283 optional for end of statement comments. However, if a symbol is the only
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
284 thing present on the line other than the comment, the comment character is
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
285 mandatory to prevent the assembler from interpreting the comment as an opcode.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
286 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
287
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
288 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
289 The opcode is not treated case sensitively. Neither are register names in
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
290 the operand fields. Symbols, however, are case sensitive.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
291 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
292
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
293 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
294 LWASM does not support line numbers in the file.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
295 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
296
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
297 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
298
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
299 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
300 <title>Symbols</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
301
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
302 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
303 Symbols have no length restriction. They may contain letters, numbers, dots,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
304 dollar signs, and underscores. They must start with a letter, dot, or
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
305 underscore.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
306 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
307
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
308 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
309 LWASM also supports the concept of a local symbol. A local symbol is one
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
310 which contains either a "?" or a "@", which can appear anywhere in the symbol.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
311 The scope of a local symbol is determined by a number of factors. First,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
312 each included file gets its own local symbol scope. A blank line will also
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
313 be considered a local scope barrier. Macros each have their own local symbol
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
314 scope as well (which has a side effect that you cannot use a local symbol
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
315 as an argument to a macro). There are other factors as well. In general,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
316 a local symbol is restricted to the block of code it is defined within.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
317 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
318
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
319 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
320
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
321 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
322 <title>Numbers and Expressions</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
323 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
324 Numbers can be expressed in binary, octal, decimal, or hexadecimal.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
325 Binary numbers may be prefixed with a "%" symbol or suffixed with a
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
326 "b" or "B". Octal numbers may be prefixed with "@" or suffixed with
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
327 "Q", "q", "O", or "o". Hexadecimal numbers may be prefixed with "$" or
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
328 suffixed with "H". No prefix or suffix is required for decimal numbers but
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
329 they can be prefixed with "&amp;" if desired. Any constant which begins with
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
330 a letter must be expressed with the correct prefix base identifier or be
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
331 prefixed with a 0. Thus hexadecimal FF would have to be written either 0FFH
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
332 or $FF. Numbers are not case sensitive.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
333 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
334
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
335 <para> A symbol may appear at any point where a number is acceptable. The
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
336 special symbol "*" can be used to represent the starting address of the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
337 current source line within expressions. </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
338
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
339 <para>The ASCII value of a character can be included by prefixing it with a
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
340 single quote ('). The ASCII values of two characters can be included by
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
341 prefixing the characters with a quote (").</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
342
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
343 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
344 LWASM supports the following basic binary operators: +, -, *, /, and %.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
345 These represent addition, subtraction, multiplication, division, and modulus.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
346 It also supports unary negation and unary 1's complement (- and ^ respectively).
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
347 For completeness, a unary positive (+) is supported though it is a no-op.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
348 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
349
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
350 <para>Operator precedence follows the usual rules. multiplication, division,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
351 and modulus take precedence over addition and subtraction. Unary operators
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
352 take precedence over binary operators. To force a specific order of evaluation,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
353 parentheses can be used in the usual manner.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
354 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
355 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
356
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
357 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
358 <title>Assembler Directives</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
359 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
360 Various directives can be used to control the behaviour of the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
361 assembler or to include non-code/data in the resulting output. Those directives
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
362 that are not described in detail in other sections of this document are
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
363 described below.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
364 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
365
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
366 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
367 <title>Data Directives</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
368 <variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
369 <varlistentry><term>FCB <parameter>expr[,...]</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
370 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
371 <para>Include one or more constant bytes (separated by commas) in the output.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
372 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
373 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
374
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
375 <varlistentry><term>FDB <parameter>expr[,...]</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
376 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
377 <para>Include one or more words (separated by commas) in the output.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
378 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
379 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
380
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
381 <varlistentry><term>FQB <parameter>expr[,...]</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
382 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
383 <para>Include one or more double words (separated by commas) in the output.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
384 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
385 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
386
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
387 <varlistentry><term>FCC <parameter>string</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
388 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
389 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
390 Include a string of text in the output. The first character of the operand
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
391 is the delimiter which must appear as the last character and cannot appear
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
392 within the string. The string is included with no modifications>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
393 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
394 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
395 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
396
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
397 <varlistentry><term>FCN <parameter>string</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
398 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
399 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
400 Include a NUL terminated string of text in the output. The first character of
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
401 the operand is the delimiter which must appear as the last character and
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
402 cannot appear within the string. A NUL byte is automatically appended to
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
403 the string.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
404 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
405 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
406 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
407
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
408 <varlistentry><term>FCS <parameter>string</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
409 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
410 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
411 Include a string of text in the output with bit 7 of the final byte set. The
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
412 first character of the operand is the delimiter which must appear as the last
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
413 character and cannot appear within the string.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
414 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
415 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
416 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
417
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
418 <varlistentry><term>ZMB <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
419 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
420 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
421 Include a number of NUL bytes in the output. The number must be fully resolvable
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
422 during pass 1 of assembly so no forward or external references are permitted.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
423 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
424 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
425 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
426
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
427 <varlistentry><term>ZMD <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
428 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
429 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
430 Include a number of zero words in the output. The number must be fully
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
431 resolvable during pass 1 of assembly so no forward or external references are
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
432 permitted.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
433 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
434 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
435 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
436
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
437 <varlistentry><term>ZMQ <parameter>expr<parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
438 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
439 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
440 Include a number of zero double-words in the output. The number must be fully
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
441 resolvable during pass 1 of assembly so no forward or external references are
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
442 permitted.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
443 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
444 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
445 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
446
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
447 <varlistentry><term>RMB <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
448 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
449 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
450 Reserve a number of bytes in the output. The number must be fully resolvable
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
451 during pass 1 of assembly so no forward or external references are permitted.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
452 The value of the bytes is undefined.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
453 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
454 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
455 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
456
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
457 <varlistentry><term>RMD <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
458 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
459 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
460 Reserve a number of words in the output. The number must be fully
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
461 resolvable during pass 1 of assembly so no forward or external references are
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
462 permitted. The value of the words is undefined.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
463 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
464 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
465 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
466
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
467 <varlistentry><term>RMQ <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
468 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
469 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
470 Reserve a number of double-words in the output. The number must be fully
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
471 resolvable during pass 1 of assembly so no forward or external references are
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
472 permitted. The value of the double-words is undefined.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
473 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
474 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
475 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
476 </variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
477
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
478 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
479
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
480 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
481 <title>Address Definition</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
482 <para>The directives in this section all control the addresses of symbols
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
483 or the assembly process itself.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
484
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
485 <variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
486 <varlistentry><term>ORG <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
487 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
488 <para>Set the assembly address. The address must be fully resolvable on the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
489 first pass so no external or forward references are permitted. ORG is not
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
490 permitted within sections when outputting to object files. For the DECB
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
491 target, each ORG directive after which output is generated will cause
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
492 a new preamble to be output. ORG is only used to determine the addresses
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
493 of symbols when the raw target is used.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
494 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
495 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
496 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
497
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
498 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
499 <term><parameter>sym</parameter> EQU <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
500 <term><parameter>sym</parameter> = <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
501 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
502 <para>Define the value of <parameter>sym</parameter> to be <parameter>expr</parameter>.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
503 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
504 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
505
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
506 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
507 <term><parameter>sym</parameter> SET <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
508 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
509 <para>Define the value of <parameter>sym</parameter> to be <parameter>expr</parameter>.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
510 Unlike EQU, SET permits symbols to be defined multiple times as long as SET
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
511 is used for all instances. Use of the symbol before the first SET statement
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
512 that sets its value is undefined.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
513 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
514 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
515
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
516 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
517 <term>SETDP <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
518 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
519 <para>Inform the assembler that it can assume the DP register contains
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
520 <parameter>expr</parameter>. This directive is only advice to the assembler
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
521 to determine whether an address is in the direct page and has no effect
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
522 on the contents of the DP register. The value must be fully resolved during
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
523 the first assembly pass because it affects the sizes of subsequent instructions.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
524 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
525 <para>This directive has no effect in the object file target.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
526 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
527 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
528 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
529
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
530 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
531 <term>ALIGN <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
532 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
533 <para>Force the current assembly address to be a multiple of <parameter>expr</parameter>.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
534 A series of NUL bytes is output to force the alignment, if required. The
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
535 alignment value must be fully resolved on the first pass because it affects
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
536 the addresses of subsquent instructions.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
537 <para>This directive is not suitable for inclusion in the middle of actual
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
538 code. It is intended to appear where the bytes output will not be executed.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
539 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
540 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
541 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
542
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
543 </variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
544
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
545 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
546
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
547 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
548 <title>Conditional Assembly</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
549 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
550 Portions of the source code can be excluded or included based on conditions
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
551 known at assembly time. Conditionals can be nested arbitrarily deeply. The
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
552 directives associated with conditional assembly are described in this section.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
553 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
554 <para>All conditionals must be fully bracketed. That is, every conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
555 statement must eventually be followed by an ENDC at the same level of nesting.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
556 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
557 <para>Conditional expressions are only evaluated on the first assembly pass.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
558 It is not possible to game the assembly process by having a conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
559 change its value between assembly passes. Thus there is not and never will
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
560 be any equivalent of IFP1 or IFP2 as provided by other assemblers.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
561
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
562 <variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
563 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
564 <term>IFEQ <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
565 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
566 <para>If <parameter>expr</parameter> evaluates to zero, the conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
567 will be considered true.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
568 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
569 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
570 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
571
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
572 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
573 <term>IFNE <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
574 <term>IF <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
575 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
576 <para>If <parameter>expr</parameter> evaluates to a non-zero value, the conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
577 will be considered true.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
578 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
579 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
580 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
581
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
582 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
583 <term>IFGT <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
584 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
585 <para>If <parameter>expr</parameter> evaluates to a value greater than zero, the conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
586 will be considered true.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
587 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
588 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
589 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
590
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
591 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
592 <term>IFGE <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
593 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
594 <para>If <parameter>expr</parameter> evaluates to a value greater than or equal to zero, the conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
595 will be considered true.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
596 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
597 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
598 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
599
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
600 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
601 <term>IFLT <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
602 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
603 <para>If <parameter>expr</parameter> evaluates to a value less than zero, the conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
604 will be considered true.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
605 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
606 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
607 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
608
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
609 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
610 <term>IFLE <parameter>expr</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
611 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
612 <para>If <parameter>expr</parameter> evaluates to a value less than or equal to zero , the conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
613 will be considered true.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
614 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
615 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
616 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
617
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
618 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
619 <term>IFDEF <parameter>sym</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
620 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
621 <para>If <parameter>sym</parameter> is defined at this point in the assembly
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
622 process, the conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
623 will be considered true.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
624 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
625 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
626 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
627
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
628 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
629 <term>IFNDEF <parameter>sym</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
630 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
631 <para>If <parameter>sym</parameter> is not defined at this point in the assembly
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
632 process, the conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
633 will be considered true.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
634 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
635 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
636 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
637
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
638 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
639 <term>ELSE</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
640 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
641 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
642 If the preceding conditional at the same level of nesting was false, the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
643 statements following will be assembled. If the preceding conditional at
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
644 the same level was true, the statements following will not be assembled.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
645 Note that the preceding conditional might have been another ELSE statement
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
646 although this behaviour is not guaranteed to be supported in future versions
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
647 of LWASM.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
648 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
649 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
650
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
651 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
652 <term>ENDC</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
653 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
654 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
655 This directive marks the end of a conditional construct. Every conditional
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
656 construct must end with an ENDC directive.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
657 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
658 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
659 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
660
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
661 </variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
662 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
663
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
664 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
665 <title>Miscelaneous Directives</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
666
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
667 <para>This section includes directives that do not fit into the other
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
668 categories.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
669
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
670 <variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
671
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
672 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
673 <term>INCLUDE <parameter>filename</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
674 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
675 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
676 Include the contents of <parameter>filename</parameter> at this point in
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
677 the assembly as though it were a part of the file currently being processed.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
678 Note that whitespace cannot appear in the name of the file.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
679 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
680 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
681 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
682
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
683 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
684 <term>END <parameter>[expr]</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
685 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
686 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
687 This directive causes the assembler to stop assembling immediately as though
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
688 it ran out of input. For the DECB target only, <parameter>expr</parameter>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
689 can be used to set the execution address of the resulting binary. For all
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
690 other targets, specifying <parameter>expr</parameter> will cause an error.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
691 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
692 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
693 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
694
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
695 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
696 <term>ERROR <parameter>string</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
697 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
698 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
699 Causes a custom error message to be printed at this line. This will cause
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
700 assembly to fail. This directive is most useful inside conditional constructs
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
701 to cause assembly to fail if some condition that is known bad happens.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
702 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
703 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
704 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
705
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
706 </variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
707 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
708
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
709 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
710
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
711 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
712 <title>Macros</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
713 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
714 LWASM is a macro assembler. A macro is simply a name that stands in for a
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
715 series of instructions. Once a macro is defined, it is used like any other
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
716 assembler directive. Defining a macro can be considered equivalent to adding
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
717 additional assembler directives.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
718 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
719 <para>Macros my accept parameters. These parameters are referenced within
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
720 a macro by the a backslash ("\") followed by a digit 1 through 9 for the first
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
721 through ninth parameters. They may also be referenced by enclosing the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
722 decimal parameter number in braces ("{num}"). These parameter references
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
723 are replaced with the verbatim text of the parameter passed to the macro. A
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
724 reference to a non-existent parameter will be replaced by an empty string.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
725 Macro parameters are expanded everywhere on each source line. That means
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
726 the parameter to a macro could be used as a symbol or it could even appear
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
727 in a comment or could cause an entire source line to be commented out
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
728 when the macro is expanded.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
729 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
730 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
731 Parameters passed to a macro are separated by commas and the parameter list
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
732 is terminated by any whitespace. This means that neither a comma nor whitespace
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
733 may be included in a macro parameter.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
734 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
735 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
736 Macro expansion is done recursively. That is, within a macro, macros are
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
737 expanded. This can lead to infinite loops in macro expansion. If the assembler
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
738 hangs for a long time while assembling a file that uses macros, this may be
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
739 the reason.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
740
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
741 <para>Each macro expansion receives its own local symbol context which is not
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
742 inherited by any macros called by it nor is it inherited from the context
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
743 the macro was instantiated in. That means it is possible to use local symbols
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
744 within macros without having them collide with symbols in other macros or
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
745 outside the macro itself. However, this also means that using a local symbol
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
746 as a parameter to a macro, while legal, will not do what it would seem to do
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
747 as it will result in looking up the local symbol in the macro's symbol context
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
748 rather than the enclosing context where it came from, likely yielding either
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
749 an undefined symbol error or bizarre assembly results.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
750 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
751 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
752 Note that there is no way to define a macro as local to a symbol context. All
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
753 macros are part of the global macro namespace. However, macros have a separate
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
754 namespace from symbols so it is possible to have a symbol with the same name
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
755 as a macro.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
756 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
757
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
758 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
759 Macros are defined only during the first pass. Macro expansion also
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
760 only occurs during the first pass. On the second pass, the macro
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
761 definition is simply ignored. Macros must be defined before they are used.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
762 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
763
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
764 <para>The following directives are used when defining macros.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
765
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
766 <variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
767 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
768 <term><parameter>macroname</parameter> MACRO</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
769 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
770 <para>This directive is used to being the definition of a macro called
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
771 <parameter>macroname</parameter>. If <parameter>macroname</parameter> already
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
772 exists, it is considered an error. Attempting to define a macro within a
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
773 macro is undefined. It may work and it may not so the behaviour should not
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
774 be relied upon.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
775 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
776 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
777 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
778
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
779 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
780 <term>ENDM</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
781 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
782 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
783 This directive indicates the end of the macro currently being defined. It
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
784 causes the assembler to resume interpreting source lines as normal.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
785 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
786 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
787 </variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
788
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
789 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
790
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
791 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
792 <title>Object Files and Sections</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
793 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
794 The object file target is very useful for large project because it allows
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
795 multiple files to be assembled independently and then linked into the final
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
796 binary at a later time. It allows only the small portion of the project
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
797 that was modified to be re-assembled rather than requiring the entire set
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
798 of source code to be available to the assembler in a single assembly process.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
799 This can be particularly important if there are a large number of macros,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
800 symbol definitions, or other metadata that uses resources at assembly time.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
801 By far the largest benefit, however, is keeping the source files small enough
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
802 for a mere mortal to find things in them.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
803 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
804
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
805 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
806 With multi-file projects, there needs to be a means of resolving references to
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
807 symbols in other source files. These are known as external references. The
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
808 addresses of these symbols cannot be known until the linker joins all the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
809 object files into a single binary. This means that the assembler must be
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
810 able to output the object code without knowing the value of the symbol. This
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
811 places some restrictions on the code generated by the assembler. For
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
812 example, the assembler cannot generate direct page addressing for instructions
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
813 that reference external symbols because the address of the symbol may not
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
814 be in the direct page. Similarly, relative branches and PC relative addressing
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
815 cannot be used in their eight bit forms. Everything that must be resolved
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
816 by the linker must be assembled to use the largest address size possible to
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
817 allow the linker to fill in the correct value at link time. Note that the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
818 same problem applies to absolute address references as well, even those in
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
819 the same source file, because the address is not known until link time.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
820 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
821
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
822 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
823 It is often desired in multi-file projects to have code of various types grouped
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
824 together in the final binary generated by the linker as well. The same applies
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
825 to data. In order for the linker to do that, the bits that are to be grouped
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
826 must be tagged in some manner. This is where the concept of sections comes in.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
827 Each chunk of code or data is part of a section in the object file. Then,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
828 when the linker reads all the object files, it coalesces all sections of the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
829 same name into a single section and then considers it as a unit.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
830 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
831
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
832 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
833 The existence of sections, however, raises a problem for symbols even
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
834 within the same source file. Thus, the assembler must treat symbols from
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
835 different sections within the same source file in the same manner as external
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
836 symbols. That is, it must leave them for the linker to resolve at link time,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
837 with all the limitations that entails.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
838 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
839
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
840 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
841 In the object file target mode, LWASM requires all source lines that
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
842 cause bytes to be output to be inside a section. Any directives that do
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
843 not cause any bytes to be output can appear outside of a section. This includes
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
844 such things as EQU or RMB. Even ORG can appear outside a section. ORG, however,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
845 makes no sense within a section because it is the linker that determines
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
846 the starting address of the section's code, not the assembler.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
847 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
848
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
849 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
850 All symbols defined globally in the assembly process are local to the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
851 source file and cannot be exported. All symbols defined within a section are
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
852 considered local to the source file unless otherwise explicitly exported.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
853 Symbols referenced from external source files must be declared external,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
854 either explicitly or by asking the assembler to assume that all undefined
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
855 symbols are external.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
856 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
857
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
858 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
859 It is often handy to define a number of memory addresses that will be
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
860 used for data at run-time but which need not be included in the binary file.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
861 These memory addresses are not initialized until run-time, either by the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
862 program itself or by the program loader, depending on the operating environment.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
863 Such sections are often known as BSS sections. LWASM supports generating
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
864 sections with a BSS attribute set which causes the section definition including
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
865 symbols exported from that section and those symbols required to resolve
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
866 references from the local file, but with no actual code in the object file.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
867 It is illegal for any source lines within a BSS flagged section to cause any
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
868 bytes to be output.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
869 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
870
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
871 <para>The following directives apply to section handling.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
872
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
873 <variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
874 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
875 <term>SECTION <parameter>name[,flags]</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
876 <term>SECT <parameter>name[,flags]</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
877 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
878 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
879 Instructs the assembler that the code following this directive is to be
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
880 considered part of the section <parameter>name</parameter>. A section name
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
881 may appear multiple times in which case it is as though all the code from
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
882 all the instances of that section appeared adjacent within the source file.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
883 However, <parameter>flags</parameter> may only be specified on the first
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
884 instance of the section.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
885 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
886 <para>There is a single flag supported in <parameter>flags</parameter>. The
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
887 flag <parameter>bss</parameter> will cause the section to be treated as a BSS
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
888 section and, thus, no code will be included in the object file nor will any
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
889 bytes be permitted to be output.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
890 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
891 If assembly is already happening within a section, the section is implicitly
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
892 ended and the new section started. This is not considered an error although
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
893 it is recommended that all sections be explicitly closed.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
894 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
895 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
896 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
897
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
898 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
899 <term>ENDSECTION</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
900 <term>ENDSECT</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
901 <term>ENDS</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
902 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
903 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
904 This directive ends the current section. This puts assembly outside of any
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
905 sections until the next SECTION directive.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
906 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
907 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
908
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
909 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
910 <term><parameter>sym</parameter> EXTERN</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
911 <term><parameter>sym</parameter> EXTERNAL</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
912 <term><parameter>sym</parameter> IMPORT</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
913 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
914 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
915 This directive defines <parameter>sym</parameter> as an external symbol.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
916 This directive may occur at any point in the source code. EXTERN definitions
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
917 are resolved on the first pass so an EXTERN definition anywhere in the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
918 source file is valid for the entire file. The use of this directive is
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
919 optional when the assembler is instructed to assume that all undefined
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
920 symbols are external. In fact, in that mode, if the symbol is referenced
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
921 before the EXTERN directive, an error will occur.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
922 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
923 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
924 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
925
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
926 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
927 <term><parameter>sym</parameter> EXPORT</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
928 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
929 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
930 This directive defines <parameter>sym</parameter> as an exported symbol.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
931 This directive may occur at any point in the source code, even before the
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
932 definition of the exported symbol.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
933 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
934 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
935 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
936
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
937 </variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
938
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
939 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
940
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
941 <section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
942 <title>Assembler Modes and Pragmas</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
943 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
944 There are a number of options that affect the way assembly is performed.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
945 Some of these options can only be specified on the command line because
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
946 they determine something absolute about the assembly process. These include
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
947 such things as the output target. Other things may be switchable during
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
948 the assembly process. These are known as pragmas and are, by definition,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
949 not portable between assemblers.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
950 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
951
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
952 <para>LWASM supports a number of pragmas that affect code generation or
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
953 otherwise affect the behaviour of the assembler. These may be specified by
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
954 way of a command line option or by assembler directives. The directives
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
955 are as follows.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
956 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
957
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
958 <variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
959 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
960 <term>PRAGMA <parameter>pragma[,...]</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
961 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
962 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
963 Specifies that the assembler should bring into force all <parameter>pragma</parameter>s
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
964 specified. Any unrecognized pragma will cause an assembly error. The new
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
965 pragmas will take effect immediately. This directive should be used when
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
966 the program will assemble incorrectly if the pragma is ignored or not supported.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
967 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
968 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
969 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
970
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
971 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
972 <term>*PRAGMA <parameter>pragma[,...]</parameter></term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
973 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
974 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
975 This is identical to the PRAGMA directive except no error will occur with
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
976 unrecognized or unsupported pragmas. This directive, by virtue of starting
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
977 with a comment character, will also be ignored by assemblers that do not
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
978 support this directive. Use this variation if the pragma is not required
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
979 for correct functioning of the code.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
980 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
981 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
982 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
983 </variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
984
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
985 <para>Each pragma supported has a positive version and a negative version.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
986 The positive version enables the pragma while the negative version disables
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
987 it. The negatitve version is simply the positive version with "no" prefixed
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
988 to it. For instance, "pragma" vs. "nopragma". Only the positive version is
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
989 listed below.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
990
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
991 <para>Pragmas are not case sensitive.</para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
992
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
993 <variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
994 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
995 <term>index0tonone</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
996 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
997 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
998 When in force, this pragma enables an optimization affecting indexed addressing
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
999 modes. When the offset expression in an indexed mode evaluates to zero but is
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1000 not explicity written as 0, this will replace the operand with the equivalent
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1001 no offset mode, thus creating slightly faster code. Because of the advantages
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1002 of this optimization, it is enabled by default.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1003 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1004 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1005 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1006
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1007 <varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1008 <term>undefextern</term>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1009 <listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1010 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1011 This pragma is only valid for targets that support external references. When in
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1012 force, if the assembler sees an undefined symbol on the second pass, it will
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1013 automatically define it as an external symbol. This automatic definition will
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1014 apply for the remainder of the assembly process, even if the pragma is
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1015 subsequently turned off. Because this behaviour would be potentially surprising,
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1016 this pragma defaults to off.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1017 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1018 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1019 The primary use for this pragma is for projects that share a large number of
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1020 symbols between source files. In such cases, it is impractical to enumerate
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1021 all the external references in every source file. This allows the assembler
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1022 and linker to do the heavy lifting while not preventing a particular source
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1023 module from defining a local symbol of the same name as an external symbol
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1024 if it does not need the external symbol. (This pragma will not cause an
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1025 automatic external definition if there is already a locally defined symbol.)
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1026 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1027 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1028 This pragma will often be specified on the command line for large projects.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1029 However, depending on the specific dynamics of the project, it may be sufficient
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1030 for one or two files to use this pragma internally.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1031 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1032 </listitem>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1033 </varlistentry>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1034 </variablelist>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1035
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1036 </section>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1037
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1038 </chapter>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1039
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1040 <chapter>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1041 <title>LWLINK</title>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1042 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1043 </para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1044 </chapter>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1045
109
f21a5593a661 Updated docs
lost
parents:
diff changeset
1046 <chapter id="objchap">
f21a5593a661 Updated docs
lost
parents:
diff changeset
1047 <title>Object Files</title>
145
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1048 <para>
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1049 LWTOOLS uses a proprietary object file format. It is proprietary in the sense
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1050 that it is specific to LWTOOLS, not that it is a hidden format. It would be
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1051 hard to keep it hidden in an open source tool chain anyway. This chapter
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1052 documents the object file format.
afe30454382f Made development version of LWASM be 2.1, not 3.0, because the next release will be an incremental feature release
lost
parents: 109
diff changeset
1053 </para>
109
f21a5593a661 Updated docs
lost
parents:
diff changeset
1054 </chapter>
f21a5593a661 Updated docs
lost
parents:
diff changeset
1055 </book>
f21a5593a661 Updated docs
lost
parents:
diff changeset
1056