Kenbak-1

Under this section, we will be building and programming the Kenbak-1 computer.  The Kenbak-1 is the very first PC designed by John Blankenbaker, and was available in 1971.  It has 256 Bytes of RAM.  I believe only about 40 of these were ever produced, and only about a dozen of the original units still exist today.

In some posts, we will use the Kenbakuino.  We will also cover the use of the Kenbak-1 Web Emulator.

Learning how to program these vintage machines will give you a lot of insight into why computers work the way they do today.  Additionally, you will start to learn how Assembly language works.  At first, it may seem a bit cumbersome to do some of the simplest programs, but keep in mind that it was 1971!

Using the Kenbak-1 Programming Worksheet, you will be able to build commands such as LDA, STA, ADD, SUB, JPD, etc.  You will also learn how to perform branching within your project.  Other instructions include shifts and rotates within the Kenbak-1’s A, B, and X registers. Another good resource is the Kenbak-1 Programming Reference Manual.

Additionally, you will learn how to accept user input, and display the output of your project on the eight LED’s.

We’ll also cover the purpose of each button and indicator on the Kenbak-1 computer.

Learning the Kenbak-1 will take a bit of time and patience.  Afterwards, will get a lot of enjoyment out of building and programming the Kenbak-1.  You will be proud to be able to program the world’s very first commercially available PC!


Kenbak-1 Front Panel Interface

Introduction to the Kenbak-1 Front Panel Interface The Kenbak-1 Front Panel Interface allows us to input and view data to and from memory locations in the Kenbak-1 In this section, we’ll cover each of the front panel buttons as well as the indicator lights. In this post, I’ll cover the Read More »

Kenbak-1 Front Panel Interface

Kenbak-1 Relative Jumps

Introduction to Kenbak-1 Relative Jumps Kenbak-1 Relative Jumps will jump to a location relative to the program counter. Really, there is no relative jump instruction. Therefore, if we require a relative jump we will do this with the JPI (Indirect Jump) instruction. The advantage of relative jumps is that we Read More »

Kenbak-1 Relative Jumps

Kenbak-1 Two Byte Addition

Introduction to Kenbak-1 Two Byte Addition With the Kenbak-1 Two Byte Addition, we can add larger numbers. Keep in mind that with 8 bit addition, we can only have numbers up to 377 octal (255 decimal). That’s if we don’t even used signed values. This is very limiting. When we Read More »

Kenbak-1 Two Byte Addition

Programming Loops on the Kenbak-1

Introduction to Programming Loops on the Kenbak-1 When Programming Loops on the Kenbak-1, we will use the JPD instruction. Basically, we set a register to a specific value. For this example, we’ll use the X register. Every time our loop executes, we decrement the X register. When the X register Read More »

Kenbak-1 building loops

Kenbak-1 Division

Introduction to Kenbak-1 Division We’ll need to come up with a creative way to do Kenbak-1 Division. The Kenbak-1 does not have a way to divide directly by using instructions. We’ll simply need to do the division manually. Basically, the method I’ll use for this is to simply keep extracting Read More »

Kenbak-1 Division

Kenbak-1 Multiplication

Introduction to Kenbak-1 Multiplication Kenbak-1 Multiplication involves creating loops. Being designed in 1971, the Kenbak-1 has a limited instruction set. That limited instruction set presents some good challenges. These challenges force us not only to understand the Kenbak-1 itself, but also understand more about mathematics. There is no direct instruction Read More »

Multiplication on the Kenbak-1

Kenbak-1 Bitwise Instructions

Introduction to Kenbak-1 Bitwise Instructions The Kenbak-1 Bitwise instructions include AND, OR, and LNEG. With these instructions, think of the individual bits within an 8 bit word. With “AND”, a particular bit must be high in both the source and compare words to get the value of 1 in the Read More »

Kenbak-1 XOR Operation

Kenbak-1 Switch Number to Binary

Converting a Kenbak-1 Switch Number to Binary In this section, we’ll be converting a Kenbak-1 Switch Number to Binary. This project is a good example of the Right Shift on the Kenbak-1. Basically, when the user presses a number, we’ll display the binary bit pattern for that switch number. Mr. Read More »

Kenbak-1 Convert Switch Number to Octal

Kenbak-1 Indirect Indexed Addressing

Introduction to the Kenbak-1 Indirect Indexed Addressing The Kenbak-1 Indirect Indexed Addressing may seem a bit intimidating at first. However the concept is simple. Let’s say we have two different “sequencers” with different bit patterns. One bit pattern resides at memory cell 107-100. Another set of patterns reside at address Read More »

Indirect Indexed Addressing in the Kenbak-1

Kenbak-1 Indirect Addressing

Introduction to Kenbak-1 Indirect Addressing Kenbak-1 Indirect Addressing allows us to point to a variable memory location which contains the operand. This is useful for instructions such as LDA, and STA, etc. We don’t always want to reference the same memory location. Recall that in our last post, we create Read More »

Kenbak-1 Indirect Addressing