Provided by: srecord_1.58-1_amd64 bug

NAME

       srec_aomf - Intel Absolute Object Module Format

DESCRIPTION

       The Absolute Object Module Format (AOMF) is a subset of the 8051 OMF.  The structure of an
       absolute object file (the order of the records in it) is similar to that of a  relocatable
       object file.  There are three main differences:  the first is that an absolute object file
       contains one module only, the second is that  not  all  the  records  can  appear  in  the
       absolute file and the third is that the records can contain only absolute information.

   Generic Record Format
       Each  record  starts with a record type which indicates the type of the record, and record
       length which contain the number of bytes in the record exclusive of the first two  fields.
       The  record  ends with a checksum byte which contains the 2s complement of the sum (modulo
       256) of all other bytes in the record.  Therefore the sum (modulo 256) of all bytes in the
       record is zero.

       The  record  length  includes  the  payload and checksum fields, but excludes the type and
       length fields.

       All 16‐bit fields are little‐endian.

                                ┌────────┬─────────┬─────────┬─────────┐
                                │REC     │ Record  │ Payload │ CHK     │
                                │TYP     │ Length  │         │ SUM     │
                                │8 bits  │ 16 bits │         │ 8 bits  │
                                └────────┴─────────┴─────────┴─────────┘
       Here are some of the relevant record types:

                                   0x01   Scope Definition Record
                                   0x02   Module Start Record
                                   0x04   Module End Record
                                   0x06   Content Record
                                   0x0E   Segment Definition Record
                                   0x12   Debug Items Record
                                   0x16   Public Definition Record
                                   0x18   External Definition Record

       Names are not stored a C strings.  Names are stored as  a  length  byte  followed  by  the
       contents.

   Structure
       An  AOMF  file  consists of a module header record (0x02), followed by one or more content
       (0x06), scope (0x01) or debug (0x12) records, and ends in a module end record (0x04).

       The records with the following types are extraneous (they may appear in the file  but  are
       ignored):   0x0E,  0x16  and 0x18 (definition records).  All records which are not part of
       the AOMF and are not extraneous are considered erroneous.

   Module Header Record
                      ┌────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
                      │ REC    │ Record  │ Module  │ TRN ID  │ zero    │ CHK     │
                      │ TYP    │ Length  │ Name    │ 8 bits  │ 8 bits  │ SUM     │
                      │ 0x02   │ 16 bits │         │         │         │ 8 bits  │
                      └────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
       Each module must starts with a module header record.  It is used to  identify  the  module
       for  the RL51 and other future processors of 8051 object files.  In addition to the Module
       Name the record contains:

       TRN ID  The byte identifies the program which has generated this module:

                                                 0xFD   ASM51
                                                 0xFE   PL/M-51
                                                 0xFF   RL51.

   Module End Record
                 ┌────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
                 │ REC    │ Record  │ Module  │ zero    │ REG     │ zero    │ CHK     │
                 │ TYP    │ Length  │ Name    │ 16 bits │ MSK     │ 8 bits  │ SUM     │
                 │ 0x04   │ 16 bits │         │         │ 8 bits  │         │ 8 bits  │
                 └────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
       The  record  ends  the  module  sequence   and   contains   the   following   information:
       characteristics

       MODULE NAME
               The  name  of the module is given here for a consistency check.  It must match the
               name given in the Module Header Record.

       REGISTER MASK (REG MSK)
               The field contains a bit for each of the four register banks.  Each bit, when  set
               specifies that the corresponding bank is used by the module:

               Bit 0 (the least significant bit)
                       bank #0.

               Bit 1   bank #1.

               Bit 2   bank #2.

               Bit 3   bank #3.

   Content Record
                      ┌────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
                      │ REC    │ Record  │ SEG ID  │ Offset  │  DATA   │ CHK     │
                      │ TYP    │ Length  │ 8 bits  │ 16 bits │         │ SUM     │
                      │ 0x06   │ 16 bits │         │         │         │ 8 bits  │
                      └────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
       This  record  provides  one  or  more  bytes of contiguous data, from which a portion of a
       memory image may be constructed.

       SEG ID  This field must be zero.

       OFFSET  Gives the absolute address of the first byte of data in  the  record,  within  the
               CODE address space.

       DATA    A sequence of data bytes to be loaded from OFFSET to OFFSET+RECORDLENGTH−5.

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

SOURCE

       http://www.intel.com/design/mcs96/swsup/omf96_pi.pdf
       ftp://download.intel.com/design/mcs51/SWSUP/omf51.exe (zip archive)
       http://www.elsist.net/WebSite/ftp/various/OMF51EPS.pdf

COPYRIGHT

       srec_cat version 1.58
       Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,  2005,  2006,  2007,  2008,  2009,
       2010, 2011 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/