Kenbak-1

The Kenbak-1 is considered by many to be the world's first "Personal Computer." The Computer History Museum granted it this designation when they were still located in Boston in 1986. More specifically, the machine represents the first commercially available Von Neumann (stored program) computing device intended and priced for personal use.

John V. Blankenbaker designed the Kenbak-1 and marketed in the pages of Scientific American in 1971. The machine's name was taken from the middle of John's last name.

The Kenbak-1 as advertised in the pages of Scientific American

The Kenbak-1 was designed in 1970 and pre-dated microprocessors. The Intel 4004 (the worlds first microprocessor) was introduced in 1971. Instead of being microprocessor based the Kenbak-1 was built almost entirely from TTL components.

Unlike many earlier machines and calculating engines, the Kenbak-1 was a true stored-program computer that offered 256 bytes of memory, a wide variety of operations and a speed equivalent to nearly 1MHz.

Approximately 40 of these machines were built and sold before they were discontinued. The world just wasn't quite ready for personal computing and the Kenbak-1 lacked some critical capabilities (such as expandability and I/O) that were needed to foster the revolution. 14 are currently known to exist with few more likely to be discovered.

The slot on the front panel was presumably intended to account for these deficiencies later in the machines life by providing a card reader of some sorts but with the limited interest, that was never to be.

C.T.I. Educational products purchased the Kenbak-1 from John Blankenbaker and renamed the device to the CTI 5050.

More information about the history and use of the Kenbak-1 can be found at John Blankenbaker's Kenbak-1 Official Site.

Use of the Kenbak-1 (from the autobiography of Robert Neilson Sr.)

With the use of the manual, it was pretty easy to actually program the routine, enter it, read it back for accuracy, lock it in memory and upon pressing Start, run it. I thought the speed was excellent, considering the fact that it was a "programmable computer." The memory was sufficient to count up to 377 octal, or 256 binary and the sequence would start over. To state it lightly, I was amazed! When the Kenbak-1, was running, the console looked exactly like that of a Main Frame computer in action.

As I recall, I entered a number in memory, matched it and "branched/jumped" from the main routine into a subroutine to automatically stop the computer. Using the Console, I could verify the match visually. I also discovered that I could modify or troubleshoot the program with ease because of its design. The Console permitted me to enter an Address in memory and display its contents visually on the Console lights. That included all the registers including the Program Control Register.

The computer allowed the programmer to predict the next instruction to be executed and it had a "Single Cycle" feature that sometimes was essential in troubleshooting programs.

[…]The little computer's power was explored in depth and I became satisfied that it had "programmable power."

From John Blankenbaker

The name Kenbak was chosen for two reasons:

1. It reflects partially my name.

2. It is quite similar in form to the name Kodak which recalls the efforts of George Eastman to bring photography to the masses. I had a similar aim in mind.

I started my first computer design when I was a freshman in college at Oregon State College in February of 1949. For guidance I had a page from Popular Mechanics or a similar magazine. What I learned from it was that it used a number system with only two digits. After much effort I mastered the binary system and worked on the design of an arithmetic unit. When I started thinking about the memory I realized that the project was totally outside of my financial resources. Plus the design was not very good.

In the summer of 1951 I worked at the National Bureau of Standards as it was known then on the SEAC project (Standards Eastern Automatic Computer). This helped to convince me that computers would be a fun thing.

After graduation in 1952, I worked for Hughes Aircraft Company where my major job was the design of an arithmetic unit for a business data processor. In 1955, I did come up with a design for a computer with only one flipflop (see "Logically Microprogrammed Computers"). The limiting factor in building this was the lack of memories. Up to this time, I had never used a computer and I felt this omission badly which partially explains the motivation behind the Kenbak-1.

The Kenbak-1 computer was an attempt to implement a low cost computer that would be instructive to the user. Again the limiting factor was probably memories. It was not the lack of microprocessors which were not necessary.

The largest program I ever wrote for the Kenbak-1 which took the very last byte of memory was a program to play 3D tic-tac-toe (4 x.4 x 4). Actually, I was a bit short of memory as there was not room for the program to recognize when someone had won. The program would just keep playing indefinitely. How good was the program? It won about 50% of the time against me and I'm not very good.

At the first trade show where I exhibited the machine (a high school mathematics convention) I was floored by the lack of knowledge of the attendees over the calendar rules. I had a program which would determine whether any date in the last century was valid and if it was valid what day of the week it fell on (8 lights fits this perfectly). I had to take time to explain that leap year came, normally, every four years and this was to high school mathematics teachers!

One of the smallest and most successful programs would predict what a person would choose from a heads-tails if they were choosing heads or tails to try and fool the computer. (It was a play on the fact that the person's choices were not random.)

A Kenbak-1 Coding Sheet
Click on the image for a larger version

This sheet (the Kenbak Coding Sheet) tells just about all there is to know about the Kenbak-1.

There were three programming registers, A (location 000), B (001), and X (002) which were assigned locations in the memory. The X register was for memory indexing but could be used in any way you liked. The program counter was P and it was memory location 003. The lights displayed the contents of location 200. Input was made to 377. Operations that could be performed on A, B, and X were Addition, Subtraction, Load, Store, Logical Or, Logical And, Load Negative. The addressing modes were Immediate, Memory, Indirect, Indexed, and Indirect/Indexed. One could do things like subtract the contents of A from A which yielded Clear A.

Jumps could be based on the contents of A, B, and X with the criterion of Not Equal to Zero, Equal to Zero, Less than Zero, Greater than or Equal to Zero, or Greater than Zero. In addition there was an Unconditional Jump. There were two addressing modes, Direct and Indirect. Also, one could Mark the address from where the jump was made so you could return (to do subroutines).

All of these instructions were two bytes in length with the op code in the first and the address or data in the second.

There were a set of bit manipulations for setting a bit in a byte or testing a bit in a byte. I believe that the second byte was the address. In the case of the Skip, if the condition were met, the next two bytes in the instruction sequence would be skipped.

The A and B register could be rotated or shifted up to four places. To specify the B register, the second byte was augmented by four. During Addition, Subtraction and possibly the Shifts and Rotates, the overflow and carry out of the byte were stored as BO and B1 in three memory locations, 201, 202, and 203. [This is where I am the weakest in my memory.]

There was a NOOP and a HALT instruction (one byte each). Also there was a two byte NOOP.

Please bear in mind that it has been many years since I did any programming for this machine so some of what I told you may be in error.

My Kenbak-1

This particular Kenbak-1 is in remarkably good shape for its age. There is almost no noticeable damage to the case or front panel. Many of the switches had become unglued from the inner part of the front panel and needed to be reattached to allow full operation. According to the previous owner the machine worked before I got it.

At the moment the machine almost works but there is a disconnect between what is stored in memory and what is retrieved. This could be a failure on either operation or it could be a failure of the memory itself. There is a pattern to the failure which should be a clue.

The real issue, though, is whether or not I want to alter a pristine example of the Kenbak-1 in order to make it fully functional. At the moment, at least, I'm leaning towards leaving the machine as-is.

The inside of the Kenbak-1

As can be seen above the Kenbak-1 doesn't have a CPU. The two can shaped circuits in the upper left near the fan are the shift register memory.

The Kenbak-1 powered on with the lights glowing

The first time I powered up the Kenbak-1 was at The Vintage Computer Festival 7.0. I have since had a little time to play with the machine, as can be seen in the pictures above and below. I've since re-attached the switches and cleaned the machine up a bit.

The Kenbak-1 was my display at The Vintage Computer Festival 8.0 and it came in second place in its class. Don't let the fact that there were only two of us in the class fool you - it was up against some stiff competition!

The Kenbak-1 powered on with the lights glowing

The machine does look good when it's running, though!

Kenbak-1 Documentation

I also have copies of a complete set of Kenbak-1 documentation in my collection including instructions, a coding course and schematics.

The following images are close up shots of the logic board for the machine, both front and back. The component side images are broken up into six zones while the underside of the board was photographed as one shot.

Significantly larger versions of the following images can be seen by clicking on the smaller ones

An overview of the front of the Kenbak-1 logic board

An overview of the front of the Kenbak-1 logic board

An overview of the upper left of the Kenbak-1 logic board

An overview of the upper left of the Kenbak-1 logic board

An overview of the upper center of the Kenbak-1 logic board

An overview of the upper center of the Kenbak-1 logic board

An overview of the upper right of the Kenbak-1 logic board

An overview of the upper right of the Kenbak-1 logic board

An overview of the lower left of the Kenbak-1 logic board

An overview of the lower center of the Kenbak-1 logic board

An overview of the lower center of the Kenbak-1 logic board

An overview of the lower right of the Kenbak-1 logic board

An overview of the lower right of the Kenbak-1 logic board

An overview of the back of the Kenbak-1 logic board

An overview of the back of the Kenbak-1 logic board