Details of Keypunch Differences

The Honeywell character set is based on (an extension of) the 48-character set of an IBM 026-H keypunch (except for apostrophy). This is due to the character set being decided/fixed prior to appearance of the IBM 029 keypunch, which defined a full 64-character set. Even if cards are punched on an IBM 026-H, the "special code" option needs to be set with the PCB instruction in order to get the correct representation for the plus and minus characters. It seems that FORTRAN IV programs were normally punched on an IBM 026-H keypunch, and the compiler likely used the "special code" option to read the program. It is not known if Honeywell built keypunch machines and, if so, what character set was used.

The IBM 026 (introduced 1949) had several options that changed the keycaps and printing of some of the special characters. The -H option was generally used for FORTRAN IV programming, since it supplied the necessary special characters. The IBM 029 (introduced 1964) extended the character set of the 026-A, assigning new codes for the additional characters of the 026-H, and so created a conversion issue if both 029 and 026-H keypunches were being used. It was my experience that using an IBM 029 for FORTRAN programs on an H2040 required the keypunch operator to understand that certain characters had to be punched using different symbols. The IBM 029 was available with a 48-character (026-compatible) option, in either the -A or -H arrangements, however I never saw those. Since the special characters of the -H option did not conflict with the corresponding characters of the 029, it is also possible that the FORTRAN compiler simply folded both possible punch codes into the same character. The related example demonstrates a way to automatically convert, provided all cards in a program were punched for the same character set.

Here is a table showing Punch Card codes and their Honeywell equivalents. The "binary" column shows the 16-bit code stored in "pcd" files. A pair of values separated by vertical-bar indicates the normal and "special code" as selected by the PCB instruction on the Card Reader/Punch device. Notice how the Honeywell characters most-closely align with IBM026-H characters.

binarypunchIBM026
-A [-H]
IBM029H2000H2000-LP
0x0000no-punchblankblank015blank
0x0200[0]000000
0x0100[1]110011
0x0080[2]220022
0x0040[3]330033
0x0020[4]440044
0x0010[5]550055
0x0008[6]660066
0x0004[7]770077
0x0002[8]880108
0x0001[9]990119
0x0900[12][1]AA021A
0x0880[12][2]BB022B
0x0840[12][3]CC023C
0x0820[12][4]DD024D
0x0810[12][5]EE025E
0x0808[12][6]FF026F
0x0804[12][7]GG027G
0x0802[12][8]HH030H
0x0801[12][9]II031I
0x0500[11][1]JJ041J
0x0480[11][2]KK042K
0x0440[11][3]LL043L
0x0420[11][4]MM044M
0x0410[11][5]NN045N
0x0408[11][6]OO046O
0x0404[11][7]PP047P
0x0402[11][8]QQ050Q
0x0401[11][9]RR051R
0x0280[0][2]SS062S
0x0240[0][3]TT063T
0x0220[0][4]UU064U
0x0210[0][5]VV065V
0x0208[0][6]WW066W
0x0204[0][7]XX067X
0x0202[0][8]YY070Y
0x0201[0][9]ZZ071Z
0x0082[8][2]none:012'
0x0042[8][3]# [=]#013=
0x0022[8][4]@ [']@014:
0x0012[8][5]none'060<
0x000a[8][6]none=016>
0x0006[8][7]none"017&
0x0800[12]& [+]&037|020?|+
0x0a00[12][0]nonenone020|037+|?
0x0882[12][8][2]none¢032;
0x0842[12][8][3]. . 033.
0x0822[12][8][4]□ [)]<034)
0x0812[12][8][5]none(035%
0x080a[12][8][6]none+036
0x0806[12][8][7]none|nonenone
0x0400[11]057|040!|─
0x0600[11][0]nonenone040|057─|!
0x0482[11][8][2]none!052#
0x0442[11][8][3]$$053$
0x0422[11][8][4]**054*
0x0412[11][8][5]none)055"
0x040a[11][8][6]none;056
0x0406[11][8][7]none¬nonenone
0x0300[0][1]//061/
0x0282[0][8][2]none(note 1)072@
0x0242[0][8][3],,073,
0x0222[0][8][4]% [(]%074(
0x0212[0][8][5]none_075CR
0x020a[0][8][6]none>076
0x0206[0][8][7]none?077¢
(1)A key existed to punch this code, but the keytop was blank (or said "0-8-2") and the printer did not print for this code.
[12][8][7]
[11][8][7]
Codes not recognized by Honeywell equipment.
[12][0]
[11][0]
Codes not recognized/punched by IBM keypunch equipment.

The special code option was for cases where the punch cards were carrying things like FORTRAN programs or text, as opposed to conventional data processing (numeric data). It was common in punch card data processing to add a sign to a numeric field by over-punching the 12 or 11 zone in the last digit. The "normal" Hollerith code translation would produce native Honeywell signed decimal fields directly from data punched that way. Effectively, [12] and [11] zone punches were attributes of digits. For programs and other text, [12] and [11] become characters instead of attributes, supplying the plus and minus signs (respectively).