Card punches of various types, models and makes featured an option to print the characters encoded by the holes punched in any of the columns in human readable form onto the top of the card. While it is well known that these characters were printed by a 5 × 7 dot matrix, comprehensive information on what these character glyphs looked like exactly and how they were effected is rather rare. What may be more reasonable than reconstructing them from their very form of technical encoding?
Recently, while soaring through various information on character encodings and, eventually, card punches, I stumbled upon a rather interesting, astoundingly flexible, and quite arcane piece of technology: The IBM card punch code plate.
The code plate is a tiny, roughly stamp-sized piece of metal (for the IBM 029/129 the "IBM Field Engineering Theory of Operation" (S225-3358-4) gives dimensions of
And this is, what it looks like, here for the IBM 026:
And the complete assembly for the IBM 029 in the IBM Field Engineering Theory of Operation manual:
Now, the arragement of the projections (often just called wires) doesn't give away easily to any comprehensible encoding pattern. The arcane nature of the encoding scheme might be kind of a setback, since it also provides an astounding amount of flexibility. Compare this passage on the IBM 029 in "Computer Resurrection — The Bulletin of the Computer Conservation Society", No. 54, Spring 2011:
Equally ingenious was the printing mechanism. As each column was punched, the character was printed, dot matrix-style. A 5×7 matrix was employed with up to 35 wires being pressed down onto an ink ribbon (and thence to the card) simultaneously. At the other end of the wires was a postage stamp sized “code plate” with 35×64 (or 35×48) minute pillars protruding from it. Think of an array of tiny, tiny Lego bricks. By milling off most of the pillars, a mechanical, read-only binary store could be manufactured.
As a character was punched, the plate moved to one of 64 positions and then pushed down. Where the pillar was still in situ, the wire would be forced down and a dot printed. Or not, as the case may be. Of course, this mechanism required considerable precision in manufacture and setting up, but then any card punch does, so it was well within IBM’s capability.
We started by observing that the 029 could be found almost anywhere. IBM installations had them, but so did many others. One of the headaches of those days was that each manufacturer used a different card code. Often a manufacturer used different codes for different ranges of computer. Yet the 029 supported them all. How? Here, I fear, we must enter the realms of speculation. But it is at least informed speculation.
Try as I may, I can find no provision for varying the mapping from keys to hole arrangement. But, since the hole combinations were the same from one code to another - only the meanings varied - swapping the keytops cured half the problem. Which leaves the printing mechanism to be dealt with. But the printing was controlled by the code plate, so fitting a different code plate with a different binary pattern recorded upon it, changes the meaning of each key. You have to admit that’s clever.
(Dik Leatherdale, The Ubiquitous IBM 029 Card Punch)
So — how does the character encoding mechanism work?
First, the codeplate isn't doing the printing by itself, it generates the encoding by establishing connections to a set of 35 printing wires that are actually effecting the printing. This is, what the arrangement looks like, again from the IBM 029 Field Engineering Theory of Operation:
Note: Mind the 7 × 8 encoding grid (given by the shaft values -3 … +3 and -3 … +4), which rather represents the mechanism of the model 026 than that of models 029/129, which used an 8 × 8 encoding scheme. — Apparently, they were the same, even in the eyes of IBM engineers.
The printing mechanism is pretty much the same for any of the classic IBM card punches: While punching, the code plate is moved by a set of shafts and cams, the print interposers, into correct position to produce the dot matrix pattern for the respective character. This movement happens for every code punched, regardless of whether printing is on or off.
The pins (or wires) are arranged in a rectangular code grid in 35 cells so that the pins in each of the cells may establish a connection (or not) to one of the 35 printing wires. The pattern of the character matrix is effected by moving the plate by the actuators to the respective offsets of the encoding grid and by the presence of a pin in that particular location.
Here are the mechanisms, encoding schemes, and the generated character matrix for the IBM 026, 029, and 129 card punches, presented as interactive infographics:
IBM 026 Card Punch
The code plate of the IBM 026 features 47 valid character codes arranged in a code grid of 7 rows × 8 columns. The coordinates (-3 … +3 / -3 … +4) of this code grid are repeated over the cells of the plate in the positions of a 5 × 7 character matrix, laid out with rows arranged in reverse order (upside down). Thus we see the characters on the code plate mirrored by the horizontal axis, represented by the pins at the offsets of their respective position in the code grid. The effective printing matrix of a character is made of those pins in each cell of the plate, which are not milled off at the respective code cooordinates.
The code plate is moved into the correct position for every punch by the printing mechanism, regardless, whether printing is on or off. (Reportedly, the mechanism was designed for character codes and rapid movements effected by some combinations of binary representions could cause mechanical failure.)
Red squares represent active pins, orange outlines active positions without a pin, black squares inactive pins, and a lightgray circle marks the neutral position of a given cell of the character matrix (code grid 0/0).
IBM Card Punch 029 and 129
The IBM 029 and IBM 129 share the same code plate featuring 63 valid character codes arranged in an 8 × 8 code grid. Like we've already seen it with the model 026, the coordinates (-3 … +4 / -3 … +4) of the code grid are repeated over the cells of the plate in the positions of the 5 × 7 character, rows arranged upside down. Again, the pins belonging to a character are identified by their relative position inside a given cell.
Red squares represent active pins, orange outlines active positions without a pin, black squares inactive pins, and a lightgray circle marks the neutral position of a given cell of the character matrix (code grid 0/0).
IBM Character Code Grids
Finally, here are the encoding grids as presented in the IBM manuals. These tables also show the arrangement of the characters in relation to their respective punch codes. (Mind that the rows are laid out upside-down as compared to the physical arrangement found on the code plate.)
IBM 026:
IBM 029, 129:
While most of the character set of the model 026 made it to the 029/129 — with the notable exception of the square lozenge (⌑) —, some punctations and mathematical signs vital for programming and the cent currency sign where added. Moreover, the letter "O" and the number zero, which, while being produced by destinctive encodings, shared the same form on the 026, were altered for visual distinction. Also, the letter "I" received slab-serifs (to separate it visually from the newly added vertical bar) and the glyph representing the number 4 was changed a little by adding another dot for a closed form.
Overall, the changes we see in the font of the IBM 029/129 are representative for the new role of punched cards shifting the focus from traditional book keeping and fixed data fields to the requirements of programming and electronic data procssing.
****
Technical Notes
The IBM 026 Card Punch was introduced in 1949 (together with the non-printing, otherwise identical model 024). The IBM 024 and 026 featured BCDIC (BCD), Binary-Coded Decimal Interchange Code, as the character set. The IBM 029 Card Punch was introduced in 1964 together with the System/360 line of computers. The IBM 129 came in 1971 with the System/370. The IBM 029 and 129 featured EBCDIC, Extended Binary Coded Decimal Interchange Code, as the character set. Prior to the introduction of model numbers in the three-digits range, like the IBM 129 Card Data Recorder, models 024, 026, 029 were referred to by 24, 26, 29.