Kenbak-1

Der Kenbak-1 wird als der erste Personal Computer betrachtet. John Blankenbaker begann mit dem Entwurf 1970, verkaufte ab 1971 ca. 40 Geräte für 750 USD. Später veräußerte er alle Rechte und verbleibenden Dokumente an CTI Educational Products. CTI war im Bildungswesen tätig und baute nach der Übernahme nach aktueller Quellenlage keine weiteren Kenbak-1 Computer. Für die Ausbildung ist der Rechner wie geschaffen, doch schaffte es CTI nicht, den Rechner auf dem Markt zu positionieren, sodass das Unternehmen pleite ging. Von den ca. 40 Stück gebauten Geräten existieren heute noch schätzungsweise 10, der Wert ist kaum zu beziffern. Da der Kenbak-1 – der Name leitet sich von BlanKENBAKer ab – vor dem ersten Mikroprozessor (1971) erfunden wurde, besitzt die Maschine keine CPU, sondern realisiert die ganze Logik mithilfe mehrerer integrierter TTL-Chips. Die 8-Bit Maschine besitzt einen Speicherplatz von 256 Byte. Die Ausführungszeit beträgt einige Hundert Operationen pro Sekunde. Wer die Maschine programmieren möchte, muss eine Reihe von Knöpfen und Schaltern aktivieren und in reinem Maschinencode kodieren. Die Ausgabe erfolgt über kleine Lämpchen.

Programmieranleitung

Der Kenbak-1 verfügt über 256 Byte Speicher, wobei es neun besondere Speicherzellen gibt (Angabe hexadezimal, dezimal und binär):

$00 000 %00000000 Register A
$01 001 %00000001 Register B
$02 002 %00000010 Register X
$03 003 %00000011 Register P (Programmzähler)
$80 128 %10000000 Lämpchenausgabe
$81 129 %10000001 Überlauf und Carry-Flag für Register A
$82 130 %10000010 Überlauf und Carry-Flag für Register B
$83 131 %10000011 Überlauf und Carry-Flag für Register X
$FF 255 %11111111 Register mit Schalterstellung (Eingabe)

Für die drei Register A, B und X bietet der Kenbak-1 Maschinenbefehle, etwa Übertragung aus dem Speicher in ein Register oder Addieren von Registern. Zum besseren Lernen der Maschinenbefehle gibt es Assembler, eine textuelle Repräsentation. Die Befehle sehen so aus: LOAD, STORE, ADD, … Ihnen folgt in der Regel eine Angabe auf welches Register sich eine Operation bezieht, und zusätzlich eine dritte Angabe für den so genannten Adressierungsmodus. Gültige Befehle sind zum Beispiel LOAD A, B (lade in A den Inhalt von B), STORE B, A (speichere in B den Inhalt von A, also wie LOAD A, B), SUB A, A (lösche Inhalt von A).

Wir wollen ein einfaches Programm entwickeln, welches die acht Leuchtdioden wie folgt belegt: An, Aus, An, Aus, An, Aus, An, Aus.

Schritt 1: Wir schreiben das Programm in Assembler, Binärzahlen beginnen mit %.

LOAD  A, %10101010    ; %10101010 ist unser Muster für die Leuchtdioden
STORE A, %10000000    ; %10000000 ist die Speicherzelle 128, die die Lampen steuern

Schritt 2: Wir übersetzen das Programm in Maschinencode. Dazu ist die Übersetzungstabelle aus dem Programming Reference Manual nötig, was jedem Kenbak-1 beilag:

LOAD  A, %10101010 → %00010011 %10101010
STORE A, %10000000 → %00011011 %10000000

Schauen wir uns an, wie das Programm im Speicher abgelegt wird. Platz für eigene Programme ist ab Position 4, da die vorherigen Plätze belegt sind mit den internen Registern. Auf Postion 3 steht der Programmbeginn.

0 Reserviert
1 Reserviert
2 Reserviert
3 %00000100 (Programmbeginn auf Platz 4, Register P)
4 %00010011 (LOAD A)
5 %10101010
6 %00011100 (STORE A)
7 %10000000

Schritt 3: Wir haben das Programm und die Postion im Speicher ermittelt, jetzt müssen wir es in die Maschine eingeben. Das ganze lässt sich gut im Emulator ausprobieren: http://www.neocomputer.org/kenbak/kenbak1-JS.html.

1. Vorbereitung
1.1 POWER ON (einschalten)
1.2 RUN START
1.3 RUN STOP
2. Adresse setzen, wo das Programm beginnt
2.1 INPUT CLEAR
2.2. %00001001 eingeben (Speicherzelle 3)
2.3. ADDRESS SET
2.4. %00000100 (4 ist der Programmbeginn)
2.5. MEMORY STORE
3. Programm eingeben
2.4. %00010011 eingeben
2.5. MEMORY STORE
2.5. %10101010 eingeben
2.5. MEMORY STORE
2.6. %00011100
2.7. MEMORY STORE
2.8. %10000000
2.9. MEMORY STORE
3. Programm starten
3.1. %00000011 eingeben (Speicherzelle 3)
3.2. RUN START