Kenbak-1

Kurzbeschreibung

Der Kenbak-1 ist der erste Personal Computer. John Blankenbaker beginnt mit dem Entwurf 1970 und verkauft ab 1971 ca. 40 Geräte für 750 USD. Später veräußert er alle Rechte und verbleibenden Dokumente an CTI Educational Products. CTI ist im Bildungswesen tätig und baut nach der Übernahme – nach aktueller Quellenlage – keine weiteren Kenbak-1. Für die Ausbildung ist der Rechner wie geschaffen, doch schafft es CTI nicht, den Rechner auf dem Markt zu positionieren; CTI geht insolvent.

Der Kenbak-1 – abgeleitet von BlanKENBAKer – erscheint vor dem ersten Mikroprozessor (1971). Daher besitzt er keine CPU, sondern realisiert die ganze Logik mit TTL-Chips. Der 8-Bit-Computer besitzt einen Speicherplatz von 256 Byte, die Ausführungszeit beträgt einige Hundert Operationen pro Sekunde. Durch Aktivierung von Schaltern erfolgt die Programmierung in reinem Maschinencode. Kleine leuchtende Lämpchen zeigen die Ausgabe.

Schätzungsweise 10 Geräte existieren heute, eines hat das Deutschen Museum Bonn für 34.000 € ersteigert und ausgestellt.

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