annotate doc/manual/manual.html @ 153:ffef3ea07399 2.1 2.1

Preparing for release
author lost
date Fri, 30 Jan 2009 04:32:55 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
153
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2 <HTML
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
3 ><HEAD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
4 ><TITLE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
5 >LW Tool Chain</TITLE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
6 ><META
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
7 NAME="GENERATOR"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
8 CONTENT="Modular DocBook HTML Stylesheet Version 1.79"></HEAD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
9 ><BODY
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
10 CLASS="BOOK"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
11 BGCOLOR="#FFFFFF"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
12 TEXT="#000000"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
13 LINK="#0000FF"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
14 VLINK="#840084"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
15 ALINK="#0000FF"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
16 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
17 CLASS="BOOK"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
18 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
19 NAME="AEN1"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
20 ></A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
21 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
22 CLASS="TITLEPAGE"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
23 ><H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
24 CLASS="TITLE"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
25 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
26 NAME="AEN2"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
27 >LW Tool Chain</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
28 ></H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
29 ><H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
30 CLASS="AUTHOR"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
31 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
32 NAME="AEN4"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
33 ></A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
34 >William Astle</H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
35 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
36 CLASS="COPYRIGHT"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
37 >Copyright &copy; 2009 William Astle</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
38 ><HR></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
39 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
40 CLASS="TOC"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
41 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
42 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
43 ><B
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
44 >Table of Contents</B
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
45 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
46 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
47 >1. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
48 HREF="#AEN10"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
49 >Introduction</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
50 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
51 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
52 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
53 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
54 >1.1. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
55 HREF="#AEN13"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
56 >History</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
57 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
58 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
59 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
60 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
61 >2. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
62 HREF="#AEN18"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
63 >Output Formats</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
64 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
65 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
66 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
67 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
68 >2.1. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
69 HREF="#AEN21"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
70 >Raw Binaries</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
71 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
72 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
73 >2.2. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
74 HREF="#AEN24"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
75 >DECB Binaries</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
76 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
77 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
78 >2.3. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
79 HREF="#AEN29"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
80 >Object Files</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
81 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
82 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
83 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
84 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
85 >3. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
86 HREF="#AEN35"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
87 >LWASM</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
88 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
89 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
90 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
91 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
92 >3.1. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
93 HREF="#AEN38"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
94 >Command Line Options</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
95 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
96 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
97 >3.2. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
98 HREF="#AEN121"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
99 >Dialects</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
100 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
101 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
102 >3.3. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
103 HREF="#AEN125"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
104 >Source Format</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
105 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
106 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
107 >3.4. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
108 HREF="#AEN133"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
109 >Symbols</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
110 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
111 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
112 >3.5. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
113 HREF="#AEN137"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
114 >Numbers and Expressions</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
115 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
116 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
117 >3.6. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
118 HREF="#AEN144"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
119 >Assembler Directives</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
120 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
121 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
122 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
123 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
124 >3.6.1. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
125 HREF="#AEN147"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
126 >Data Directives</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
127 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
128 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
129 >3.6.2. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
130 HREF="#AEN211"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
131 >Address Definition</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
132 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
133 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
134 >3.6.3. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
135 HREF="#AEN253"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
136 >Conditional Assembly</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
137 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
138 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
139 >3.6.4. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
140 HREF="#AEN317"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
141 >Miscelaneous Directives</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
142 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
143 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
144 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
145 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
146 >3.7. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
147 HREF="#AEN339"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
148 >Macros</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
149 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
150 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
151 >3.8. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
152 HREF="#AEN361"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
153 >Object Files and Sections</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
154 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
155 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
156 >3.9. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
157 HREF="#AEN407"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
158 >Assembler Modes and Pragmas</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
159 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
160 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
161 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
162 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
163 >4. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
164 HREF="#AEN436"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
165 >LWLINK</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
166 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
167 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
168 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
169 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
170 >4.1. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
171 HREF="#AEN439"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
172 >Command Line Options</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
173 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
174 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
175 >4.2. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
176 HREF="#AEN510"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
177 >Linker Operation</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
178 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
179 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
180 >4.3. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
181 HREF="#AEN524"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
182 >Linking Scripts</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
183 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
184 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
185 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
186 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
187 >5. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
188 HREF="#OBJCHAP"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
189 >Object Files</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
190 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
191 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
192 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
193 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
194 CLASS="LOT"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
195 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
196 CLASS="LOT"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
197 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
198 ><B
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
199 >List of Tables</B
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
200 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
201 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
202 >5-1. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
203 HREF="#AEN583"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
204 >Object File Term Types</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
205 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
206 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
207 >5-2. <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
208 HREF="#AEN610"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
209 >Object File Operator Numbers</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
210 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
211 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
212 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
213 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
214 CLASS="CHAPTER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
215 ><HR><H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
216 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
217 NAME="AEN10"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
218 ></A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
219 >Chapter 1. Introduction</H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
220 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
221 >The LW tool chain provides utilities for building binaries for MC6809 and
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
222 HD6309 CPUs. The tool chain includes a cross-assembler and a cross-linker
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
223 which support several styles of output.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
224 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
225 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
226 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
227 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
228 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
229 NAME="AEN13"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
230 >1.1. History</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
231 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
232 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
233 >For a long time, I have had an interest in creating an operating system for
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
234 the Coco3. I finally started working on that project around the beginning of
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
235 2006. I had a number of assemblers I could choose from. Eventually, I settled
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
236 on one and started tinkering. After a while, I realized that assembler was not
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
237 going to be sufficient due to lack of macros and issues with forward references.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
238 Then I tried another which handled forward references correctly but still did
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
239 not support macros. I looked around at other assemblers and they all lacked
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
240 one feature or another that I really wanted for creating my operating system.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
241 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
242 >The solution seemed clear at that point. I am a fair programmer so I figured
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
243 I could write an assembler that would do everything I wanted an assembler to
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
244 do. Thus the LWASM probject was born. After more than two years of on and off
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
245 work, version 1.0 of LWASM was released in October of 2008.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
246 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
247 >As the aforementioned operating system project progressed further, it became
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
248 clear that while assembling the whole project through a single file was doable,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
249 it was not practical. When I found myself playing some fancy games with macros
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
250 in a bid to simulate sections, I realized I needed a means of assembling
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
251 source files separately and linking them later. This spawned a major development
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
252 effort to add an object file support to LWASM. It also spawned the LWLINK
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
253 project to provide a means to actually link the files.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
254 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
255 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
256 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
257 CLASS="CHAPTER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
258 ><HR><H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
259 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
260 NAME="AEN18"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
261 ></A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
262 >Chapter 2. Output Formats</H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
263 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
264 >The LW tool chain supports multiple output formats. Each format has its
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
265 advantages and disadvantages. Each format is described below.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
266 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
267 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
268 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
269 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
270 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
271 NAME="AEN21"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
272 >2.1. Raw Binaries</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
273 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
274 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
275 >A raw binary is simply a string of bytes. There are no headers or other
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
276 niceties. Both LWLINK and LWASM support generating raw binaries. ORG directives
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
277 in the source code only serve to set the addresses that will be used for
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
278 symbols but otherwise have no direct impact on the resulting binary.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
279 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
280 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
281 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
282 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
283 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
284 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
285 NAME="AEN24"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
286 >2.2. DECB Binaries</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
287 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
288 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
289 >A DECB binary is compatible with the LOADM command in Disk Extended
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
290 Color Basic on the CoCo. They are also compatible with CLOADM from Extended
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
291 Color Basic. These binaries include the load address of the binary as well
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
292 as encoding an execution address. These binaries may contain multiple loadable
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
293 sections, each of which has its own load address.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
294 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
295 >Each binary starts with a preamble. Each preamble is five bytes long. The
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
296 first byte is zero. The next two bytes specify the number of bytes to load
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
297 and the last two bytes specify the address to load the bytes at. Then, a
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
298 string of bytes follows. After this string of bytes, there may be another
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
299 preamble or a postamble. A postamble is also five bytes in length. The first
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
300 byte of the postamble is $FF, the next two are zero, and the last two are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
301 the execution address for the binary.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
302 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
303 >Both LWASM and LWLINK can output this format.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
304 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
305 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
306 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
307 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
308 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
309 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
310 NAME="AEN29"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
311 >2.3. Object Files</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
312 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
313 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
314 >LWASM supports generating a proprietary object file format which is
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
315 described in <A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
316 HREF="#OBJCHAP"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
317 >Chapter 5</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
318 >. LWLINK is then used to link these
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
319 object files into a final binary in any of LWLINK's supported binary
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
320 formats.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
321 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
322 >Object files are very flexible in that they allow references that are not
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
323 known at assembly time to be resolved at link time. However, because the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
324 addresses of such references are not known, there is no way for the assembler
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
325 has to use sixteen bit addressing modes for these references. The linker
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
326 will always use sixteen bits when resolving a reference which means any
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
327 instruction that requires an eight bit operand cannot use external references.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
328 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
329 >Object files also support the concept of sections which are not valid
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
330 for other output types. This allows related code from each object file
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
331 linked to be collapsed together in the final binary.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
332 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
333 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
334 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
335 CLASS="CHAPTER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
336 ><HR><H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
337 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
338 NAME="AEN35"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
339 ></A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
340 >Chapter 3. LWASM</H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
341 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
342 >The LWTOOLS assembler is called LWASM. This chapter documents the various
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
343 features of the assembler. It is not, however, a tutorial on 6x09 assembly
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
344 language programming.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
345 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
346 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
347 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
348 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
349 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
350 NAME="AEN38"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
351 >3.1. Command Line Options</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
352 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
353 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
354 >The binary for LWASM is called "lwasm". Note that the binary is in lower
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
355 case. lwasm takes the following command line arguments.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
356 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
357 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
358 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
359 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
360 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
361 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
362 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
363 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
364 >--decb</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
365 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
366 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
367 >-b</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
368 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
369 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
370 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
371 >Select the DECB output format target. Equivalent to <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
372 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
373 >--format=decb</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
374 >.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
375 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
376 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
377 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
378 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
379 >--format=type</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
380 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
381 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
382 >-f type</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
383 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
384 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
385 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
386 >Select the output format. Valid values are <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
387 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
388 >obj</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
389 > for the object
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
390 file target, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
391 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
392 >decb</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
393 > for the DECB LOADM format, and <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
394 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
395 >raw</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
396 >
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
397 for a raw binary.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
398 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
399 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
400 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
401 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
402 >--list[=file]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
403 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
404 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
405 >-l[file]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
406 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
407 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
408 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
409 >Cause LWASM to generate a listing. If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
410 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
411 >file</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
412 > is specified,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
413 the listing will go to that file. Otherwise it will go to the standard output
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
414 stream. By default, no listing is generated.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
415 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
416 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
417 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
418 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
419 >--obj</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
420 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
421 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
422 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
423 >Select the proprietary object file format as the output target.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
424 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
425 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
426 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
427 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
428 >--output=FILE</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
429 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
430 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
431 >-o FILE</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
432 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
433 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
434 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
435 >This option specifies the name of the output file. If not specified, the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
436 default is <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
437 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
438 >a.out</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
439 >.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
440 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
441 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
442 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
443 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
444 >--pragma=pragma</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
445 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
446 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
447 >-p pragma</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
448 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
449 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
450 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
451 >Specify assembler pragmas. Multiple pragmas are separated by commas. The
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
452 pragmas accepted are the same as for the PRAGMA assembler directive described
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
453 below.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
454 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
455 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
456 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
457 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
458 >--raw</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
459 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
460 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
461 >-r</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
462 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
463 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
464 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
465 >Select raw binary as the output target.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
466 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
467 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
468 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
469 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
470 >--help</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
471 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
472 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
473 >-?</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
474 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
475 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
476 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
477 >Present a help screen describing the command line options.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
478 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
479 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
480 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
481 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
482 >--usage</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
483 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
484 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
485 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
486 >Provide a summary of the command line options.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
487 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
488 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
489 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
490 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
491 >--version</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
492 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
493 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
494 >-V</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
495 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
496 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
497 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
498 >Display the software version.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
499 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
500 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
501 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
502 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
503 >--debug</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
504 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
505 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
506 >-d</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
507 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
508 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
509 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
510 >Increase the debugging level. Only really useful to people hacking on the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
511 LWASM source code itself.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
512 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
513 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
514 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
515 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
516 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
517 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
518 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
519 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
520 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
521 NAME="AEN121"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
522 >3.2. Dialects</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
523 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
524 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
525 >LWASM supports all documented MC6809 instructions as defined by Motorola.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
526 It also supports all known HD6309 instructions. There is some variation,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
527 however, in the pneumonics used for the block transfer instructions. LWASM
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
528 uses TFM for all four of them as do several other assemblers. Others, such
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
529 as CCASM, use four separate opcodes for it (compare: copy+, copy-, implode,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
530 and explode). There are advantages to both methods. However, it seems like
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
531 TFM has the most traction and thus, this is what LWASM supports. Support
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
532 for such variations may be added in the future.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
533 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
534 >The standard addressing mode specifiers are supported. These are the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
535 hash sign ("#") for immediate mode, the less than sign ("&lt;") for forced
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
536 eight bit modes, and the greater than sign ("&gt;") for forced sixteen bit modes.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
537 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
538 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
539 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
540 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
541 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
542 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
543 NAME="AEN125"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
544 >3.3. Source Format</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
545 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
546 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
547 >LWASM accepts plain text files in a relatively free form. It can handle
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
548 lines terminated with CR, LF, CRLF, or LFCR which means it should be able
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
549 to assemble files on any platform on which it compiles.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
550 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
551 >Each line may start with a symbol. If a symbol is present, there must not
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
552 be any whitespace preceding it. It is legal for a line to contain nothing
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
553 but a symbol.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
554 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
555 >The op code is separated from the symbol by whitespace. If there is
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
556 no symbol, there must be at least one white space character preceding it.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
557 If applicable, the operand follows separated by whitespace. Following the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
558 opcode and operand is an optional comment.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
559 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
560 >A comment can also be introduced with a * or a ;. The comment character is
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
561 optional for end of statement comments. However, if a symbol is the only
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
562 thing present on the line other than the comment, the comment character is
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
563 mandatory to prevent the assembler from interpreting the comment as an opcode.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
564 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
565 >The opcode is not treated case sensitively. Neither are register names in
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
566 the operand fields. Symbols, however, are case sensitive.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
567 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
568 >LWASM does not support line numbers in the file.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
569 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
570 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
571 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
572 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
573 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
574 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
575 NAME="AEN133"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
576 >3.4. Symbols</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
577 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
578 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
579 >Symbols have no length restriction. They may contain letters, numbers, dots,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
580 dollar signs, and underscores. They must start with a letter, dot, or
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
581 underscore.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
582 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
583 >LWASM also supports the concept of a local symbol. A local symbol is one
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
584 which contains either a "?" or a "@", which can appear anywhere in the symbol.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
585 The scope of a local symbol is determined by a number of factors. First,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
586 each included file gets its own local symbol scope. A blank line will also
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
587 be considered a local scope barrier. Macros each have their own local symbol
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
588 scope as well (which has a side effect that you cannot use a local symbol
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
589 as an argument to a macro). There are other factors as well. In general,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
590 a local symbol is restricted to the block of code it is defined within.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
591 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
592 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
593 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
594 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
595 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
596 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
597 NAME="AEN137"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
598 >3.5. Numbers and Expressions</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
599 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
600 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
601 >Numbers can be expressed in binary, octal, decimal, or hexadecimal.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
602 Binary numbers may be prefixed with a "%" symbol or suffixed with a
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
603 "b" or "B". Octal numbers may be prefixed with "@" or suffixed with
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
604 "Q", "q", "O", or "o". Hexadecimal numbers may be prefixed with "$" or
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
605 suffixed with "H". No prefix or suffix is required for decimal numbers but
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
606 they can be prefixed with "&amp;" if desired. Any constant which begins with
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
607 a letter must be expressed with the correct prefix base identifier or be
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
608 prefixed with a 0. Thus hexadecimal FF would have to be written either 0FFH
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
609 or $FF. Numbers are not case sensitive.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
610 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
611 > A symbol may appear at any point where a number is acceptable. The
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
612 special symbol "*" can be used to represent the starting address of the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
613 current source line within expressions. </P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
614 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
615 >The ASCII value of a character can be included by prefixing it with a
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
616 single quote ('). The ASCII values of two characters can be included by
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
617 prefixing the characters with a quote (").</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
618 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
619 >LWASM supports the following basic binary operators: +, -, *, /, and %.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
620 These represent addition, subtraction, multiplication, division, and modulus.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
621 It also supports unary negation and unary 1's complement (- and ^ respectively).
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
622 For completeness, a unary positive (+) is supported though it is a no-op.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
623 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
624 >Operator precedence follows the usual rules. multiplication, division,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
625 and modulus take precedence over addition and subtraction. Unary operators
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
626 take precedence over binary operators. To force a specific order of evaluation,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
627 parentheses can be used in the usual manner.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
628 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
629 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
630 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
631 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
632 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
633 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
634 NAME="AEN144"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
635 >3.6. Assembler Directives</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
636 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
637 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
638 >Various directives can be used to control the behaviour of the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
639 assembler or to include non-code/data in the resulting output. Those directives
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
640 that are not described in detail in other sections of this document are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
641 described below.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
642 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
643 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
644 ><HR><H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
645 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
646 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
647 NAME="AEN147"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
648 >3.6.1. Data Directives</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
649 ></H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
650 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
651 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
652 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
653 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
654 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
655 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
656 >FCB <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
657 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
658 >expr[,...]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
659 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
660 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
661 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
662 >Include one or more constant bytes (separated by commas) in the output.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
663 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
664 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
665 >FDB <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
666 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
667 >expr[,...]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
668 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
669 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
670 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
671 >Include one or more words (separated by commas) in the output.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
672 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
673 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
674 >FQB <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
675 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
676 >expr[,...]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
677 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
678 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
679 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
680 >Include one or more double words (separated by commas) in the output.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
681 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
682 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
683 >FCC <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
684 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
685 >string</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
686 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
687 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
688 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
689 >Include a string of text in the output. The first character of the operand
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
690 is the delimiter which must appear as the last character and cannot appear
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
691 within the string. The string is included with no modifications&#62;</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
692 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
693 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
694 >FCN <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
695 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
696 >string</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
697 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
698 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
699 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
700 >Include a NUL terminated string of text in the output. The first character of
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
701 the operand is the delimiter which must appear as the last character and
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
702 cannot appear within the string. A NUL byte is automatically appended to
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
703 the string.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
704 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
705 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
706 >FCS <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
707 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
708 >string</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
709 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
710 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
711 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
712 >Include a string of text in the output with bit 7 of the final byte set. The
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
713 first character of the operand is the delimiter which must appear as the last
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
714 character and cannot appear within the string.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
715 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
716 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
717 >ZMB <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
718 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
719 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
720 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
721 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
722 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
723 >Include a number of NUL bytes in the output. The number must be fully resolvable
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
724 during pass 1 of assembly so no forward or external references are permitted.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
725 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
726 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
727 >ZMD <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
728 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
729 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
730 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
731 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
732 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
733 >Include a number of zero words in the output. The number must be fully
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
734 resolvable during pass 1 of assembly so no forward or external references are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
735 permitted.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
736 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
737 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
738 >ZMQ <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
739 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
740 >expr<CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
741 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
742 ></CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
743 ></CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
744 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
745 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
746 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
747 >Include a number of zero double-words in the output. The number must be fully
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
748 resolvable during pass 1 of assembly so no forward or external references are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
749 permitted.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
750 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
751 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
752 >RMB <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
753 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
754 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
755 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
756 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
757 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
758 >Reserve a number of bytes in the output. The number must be fully resolvable
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
759 during pass 1 of assembly so no forward or external references are permitted.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
760 The value of the bytes is undefined.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
761 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
762 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
763 >RMD <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
764 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
765 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
766 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
767 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
768 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
769 >Reserve a number of words in the output. The number must be fully
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
770 resolvable during pass 1 of assembly so no forward or external references are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
771 permitted. The value of the words is undefined.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
772 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
773 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
774 >RMQ <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
775 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
776 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
777 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
778 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
779 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
780 >Reserve a number of double-words in the output. The number must be fully
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
781 resolvable during pass 1 of assembly so no forward or external references are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
782 permitted. The value of the double-words is undefined.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
783 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
784 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
785 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
786 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
787 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
788 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
789 ><HR><H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
790 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
791 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
792 NAME="AEN211"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
793 >3.6.2. Address Definition</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
794 ></H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
795 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
796 >The directives in this section all control the addresses of symbols
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
797 or the assembly process itself.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
798 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
799 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
800 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
801 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
802 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
803 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
804 >ORG <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
805 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
806 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
807 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
808 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
809 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
810 >Set the assembly address. The address must be fully resolvable on the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
811 first pass so no external or forward references are permitted. ORG is not
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
812 permitted within sections when outputting to object files. For the DECB
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
813 target, each ORG directive after which output is generated will cause
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
814 a new preamble to be output. ORG is only used to determine the addresses
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
815 of symbols when the raw target is used.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
816 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
817 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
818 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
819 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
820 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
821 > EQU <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
822 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
823 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
824 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
825 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
826 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
827 > = <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
828 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
829 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
830 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
831 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
832 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
833 >Define the value of <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
834 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
835 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
836 > to be <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
837 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
838 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
839 >.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
840 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
841 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
842 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
843 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
844 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
845 > SET <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
846 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
847 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
848 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
849 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
850 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
851 >Define the value of <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
852 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
853 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
854 > to be <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
855 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
856 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
857 >.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
858 Unlike EQU, SET permits symbols to be defined multiple times as long as SET
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
859 is used for all instances. Use of the symbol before the first SET statement
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
860 that sets its value is undefined.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
861 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
862 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
863 >SETDP <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
864 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
865 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
866 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
867 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
868 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
869 >Inform the assembler that it can assume the DP register contains
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
870 <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
871 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
872 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
873 >. This directive is only advice to the assembler
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
874 to determine whether an address is in the direct page and has no effect
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
875 on the contents of the DP register. The value must be fully resolved during
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
876 the first assembly pass because it affects the sizes of subsequent instructions.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
877 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
878 >This directive has no effect in the object file target.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
879 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
880 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
881 >ALIGN <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
882 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
883 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
884 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
885 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
886 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
887 >Force the current assembly address to be a multiple of <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
888 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
889 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
890 >.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
891 A series of NUL bytes is output to force the alignment, if required. The
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
892 alignment value must be fully resolved on the first pass because it affects
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
893 the addresses of subsquent instructions.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
894 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
895 >This directive is not suitable for inclusion in the middle of actual
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
896 code. It is intended to appear where the bytes output will not be executed.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
897 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
898 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
899 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
900 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
901 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
902 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
903 ><HR><H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
904 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
905 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
906 NAME="AEN253"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
907 >3.6.3. Conditional Assembly</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
908 ></H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
909 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
910 >Portions of the source code can be excluded or included based on conditions
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
911 known at assembly time. Conditionals can be nested arbitrarily deeply. The
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
912 directives associated with conditional assembly are described in this section.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
913 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
914 >All conditionals must be fully bracketed. That is, every conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
915 statement must eventually be followed by an ENDC at the same level of nesting.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
916 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
917 >Conditional expressions are only evaluated on the first assembly pass.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
918 It is not possible to game the assembly process by having a conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
919 change its value between assembly passes. Thus there is not and never will
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
920 be any equivalent of IFP1 or IFP2 as provided by other assemblers.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
921 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
922 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
923 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
924 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
925 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
926 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
927 >IFEQ <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
928 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
929 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
930 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
931 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
932 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
933 >If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
934 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
935 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
936 > evaluates to zero, the conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
937 will be considered true.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
938 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
939 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
940 >IFNE <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
941 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
942 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
943 >, IF <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
944 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
945 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
946 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
947 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
948 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
949 >If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
950 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
951 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
952 > evaluates to a non-zero value, the conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
953 will be considered true.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
954 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
955 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
956 >IFGT <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
957 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
958 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
959 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
960 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
961 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
962 >If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
963 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
964 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
965 > evaluates to a value greater than zero, the conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
966 will be considered true.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
967 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
968 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
969 >IFGE <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
970 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
971 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
972 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
973 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
974 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
975 >If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
976 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
977 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
978 > evaluates to a value greater than or equal to zero, the conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
979 will be considered true.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
980 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
981 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
982 >IFLT <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
983 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
984 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
985 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
986 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
987 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
988 >If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
989 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
990 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
991 > evaluates to a value less than zero, the conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
992 will be considered true.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
993 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
994 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
995 >IFLE <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
996 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
997 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
998 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
999 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1000 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1001 >If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1002 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1003 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1004 > evaluates to a value less than or equal to zero , the conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1005 will be considered true.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1006 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1007 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1008 >IFDEF <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1009 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1010 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1011 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1012 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1013 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1014 >If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1015 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1016 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1017 > is defined at this point in the assembly
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1018 process, the conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1019 will be considered true.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1020 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1021 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1022 >IFNDEF <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1023 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1024 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1025 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1026 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1027 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1028 >If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1029 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1030 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1031 > is not defined at this point in the assembly
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1032 process, the conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1033 will be considered true.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1034 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1035 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1036 >ELSE</DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1037 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1038 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1039 >If the preceding conditional at the same level of nesting was false, the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1040 statements following will be assembled. If the preceding conditional at
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1041 the same level was true, the statements following will not be assembled.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1042 Note that the preceding conditional might have been another ELSE statement
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1043 although this behaviour is not guaranteed to be supported in future versions
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1044 of LWASM.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1045 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1046 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1047 >ENDC</DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1048 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1049 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1050 >This directive marks the end of a conditional construct. Every conditional
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1051 construct must end with an ENDC directive.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1052 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1053 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1054 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1055 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1056 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1057 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1058 ><HR><H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1059 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1060 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1061 NAME="AEN317"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1062 >3.6.4. Miscelaneous Directives</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1063 ></H3
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1064 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1065 >This section includes directives that do not fit into the other
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1066 categories.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1067 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1068 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1069 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1070 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1071 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1072 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1073 >INCLUDE <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1074 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1075 >filename</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1076 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1077 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1078 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1079 >Include the contents of <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1080 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1081 >filename</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1082 > at this point in
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1083 the assembly as though it were a part of the file currently being processed.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1084 Note that whitespace cannot appear in the name of the file.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1085 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1086 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1087 >END <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1088 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1089 >[expr]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1090 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1091 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1092 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1093 >This directive causes the assembler to stop assembling immediately as though
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1094 it ran out of input. For the DECB target only, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1095 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1096 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1097 >
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1098 can be used to set the execution address of the resulting binary. For all
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1099 other targets, specifying <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1100 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1101 >expr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1102 > will cause an error.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1103 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1104 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1105 >ERROR <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1106 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1107 >string</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1108 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1109 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1110 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1111 >Causes a custom error message to be printed at this line. This will cause
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1112 assembly to fail. This directive is most useful inside conditional constructs
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1113 to cause assembly to fail if some condition that is known bad happens.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1114 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1115 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1116 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1117 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1118 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1119 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1120 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1121 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1122 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1123 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1124 NAME="AEN339"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1125 >3.7. Macros</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1126 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1127 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1128 >LWASM is a macro assembler. A macro is simply a name that stands in for a
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1129 series of instructions. Once a macro is defined, it is used like any other
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1130 assembler directive. Defining a macro can be considered equivalent to adding
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1131 additional assembler directives.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1132 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1133 >Macros my accept parameters. These parameters are referenced within
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1134 a macro by the a backslash ("\") followed by a digit 1 through 9 for the first
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1135 through ninth parameters. They may also be referenced by enclosing the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1136 decimal parameter number in braces ("{num}"). These parameter references
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1137 are replaced with the verbatim text of the parameter passed to the macro. A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1138 reference to a non-existent parameter will be replaced by an empty string.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1139 Macro parameters are expanded everywhere on each source line. That means
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1140 the parameter to a macro could be used as a symbol or it could even appear
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1141 in a comment or could cause an entire source line to be commented out
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1142 when the macro is expanded.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1143 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1144 >Parameters passed to a macro are separated by commas and the parameter list
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1145 is terminated by any whitespace. This means that neither a comma nor whitespace
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1146 may be included in a macro parameter.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1147 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1148 >Macro expansion is done recursively. That is, within a macro, macros are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1149 expanded. This can lead to infinite loops in macro expansion. If the assembler
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1150 hangs for a long time while assembling a file that uses macros, this may be
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1151 the reason.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1152 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1153 >Each macro expansion receives its own local symbol context which is not
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1154 inherited by any macros called by it nor is it inherited from the context
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1155 the macro was instantiated in. That means it is possible to use local symbols
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1156 within macros without having them collide with symbols in other macros or
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1157 outside the macro itself. However, this also means that using a local symbol
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1158 as a parameter to a macro, while legal, will not do what it would seem to do
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1159 as it will result in looking up the local symbol in the macro's symbol context
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1160 rather than the enclosing context where it came from, likely yielding either
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1161 an undefined symbol error or bizarre assembly results.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1162 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1163 >Note that there is no way to define a macro as local to a symbol context. All
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1164 macros are part of the global macro namespace. However, macros have a separate
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1165 namespace from symbols so it is possible to have a symbol with the same name
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1166 as a macro.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1167 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1168 >Macros are defined only during the first pass. Macro expansion also
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1169 only occurs during the first pass. On the second pass, the macro
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1170 definition is simply ignored. Macros must be defined before they are used.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1171 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1172 >The following directives are used when defining macros.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1173 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1174 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1175 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1176 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1177 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1178 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1179 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1180 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1181 >macroname</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1182 > MACRO</DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1183 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1184 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1185 >This directive is used to being the definition of a macro called
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1186 <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1187 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1188 >macroname</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1189 >. If <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1190 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1191 >macroname</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1192 > already
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1193 exists, it is considered an error. Attempting to define a macro within a
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1194 macro is undefined. It may work and it may not so the behaviour should not
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1195 be relied upon.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1196 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1197 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1198 >ENDM</DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1199 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1200 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1201 >This directive indicates the end of the macro currently being defined. It
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1202 causes the assembler to resume interpreting source lines as normal.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1203 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1204 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1205 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1206 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1207 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1208 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1209 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1210 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1211 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1212 NAME="AEN361"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1213 >3.8. Object Files and Sections</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1214 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1215 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1216 >The object file target is very useful for large project because it allows
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1217 multiple files to be assembled independently and then linked into the final
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1218 binary at a later time. It allows only the small portion of the project
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1219 that was modified to be re-assembled rather than requiring the entire set
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1220 of source code to be available to the assembler in a single assembly process.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1221 This can be particularly important if there are a large number of macros,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1222 symbol definitions, or other metadata that uses resources at assembly time.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1223 By far the largest benefit, however, is keeping the source files small enough
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1224 for a mere mortal to find things in them.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1225 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1226 >With multi-file projects, there needs to be a means of resolving references to
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1227 symbols in other source files. These are known as external references. The
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1228 addresses of these symbols cannot be known until the linker joins all the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1229 object files into a single binary. This means that the assembler must be
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1230 able to output the object code without knowing the value of the symbol. This
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1231 places some restrictions on the code generated by the assembler. For
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1232 example, the assembler cannot generate direct page addressing for instructions
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1233 that reference external symbols because the address of the symbol may not
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1234 be in the direct page. Similarly, relative branches and PC relative addressing
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1235 cannot be used in their eight bit forms. Everything that must be resolved
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1236 by the linker must be assembled to use the largest address size possible to
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1237 allow the linker to fill in the correct value at link time. Note that the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1238 same problem applies to absolute address references as well, even those in
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1239 the same source file, because the address is not known until link time.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1240 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1241 >It is often desired in multi-file projects to have code of various types grouped
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1242 together in the final binary generated by the linker as well. The same applies
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1243 to data. In order for the linker to do that, the bits that are to be grouped
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1244 must be tagged in some manner. This is where the concept of sections comes in.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1245 Each chunk of code or data is part of a section in the object file. Then,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1246 when the linker reads all the object files, it coalesces all sections of the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1247 same name into a single section and then considers it as a unit.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1248 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1249 >The existence of sections, however, raises a problem for symbols even
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1250 within the same source file. Thus, the assembler must treat symbols from
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1251 different sections within the same source file in the same manner as external
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1252 symbols. That is, it must leave them for the linker to resolve at link time,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1253 with all the limitations that entails.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1254 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1255 >In the object file target mode, LWASM requires all source lines that
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1256 cause bytes to be output to be inside a section. Any directives that do
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1257 not cause any bytes to be output can appear outside of a section. This includes
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1258 such things as EQU or RMB. Even ORG can appear outside a section. ORG, however,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1259 makes no sense within a section because it is the linker that determines
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1260 the starting address of the section's code, not the assembler.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1261 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1262 >All symbols defined globally in the assembly process are local to the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1263 source file and cannot be exported. All symbols defined within a section are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1264 considered local to the source file unless otherwise explicitly exported.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1265 Symbols referenced from external source files must be declared external,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1266 either explicitly or by asking the assembler to assume that all undefined
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1267 symbols are external.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1268 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1269 >It is often handy to define a number of memory addresses that will be
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1270 used for data at run-time but which need not be included in the binary file.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1271 These memory addresses are not initialized until run-time, either by the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1272 program itself or by the program loader, depending on the operating environment.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1273 Such sections are often known as BSS sections. LWASM supports generating
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1274 sections with a BSS attribute set which causes the section definition including
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1275 symbols exported from that section and those symbols required to resolve
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1276 references from the local file, but with no actual code in the object file.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1277 It is illegal for any source lines within a BSS flagged section to cause any
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1278 bytes to be output.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1279 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1280 >The following directives apply to section handling.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1281 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1282 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1283 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1284 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1285 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1286 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1287 >SECTION <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1288 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1289 >name[,flags]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1290 >, SECT <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1291 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1292 >name[,flags]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1293 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1294 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1295 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1296 >Instructs the assembler that the code following this directive is to be
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1297 considered part of the section <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1298 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1299 >name</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1300 >. A section name
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1301 may appear multiple times in which case it is as though all the code from
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1302 all the instances of that section appeared adjacent within the source file.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1303 However, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1304 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1305 >flags</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1306 > may only be specified on the first
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1307 instance of the section.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1308 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1309 >There is a single flag supported in <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1310 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1311 >flags</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1312 >. The
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1313 flag <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1314 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1315 >bss</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1316 > will cause the section to be treated as a BSS
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1317 section and, thus, no code will be included in the object file nor will any
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1318 bytes be permitted to be output.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1319 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1320 >If assembly is already happening within a section, the section is implicitly
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1321 ended and the new section started. This is not considered an error although
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1322 it is recommended that all sections be explicitly closed.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1323 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1324 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1325 >ENDSECTION, ENDSECT, ENDS</DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1326 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1327 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1328 >This directive ends the current section. This puts assembly outside of any
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1329 sections until the next SECTION directive.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1330 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1331 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1332 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1333 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1334 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1335 > EXTERN, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1336 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1337 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1338 > EXTERNAL, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1339 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1340 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1341 > IMPORT</DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1342 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1343 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1344 >This directive defines <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1345 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1346 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1347 > as an external symbol.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1348 This directive may occur at any point in the source code. EXTERN definitions
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1349 are resolved on the first pass so an EXTERN definition anywhere in the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1350 source file is valid for the entire file. The use of this directive is
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1351 optional when the assembler is instructed to assume that all undefined
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1352 symbols are external. In fact, in that mode, if the symbol is referenced
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1353 before the EXTERN directive, an error will occur.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1354 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1355 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1356 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1357 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1358 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1359 > EXPORT</DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1360 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1361 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1362 >This directive defines <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1363 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1364 >sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1365 > as an exported symbol.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1366 This directive may occur at any point in the source code, even before the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1367 definition of the exported symbol.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1368 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1369 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1370 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1371 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1372 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1373 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1374 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1375 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1376 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1377 NAME="AEN407"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1378 >3.9. Assembler Modes and Pragmas</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1379 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1380 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1381 >There are a number of options that affect the way assembly is performed.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1382 Some of these options can only be specified on the command line because
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1383 they determine something absolute about the assembly process. These include
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1384 such things as the output target. Other things may be switchable during
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1385 the assembly process. These are known as pragmas and are, by definition,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1386 not portable between assemblers.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1387 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1388 >LWASM supports a number of pragmas that affect code generation or
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1389 otherwise affect the behaviour of the assembler. These may be specified by
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1390 way of a command line option or by assembler directives. The directives
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1391 are as follows.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1392 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1393 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1394 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1395 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1396 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1397 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1398 >PRAGMA <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1399 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1400 >pragma[,...]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1401 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1402 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1403 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1404 >Specifies that the assembler should bring into force all <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1405 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1406 >pragma</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1407 >s
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1408 specified. Any unrecognized pragma will cause an assembly error. The new
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1409 pragmas will take effect immediately. This directive should be used when
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1410 the program will assemble incorrectly if the pragma is ignored or not supported.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1411 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1412 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1413 >*PRAGMA <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1414 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1415 >pragma[,...]</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1416 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1417 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1418 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1419 >This is identical to the PRAGMA directive except no error will occur with
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1420 unrecognized or unsupported pragmas. This directive, by virtue of starting
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1421 with a comment character, will also be ignored by assemblers that do not
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1422 support this directive. Use this variation if the pragma is not required
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1423 for correct functioning of the code.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1424 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1425 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1426 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1427 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1428 >Each pragma supported has a positive version and a negative version.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1429 The positive version enables the pragma while the negative version disables
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1430 it. The negatitve version is simply the positive version with "no" prefixed
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1431 to it. For instance, "pragma" vs. "nopragma". Only the positive version is
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1432 listed below.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1433 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1434 >Pragmas are not case sensitive.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1435 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1436 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1437 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1438 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1439 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1440 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1441 >index0tonone</DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1442 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1443 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1444 >When in force, this pragma enables an optimization affecting indexed addressing
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1445 modes. When the offset expression in an indexed mode evaluates to zero but is
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1446 not explicity written as 0, this will replace the operand with the equivalent
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1447 no offset mode, thus creating slightly faster code. Because of the advantages
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1448 of this optimization, it is enabled by default.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1449 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1450 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1451 >undefextern</DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1452 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1453 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1454 >This pragma is only valid for targets that support external references. When in
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1455 force, if the assembler sees an undefined symbol on the second pass, it will
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1456 automatically define it as an external symbol. This automatic definition will
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1457 apply for the remainder of the assembly process, even if the pragma is
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1458 subsequently turned off. Because this behaviour would be potentially surprising,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1459 this pragma defaults to off.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1460 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1461 >The primary use for this pragma is for projects that share a large number of
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1462 symbols between source files. In such cases, it is impractical to enumerate
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1463 all the external references in every source file. This allows the assembler
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1464 and linker to do the heavy lifting while not preventing a particular source
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1465 module from defining a local symbol of the same name as an external symbol
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1466 if it does not need the external symbol. (This pragma will not cause an
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1467 automatic external definition if there is already a locally defined symbol.)</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1468 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1469 >This pragma will often be specified on the command line for large projects.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1470 However, depending on the specific dynamics of the project, it may be sufficient
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1471 for one or two files to use this pragma internally.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1472 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1473 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1474 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1475 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1476 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1477 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1478 CLASS="CHAPTER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1479 ><HR><H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1480 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1481 NAME="AEN436"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1482 ></A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1483 >Chapter 4. LWLINK</H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1484 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1485 >The LWTOOLS linker is called LWLINK. This chapter documents the various features
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1486 of the linker.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1487 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1488 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1489 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1490 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1491 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1492 NAME="AEN439"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1493 >4.1. Command Line Options</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1494 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1495 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1496 >The binary for LWLINK is called "lwlink". Note that the binary is in lower
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1497 case. lwlink takes the following command line arguments.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1498 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1499 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1500 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1501 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1502 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1503 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1504 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1505 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1506 >--decb</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1507 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1508 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1509 >-b</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1510 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1511 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1512 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1513 >Selects the DECB output format target. This is equivalent to <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1514 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1515 >--format=decb</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1516 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1517 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1518 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1519 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1520 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1521 >--output=FILE</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1522 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1523 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1524 >-o FILE</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1525 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1526 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1527 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1528 >This option specifies the name of the output file. If not specified, the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1529 default is <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1530 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1531 >a.out</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1532 >.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1533 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1534 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1535 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1536 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1537 >--format=TYPE</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1538 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1539 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1540 >-f TYPE</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1541 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1542 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1543 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1544 >This option specifies the output format. Valid values are <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1545 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1546 >decb</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1547 >
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1548 and <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1549 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1550 >raw</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1551 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1552 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1553 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1554 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1555 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1556 >--raw</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1557 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1558 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1559 >-r</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1560 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1561 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1562 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1563 >This option specifies the raw output format.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1564 It is equivalent to <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1565 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1566 >--format=raw</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1567 >.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1568 and <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1569 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1570 >raw</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1571 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1572 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1573 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1574 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1575 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1576 >--script=FILE</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1577 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1578 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1579 >-s</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1580 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1581 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1582 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1583 >This option allows specifying a linking script to override the linker's
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1584 built in defaults.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1585 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1586 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1587 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1588 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1589 >--debug</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1590 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1591 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1592 >-d</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1593 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1594 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1595 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1596 >This option increases the debugging level. It is only useful for LWTOOLS
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1597 developers.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1598 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1599 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1600 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1601 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1602 >--help</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1603 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1604 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1605 >-?</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1606 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1607 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1608 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1609 >This provides a listing of command line options and a brief description
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1610 of each.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1611 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1612 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1613 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1614 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1615 >--usage</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1616 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1617 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1618 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1619 >This will display a usage summary.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1620 of each.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1621 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1622 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1623 ><CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1624 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1625 >--version</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1626 >, <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1627 CLASS="OPTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1628 >-V</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1629 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1630 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1631 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1632 >This will display the version of LWLINK.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1633 of each.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1634 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1635 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1636 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1637 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1638 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1639 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1640 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1641 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1642 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1643 NAME="AEN510"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1644 >4.2. Linker Operation</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1645 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1646 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1647 >LWLINK takes one or more files in the LWTOOLS object file format and links
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1648 them into a single binary. While the precise method is slightly different,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1649 linking can be conceptualized as the following steps.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1650 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1651 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1652 ><OL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1653 TYPE="1"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1654 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1655 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1656 >First, the linker loads a linking script. If no script is specified, it
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1657 loads a built-in default script based on the output format selected. This
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1658 script tells the linker how to lay out the various sections in the final
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1659 binary.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1660 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1661 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1662 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1663 >Next, the linker reads all the input files into memory. At this time, it
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1664 flags any format errors in those files. It constructs a table of symbols
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1665 for each object at this time.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1666 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1667 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1668 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1669 >The linker then proceeds with organizing the sections loaded from each file
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1670 according to the linking script. As it does so, it is able to assign addresses
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1671 to each symbol defined in each object file. At this time, the linker may
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1672 also collapse different instances of the same section name into a single
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1673 section by appending the data from each subsequent instance of the section
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1674 to the first instance of the section.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1675 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1676 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1677 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1678 >Next, the linker looks through every object file for every incomplete reference.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1679 It then attempts to fully resolve that reference. If it cannot do so, it
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1680 throws an error. Once a reference is resolved, the value is placed into
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1681 the binary code at the specified section. It should be noted that an
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1682 incomplete reference can reference either a symbol internal to the object
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1683 file or an external symbol which is in the export list of another object
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1684 file.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1685 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1686 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1687 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1688 >If all of the above steps are successful, the linker opens the output file
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1689 and actually constructs the binary.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1690 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1691 ></OL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1692 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1693 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1694 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1695 ><HR><H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1696 CLASS="SECTION"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1697 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1698 NAME="AEN524"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1699 >4.3. Linking Scripts</A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1700 ></H2
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1701 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1702 >A linker script is used to instruct the linker about how to assemble the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1703 various sections into a completed binary. It consists of a series of
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1704 directives which are considered in the order they are encountered.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1705 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1706 >The sections will appear in the resulting binary in the order they are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1707 specified in the script file. If a referenced section is not found, the linker will behave as though the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1708 section did exist but had a zero size, no relocations, and no exports.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1709 A section should only be referenced once. Any subsequent references will have
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1710 an undefined effect.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1711 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1712 >All numbers are in linking scripts are specified in hexadecimal. All directives
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1713 are case sensitive although the hexadecimal numbers are not.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1714 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1715 >A section name can be specified as a "*", then any section not
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1716 already matched by the script will be matched. The "*" can be followed
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1717 by a comma and a flag to narrow the section down slightly, also.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1718 If the flag is "!bss", then any section that is not flagged as a bss section
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1719 will be matched. If the flag is "bss", then any section that is flagged as
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1720 bss will be matched.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1721 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1722 >The following directives are understood in a linker script.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1723 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1724 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1725 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1726 CLASS="VARIABLELIST"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1727 ><DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1728 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1729 >section <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1730 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1731 >name</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1732 > load <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1733 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1734 >addr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1735 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1736 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1737 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1738 >&#13;This causes the section <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1739 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1740 >name</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1741 > to load at
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1742 <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1743 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1744 >addr</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1745 >. For the raw target, only one "load at" entry is
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1746 allowed for non-bss sections and it must be the first one. For raw targets,
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1747 it affects the addresses the linker assigns to symbols but has no other
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1748 affect on the output. bss sections may all have separate load addresses but
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1749 since they will not appear in the binary anyway, this is okay.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1750 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1751 >For the decb target, each "load" entry will cause a new "block" to be
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1752 output to the binary which will contain the load address. It is legal for
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1753 sections to overlap in this manner - the linker assumes the loader will sort
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1754 everything out.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1755 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1756 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1757 >section <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1758 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1759 >name</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1760 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1761 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1762 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1763 >&#13;This will cause the section <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1764 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1765 >name</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1766 > to load after the previously listed
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1767 section.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1768 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1769 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1770 >exec <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1771 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1772 >addr or sym</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1773 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1774 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1775 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1776 >This will cause the execution address (entry point) to be the address
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1777 specified (in hex) or the specified symbol name. The symbol name must
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1778 match a symbol that is exported by one of the object files being linked.
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1779 This has no effect for targets that do not encode the entry point into the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1780 resulting file. If not specified, the entry point is assumed to be address 0
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1781 which is probably not what you want. The default link scripts for targets
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1782 that support this directive automatically starts at the beginning of the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1783 first section (usually "init" or "code") that is emitted in the binary.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1784 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1785 ><DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1786 >pad <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1787 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1788 >size</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1789 ></DT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1790 ><DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1791 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1792 >This will cause the output file to be padded with NUL bytes to be exactly
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1793 <CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1794 CLASS="PARAMETER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1795 >size</CODE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1796 > bytes in length. This only makes sense for a raw target.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1797 ></DD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1798 ></DL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1799 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1800 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1801 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1802 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1803 CLASS="CHAPTER"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1804 ><HR><H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1805 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1806 NAME="OBJCHAP"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1807 ></A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1808 >Chapter 5. Object Files</H1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1809 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1810 >LWTOOLS uses a proprietary object file format. It is proprietary in the sense
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1811 that it is specific to LWTOOLS, not that it is a hidden format. It would be
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1812 hard to keep it hidden in an open source tool chain anyway. This chapter
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1813 documents the object file format.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1814 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1815 >An object file consists of a series of sections each of which contains a
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1816 list of exported symbols, a list of incomplete references, and a list of
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1817 "local" symbols which may be used in calculating incomplete references. Each
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1818 section will obviously also contain the object code.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1819 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1820 >Exported symbols must be completely resolved to an address within the
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1821 section it is exported from. That is, an exported symbol must be a constant
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1822 rather than defined in terms of other symbols.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1823 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1824 >Each object file starts with a magic number and version number. The magic
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1825 number is the string "LWOBJ16" for this 16 bit object file format. The only
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1826 defined version number is currently 0. Thus, the first 8 bytes of the object
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1827 file are <FONT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1828 COLOR="RED"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1829 >4C574F424A313600</FONT
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1830 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1831 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1832 >Each section has the following items in order:</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1833 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1834 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1835 ><UL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1836 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1837 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1838 >section name</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1839 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1840 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1841 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1842 >flags</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1843 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1844 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1845 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1846 >list of local symbols (and addresses within the section)</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1847 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1848 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1849 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1850 >list of exported symbols (and addresses within the section)</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1851 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1852 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1853 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1854 >list of incomplete references along with the expressions to calculate them</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1855 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1856 ><LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1857 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1858 >the actual object code (for non-BSS sections)</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1859 ></LI
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1860 ></UL
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1861 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1862 >The section starts with the name of the section with a NUL termination
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1863 followed by a series of flag bytes terminated by NUL. There are only two
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1864 flag bytes defined. A NUL (0) indicates no more flags and a value of 1
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1865 indicates the section is a BSS section. For a BSS section, no actual
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1866 code is included in the object file.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1867 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1868 >Either a NULL section name or end of file indicate the presence of no more
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1869 sections.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1870 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1871 >Each entry in the exported and local symbols table consists of the symbol
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1872 (NUL terminated) followed by two bytes which contain the value in big endian
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1873 order. The end of a symbol table is indicated by a NULL symbol name.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1874 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1875 >Each entry in the incomplete references table consists of an expression
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1876 followed by a 16 bit offset where the reference goes. Expressions are
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1877 defined as a series of terms up to an "end of expression" term. Each term
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1878 consists of a single byte which identifies the type of term (see below)
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1879 followed by any data required by the term. Then end of the list is flagged
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1880 by a NULL expression (only an end of expression term).</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1881 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1882 CLASS="TABLE"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1883 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1884 NAME="AEN583"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1885 ></A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1886 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1887 ><B
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1888 >Table 5-1. Object File Term Types</B
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1889 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1890 ><TABLE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1891 BORDER="1"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1892 FRAME="border"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1893 CLASS="CALSTABLE"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1894 ><COL><COL><THEAD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1895 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1896 ><TH
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1897 >TERMTYPE</TH
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1898 ><TH
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1899 >Meaning</TH
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1900 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1901 ></THEAD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1902 ><TBODY
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1903 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1904 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1905 >00</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1906 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1907 >end of expression</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1908 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1909 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1910 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1911 >01</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1912 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1913 >integer (16 bit in big endian order follows)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1914 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1915 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1916 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1917 >02</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1918 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1919 > external symbol reference (NUL terminated symbol name follows)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1920 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1921 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1922 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1923 >03</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1924 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1925 >local symbol reference (NUL terminated symbol name follows)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1926 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1927 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1928 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1929 >04</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1930 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1931 >operator (1 byte operator number)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1932 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1933 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1934 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1935 >05</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1936 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1937 >section base address reference</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1938 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1939 ></TBODY
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1940 ></TABLE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1941 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1942 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1943 >External references are resolved using other object files while local
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1944 references are resolved using the local symbol table(s) from this file. This
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1945 allows local symbols that are not exported to have the same names as
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1946 exported symbols or external references.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1947 ><DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1948 CLASS="TABLE"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1949 ><A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1950 NAME="AEN610"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1951 ></A
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1952 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1953 ><B
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1954 >Table 5-2. Object File Operator Numbers</B
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1955 ></P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1956 ><TABLE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1957 BORDER="1"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1958 FRAME="border"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1959 CLASS="CALSTABLE"
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1960 ><COL><COL><THEAD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1961 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1962 ><TH
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1963 >Number</TH
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1964 ><TH
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1965 >Operator</TH
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1966 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1967 ></THEAD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1968 ><TBODY
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1969 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1970 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1971 >01</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1972 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1973 >addition (+)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1974 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1975 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1976 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1977 >02</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1978 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1979 >subtraction (-)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1980 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1981 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1982 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1983 >03</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1984 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1985 >multiplication (*)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1986 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1987 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1988 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1989 >04</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1990 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1991 >division (/)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1992 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1993 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1994 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1995 >05</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1996 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1997 >modulus (%)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1998 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
1999 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2000 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2001 >06</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2002 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2003 >integer division (\) (same as division)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2004 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2005 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2006 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2007 >07</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2008 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2009 >bitwise and</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2010 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2011 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2012 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2013 >08</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2014 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2015 >bitwise or</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2016 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2017 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2018 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2019 >09</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2020 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2021 >bitwise xor</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2022 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2023 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2024 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2025 >0A</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2026 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2027 >boolean and</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2028 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2029 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2030 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2031 >0B</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2032 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2033 >boolean or</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2034 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2035 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2036 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2037 >0C</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2038 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2039 >unary negation, 2's complement (-)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2040 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2041 ><TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2042 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2043 >0D</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2044 ><TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2045 >unary 1's complement (^)</TD
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2046 ></TR
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2047 ></TBODY
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2048 ></TABLE
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2049 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2050 ><P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2051 >An expression is represented in a postfix manner with both operands for
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2052 binary operators preceding the operator and the single operand for unary
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2053 operators preceding the operator.</P
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2054 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2055 ></DIV
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2056 ></BODY
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2057 ></HTML
ffef3ea07399 Preparing for release
lost
parents:
diff changeset
2058 >