The Museum of HP Calculators

This article is Copyright © 1980 by Hewlett-Packard and is used by permission. The article was originally published in the March, 1980 issue of the Hewlett-Packard Journal. If errors crept in during the scanning process, please contact Dave Hicks

Card Reader Offers Compatibility and Expanded Capability

by David J. Lowe and Patrick V. Boyd

MODEL 82104A CARD READER, an accessory to the HP-41C Calculator, is an adaptation of the card reader design used in the HP-65, 67, and 97.1,2 This design has proved effective and provides compatibility between the HP-41C and the HP-67/97. Thus the large software library of HP-67/97 programs is a great asset for the HP-41C.

A basic consideration in the 82104A design was that the card reader be small enough to plug onto the HP-41C and become an extension of its package, simulating the built-in card reader of the earlier calculators but having the flexibility of an accessory that can be purchased separately and removed at will (see Fig. 1).

HP-67/97 Compatibility

The new card reader will read cards written on an HP-67 or 97 but an HP-67/97 will not read cards written on the 82104A. When the 82104A is plugged into the HP-41C it adds several new functions to the function library of the HP-41C, much as new functions are added by plugging in application modules. Among the card reader functions is the translation routine used to convert HP-67/97 cards. This routine is transparent to the user and cannot be executed from the keyboard. It is automatically executed when an HP-67197 card is inserted.

The first information read from a card allows the calculator to decide how to process the rest of the data on the card. In the case of an HP-67/97 card the translation routine is executed. Not every HP-67197 function has a corresponding HP-41C function and vice versa. When an HP-67/97 function and an HP-41C function are close enough the translation routine modifies the HP-67/97 function to make it an HP-41C function. An example is the HP-67/97 function X<>I. In the HP-41C there is no register designated I. Any register can be used as an indirect register. When the translation routine comes across an X<>I it replaces the I with register 25, which can be used as an indirect register. Because the translation routine automatically makes these changes it may be necessary to change the user instructions of some HP-67/97 programs. User instruction changes for HP-67/97 application pacs are outlined in an appendix of the 82104A Owner's Handbook.

In some cases neither a direct translation or a modification would allow an HP-67/97 function to be converted to an HP-41C function. An example is display formatting. On an HP-67/97 you specify the type of display: fixed decimal point, engineering, or scientific notation. Then in a separate process you specify the number of significant digits or digits after the decimal point. On an HP-41C you specify both the type of display and the number of digits in the same set of keystrokes. It was necessary, therefore, to allow for HP-67/97 programs adjusting the significant digit count without changing the display type. This was done by adding these functions to those in the HP-41C mainframe. Whenever you plug an 82104A into an HP-41C you add a new set of functions that are, direct implementations of HP-67/97 functions that could not otherwise be translated.

Hardware Improvements

In the process of adapting the HP-65/67/97 card reader design to the HP-41C an effort was made to improve on as many features of the design as possible. One of these improvements involved the switches that detect the position of the card as it passes through the card chamber. In the old design, space was at a premium, forcing the switches to make very little movement in going from open to closed position. The switches had to be carefully adjusted as they were installed in the factory. The 82104A overcomes this problem of switch adjustment with a new switch design that uses buckling columns instead of cantilever beams (Fig. 2). The actuating motion of the switches is greatly increased, making adjustments unnecessary. The switches are independent (separate) to avoid the coupling problem of the earlier design, which incorporated all the switches in the same piece of metal.

The requirement that any 82104A plug into any HP-41C dictated another improvement, this one in the control of the motor speed. The subtle differences in HP-41Cs make it mandatory that the card reader itself maintain tight tolerances. Where the previous motor speed control was open-loop, the new design closes the loop, providing feedback control. The principle is the same as that used to control the motor speed accurately in the printer of the HP-97, The motor is driven with a pulse train, and the pulse duty cycle is varied by the feedback loop, maintaining constant speed even when the load on the motor varies.

Minimizing Power

Power consumption was a major consideration. While the HP-41C uses very little power, the card reader with its motor and circuitry to drive, the magnetic head consumes large amounts of power. To cut power consumption to a minimum, the circuits that use the most power are powered only when a card is in the card chamber. The switch that indicates the presence of a card is also a power switch. Thus, the time that the card reader is drawing energy from the batteries is measured in seconds instead of weeks.

Besides the problem of average power, there is the problem of peak power, such as the power surges required to start the motor. Accommodating these peak drains on the battery required the isolation of all circuits that were sensitive to dips in battery voltage.

Low-Battery Software Control

To further extend card reader usability with a set of old batteries, software controls power use by pulsing the motor. When the batteries approach the low-battery state, software begins to turn off the motor for short periods of time to lower the motor duty cycle and decrease power consumption, giving the batteries more time to recover between pulses. As the battery voltage drops lower and lower the motor off time increases. Even though the motor is being turned off for short periods as the card goes through, it is easily possible to have a correct read, and the difference may even be imperceptible to the user. The 82104A verifies a good read on every card by computing a checksum during each card pass and comparing it to the sum recorded in the last 28 bits of information on the data track. To tell the user what is happening, the message LOW BAT is displayed at the end of any read in which the motor has been turned off, whether the read was good or bad. Many good reads may be possible when the batteries are in this condition.

Because there is no way for the calculator to check to make certain that the information it tried to write on a card got recorded correctly, there is a chance that bad or incomplete information could be written when the motor is pulsed under a low-battery condition. To be safe, therefore, the calculator aborts a write session as soon as it is discovered that the batteries may be too low to complete the write under normal conditions.

Writing consumes more power than reading. Because of the internal impedance of the batteries, they appear to be at a lower voltage during a write than during a read. This means that, even though there is not enough energy in the batteries to finish a write operation, there may still be enough for several more successful reads. Internal impedance of the batteries also accounts for the ability of the calculator to operate well after the batteries have discharged below the point where they will operate the card reader.

New Functions

Several new functions have been added to the 82104A to make it more powerful and useful than its predecessors. Programs may be executed automatically as they are read in. If Flag 11 is set when a program is recorded on a card, that program is marked for automatic execution. Thereafter, each time the program is read in, it will begin to execute as soon as the read is completed.

Data cards will hold 16 registers per side, or 32 per card, The data may be taken from or returned to any portion of data memory, as directed from the X register (display) with the WDTAX and RDTAX functions.

The status of flags and key assignments of the HP-41C can be preserved using the WSTS function. The flags are recorded on the first card side, and key assignments are recorded on subsequent sides as necessary. The display prompts the user for the appropriate number of cards using the format RDY kk of nn, where nn is the total number of card passes (tracks) required to complete the sequence and kk is the lowest unread track number (a track is one side of a card). The prompt is displayed in both read and write sequences. Write sequences can be aborted at any time without memory loss. RSTS can be aborted after the first (flags only) card pass without penalty. If desired, all RAM registers (80 in the mainframe, 64 per module) may be dumped onto cards using the WALL function.

Cards are protected from accidental overwriting by the traditional corner clip. However, protected cards may be overwritten by setting Flag 14 (SF14) before initiating a write sequence. The flag is automatically cleared if the sequence is either completed or aborted.

Cards can be verified for proper data and identification by executing the VER function. Each card will be identified as to type (HP-67, status, program, data, WALL) and track number (1-15), and the checksum verified to insure that a proper write has taken place. VER does not alter any status, data, or programs in the calculator. The check that is made is the same as that made during a read. By using VER, it is possible to insure that a card will read in properly without disturbing the calculator.


Special thanks go to Dennis York and Steve Chou for their help with this article. Dennis was responsible for the software translation routines that give the 82104A compatibility with the HP-67/97 card readers. Steve's responsibility was the software for the remaining routines. These include the functions the user accesses during card reader use. Others involved in the design of the 82104A were Tom Peterson, who worked on the case design, George Custer, who helped keep us organized in the final stages of the design, Bill Buskirk, who assisted in the electrical designs, and Bond Ying, who assisted with the CMOS ICs. Charlie Allen was the industrial designer. Recognition should also be given to the numerous support people who made it possible to get this product into production.


1. R.B. Taggart, "Designing a Tiny Magnetic Card Reader," Hewlett-Packard journal, May 1974.

2. P.D. Dickinson and W.E. Egbert, "A Pair of Program-Compatible Personal Programmable Calculators," Hewlett-Packard journal, November 1976.

David J. Lowe
After completing his BSEE degree at Utah State University in 1975, Dave Lowe joined HP's Corvallis, Oregon Division. His responsibilities with HP have included investigation of the HP-41C wand bar code reader and electronic design for the HP-41C card reader. Dave is married, has a son, and resides in Corvallis. In his spare time, he enjoys woodworking, his home computer, soccer and basketball playing.

Patrick V. Boyd
Pat Boyd was born in Reedsport, Oregon and attended Oregon State University, graduating in 1973 with a BSME degree. After three years doing mechanical design of tractor winches and forklift trucks, he joined HP in 1976 and contributed to the mechanical design of the card reader for the HP-41C Calculator. He's a member of ASME and a registered professional engineer in the State of Oregon.and has a son and a daughter, and if his children take up most of his spare time, that's just fine with Pat, who thinks that "nothing else gives such a large return on investment" as keeping a couple of children "healthy, happy and growing straight."

Go back to the HP Journal library
Go back to the main exhibit hall