Motorola S records
S record files are printable files, consisting any number of the eight
different record types. S record files can be created from an ICOFF input
file by ihex. Each record has the following structure:
Field |
Size in characters |
Type |
2 |
Record Length |
2 |
Address |
4, 6, or 8 |
Code / Data |
0 - N |
Checksum |
2 |
The record length, address, code/data, and checksum fields are hexadecimal
bytes coded in ASCII: 00 is the value 0, 01 the value 1, etc. The record
length is the number of data bytes (two hex digits) including the address,
code/data, and checksum fields. The checksum field contains the one's complement
of the sum of all the bytes from the record length field through the end
of the code/data field.
Each record can be terminated with either a carriage return, line feed,
or a null (zero) character.
An example assembly file:
org $1000
dc.b 'some data',0
org $10000
dc.b 'data at a higher address',0
run through ihex produces:
S10D1000736F6D6520646174610074
S21D0100006461746120617420612068696768657220616464726573730034
S9030000FC
The record types are as follows:
-
S0
-
Header record for each block of S records which may contain descriptive
information identifying the following block of S records. The address field
is typically zeros. The code/data field of an S0 record typically contains
a "hexified" ASCII string.
-
S1
-
Code or data record containing a 2-byte address (4 hex digit address).
-
S2
-
Code or data record containing a 3-byte address (6 hex digit address).
-
S3
-
Code or data record containing a 4-byte address (8 hex digit address).
-
S5
-
Count record containing the number of S1, S2, and S3 records transmitted
in a block. The count appears in the address field, and there is no code/data
field (I never saw this actually used).
-
S7
-
Termination record for a block of S records. A 4-byte address contains
the address where execution starts. There is no code/data field.
-
S8
-
Termination record for a block of S records. A 3-byte address contains
the address where execution starts. There is no code/data field.
-
S9
-
Termination record for a block of S records. A 2-byte address contains
the address where execution starts. There is no code or data field.