.lf 1 ./man/man5/srec_intel16.5
'\" t
.\" srecord - manipulate eprom load files
.\" Copyright (C) 2003, 2006-2010 Peter Miller
.\"
.\" This program is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation; either version 3 of the License, or
.\" (at your option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with this program. If not, see
.\" .
.\"
.ds n) srec_intel16
.TH \*(n) 5 SRecord "Reference Manual"
.SH NAME
srec_intel16 \- Intel Hexadecimal 16\[hy]bit file format specification
.if require_index \{
.XX "srec_intel16(5)" "Intel Hexadecimal 16\[hy]bit file format specification"
.\}
.SH DESCRIPTION
This format is also known as the \fIINHX16\fP format.
.PP
This document describes the hexadecimal object file format
for 16\[hy]bit microprocessors.
.PP
This format is very similar to the \fIsrec_intel\fP(5) format, except
that the addresses are word addresses. The count field is a word count.
.PP
The hexadecimal representation of binary is coded in ASCII alphanumeric
characters. For example, the 8\[hy]bit binary value 0011\[hy]1111 is 3F in
hexadecimal. To code this in ASCII, one 8\[hy]bit byte containing the
ASCII code for the character '3' (0011\[hy]0011 or 0x33) and one 8\[hy]bit
byte containing the) ASCII code for the character 'F' (0100\[hy]0110 or
0x46) are required. For each byte value, the high\[hy]order hexadecimal
digit is always the first digit of the pair of hexadecimal digits.
This representation (ASCII hexadecimal) requires twice as many bytes
as the binary representation.
.PP
A hexadecimal object file is blocked into records, each of which contains
the record type, length, memory load address and checksum in addition
to the data. There are currently six (6) different types of records
that are defined, not all combinations of these records are meaningful,
however. The record are:
.TP 2n
\(bu
Data Record
.TP 2n
\(bu
End of File Record
.TP 2n
\(bu
Extended Segment Address Record
.TP 2n
\(bu
Start Segment Address Record
.TP 2n
\(bu
Extended Linear Address Record
.TP 2n
\(bu
Start Linear Address Record
.SS General Record Format
.TS
allbox,tab(;);
ce ce ce ce ce ce.
T{
Record
.br
Mark
T};T{
Record
.br
Length
T};T{
Load
.br
Offset
T};T{
Record
.br
Type
T};T{
Data
T};T{
Check
.br
sum
T}
.TE
.TP 8n
Record Mark.
Each record begins with a Record Mark field containing 0x3A, the ASCII
code for the colon (\[lq]:\[rq]) character.
.TP 8n
Record Length
Each record has a Record Length field which specifies the number of
16\[hy]bit words of information or data which follows the Record Type
field of the record. This field is one byte, represented as two
hexadecimal characters. The maximum value of the Record Length field is
hexadecimal 'FF' or 255.
.TP 8n
Load Offset
Each record has a Load Offset field which specifies the 16\[hy]bit starting
load offset of the data words, therefore this field is only used for
Data Records (if the words are loaded as bytes, the address needs
to be doubled). In other records where this field is not used, it
should be coded as four ASCII zero characters (\[lq]0000\[rq] or 0x30303030).
This field one 16\[hy]bit word, represented as four hexadecimal characters.
.TP 8n
Record Type
.RS
Each record has a Record Type field which specifies the record type of
this record. The Record Type field is used to interpret the remaining
information within the record. This field is one byte, represented as
two hexadecimal characters. The encoding for all the current record
types are:
.TP 3n
0
Data Record
.TP 3n
1
End of File Record
.TP 3n
5
Execution Start Address Record
.RE
.TP 8n
Data
Each record has a variable length Data field, it consists of zero or more
16\[hy]bit words encoded as set of 4 hexadecimal digits, most significant
digit first. The interpretation of this field depends on the Record
Type field.
.TP 8n
Checksum
Each record ends with a Checksum field that contains the ASCII hexadecimal
representation of the two's complement of the 8\[hy]bit bytes that result
from converting each pair of ASCII hexadecimal digits to one byte of
binary, from and including the Record Length field to and including the
last byte of the Data field. Therefore, the sum of all the ASCII pairs
in a record after converting to binary, from the Record Length field to
and including the Checksum field, is zero.
.SS Data Record
(8\[hy], 16\[hy] or 32\[hy]bit formats)
.TS
allbox,tab(;);
ce ce ce ce ce ce.
T{
Record
.br
Mark
.br
(\[lq]:\[rq])
T};T{
Record
.br
Length
T};T{
Load
.br
Offset
T};T{
Record
.br
Type
T};T{
Data
T};T{
Check
.br
sum
T}
.TE
.PP
The Data Record provides a set of hexadecimal digits that represent
the ASCII code for data bytes that make up a portion of a memory image.
.PP
The contents of the individual fields within the record are:
.TP 8n
Record Mark
This field contains 0x3A, the hexadecimal encoding of the ASCII colon
(\[lq]:\[rq]) character.
.TP 8n
Record Length
The field contains two ASCII hexadecimal digits that specify the number
of 16\[hy]bit data words in the record. The maximum value is 255 decimal.
.TP 8n
Load Offset
This field contains four ASCII hexadecimal digits representing the word
address at which the first word of the data is to be placed.
(For an exquivalent bytes address, double it.)
.TP 8n
Record Type
This field contains 0x3030, the hexadecimal encoding of the ASCII
character \[lq]00\[rq], which specifies the record type to be a Data Record.
.TP 8n
Data
This field contains sets of four ASCII hexadecimal digits, one set for
each 16\[hy]bit data word, most significant digit first.
.TP 8n
Checksum
This field contains the check sum on the Record Length, Load Offset,
Record Type, and Data fields.
.SS Execution Start Address Record
.TS
allbox,tab(;);
ce ce ce ce ce ce.
T{
Record
.br
Mark
.br
(\[lq]:\[rq])
T};T{
Record
.br
Length
.br
(4)
T};T{
Load
.br
Offset
.br
(0)
T};T{
Record
.br
Type
.br
(5)
T};T{
EIP (4
.br
bytes)
T};T{
Check
.br
sum
T}
.TE
.PP
The Execution Start Address Record is used to specify the execution start
address for the object file.
This is where the loader is to jump to begin execution once the hex load
is complete.
.PP
The Execution Start Address Record can appear anywhere in a
hexadecimal object file. If such a record is not present in a hexadecimal
object file, a loader is free to assign a default execution start address.
.PP
The contents of the individual fields within the record are:
.TP 8n
Record mark
This field contains 0x3A, the hexadecimal encoding of the ASCII colon
(\[lq]:\[rq]) character.
.TP 8n
Record length
The field contains 0x3032, the hexadecimal encoding of the ASCII
characters \[lq]02\[rq], which is the length, in bytes, of the EIP register
content within this record.
.TP 8n
Load Offset
This field contains 0x30303030, the hexadecimal encoding of the ASCII
characters \[lq]0000\[rq], since this field is not used for this record.
.TP 8n
Record Type
This field contains 0x3035, the hexadecimal encoding of the ASCII
character \[lq]05\[rq], which specifies the record type to be a Start
Address Record.
.TP 8n
EIP
This field contains eight ASCII hexadecimal digits that specify the address.
The field is encoded big\[hy]endian (most significant digit first).
.TP
Checksum
This field contains the check sum on the Record length, Load Offset,
Record Type, and EIP fields.
.SS End of File Record
This shall be the last record in the file.
.TS
allbox,tab(;);
ce ce ce ce ce.
T{
Record
.br
Mark
.br
(\[lq]:\[rq])
T};T{
Record
.br
Length
.br
(0)
T};T{
Load
.br
Offset
.br
(0)
T};T{
Record
.br
Type
.br
(1)
T};T{
Check
.br
sum
.br
(0xFF)
T}
.TE
.PP
The End of File Record specifies the end of the hexadecimal object file.
.PP
The contents of the individual fields within the record are:
.TP 8n
Record mark
This field contains 0x3A, the hexadecimal encoding of the ASCII colon
(\[lq]:\[rq]) character.
.TP 8n
Record Length
The field contains 0x3030, the hexadecimal encoding of the ASCII
characters \[lq]00\[rq]. Since this record does not contain any Data bytes,
the length is zero.
.TP 8n
Load Offset
This field contains 0x30303030, the hexadecimal encoding of the ASCII
characters \[lq]0000\[rq], since this field is not used for this record.
.TP 8n
Record Type
This field contains 0x3031, the hexadecimal encoding of the ASCII
character \[lq]01\[rq], which specifies the record type to be an End of File
Record.
.TP 8n
Checksum
This field contains the check sum an the Record Length, Load Offset,
and Record Type fields. Since all the fields are static, the check
sum can also be calculated statically, and the value is 0x4646, the
hexadecimal encoding of the ASCII characters \[lq]FF\[rq].
.SS Size Multiplier
In general, binary data will expand in sized by approximately 2.3 times
when represented with this format.
.\" ------------------------------------------------------------------------
.br
.ne 2i
.SH EXAMPLE
Here is an example INHX16 file.
It contains the data \[lq]Hello, World\[rq] to be loaded at address 0.
.RS
.nf
.ft CW
:0700000065486C6C2C6F5720726F646CFF0AA8
:00000001FF
.ft P
.fi
.RE
.\" ------------------------------------------------------------------------
.ds n) srec_cat
.lf 1 ./man/man1/z_copyright.so
.\"
.\" srecord - manipulate eprom load files
.\" Copyright (C) 1998, 2006-2009 Peter Miller
.\"
.\" This program is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation; either version 3 of the License, or
.\" (at your option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with this program. If not, see
.\" .
.\"
.br
.ne 1i
.SH COPYRIGHT
.lf 1 ./etc/version.so
.ds V) 1.58.D001
.ds v) 1.58
.ds Y) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
.lf 23 ./man/man1/z_copyright.so
.I \*(n)
version \*(v)
.br
Copyright
.if n (C)
.if t \(co
\*(Y) Peter Miller
.br
.PP
The
.I \*(n)
program comes with ABSOLUTELY NO WARRANTY;
for details use the '\fI\*(n) \-VERSion License\fP' command.
This is free software
and you are welcome to redistribute it under certain conditions;
for details use the '\fI\*(n) \-VERSion License\fP' command.
.br
.ne 1i
.SH AUTHOR
.TS
tab(;);
l r l.
Peter Miller;E\[hy]Mail:;pmiller@opensource.org.au
/\e/\e*;WWW:;http://miller.emu.id.au/pmiller/
.TE
.lf 369 ./man/man5/srec_intel16.5