Commodore AL-1000 Programmable Calculator
The Commodore AL-1000 is a truly amazing and interesting machine, and is a machine that I'm quite excited to have the opportunity to exhibit in the museum. While definitely not the first programmable electronic calculator as Casio claims, it is certainly among the earliest of the stored program programmabler calculators. Mathatronics, Inc. and their Mathatron calculators (circa late 1964) lay legitimate claim to the title of the world's first stored-program programmable electronic desktop calculator, almost three full years before the AL-1000 was introduced in Japan in October of 1967.
If you are confused by the references to Casio, you should be. The credit for the design of the AL-1000 doesn't belong to Commodore. Commodore simply resold the Casio AL-1000 in North America under the Commodore label through an OEM agreement with Casio. The design and construction of the AL-1000 was performed entirely by Casio in Japan. Commodore simply imported the machines, placed Commodore identification badging on the machine, and marketed, sold and provided service for the machine as if it were their own.
Casio AL-1000S w/Adler I/O typewriter
Casio produced an enhanced version of the AL-1000, designated the AL-1000S, that added an interface to a modified external electric typewriter, allowing full operation of the calculator from the typewriter, as well as providing printed output for all calculations performed by the machine. It is not clear if Commodore also marketed the AL-1000S as part of their offering. The Casio AL-1000S model, complete with the I/O interface and external I/O typerwriter cost around $1,300 more than the base AL-1000's base price of $1,495. Casio offered a number of different modified typewriters for use with the AL-1000S, and also offered a service to custom-modify any customer-provided electric typewriter for use with the calculator.
A profile view of the Commodore AL-1000
Date codes on the transistors in the exhibited machine indicate that it was built in the mid-1968 timeframe. This places the machine close to the end of the era of all-transistor discrete component calculators. Just a matter of months later, early Small-Scale IC-based calculators started showing up in the marketplace, marking the beginning of the end of the all-discrete component electronic calculator. Considering the Mathatronics Mathatron was more capable and developed much earlier than the AL-1000, and also accounting for the fact that HP's revolutionary 9100A scientific calculator was introduced around the same time as this particular machine was produced, indicates that the Japanese clearly had some serious catch-up to play in terms of offering advanced programmability features in their calculators.
AL-1000 Keyboard Detail
The AL-1000 is a 14-digit machine, performing the basic four math functions along with one-key automatic square root. The machine has four memory registers, each of which can be set up as accumulators, store/recall registers, or read-only constant registers. The memory registers are designated [I] through [IV], and are controlled by keyboard keys with the same nomenclature. The two working registers of the calculator, along with the memory registers, and 30 steps of stored program reside in a small magnetic core memory array, meaning that the content of the memories and program steps are maintained when power is removed from the machine. The two working registers are automatically cleared at power-up. Memory registers I and II are full fourteen-digit plus sign storage elements while memory registers III and IV are limited to seven digits with no sign. The memory registers are activated by simply pressing the key corresponding to the memory register to be operated upon. There is a bank of four three-position slide switches that control the operation of each of the four memory registers. Each slide switch has an accumulation mode [+], Read-Only [K], and Memory [M] position. When the switch is in the [+] position, the corresponding memory register acts as an accumulator, adding the number in the display to the memory register when the memory key is pressed. When in the [K] position, the corresponding memory register is made 'read-only', causing the content of the memory register to be recalled to the display when the memory key is pressed, useful for storing frequently used constants. For example, the value of the constant e can be stored in memory register I, and with the memory mode switch subsequently moved to the [K] position, the memory register would be locked from changes, effectively preserving the constant until the memory mode is changed and the constant over-written. Lastly, the "Memory" [M] position of the memory mode switch causes the memory register to become a store/recall register, storing the content of the display in the memory register when the memory key is pressed, and recalling the memory register to the display when pressed after a function key. It should be noted that memory register II is used by the division function, with the result of division operations corrupting the content of memory register II. This means that memory register II should not be used within programs which perform any division operations, as any content will be mangled when the division operation is performed. Attempting to store a number larger than seven digits in memory registers III and IV result in the number being truncated to seven digits.
The AL-1000 uses NEC-made Nixie tube displays, with each tube containing the digits zero through nine along with a right-hand decimal point. The calculator provides full floating decimal point location, which is a rarity for electronic calculators of this time period. A thumbwheel switch on the keyboard panel provides a setting for specifying the number of digits behind the decimal point that are to be retained for round-off/truncate operations. This thumbwheel switch has settings for 0 to 8, and a "down arrow". Setting this thumbwheel to zero through eight selects how many digits behind the decimal point results will be rounded or truncated to. A slide switch next to the thumbwheel selects whether truncation or round-off/up occurs at the selected digit position. To activate the rounding operation, the gray [*] key is used rather than the white [*] key to complete a multiplication or division operation, or anytime before clearing or entering digits into the machine.
The insides of the Commodore AL-1000
Operation of the machine is conventional, though the nomenclature on the add/subtract keys is not entirely obvious. Addition and subtraction are performed in arithmetic fashion, with a white [*] key performing addition, and a gray-colored key with the same [*] nomenclature performing subtraction. Multiplication and division operate as expected, with the white [*] key generating the result. The square-root key calculates the square root of the number currently on the display, accurate to 13 digits. There are two keys for clearing the calculator; one labeled [AC] which performs a master clear of the machine (except for the memory registers and program step storage), and the [KC] key, which clears the display only, allowing for correction of incorrectly-entered numbers. The [-] key provides a change sign function, but not quite in the usual sense. On most machines, this function serves as a toggle, where each successive press toggles the state of the sign, e.g., one press, number made negative, a successive press will switch it back to positive, etc. On the AL-1000, pressing the key causes the number to be made negative, and the only way to undo the operation is to clear the entry register (with the [KC] key), and start over.
Board 1 and 2 (Display, Keyboard Encoding) [Click on image for larger view]
Internally, the AL-1000 is quite complex. The circuitry occupies a total of ten rather large 12 1/2" X 7" phenolic circuit boards. The circuit boards have traces on both sides, with feed-throughs to interconnect traces on both sides of the board formed by a short length of wire put through the feedthrough hole, and soldered in place. Some boards have wire jumpers on them, in cases where the trace density was too high to be able to have circuit board traces to make the connections. Each board is packed full of discrete components, with diode-resistor gating, and transistors for flip flops and other active logic elements. A total of 430 transistors and 1300 diodes make up the compliment of active devices in the logic chassis of the calculator. The AL-1000 uses a standard set of transistors, with most of the transistors in the machine's logic utilizing 2SC371 and 2SC641 devices.
AL-1000 Backplane (Note Gold-Plated Edge Connector Sockets)
The circuit boards plug into edge connectors that are wired together by hand to form a backplane to allow signals to pass from board to board. The calculator features a somewhat modular design, with each circuit board in general performing a given function. The designers were thoughtful enough to include silk-screened nomenclature on most of the boards identifying their function. Unfortunately, the keyboard is "hard-wired" into the backplane, meaning that replacement of the keyboard assembly requires de-soldering of myriad connections from the backplane, and resoldering new connections from a replacement keyboard. Many contemporaries of the AL-1000 provided an edge-connector connection for the keyboard assembly, making keyboard replacement a simple operation. The power supply section is also hard-wired, making it a bit of a task to replace the power supply. Given these limitations, service technicians likely had to have a pretty strong knowledge of the way the machines worked in order to perform service.
Board 3 and 4 (Main 1, Main 2) [Click on image for larger view]
The boards are numbered, front to back, from 1 through 10. Designations on the boards indicate the internal Casio model designation (in this case, 14B), followed by a dash, followed by the circuit board number, followed by a space, and then the boards revision code (beginning with A and progressing through the alphabet) inside a circle.
Top: Early AL-1000 Keyboard Structure Made from Cast Aluminum
Bottom: Later AL-1000 Keyboard Structure made from Cast Plastic
The museum has three AL-1000's, and it is clear that even though the units are relatively close to one another by serial number (50923, 51294 and 51601), there were definitely some changes made along the way. Some circuit boards in the unit with the higher serial numbers have one revision level higher circuit boards. Also, the higher serial-numbered machine has a plastic casting as the framework for the keyboard assembly, while the lower serial-numbered units use a cast aluminum framework. There are also some differences in the power supplies between the units, with mounting of the main logic supply regulation pass-transistor and electrolytic filter capacitor being somewhat different, with the later serial-numbered unit having a less complex mounting arrangement. It's clear at least the keyboard hardware and power supply mounting changes were made to reduce cost and make assembly more efficient. The circuit board revisions may have been made to improve reliability, improve assembly efficiency, or eliminate "bugs" in the design.
The The front-most board (#1) is the display board, containing the display decoding logic, Nixie tube driver circuits, and the Nixie tubes themselves. The next board doesn't have any nomenclature on it indicating its function, but it is definitely related to keyboard conditioning and encoding. The next three boards are called "MAIN" (MAIN 1, MAIN 2, and MAIN 3) boards, which contain most of the control logic of the machine... things like data routing, operation decoding and sequencing, and state-machines for sequencing various operations of the calculator.
Board 5 and 6 (Main 3, "Sub")
Board six has nomenclature on it reading "SUB", which doesn't give much of a clue as to its function. By observation, it appears to contain the master clock generation circuitry, along with counters and logic related to generating the major timing states that guide the overall operation of the calculator.
The next board (#7) is the "ADDER" board, which contains the logic to add two one-digit BCD (Binary-Coded Decimal) numbers together. The arrangement of this board, and some of the nomenclature on it makes it clear that the machine uses a BCD digit-serial architecture, where each pair of decimal digits is operated upon by the adder one at a time. For example, to add 123 and 456, the '3 and 6' would be fed to the adder, followed by the '2 and 5', then the '1 and 4'. Carries are noted and dealt with as the next set of digits are fed into the adder. The adder performs pure binary addition, with BCD corrections made after the addition occurs. For example, adding 7 (0111 in BCD) and 6 (0110 in BCD) results in 1101 in pure binary addition. However, in BCD, the result should be 0011 (3), with a carry to the next higher order digit creating a final result of 0001 0011 (1 3). This correction is accomplished by adding six to the result of the binary addition operation if the binary addition creates an answer that is a binary number greater than 9 (1001).
Board 7 and 8 (Adder, Addressing Logic)
The remaining three boards are all involved in the management of the core memory array. The first board for controlling the core array is the "ADDRESS" board, which contains a memory address register and the decoding circuitry to address the core array. The next board is the "DRIVE" board. This board contains circuitry to drive the core array.
Board 9 and 10 (Core Drive, Core Array)
The last, and rear-most board in the machine is the core memory board. The core array is located in the middle of the board, and is covered by a plexiglass shield to protect the delicate cores and wiring from damage. The remainder of the circuitry on the core array board provides the sense-amplifiers and some power-supply circuitry for the core array. The core memory contains a total of 448 bits, logically arranged as eight 14-digit registers, or a total of 112 binary-coded decimal(BCD) digits. The working registers of the machine, program steps, and the memory register content are all stored in the core memory. At power-up, the working registers are cleared, but the program and memory register content is retained. Data is stored in core in the form of 4-bit BCD digits. The core is physically arranged as four separate 14 X 8 arrays, with each array storing one of the bits of a BCD number (IE: one array holds the 20 bits, another holds the 21 bits, etc.). 16 digits are used for each of the two working registers as well as for memory registers I and II. In each of these registers, 14 digits are used to represent the number in the register, one digit is used to represent the sign of the number in the register, and one more digit represents the position of the decimal point in the number. 30 digits are used for storing program steps, with two digits used to keep track of the current program step number. Lastly, seven digits are used for memory registers III and IV, with one additional digit for each of these two registers defining the decimal point location within the number. All told, the two working registers consume 32 digits, memory registers I and II consume 32 more digits (64 digits used so far), memory registers III and IV each consuming 8 digits (brining the total to 80 digits), and the program step storage and program counter consuming 32 more digits, for a grand total of 112 digits -- the full capacity of the core memory array.
Close-up view of Core Memory Array
The AL-1000 is programmable, albeit in a very simple, limited, and somewhat unusual fashion. The programming function operates in a semi-'learn-mode', where keypress sequences of up to 30 steps can be keyed into memory and later replayed automatically. Most 'learn-mode' calculators store kepresses as codes in memory, as each key is pressed. On the AL-1000, the user types in special numeric codes for the functions that are to be stored as program steps. The codes are made up of the digits 1 through 9, with five other codes formed by entering the digits 2, 3, 4, 6, and 7 followed by a decimal point. The codes used are shown in the following table:
0 No Operation 1 Change Sign [-] 2 Add [*] (white) 3 Subtract [*] (gray} 4 Memory I [I] 5 Memory II [II] 6 Memory III [III] 7 Memory IV [IV] 8 Multiply [X] 9 Divide [÷] 2. All Clear [AC] 3. Clear Entry [KC] 4. Square Root 5. Undefined (Causes Program to Hang) 6. Stop (data entry) 7. End Program
AL-1000 Program Code "Quick Reference" Card
A three position slide switch controls the the operating mode of the calculator. The top-most position of the mode switch is "write" [W] mode, where program codes are recorded into the program memory. Pressing the [AC] key while the calculator is in write mode clears the program step memory, and sets the program counter to the beginning of the program step memory. Entering program codes causes each code to be entered sequentially into the program step storage, with the program counter advancing by one. Since programs can be up to 30 steps long, only the last 14 step codes are shown on the display for programs longer than 14 steps.
The middle-position of the mode switch is "normal" [N] mode of the calculator, where programming functions are inhibited, and the machine operates purely as a calculator. The lower position of the mode switch put the calculator into "run" [R] mode, where the stored program can be executed by pressing the lighter colored "*" key to begin the program. Programs are purely linear sequences of keypresses, with no branching or conditional functions available. Any constants to be used in the program must be pre-loaded into memory registers before a program is run, as there is no way to include constants within a program. The program steps are stored in core memory, meaning that the program is non-volatile, and remains intact even when the power to the calculator is removed. It should be noted the the "5." function is listed in the code list as undefined. This code can be entered into a program, but when it is encountered in a program, it causes the AL-1000 to go into an undefined state resulting in spinning digits on the display, and no response to any function except the [AC] key, which resets the machine. Program code "0" is also undefined, but when entered, appears to be a "No Operation" function. The "6." function halts the execution of the program allowing for user data input, with the white [*] key resuming execution. The "7." function marks the end of a program, causing the program to halt, and returing the "program counter" back to the first step in the program. A neon indicator under a clear jewel on the keyboard panel labeled "RETURN" lights up orange to indicate when the program counter is set to the first instruction in a program. As such, when a program is started, the indicator is extinguished until the "7." code at the end of the program is encountered, and the program counter is reset to the first instruction in the program. Essentially, this indicator, when off, means that the calculator is "busy" performing programmed operations.
Keyboard Construction Detail
The keyboard design of the AL-1000 is rather unusual. Most every calculator of the time used magnetic reed-switches for simplicity, reliability, and minimal contact bounce. The AL-1000 uses simple spring contacts for the keyboard, which is quite surprising for a machine which seems otherwise to be a robust design. The keycaps press directly on one contact of the switch, making a connection to another contact, closing the circuit for the key. This type of design would seem to be prone to problems as the contacts age and suffer from free-air pollutants and moisture, however, the keyboard has a very nice feel to it, and even though the machine is over 30 years old, the keyboard operates fine, with no bounce at all, indicating that the designers devoted a lot of effort to conditioning the signals from the keyboard to minimize the possibility of wear and corrosion from causing instability. Along with electronic protection, a plastic shield is secured over the keyswitch array, helping protect the switch contacts from environmental contamination.
The Power Supply Circuits of the AL-1000
The AL-1000's power supply is a conventional linear design, with some unregulated, along with transistor- regulated voltages. The power supply, which is located under the keyboard, is somewhat complex, supplying six different voltages for the various different sections of the circuitry. The main logic supplies appear to be +20V, +12V, and -6V. Other voltages used are +200V for Nixie tube drive, and +80V, and +50V, likely used in the core memory drive circuitry.
The AL-1000 is not without its share of quirks. As is common with machines utilizing "hard-coded" (non-microcoded) state machine logic, there are sometimes states that the machine can get into which lead to "confusion", for lack of a better word. Some of the design compromises are documented in the user's manual, and some are not. While the user manual indicates that the AL-1000 does provide some form of overflow detection (lighting the '-' indicator and diplaying all zeroes), The only way that I see this function operate is with addition or subtraction. For example, adding 99999999999999 and 1 does indeed result in the - indicator lighting, and the display showing all zeroes. As far as I can tell, the AL-1000 has no notion of overlow on input. When more than fourteen digits are entered, extra digits are shifted off the left end of the display and discarded. If an input number has a decimal point, and input overflow pushes the decimal point off the left end of the display, the decimal point wraps around to the right end of the display after disappearing for two digit keypresses. This likely due to the decimal point position counter being a full four-bit counter, with counter positions 14 and 15 resulting in no decimal point being displayed.
Commodore AL-1000 Dust Cover
While the machine provides an unusual-for-the-time "change sign" [-] key, the calculator doesn't always return the correct sign when operating on negative numbers -- multiplying two negative numbers together generates a negative result. Taking the square root of a negative number, which is technically impossible (though dealt with in the world of mathematicians by imaginary numbers), will simply calculate the result as if the radicand were positive. Division by zero results in the calculator looping indefinitely looking for an answer that doesn't exist, requiring the [AC] key be pressed to stop the madness. Another oddity is with the way that decimal point positioning is handled. Certain types of operations will yield incorrect results due to the way the decimal point logic works, even though the result should be within the capacity of the machine. Multiplication, division, and square root operations can produce results with incorrectly positioned decimal point, depending on the location of the decimal point in the operand(s). Multiplication operations with operands which would result in answers in excess of the fourteen digit capacity of the machine can result in the calculator looping forever without delivering an answer, requiring a press of the [AC] key to stop the loop. Sometimes such multiplications eventually terminate with a nonsense answer in the display after madly spinning for periods of time ranging from 1/4 second to almost 10 seconds. In order to enter a fractional number, the  key must be pressed before the decimal point. For example, to enter .6667, one must key  [.]    . Forgetting to enter the leading zero results in the decimal point depression being ignored, which can lead to un-noticed input errors.
The inconsistency of overflow detection, combined with compromises in the way the decimal point logic operates are pretty serious problems, as overflow and input errors can easily go un-noticed, especially when running within the context of a stored program. Such errors could lead to major problems in some types of engineering calculations should an incorrect result creep into a critical calculation. Use of the AL-1000 for such calculations requires very careful programming, and an operator who is aware of the limitations of the machine.
Calculation times of the AL-1000 are quoted in the operator's guide as 8ms (.008 second) for addition and subtraction, and between 20 and 200 milliseconds for multiplication, division, and square root, depending on the complexity of the operation. The square root function is performed by the "sum of odd" numbers method. During calculations, the displays are left active, with the Nixie digits flickering delightfully while the machine is busy.
For a lot more technical detail about the architecture of the AL-1000, please see Brent Hilpert's brilliant article entitled "Casio AL-1000 Calculator Technical Description: Architecture" derived from Mr. Hilpert's extensive reverse-engineering of the machine. To further illustrate Mr. Hilpert's technical genius, you can actually operate an amazing simulation of the AL-1000 (requires use of the Adobe Flash browser plugin).