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