Mr. Emmanuel Roche, Franceunread,
Nov 19, 2021, 5:28:37 AM11/19/21
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, )" with Reference 4 being:
"Intellec 8 Microcomputer System Operator's Manual", Intel Corporation,
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
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
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:
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?
Mr. Emmanuel Roche, France