• When was the Intel HEX file format created?

    From Mr. Emmanuel Roche, France@21:1/5 to All on Fri Nov 19 02:28:36 2021
    The 1st of April 2020, I published on the comp.os.cpm Newsgroup a message titled "The Intel HEX File Format", which contained a correction for the computation of the "checksum".

    I had to go back to 1975 to find the exact description of how is computed the checksum.

    It was obvious that it was older than 1975, since Gary Kildall only used "Type 0" records.

    But how old?

    Well, in an April 1974 paper, Gary Kildall writes: "in standard hexadecimal format (Intel, [4])" with Reference 4 being:

    "Intellec 8 Microcomputer System Operator's Manual", Intel Corporation, November, 1973.

    Unfortunately, impossible to find this manual on the Internet. One American sold an Intellec 8 system with this manual and more but, of course, he forgot to scan the 40-years old manuals...

    All the November 1973 Intel manuals that I managed to find on the Internet only mentions their curious BNPF tape format.

    In the end, I found the following description:

    Hexadecimal Program Tape Format

    (Appendix D of Intel "Intellec 8/MOD 80 Operators Manual", June 1974, 98-003A)

    The hexadecimal tape format used by the Intellec 8 system is a modified memory image, blocked into discrete records. Each record contains record length, record type, memory address, and checksum information in addition to data. A frame-by-frame description is as follows:

    Frame 0: Record Mark
    Signals the start of a record. The ASCII character colon (":" hex 3A) is used as the record mark.

    Frames 1,2 (0-9, A-F): Record Length
    Two ASCII characters representing a hexadecimal number in the range 0 to 'FF' hex (0 to 255). This is the count of actual bytes in the record type or checksum. A record length of 0 indicates end of file.

    Frames 3 to 6: Load Address
    Four ASCII characters that represent the initial memory location where the data following will be loaded. The first data byte is stored in the location pointed to by the load address, succeeding data bytes are loaded into ascending addresses.

    Frames 7,8: Record Type
    Two ASCII characters. Currently (1974), all records are type 0. This field is reserved for future expansion.

    Frames 9 to 9/2*(Record Length)-1: Data
    Each 8-bit memory word is represented by two frames containing the ASCII characters (0 to 9, A to F) to represent a hexadecimal value 0 to 'FF' hex (0 to 255).

    Frames 9+2*(Record Length) to 9+2*(Record Length) +1: Checksum
    The checksum is the negative of the sum of all 8-bit bytes in the record since the record mark (":") evaluated modulus 256. That is, if you add together all the 8-bit bytes, ignoring all carries out of an 8-bit sum, then add the checksum, the result is zero.

    Example: If memory locations 1 through 3 contains 53F8EC, the format of the hex file produced when these locations are punched is:

    :0300010053F8ECC5

    So, you finally know, in 2021, what was the first definition of the Intel HEX file format.

    Maybe you will get the date for Christmas?

    Yours Sincerely,
    Mr. Emmanuel Roche, France

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Udo Munk@21:1/5 to All on Fri Nov 19 07:11:28 2021
    More essential the symbol table is read by INTERP/8 and also later by INTERP/80 to allow symbolic debugging of programs with the CPU emulations.

    The extra symbol table information also is not explicitly documented as part of Intel BNPF,
    only documented in the PL/M and Assembler programming manuals for the Intel tools
    producing such a symbol table.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From ogdenpm@gmail.com@21:1/5 to France on Fri Nov 19 06:22:16 2021
    On Friday, 19 November 2021 at 10:28:37 UTC, Mr. Emmanuel Roche, France wrote:
    The 1st of April 2020, I published on the comp.os.cpm Newsgroup a message titled "The Intel HEX File Format", which contained a correction for the computation of the "checksum".

    I had to go back to 1975 to find the exact description of how is computed the checksum.

    It was obvious that it was older than 1975, since Gary Kildall only used "Type 0" records.

    But how old?

    Well, in an April 1974 paper, Gary Kildall writes: "in standard hexadecimal format (Intel, [4])" with Reference 4 being:

    "Intellec 8 Microcomputer System Operator's Manual", Intel Corporation, November, 1973.

    Unfortunately, impossible to find this manual on the Internet. One American sold an Intellec 8 system with this manual and more but, of course, he forgot to scan the 40-years old manuals...

    All the November 1973 Intel manuals that I managed to find on the Internet only mentions their curious BNPF tape format.

    In the end, I found the following description:

    Hexadecimal Program Tape Format

    (Appendix D of Intel "Intellec 8/MOD 80 Operators Manual", June 1974, 98-003A)

    The hexadecimal tape format used by the Intellec 8 system is a modified memory
    image, blocked into discrete records. Each record contains record length, record type, memory address, and checksum information in addition to data. A frame-by-frame description is as follows:

    Frame 0: Record Mark
    Signals the start of a record. The ASCII character colon (":" hex 3A) is used as the record mark.

    Frames 1,2 (0-9, A-F): Record Length
    Two ASCII characters representing a hexadecimal number in the range 0 to 'FF' hex (0 to 255). This is the count of actual bytes in the record type or checksum. A record length of 0 indicates end of file.

    Frames 3 to 6: Load Address
    Four ASCII characters that represent the initial memory location where the data following will be loaded. The first data byte is stored in the location pointed to by the load address, succeeding data bytes are loaded into ascending addresses.

    Frames 7,8: Record Type
    Two ASCII characters. Currently (1974), all records are type 0. This field is reserved for future expansion.

    Frames 9 to 9/2*(Record Length)-1: Data
    Each 8-bit memory word is represented by two frames containing the ASCII characters (0 to 9, A to F) to represent a hexadecimal value 0 to 'FF' hex (0 to 255).

    Frames 9+2*(Record Length) to 9+2*(Record Length) +1: Checksum
    The checksum is the negative of the sum of all 8-bit bytes in the record since
    the record mark (":") evaluated modulus 256. That is, if you add together all the 8-bit bytes, ignoring all carries out of an 8-bit sum, then add the checksum, the result is zero.

    Example: If memory locations 1 through 3 contains 53F8EC, the format of the hex file produced when these locations are punched is:

    :0300010053F8ECC5

    So, you finally know, in 2021, what was the first definition of the Intel HEX file format.

    Maybe you will get the date for Christmas?

    Yours Sincerely,
    Mr. Emmanuel Roche, France

    Emmanuel
    Interestingly the MCS-8 A Guide to PL/M programming Rev 1. (dated September 1973) was updated in March 1974 to include
    the ability to generated the Intel HEX format, as shown in the new Appendix A page "Hexidecimal Object Tape".
    The example also includes the header with symbol names, which is processed by Intel's ISIS hexobj command. This extra
    header information is not documented as part of Intel HEX.


    Note, the guide printing I have, is from September 1974.

    Mark Ogden

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to All on Sat Nov 20 15:25:00 2021

    So, you finally know, in 2021, what was the first definition of the Intel HEX file format.

    Maybe you will get the date for Christmas?

    Coincidentally I came across this BYTE article on relocatable HEX formats, including TDL's.

    https://archive.org/details/byte-magazine-1977-11-rescan/page/n199/mode/2up?q=tdl

    There's even a letter by Tom Pittman critiquing the latter.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)