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 | ||
+ | </ | ||