Provided by: srecord_1.56-1_i386 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:

       o Data Record

       o End of File Record

       o Extended Segment Address Record

       o Start Segment Address Record

       o Extended Linear Address Record

       o 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.56
       Copyright (C) 1998, 1999, 2000, 2001, 2002,  2003,  2004,  2005,  2006,
       2007, 2008, 2009, 2010 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.

AUTHOR

       Peter Miller   E-Mail:   pmiller@opensource.org.au
       /\/\*             WWW:   http://miller.emu.id.au/pmiller/