1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
|
S-Record Format
A file in Motorola S-record format is an ASCII file. There are three different
formats:
S19 for 16-bit address
S2 for 24-bit address
S3 for 32-bit address
The files consist of optional symbol table information, data specifications
for loading memory, and a terminator record.
[ $$ {module_record}
symbol records
$$ [ module_record ]
symbol_records
$$]
header_record
data_records
record_count_record
terminator_record
Module Record (Optional)
Each object file contains one record for each module that is a component of it. This
record contains the name of the module. There is one module record for each relocatable
object created by the assembler. The name of the relocatable object module
contained in the record comes from the IDNT directive. For absolute objects created
by the linker, there is one module record for each relocatable object file linked,
plus an additional record whose name comes from the NAME command for the
linker.
Example:
$$ MODNAME
Symbol Record (Optional)
As many symbol records as needed can be contained in the object module. Up to 4
symbols per line can be used, but it is not mandatory that each line contain 4
symbols. A module can contain only symbol records.
Example:
APPLE $00000 LABEL1 $ODOC3
MEM $OFFFF ZEEK $01947
The module name associated with the symbols can be specified in the
module_record preceding the symbol records.
Example:
$$MAIN
Symbols are assumed to be in the module named in the preceding module_record
until another module is specified with another module_record. Symbols defined by
the linker's PUBLIC command appear following the first module record, which
indicates the name of the output object module specified by the linker's NAME
command.
*****************************************************************************************
Header Record (SO)
Each object module has exactly one header record with the following format:
S00600004844521B
Description:
S0 Identifies the record as a header record
06 The number of bytes following this one
0000 The address field, which is ignored
484452 The string HDR in ASCII
1B The checksum
*****************************************************************************************
Data Record (S1)
A data record specifies data bytes that are to be loaded into memory. Figure 1
shows the format for such a record. The columns shown in the figure represent half
of a byte (4 bits).
---------------------------------------------
| 1 2 3 4 5 6 7 8 9 ... 40 41 42 |
| |
| S ID byte load data...data checksum |
| count address 1 n |
---------------------------------------------
Figure 1: Data Record Formatter 16-Bit Load Address
Column Description
1 Contains the ASCII character S, which indicates the start of
a record in Motorola S-record format.
2 Contains the ASCII character identifying the record type.
For data records, this character is 1.
3 to 4 Contain the count of the number of bytes following this one
within the record. The count includes the checksum and the
load address bytes but not the byte count itself.
5 to 8 Contain the load address. The first data byte is to be loaded
into this address and subsequent bytes into the next sequential
address. Columns 5 and 6 contain the high-order address
byte, and columns 7 and 8 contain the low-order address byte.
9 to 40 Contain the specifications for up to 16 bytes of data.
41 to 42 Contain a checksum for the record. To calculate this, take the
sum of the values of all bytes from the byte count up to the
last data byte, inclusive, modulo 256. Subtract this result
from 255.
*****************************************************************************************
Data Record (S2)
A data record specifies data bytes that are to be loaded into memory. Figure 2
shows the format for such a record. The columns shown in the figure represent half
of a byte (4 bits).
----------------------------------------------------
| 1 2 3 4 5 6 7 8 9 10 11 ... 42 43 44 |
| |
| S ID byte load data...data checksum |
| count address 1 n |
----------------------------------------------------
Figure 2: Data Record Format for 24-Bit Load Address
Column Description
1 Contains the ASCII character S, which indicates the start of
a record in Motorola S-record format.
2 Contains the ASCII character identifying the record type.
For data records, this character is 2.
3 to 4 Contain the count of the number of bytes following this one
within the record. The count includes the checksum and the
load address bytes but not the byte count itself.
5 to 10 Contain the load address. The first data byte is to be loaded
into this address and subsequent bytes into the next sequential
address. Columns 5 and 6 contain the high-order address
byte, and columns 9 and 10 contain the low-order address byte.
11 to 42 Contain the specifications for up to 16 bytes of data.
43 to 44 Contain a checksum for the record. To calculate this, take the
sum of the values of all bytes from the byte count up to the
last data byte, inclusive, modulo 256. Subtract this result
from 255.
*****************************************************************************************
Data Record (S3)
A data record specifies data bytes that are to be loaded into memory. Figure 3
shows the format for such a record. The columns shown in the figure represent half
of a byte (4 bits).
----------------------------------------------------------
| 1 2 3 4 5 6 7 8 9 10 11 12 13 ... 44 45 46 |
| |
| S ID byte load data...data checksum |
| count address 1 n |
----------------------------------------------------------
Figure 3: Data Record Format for 32-Bit Load Address
Column Description
1 Contains the ASCII character S, which indicates the start of
a record in Motorola S-record format.
2 Contains the ASCII character identifying the record type.
For data records, this digit is 3 for 32-bit addresses.
3 to 4 Contain the count of the number of bytes following this one
within the record. The count includes the checksum and the
load address bytes but not the byte count itself.
5 to 12 Contain the load address. The first data byte is to be loaded
into this address and subsequent bytes into the next sequential
address. Columns 5 and 6 contain the high-order address
byte, and columns 11 and 12 contain the low-order address byte.
13 to 44 Contain the specifications for up to 15 bytes of data.
45 to 46 Contain a checksum for the record. To calculate this, take the
sum of the values of all bytes from the byte count up to the
last data byte, inclusive, modulo 256. Subtract this result
from 255.
*****************************************************************************************
Record Count Record (S5)
The record count record verifies the number of data records preceding it. Figure 4
shows the format for such a record. The columns shown in the figure represent half
of a byte (4 bits).
--------------------------------------
| 1 2 3 4 5 6 7 8 9 10 |
| |
| S ID byte # of data checksum |
| count records |
--------------------------------------
Figure 4: Record Count Record Format
Column Description
1 Contains the ASCII character S, which indicates the start of
a record in Motorola S-record format.
2 Contains the ASCII character 5, which indicates a record
count record.
3 to 4 Contain the byte count, ASCII string 03.
5 to 8 Contain the number of data records in this file. The high-
order byte is in columns 5 and 6.
9 to 10 Contain the checksum for the record.
Example:
S503010DEE
The example above shows a record count record indicating a total of 269 records
(0x010D) and a checksum of 0xEE.
*****************************************************************************************
Terminator Record for 32-bit address (S7)
A terminator record specifies the end of the data records. Figure 5 shows the
format for such a record. The columns shown in the figure represent half of a byte
(4 bits).
-------------------------------------
| 1 2 3 4 5...12 13 14 |
| |
| S ID byte load checksum |
| count address |
-------------------------------------
Figure5: Terminator Record Format for 32-Bit Load Address
Column Description
1 Contains the ASCII character S, which indicates the start of
a record in Motorola S-record format.
2 Contains the ASCII character 7, which indicates a 32-bit
load address.
3 to 4 Contain the byte count, ASCII string 04.
5 to 12 Contain the load address that is either set to zero or to the
starting address specified in the END directive or START
command (there are no data bytes).
13 to 14 Contain the checksum for the record.
*****************************************************************************************
Terminator Record for 24-bit address (S8)
A terminator record specifies the end of the data records. Figure 6 shows the
format for such a record. The columns shown in the figure represent half of a byte
(4 bits).
----------------------------------------
| 1 2 3 4 5 6 7 8 9 10 11 12 |
| |
| S ID byte load checksum |
| count address |
----------------------------------------
Figure 6: Terminator Record Format for 24-Bit Load Address
Column Description
1 Contains the ASCII character S, which indicates the start of
a record in Motorola S-record format.
2 Contains the ASCII character 8, which indicates a 24-bit
load address.
3 to 4 Contain the byte count, ASCII string 04.
5 to 10 Contain the load address, which is either set to zero or to the
starting address specified in the END directive or START
command. There are no data bytes.
11 to 12 Contain the checksum for the record.
Example:
S804000AF0001
The previous example shows a terminator record with a 24-bit load address of
0x000AF0 and a checksum of 0x01.
*****************************************************************************************
Terminator Record for 16-bit address (S9)
A terminator record specifies the end of the data records. Figure 7 shows the
format for such a record. The columns shown in the figure represent half of a byte
(4 bits).
-------------------------------------
| 1 2 3 4 5 6 7 8 9 10 |
| |
| S ID byte load checksum |
| count address |
-------------------------------------
Figure 7: Terminator Record Format for 16-Bit Load Address
Column Description
1 Contains the ASCII character S, which indicates the start of
a record in Motorola S-record format.
2 Contains the ASCII character 9, which indicates a 16-bit
load address.
3 to 4 Contain the byte count, ASCII string 04.
5 to 8 Contain the load address, which is either set to zero or to the
starting address specified in the END directive or START
command (there are no data bytes).
9 to 10 Contain the checksum for the record.
*****************************************************************************************
hagen.v.tronje@on-line.de
|