Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| homecomputer:gmc-4 [2014/12/16 15:29] – angelegt volkerp | homecomputer:gmc-4 [2018/11/26 13:05] (aktuell) – [Downloads] volkerp | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== GMC-4 ====== | ====== GMC-4 ====== | ||
| + | |||
| + | Der **Gakken GMC-4** ist ein kompletter vom PC unabhängig zu nutzender kleiner Lerncomputer | ||
| + | Er basiert auf dem Science Fair Microcomputer Trainer von Radio Shack aus den 80ern. | ||
| + | |||
| + | Dezember 2014 gab es das Franzis Lernpaket " | ||
| + | |||
| + | {{: | ||
| ===== Systembeschreibung ===== | ===== Systembeschreibung ===== | ||
| - | Bild, kurze Beschreibung | + | Bild, kurze Beschreibung, https:// |
| + | |||
| + | {{: | ||
| + | |||
| + | Der GMC-4 ist ein 4-Bit-Microcomputer. | ||
| + | |||
| + | Der GMC-4 verfügt über einen einfachen Befehlssatz, | ||
| + | |||
| + | Es gibt vier 4-Bit-Register A, B, Y und Z und einen zusätzlichen zweiten Registersatz A‘, B‘, Y‘ und Z‘. Jedes dieser Register kann eine Zahl zwischen 0 und 15 enthalten. Die meisten Befehle verwenden das Register A. | ||
| + | |||
| + | Der Einplatinenrechner besitzt eine Hexadezimal-Tastatur, | ||
| + | Außerdem gibt es einen kleinen Lautsprecher zur Tonausgabe. | ||
| + | |||
| + | ===== Downloads ===== | ||
| + | |||
| + | * Reasembler gmc4_reass2.pl {{ : | ||
| + | * alle Beispielprogramme aus dem originalen Handbuch liegen dem Simulatorpaket GMC4Sim-1_38.zip bei (http:// | ||
| + | * 2018 neuer Download, da obiger Download nicht mehr funktioniert: | ||
| + | * Anleitung (engl., GMC-4-Manual) {{ : | ||
| ===== technische Daten ===== | ===== technische Daten ===== | ||
| ^ Merkmal ^ Beschreibung | | ^ Merkmal ^ Beschreibung | | ||
| - | | CPU | | | + | | CPU | EM61001 |
| - | | ROM | | | + | | ROM | - | |
| - | | RAM | | | + | | RAM | 128 Byte a 4 Bit | |
| - | | Takt | | | + | | Takt | 4 MHz | |
| - | | Anzeige | | | + | | Anzeige | 7 Bit LED, 1 stellig Siebensegment-Anzeige |
| - | | Tastatur | | | + | | Tastatur | 20 Tasten Hexadezimaltastatur |
| - | | Peripherie | | | + | | Peripherie | - | |
| - | | Software | | | + | | Software | - | |
| - | ===== Literatur ===== | ||
| - | | + | CPU und Takt spielen keine Rolle, im ROM-Programm des Prozessors wird ein spezieller 4-Bit-Prozessor simuliert (s.u.). |
| + | Nur für diesen 4-Bit-Prozessor können Programme geschrieben werden, der zugrunde liegende Prozessor ist nicht ansprechbar. | ||
| + | Das Konzept ist ähnlich der [[homecomputer: | ||
| - | ===== Downloads ===== | + | Im Science Fair Microcomputer Trainer wird ein spezieller Microcontroller der Serie[[http:// |
| - | * Anleitung, .. | + | ===== Literatur ===== |
| + | |||
| + | - http:// | ||
| + | - http:// | ||
| + | - http:// | ||
| ===== Bedienung ===== | ===== Bedienung ===== | ||
| + | | 0 | | | ||
| + | | 1 | ラ | | ||
| + | | 2 | シ | | ||
| + | | 3 | ド | | ||
| + | | 4 | レ | | ||
| + | | 5 | ミ | | ||
| + | | 6 | ファ | | ||
| + | | 7 | ソ | | ||
| + | | 8 | ラ | | ||
| + | | 9 | シ | | ||
| + | | A | ド | | ||
| + | | B | レ | | ||
| + | | C | ミ | | ||
| + | | D | ファ | | ||
| + | | E | ソ | | ||
| + | | F | | | ||
| ===== Sonstiges ===== | ===== Sonstiges ===== | ||
| + | ==== Prozessor ==== | ||
| + | |||
| + | Es wird ein spezieller 4-Bit-Prozessor simuliert. | ||
| + | |||
| + | * 4 Register A, B, Y, Z\\ A ist der Akku, Y ein Indexregister zum Speicherzugriff. B und Z sind Wechselregister. | ||
| + | * 3 Ports P (LEDs), O (Siebensegmentanzeige), | ||
| + | * 80 Byte (a 4 Bit) Programm-Speicher | ||
| + | * 16 Byte Datenspeicher (RAM-Bereich 50h..5Fh) | ||
| + | * 1 Flag. Der Befehl JUMP ist ein bedingter Sprung und wird nur ausgeführt, | ||
| + | * 4 zusätzliche Wechselregister A', B', X', Z' | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ==== Der Befehlssatz ==== | ||
| + | |||
| + | Der simulierte 4-Bit-Prozessor versteht 16 Maschinenbefehle.\\ | ||
| + | Die Befehle sind 1..3 Byte (a 4 Bit) lang. | ||
| + | |||
| + | n = 0..F\\ | ||
| + | M = RAM-Adr (50+Y) (indexierter Zugriff) | ||
| + | |||
| + | ^ Code ^ Befehl ^ Wirkung ^ Flag ^ Kommentar ^ | ||
| + | | 0 | KA (Key to A) | A := K | 0, 1 | Tastendruck nach A übernehmen, | ||
| + | | 1 | AO (A to Output) | O := A | 1 | A an Siebensegmentanzeige ausgeben | | ||
| + | | 2 | CH (Change) | A <=> B Y <=> Z | 1 | Tausche A und B sowie Y und Z | | ||
| + | | 3 | CY (Change A and Y) | A <=> Y | 1 | Austausch der Inhalte von A und Y | | ||
| + | | 4 | AM (A to Memory) | M := A | 1 | A in RAM-Adr (50+Y) kopieren | | ||
| + | | 5 | MA (Memory to A) | A := M | 1 | RAM-Adr (50+Y) in A zurücklesen | | ||
| + | | 6 | M+ | A := M+A | 0, 1 | RAM-Adr (50+Y) zu A addieren, bei Überlauf: Flag = 1 | | ||
| + | | 7 | M- | A := M-A | 0, 1 | RAM-Adr (50+Y) von A subtrahieren, | ||
| + | | 8 n | TIA n (Transfer Immediate to A) | A := n | 1 | Konstante in A laden | | ||
| + | | 9 n | AIA n (Add Immediate to A) | A := A+n | 0, 1 | Konstante zu A addieren, bei Überlauf: Flag = 1 | | ||
| + | | A n | TIY n (Transfer Immediate to Y) | Y := n | 1 | Konstante in Y laden | | ||
| + | | B n | AIY n (Add Immediate to Y) | Y := Y+n | 0, 1 | Konstante zu Y addieren, bei Überlauf: Flag = 1 | | ||
| + | | C n | CIA n (Compare Immediate with A) | A == n ? | 0, 1 | A mit Konstante vergleichen, | ||
| + | | D n | CIY n (Compare Immediate with Y) | Y == n ? | 0, 1 | Y mit Konstante vergleichen, | ||
| + | | E n | CAL n (Call) | --- | --- | Unterprogrammaufrufe, | ||
| + | | F n n | JUMP n n | Adr := nn | 1 | Direkter Sprung zur Adresse nn (High, Low) wenn Flag = 1 | | ||
| + | |||
| + | Unterprogramme: | ||
| + | |||
| + | ^ Code ^ Befehl ^ Flag ^ Kommentar ^ | ||
| + | | E 0 | CAL RSTO (Reset Port O) | 1 | Siebensegmentanzeige löschen | | ||
| + | | E 1 | CAL SETR (Set Port R) | 1 | Einzelne LED einschalten. In Y wird die Nummer der LED (0-6) übergeben. | | ||
| + | | E 2 | CAL RSTR (Reset Port R) | 1 | Einzelne LED ausschalten. In Y wird die Nummer der LED (0-6) übergeben. | | ||
| + | | E 4 | CAL CMPL (Complement) | 1 | Komplement des A-Registers (aus F wird 0) | | ||
| + | | E 5 | CAL CHNG | 1 | Inhalte der Register A, | ||
| + | | E 6 | CAL SIFT | 0, 1 | A-Register bitweise nach recht schieben. Flag wird 1 wenn das rechte Bit 0 war. | | ||
| + | | E 7 | CAL ENDS | 1 | Ende-Sound | | ||
| + | | E 8 | CAL ERRS | 1 | Error-Sound | | ||
| + | | E 9 | CAL SHTS (Short Sound) | 1 | Kurzer Ton | | ||
| + | | E A | CAL LONS | 1 | Langer Ton | | ||
| + | | E B | CAL SUND | 1 | Note spielen, die im A-Register übergeben wird (1 ... E) | | ||
| + | | E C | CAL TIMR | 1 | (A + 1) * 0,1 Sekunden warten | | ||
| + | | E D | CAL DSPR (Display on Port R) | 1 | Ausgabe der RAM-Adressen 5F (high) und 5E (low) an die LEDs | | ||
| + | |||
| + | ==== Reassembler ==== | ||
| + | |||
| + | Ich habe einen kleinen kommentierenden Reassembler gmc4_reass2.pl in Perl geschrieben. Aus dem Hexcode | ||
| + | |||
| + | E D 8 0 E C A F 5 E 6 F 1 A 4 A E 5 E 6 9 8 4 F 2 1 4 A E 5 E 6 4 0 F 0 0 A F 5 9 8 4 F 0 0 | ||
| + | |||
| + | macht er folgendes (Beispiel binary_light_show.asm): | ||
| + | |||
| + | < | ||
| + | 00: E D | ||
| + | 02: 8 0 TIA 0 ; Konstante 0 in A laden | ||
| + | 04: E C CAL TIMR ; (A + 1) * 0,1 Sekunden warten | ||
| + | 06: A F TIY F ; Konstante 15 in Y laden | ||
| + | 08: 5 | ||
| + | 09: E 6 CAL SIFT ; A-Register bitweise nach rechts schieben | ||
| + | 0B: F 1A JUMP LBL_1A | ||
| + | 0E: 4 | ||
| + | 0F: A E TIY E ; Konstante 14 in Y laden | ||
| + | 11: 5 | ||
| + | 12: E 6 CAL SIFT ; A-Register bitweise nach rechts schieben | ||
| + | 14: 9 8 AIA 8 ; 8 zu A addieren | ||
| + | 16: 4 | ||
| + | 17: F 21 JUMP LBL_21 | ||
| + | 1A: 4 | ||
| + | 1B: A E TIY E ; Konstante 14 in Y laden | ||
| + | 1D: 5 | ||
| + | 1E: E 6 CAL SIFT ; A-Register bitweise nach rechts schieben | ||
| + | 20: 4 | ||
| + | 21: 0 | ||
| + | 22: F 00 JUMP LBL_00 | ||
| + | 25: A F TIY F ; Konstante 15 in Y laden | ||
| + | 27: 5 | ||
| + | 28: 9 8 AIA 8 ; 8 zu A addieren | ||
| + | 2A: 4 | ||
| + | 2B: F 00 JUMP LBL_00 | ||
| + | </ | ||