HSG |
|
Der Einfachheit halber werden alle Befehle des BONSAI-Lehrcomputers nur mit einem Byte kodiert. Für vier Befehle (der HLT-Befehl wurde "wegrationalisiert", mehr dazu weiter unten) werden 2 Bit benötigt, so dass für den Adressteil 6 Bit übrigbleiben. Es können also Adressen zwischen 010 = 0000002 und 6310 = 1111112 verwendet werden. 1)
Mehr-Wort-Befehle (ein 'Wort' ist in diesem Rechner ein Byte lang) werden nicht verwendet.
Die Befehle sind einfach durchnummeriert:
INC → 002, DEC → 012, JMP → 102, TST → 112
Operationscode, opcode | «Befehl» = «op» «adr» | Adresse
zum Beispiel: 10 000101 bedeutet : JMP 5 (opcode=2, adr=5)
Ein kleines Beispiel für die Kodierung (Additionsprogramm):
Assembler: Maschinenprogramm: Adresse Datum 0 JMP 3 Befehle 0000 0000 10 000011 1 INC 7 0000 0001 00 000111 2 DEC 8 0000 0010 01 001000 3 TST 8 0000 0011 11 001000 4 JMP 1 0000 0100 10 000001 5 JMP 5 * 0000 0101 10 000101 6 0 Lücke 0000 0110 00000000 7 3 Daten 0000 0111 0000 0011 8 2 0000 1000 0000 0010
Der * weist auf eine Besonderheit hin: Der entfallene HLT-Befehl wird durch einen Sprung "auf sich selbst" ersetzt. Der Rechner wird also durch eine Endlosschleife abgefangen, deren Auftreten an einem stabilen Bitmuster im Befehlsregister (hier: 10 000101) zu erkennen ist. Außerdem sieht man im "leuchtenden" Mikroprogramm, dass immer wieder nach dem fetch-cycle nur noch der JMP-Befehl abgearbeitet wird.
Als weiteres Beispiel für die Binärkodierung sei die Übersetzung des weiter vorne systematisch aus PASCAL entwickelten Multiplikationsprogramms angeführt:
MULTIPLI.BMA MULTIPLI.BIN dezimal binär 0 40020 00000000 11 010100 Befehle 1 30003 00000001 10 000011 2 3 2 * 00000010 10 000010 3 40019 00000011 11 010011 4 30006 00000100 10 000110 5 30010 00000101 10 001010 6 20019 00000110 01 010011 7 10021 00000111 00 010101 8 10022 00001000 00 010110 9 30003 00001001 10 000011 10 40022 00001010 11 010110 11 30013 00001011 10 001101 12 30016 00001100 10 010000 13 20022 00001101 01 010110 14 10019 00001110 00 010011 15 30010 00001111 10 001010 16 20020 00010000 01 010100 17 30000 00010001 10 000000 18 0 00010010 00000000 Lücke 19 13 00010011 00001101 Daten 20 17 00010100 00010001 21 0 00010101 00000000 22 0 00010110 00000000Die Übersetzungen in die verschiedenen Darstellungen liefert z.B. das Python-Skript bon2bma.py.
In Wirklichkeit ist der Speicher der Hardware 2 KByte groß, die Beschränkung auf 6 Adressbits erlaubt aber keine andere Adressierung. Es ist jedoch möglich durch Setzen der Jumper auf der Speicherplatine bis zu 8 verschiedene Programme im Speicher zu halten. Diese Programme bleiben bei einem eingebauten Zero-Power-Ram auch nach dem Abschalten der Versorgungsspannung erhalten.