Kenbak-1

The Kenbak-1 is considered by the Computer History Museum, the Computer Museum of America and the American Computer Museum to be the world's first "personal computer", invented by John Blankenbaker (born 1929) of Kenbak Corporation in 1970 and first sold in early 1971. Less than 50 machines were ever built, using Bud Industries enclosures as a housing. The system first sold for US$750. Today, only 14 machines are known to exist worldwide, in the hands of various collectors and museums. Production of the Kenbak-1 stopped in 1973, as Kenbak failed and was taken over by CTI Education Products, Inc. CTI rebranded the inventory and renamed it the 5050, though sales remained elusive.

Since the Kenbak-1 was invented before the first microprocessor, the machine did not have a one-chip CPU but was instead based purely on small-scale integration TTL chips. The 8-bit machine offered 256 bytes of memory, implemented on Intel's type 1404A silicon gate MOS shift registers. The clock signal period was 1 microsecond (equivalent to a clock speed of 1 MHz), but the program speed averaged below 1,000 instructions per second due the many clock cycles needed for each operation and slow access to serial memory.

The machine was programmed in pure machine code using an array of buttons and switches. Output consisted of a row of lights.

Internally, the Kenbak-1 has a serial computer architecture, processing one bit at a time.

Registers
The Kenbak-1 has a total of nine registers. All are memory mapped. It has three general-purpose registers: A, B and X. Register A is the implicit destination of some operations. Register X, also known as the index register, turns the direct and indirect modes into indexed direct and indexed indirect modes. It also has a program counter, called Register P, three "overflow and carry" registers for A, B and X, respectively, as well as an Input Register and an Output Register.

Addressing modes
Add, Subtract, Load, Store, Load Compliment, And, and Or instructions operate between a register and another operand using five addressing modes:


 * Immediate (operand is in second byte of instruction)
 * Memory (second byte of instruction is the address of the operand)
 * Indirect (second byte of instruction is the address of the address of the operand)
 * Indexed (second byte of instruction is added to X to form the address of the operand)
 * Indirect Indexed (second byte of instruction points to a location which is added to X to form the address of the operand)

Instruction table
The instructions are encoded in 8 bits, with a possible second byte providing an immediate value or address. Some instructions have multiple possible encodings.