Provided by: srecord_1.64-4.1build1_amd64 bug

NAME

       srec_intel16 - Intel Hexadecimal 16‐bit file format specification

DESCRIPTION

       This format is also known as the INHX16 format.

       This document describes the hexadecimal object file format for 16‐bit microprocessors.

       This  format  is  very similar to the srec_intel(5) format, except that the addresses are word addresses.
       The count field is a word count.

       The hexadecimal representation of binary is coded in ASCII alphanumeric  characters.   For  example,  the
       8‐bit  binary value 0011‐1111 is 3F in hexadecimal.  To code this in ASCII, one 8‐bit byte containing the
       ASCII code for the character '3' (0011‐0011 or 0x33) and one 8‐bit byte containing the)  ASCII  code  for
       the  character  'F'  (0100‐0110  or  0x46) are required.  For each byte value, the high‐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.

       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:

       • Data Record

       • End of File Record

       • Extended Segment Address Record

       • Start Segment Address Record

       • Extended Linear Address Record

       • Start Linear Address Record

   General Record Format
       ┌────────┬────────┬────────┬────────┬────────┬────────┐
       │ Record │ Record │ Load   │ Record │  Data  │ Check  │
       │ Mark   │ Length │ Offset │ Type   │        │ sum    │
       └────────┴────────┴────────┴────────┴────────┴────────┘

       Record Mark.
               Each record begins with a Record Mark field containing 0x3A, the ASCII code for the  colon  (“:”)
               character.

       Record Length
               Each  record  has a Record Length field which specifies the number of 16‐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.

       Load Offset
               Each record has a Load Offset field which specifies the 16‐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 (“0000” or 0x30303030).  This field one 16‐bit word, represented as
               four hexadecimal characters.

       Record Type
               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:

               0  Data Record

               1  End of File Record

               5  Execution Start Address Record

       Data    Each record has a variable length Data field, it consists of zero or more 16‐bit words encoded as
               set of 4 hexadecimal digits, most significant digit first.   The  interpretation  of  this  field
               depends on the Record Type field.

       Checksum
               Each  record ends with a Checksum field that contains the ASCII hexadecimal representation of the
               two's complement of  the 8‐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.

   Data Record
       (8‐, 16‐ or 32‐bit formats)
       ┌────────┬────────┬────────┬────────┬────────┬────────┐
       │ Record │ Record │ Load   │ Record │  Data  │ Check  │
       │ Mark   │ Length │ Offset │ Type   │        │ sum    │
       │ (“:”)  │        │        │        │        │        │
       └────────┴────────┴────────┴────────┴────────┴────────┘

       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.

       The contents of the individual fields within the record are:

       Record Mark
               This field contains 0x3A, the hexadecimal encoding of the ASCII colon (“:”) character.

       Record Length
               The field contains two ASCII hexadecimal digits that specify the number of 16‐bit data  words  in
               the record.  The maximum value is 255 decimal.

       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.)

       Record Type
               This field contains 0x3030, the hexadecimal encoding of the ASCII character “00”, which specifies
               the record type to be a Data Record.

       Data    This field contains sets of four ASCII hexadecimal digits, one set for  each  16‐bit  data  word,
               most significant digit first.

       Checksum
               This  field  contains  the  check  sum  on  the Record Length, Load Offset, Record Type, and Data
               fields.

   Execution Start Address Record
       ┌────────┬────────┬────────┬────────┬────────┬────────┐
       │ Record │ Record │ Load   │ Record │ EIP (4 │ Check  │
       │ Mark   │ Length │ Offset │ Type   │ bytes) │ sum    │
       │ (“:”)  │ (4)    │ (0)    │ (5)    │        │        │
       └────────┴────────┴────────┴────────┴────────┴────────┘

       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.

       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.

       The contents of the individual fields within the record are:

       Record mark
               This field contains 0x3A, the hexadecimal encoding of the ASCII colon (“:”) character.

       Record length
               The  field  contains  0x3032, the hexadecimal encoding of the ASCII characters “02”, which is the
               length, in bytes, of the EIP register content within this record.

       Load Offset
               This field contains 0x30303030, the hexadecimal encoding of the ASCII  characters  “0000”,  since
               this field is not used for this record.

       Record Type
               This field contains 0x3035, the hexadecimal encoding of the ASCII character “05”, which specifies
               the record type to be a Start Address Record.

       EIP     This  field  contains  eight  ASCII  hexadecimal  digits  that specify the address.  The field is
               encoded big‐endian (most significant digit first).

       Checksum
               This field contains the check sum on the Record length, Load Offset, Record Type, and EIP fields.

   End of File Record
       This shall be the last record in the file.
       ┌────────┬────────┬────────┬────────┬────────┐
       │ Record │ Record │ Load   │ Record │ Check  │
       │ Mark   │ Length │ Offset │ Type   │ sum    │
       │ (“:”)  │ (0)    │ (0)    │ (1)    │ (0xFF) │
       └────────┴────────┴────────┴────────┴────────┘

       The End of File Record specifies the end of the hexadecimal object file.

       The contents of the individual fields within the record are:

       Record mark
               This field contains 0x3A, the hexadecimal encoding of the ASCII colon (“:”) character.

       Record Length
               The field contains 0x3030, the hexadecimal encoding of the ASCII  characters  “00”.   Since  this
               record does not contain any Data bytes, the length is zero.

       Load Offset
               This  field  contains  0x30303030, the hexadecimal encoding of the ASCII characters “0000”, since
               this field is not used for this record.

       Record Type
               This field contains 0x3031, the hexadecimal encoding of the ASCII character “01”, which specifies
               the record type to be an End of File Record.

       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 “FF”.

   Size Multiplier
       In general, binary data will expand in sized by  approximately  2.3  times  when  represented  with  this
       format.

EXAMPLE

       Here is an example INHX16 file.  It contains the data “Hello, World” to be loaded at address 0.
              :0700000065486C6C2C6F5720726F646CFF0AA8
              :00000001FF

COPYRIGHT

       srec_cat version 1.64
       Copyright  (C)  1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
       2013, 2014 Peter Miller

       The srec_cat program comes with ABSOLUTELY NO WARRANTY; for details use the 'srec_cat  -VERSion  License'
       command.   This  is  free  software  and you are welcome to redistribute it under certain conditions; for
       details use the 'srec_cat -VERSion License' command.

MAINTAINER

       Scott Finneran   E‐Mail:   scottfinneran@yahoo.com.au
       Peter Miller     E‐Mail:   pmiller@opensource.org.au

Reference Manual                                     SRecord                                     srec_intel16(5)