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.
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