Inhaltsverzeichnis:

Der KIM Uno - ein 5€ Mikroprozessor-Entwicklungskit-Emulator - Gunook
Der KIM Uno - ein 5€ Mikroprozessor-Entwicklungskit-Emulator - Gunook

Video: Der KIM Uno - ein 5€ Mikroprozessor-Entwicklungskit-Emulator - Gunook

Video: Der KIM Uno - ein 5€ Mikroprozessor-Entwicklungskit-Emulator - Gunook
Video: CPU MINING : RETROSPECTIVE 2023 | FUTUR 2024 🚀🚀🚀 2024, Juni
Anonim
Image
Image
Der KIM Uno - ein 5€ Mikroprozessor-Entwicklungskit-Emulator
Der KIM Uno - ein 5€ Mikroprozessor-Entwicklungskit-Emulator
Der KIM Uno - ein 5€ Mikroprozessor-Entwicklungskit-Emulator
Der KIM Uno - ein 5€ Mikroprozessor-Entwicklungskit-Emulator

Das KIM Uno ist ein tragbares, softwaredefiniertes Entwicklungskit für (Retro-)Mikroprozessoren. Aber lassen Sie mich die Idee davon vorstellen, indem ich in der Zeit zurückgehe:

Ende 2018 kam mir in den Sinn, dass ich ein kleines tragbares Mikroprozessor-Entwicklungskit bauen wollte, genau wie das berühmte KIM-1 von MOS Technology, Inc. und entworfen von Chuck Peddle, der auch an der Entwicklung der 6502-CPU beteiligt war.

Aber ein "bare-bone"-Entwicklungskit mit diskreten Logikkomponenten zu bauen, war keine Option, da es eine große Stromversorgung brauchte (da diese alten Geräte dazu neigen, ziemlich viel Strom zu verbrauchen) und auch die Entwicklung sehr zeitaufwändig wäre. Und ich will es jetzt!

Daher habe ich das KIM Uno als tragbares Gerät konzipiert, das in eine Hand passt und mit zwei CR2032-Batterien betrieben wird. Es verwendet den Mikrocontroller ATMega328p ("Arduino"), der mit 8 MHz läuft, um eine gewünschte CPU zu emulieren (oder zu simulieren). Diese Architektur stellt auch sicher, dass die emulierten CPUs gegen alles austauschbar sind, was in den Flash-Speicher des Mikrocontrollers passt. Es ist also ein Mehrzweckgerät.

Zufällig habe ich später auf YouTube einen wirklich guten Vortrag gesehen - The Ultimate Apollo Guidance Computer Talk (34C3) -, in dem "One Instruction Set Computers" oder OISCs erwähnt werden. Ich kannte sie nicht und fand dies als den perfekten Kandidaten, um es umzusetzen.

Das KIM Uno emuliert eine CPU mit nur einem Befehl: subleq - Subtrahieren und verzweigen, wenn kleiner oder gleich Null.

Wenn Sie mir durch dieses Instructable folgen, können Sie in kürzester Zeit Ihr eigenes KIM Uno bauen. Und das Beste - abgesehen davon, dass Sie es nach Ihrem Geschmack modifizieren können - ist, dass die Herstellung nur 4, 75 € kostet (Stand Ende 2018).

Ein Hinweis: Es gibt ein Git-Repository, das alle Dateien enthält, die von den verschiedenen Schritten dieses instructable bereitgestellt werden. Falls Sie einige Ressourcen ändern und mit uns teilen möchten, können Sie eine PR erstellen. Sie können dort aber auch alle Dateien auf einmal herunterladen. Einfach an https://github.com/maxstrauch/kim-uno. Vielen Dank!

Es gibt ein weiteres ziemlich interessantes Projekt mit dem gleichen Namen (KIM Uno), das eine echte Nachbildung des 6502 KIM Uno erstellt. Schau es dir hier an. Der Schöpfer verkauft sogar das Kit. Wer sich also für 6502 interessiert und dieses Projekt mag, sollte dort mal reinschauen!

Schritt 1: Beschaffung der Platine

Beschaffung der Leiterplatte
Beschaffung der Leiterplatte
Beschaffung der Leiterplatte
Beschaffung der Leiterplatte

Wie Sie sehen, habe ich die Gelegenheit genutzt, eine Leiterplatte zu entwerfen und professionell fertigen zu lassen. Da die Herstellung extern und der Versand an Sie viel Zeit in Anspruch nehmen wird (je nachdem, wo Sie sich auf der Welt befinden;-)), ist die Bestellung der erste Schritt. Wir können dann mit den anderen Schritten fortfahren, während die Leiterplatte hergestellt und an Sie versandt wird.

Ich habe meine Leiterplatten in China bei PCBWay für nur 5 US-Dollar bestellt. Ich habe keinen Vorteil, PCBWay als meinen Goto-Hersteller für PCBs vorzustellen, es ist nur so, dass es für mich gut funktioniert hat und möglicherweise auch für Sie funktioniert. Sie können sie jedoch an jedem anderen Ort wie JLCPCB, OSH Park oder jedem lokalen PCB-Unternehmen bestellen.

Wenn Sie jedoch bereit sind, diese bei PCBWay zu bestellen, können Sie die angehängte ZIP-Datei " kim-uno-rev1_2018-12-12_gerbers.zip" herunterladen und ohne Änderungen direkt auf PCBWay hochladen. Dies ist die Originaldatei, mit der ich die Leiterplatten bestellt habe, die Sie in den Bildern sehen können.

Wenn Sie sie von einem anderen Hersteller bestellen, müssen Sie sie möglicherweise aus den ursprünglichen KiCad-Quellen erneut exportieren, da ich sie mit den Spezifikationen von PCBWay generiert habe, die Sie hier finden. Laden Sie für die ursprünglichen KiCad-Quellen " kim-uno-kicad-sources.zip" herunter und entpacken Sie es.

Aber es gibt noch einen zweiten Weg: Wenn Sie das PCB nicht bestellen möchten, können Sie Ihre eigene Version mit Perfboard oder sogar einem Steckbrett bauen.

Wie auch immer: Da die Leiterplatten nun unterwegs sind, können wir uns auf die anderen Teile konzentrieren! Komm, folge mir.

Schritt 2: Beschaffung der Komponenten

Beschaffung der Komponenten
Beschaffung der Komponenten
Beschaffung der Komponenten
Beschaffung der Komponenten
Beschaffung der Komponenten
Beschaffung der Komponenten

Jetzt müssen Sie die Komponenten besorgen. Dazu finden Sie im Anhang ein Übersichtsbild aller benötigten Komponenten und Mengen sowie eine Stückliste (Stückliste).

Die Stückliste enthält Links zu eBay. Obwohl diese Angebote möglicherweise geschlossen sind, wenn Sie dies lesen, können Sie es als Ausgangspunkt verwenden. Die verwendeten Komponenten sind ziemlich Standard.

Im Folgenden erkläre ich Ihnen alle benötigten Komponenten:

  • 7x 1 kΩ Widerstände für die Siebensegmentanzeigen. Sie können den Wert reduzieren (z. B. auf 470 Ω), damit sie heller leuchten, aber reduzieren Sie ihn nicht zu stark, sonst sterben die LEDs oder der Akku ist sehr schnell leer. Ich habe festgestellt, dass dieser Wert für mich funktioniert
  • 1x 10 kΩ als Pull-Up-Widerstand für die RESET-Leitung des Mikrocontrollers
  • 1x 100nF Kondensator zum Glätten von Spannungsspitzen (was nicht passieren sollte, da wir Batterien verwenden, richtig, aber für ein gutes Maß …)
  • 1x ATMega328P im DIP-28-Paket (normalerweise ATMega328P-PU genannt)
  • 1x die Hauptplatine - siehe den vorherigen Schritt; entweder bestellt oder selbst gebaut
  • 2x CR2032 Batteriehalter
  • 1x SPDT (Single Pole, Double Throw) Schalter, der grundsätzlich drei Kontakte hat und in jedem seiner beiden Zustände (entweder ein oder aus) zwei Kontakte verbindet
  • 20x taktile Drucktasten für die Tastatur. Um die Rückseite der Platine zu verwenden, habe ich taktile SMD-Taster verwendet (die Standard 6x6x6 mm) - sie sind ziemlich einfach zu löten, wie Sie sehen werden
  • OPTIONAL: 1x 1x6-Pin-Header zum Anschluss des Programmiergeräts, dies ist jedoch optional, wie Sie später sehen werden
  • 1x Sieben-Segment-Anzeige mit 4 Ziffern und 1x Sieben-Segment-Anzeige mit 2 Ziffern - die Platine nimmt nur 0,36 Zoll (9, 14 mm) Elemente mit gemeinsamer Anodenverdrahtung auf. Beide Voraussetzungen sind wichtig, um eine funktionierende Einheit zu bekommen. Aber auch diese Art von Sieben-Segment-Anzeigen sind sehr verbreitet

Im Anhang zu diesem Schritt finden Sie die Datei "component-datasheets.zip", die genauere Angaben zu Abmessungen und Typen der verwendeten Komponenten enthält. Aber die meisten Komponenten sind sehr Standard und können leicht für wenig Geld bezogen werden.

Jetzt müssen Sie warten, bis Sie alle Komponenten bereit haben, um mit dem Löten fortzufahren. Während dieser Zeit können Sie bereits zum Ende springen und ein wenig über die Verwendung des KIM Uno lesen, wenn Sie möchten.

Schritt 3: Überblick über das Lötwerkzeug

Lötwerkzeug Übersicht
Lötwerkzeug Übersicht
Lötwerkzeug Übersicht
Lötwerkzeug Übersicht

Zum Löten und Bauen des KIM Uno benötigen Sie die in den Bildern gezeigten Werkzeuge:

  • Drahtschneider (um das Ende der Komponentendrähte abzuschneiden)
  • Flachzange
  • Pinzette
  • (ordentliches) Lot, das nicht zu dick ist - ich verwende 0,56 mm Lot
  • Ein Lötkolben - man braucht keinen High-End-Lötkolben (weil wir hier auch keine Raketenwissenschaft betreiben) - ich benutze den Ersa FineTip 260 jetzt schon lange und er ist wirklich gut
  • Ein Flussmittelstift: Das Hinzufügen von Flussmittel zu den Bauteilen und Pads erleichtert das Löten erheblich, da das Lot dann von selbst an die richtige Stelle "fließt"*
  • Optional: ein Schwamm (aus Metallwolle) für Ihren Lötkolben

Um den KIM Uno später zu programmieren, benötigen Sie außerdem:

  • einen Computer mit der AVR-GCC-Toolchain und avrdude zum Hochladen der Firmware
  • ein ISP (Programmierer) - wie Sie auf dem Bild sehen können, verwende ich mein Arduino Uno als ISP mit einer speziellen Skizze - also muss keine ausgefallene Hardware gekauft werden

* etwas Anleitung durch Menschen erforderlich;-)

Sind Sie bereit? Im nächsten Schritt beginnen wir mit der Montage des KIM Uno.

Schritt 4: Löten # 1: Hinzufügen von Widerständen und Kondensatoren

Löten Nr. 1: Hinzufügen von Widerständen und Kondensatoren
Löten Nr. 1: Hinzufügen von Widerständen und Kondensatoren
Löten Nr. 1: Hinzufügen von Widerständen und Kondensatoren
Löten Nr. 1: Hinzufügen von Widerständen und Kondensatoren
Löten Nr. 1: Hinzufügen von Widerständen und Kondensatoren
Löten Nr. 1: Hinzufügen von Widerständen und Kondensatoren
Löten Nr. 1: Hinzufügen von Widerständen und Kondensatoren
Löten Nr. 1: Hinzufügen von Widerständen und Kondensatoren

Sie sollten immer von den kleinsten (von der Bauteilhöhe her) Bauteilen zuerst zu den höchsten Bauteilen zuletzt arbeiten. Daher beginnen wir damit, die Widerstände hinzuzufügen und die Beine auf der Rückseite zu biegen, damit die Widerstände leicht zu löten sind und an Ort und Stelle bleiben. Anschließend die langen Drähte abschneiden.

Fügen Sie den kleinen 100-nF-Kondensator auf die gleiche Weise hinzu, der in den Bildern nicht gezeigt wird.

Ein Tipp: Bewahren Sie diese Drahtbeine in einem kleinen Behälter auf, sie sind manchmal praktisch.

Schritt 5: Löten #2: Zusammenbau der Tastatur

Löten #2: Zusammenbau der Tastatur
Löten #2: Zusammenbau der Tastatur
Löten #2: Zusammenbau der Tastatur
Löten #2: Zusammenbau der Tastatur
Löten #2: Zusammenbau der Tastatur
Löten #2: Zusammenbau der Tastatur

Der nächste Schritt ist das Löten der 20 SMD-Tastschalter. Da diese Arbeit etwas fummelig ist, machen wir sie jetzt, wenn die Platine flach auf der Werkbank liegt.

Wir arbeiten von oben nach unten (oder von links nach rechts, wenn die Platine wie auf den Fotos ausgerichtet ist) und beginnen mit der ersten Reihe: Wählen Sie für jeden Schalter eines der vier Pads aus und benetzen Sie es mit dem Flussmittelstift.

Greifen Sie dann mit einer Pinzette einen Schalter und positionieren Sie ihn vorsichtig auf den vier Pads. Löten Sie dann nur das Bein des Schalters, das sich auf dem Pad befindet, das Sie ausgewählt und mit Flussmittel vorbereitet haben. Dazu sollten Sie vor dem Start mit Ihrem Bügeleisen etwas Lötmittel "greifen". Vervollständigen Sie mit dieser Methode die gesamte Schalterreihe und löten Sie nur ein Bein.

Das Bild mit den Pfeilen zeigt eine Vergrößerung wie das Löten genau gemacht wurde.

Nachdem Sie die gesamte Reihe (nur ein Pin) gelötet haben, können Sie kleine Anpassungen vornehmen, indem Sie den Pin wieder aufheizen und den Schalter neu positionieren. Stellen Sie sicher, dass die Schalter so gut wie möglich ausgerichtet sind.

Wenn Sie mit der Ausrichtung zufrieden sind, können Sie alle anderen Pins mit dem Flussmittelstift benetzen und dann durch Berühren mit dem Lötkolben verlöten und durch Berühren etwas Lötmittel hinzufügen. Sie werden sehen, dass das Lot direkt auf das Pad gesaugt wird.

Nach dem Löten einer Reihe oder so werden Sie feststellen, dass Sie den Dreh raus haben und es nicht so schwer ist, aber sich wiederholend. Machen Sie also einfach den Rest und Sie haben im Handumdrehen eine fertige Tastatur.

Schritt 6: Löten #3: Sieben-Segment-Anzeige, Schalter und Stiftleiste

Löten #3: Sieben-Segment-Anzeige, Schalter und Stiftleiste
Löten #3: Sieben-Segment-Anzeige, Schalter und Stiftleiste
Löten #3: Sieben-Segment-Anzeige, Schalter und Stiftleiste
Löten #3: Sieben-Segment-Anzeige, Schalter und Stiftleiste
Löten #3: Sieben-Segment-Anzeige, Schalter und Stiftleiste
Löten #3: Sieben-Segment-Anzeige, Schalter und Stiftleiste

Jetzt können Sie den Schalter und die Stiftleiste (optional) hinzufügen, indem Sie sie mit dem Finger halten und einen Stift anlöten, um ihn an der Platine zu halten, sodass Sie die anderen Stifte verlöten und schließlich den ursprünglichen Haltestift ausbessern können.

Passen Sie auf, dass Sie sich nicht mit dem heißen Lötkolben verbrennen. Wenn Sie sich damit nicht wohl fühlen, können Sie das Bauteil mit etwas Klebeband (z. B. Malerband) festhalten. So haben Sie beide Hände frei, um sich zu bewegen.

Die Sieben-Segment-Anzeigen werden auf die gleiche Weise gelötet (siehe Bild): Sie setzen sie ein, halten sie mit der Hand oder dem Klebeband fest und löten zwei gegenüberliegende Pins, um sie zu halten, während Sie die anderen Pins verlöten können.

Aber seien Sie vorsichtig und richten Sie die Sieben-Segment-Anzeige in die richtige Richtung (mit den Dezimalpunkten zur Tastatur). Sonst steckst du in Schwierigkeiten…

Schritt 7: Löten #4: Löten des Mikrocontrollers

Löten #4: Löten des Mikrocontrollers
Löten #4: Löten des Mikrocontrollers

Nachdem Sie nun viel Übung haben, können Sie den Mikrocontroller so einsetzen, dass die Kerbe oben (oder der erste Pin) zum Schalter zeigt. Mit einer Flachzange können Sie die Beine des Mikrocontrollers vorsichtig etwas einbiegen, damit sie mit den Löchern auf der Platine übereinstimmen.

Da der Mikrocontroller fest sitzt, braucht man etwas Kraft, um den Mikrocontroller einzuführen. Der Vorteil ist, dass er nicht herausfällt. Das heißt, Sie können es in Ruhe von hinten löten.

Schritt 8: Löten # 5: Fügen Sie die Batteriehalter hinzu (letzter Schritt)

Löten # 5: Fügen Sie die Batteriehalter hinzu (letzter Schritt)
Löten # 5: Fügen Sie die Batteriehalter hinzu (letzter Schritt)
Löten # 5: Fügen Sie die Batteriehalter hinzu (letzter Schritt)
Löten # 5: Fügen Sie die Batteriehalter hinzu (letzter Schritt)
Löten # 5: Fügen Sie die Batteriehalter hinzu (letzter Schritt)
Löten # 5: Fügen Sie die Batteriehalter hinzu (letzter Schritt)

Schließlich müssen Sie die Batteriehalter auf der Rückseite hinzufügen. Dazu verwenden Sie einfach den Flussmittelstift und benetzen alle vier Pads und bringen dann etwas Lötzinn auf Ihr Bügeleisen. Richten Sie den Batteriehalter sorgfältig an beiden Pads aus. An beiden Enden der Kontakte sollte die gleiche Menge des PCB-Pads sichtbar sein. Berühren Sie das PCB-Pad und das Bein des Batteriehalters mit Ihrem Bügeleisen. Das Lot fließt unter das Pad und darüber und befestigt es wie in der Abbildung gezeigt. Wenn Sie damit Probleme haben, können Sie mit dem Stift mehr Flussmittel hinzufügen.

Schritt 9: Flashen des Emulators

Flashen des Emulators
Flashen des Emulators
Flashen des Emulators
Flashen des Emulators
Flashen des Emulators
Flashen des Emulators

Im angehängten Zip-Archiv "kim-uno-firmware.zip" finden Sie den Quellcode für den Emulator zusammen mit einer bereits kompilierten "main.hex", die Sie direkt auf den Mikrocontroller hochladen können.

Bevor Sie es tatsächlich verwenden können, müssen Sie die Fuse-Bits des Mikrocontrollers so setzen, dass er den internen 8-MHz-Takt verwendet, ohne ihn zu halbieren. Sie können die Arbeit mit dem folgenden Befehl erledigen:

avrdude -c stk500v1 -b 9600 -v -v -P /dev/cu.usbmodem1421 -p m328p -U lfuse:w:0xe2:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m

Wenn Sie avrdude nicht kennen: Es ist ein Programm zum Hochladen von Programmen auf einen Mikrocontroller. Hier können Sie mehr darüber erfahren. Grundsätzlich installieren Sie es und dann ist es einsatzbereit. Für Ihr Setup müssen Sie möglicherweise das Argument von "-P" auf einen anderen seriellen Port ändern. Bitte überprüfen Sie auf Ihrem Computer, welcher serielle Port verwendet wird (z. B. innerhalb der Arduino IDE).

Danach können Sie die Firmware mit diesem Befehl auf den Mikrocontroller flashen:

avrdude -c stk500v1 -b 9600 -v -v -P /dev/cu.usbmodem1421 -p m328p -U flash:w:main.hex

Auch hier gilt: Für "-P" gilt das gleiche wie oben.

Da ich keinen "professionellen" ISP (In-System Programmer) besitze, verwende ich immer mein Arduino UNO (siehe Bild) und die angehängte Skizze ("arduino-isp.ino", von Randall Bohn). Ich weiß, dass es eine neuere Version gibt, aber mit dieser Version hatte ich in den letzten fünf Jahren keine Probleme, also behalte ich sie. Es funktioniert einfach. Mit dem Kommentar in der Kopfzeile der Skizze erhalten Sie die Pinbelegung auf dem Arduino UNO und mit dem Schaltplan des KIM Uno (siehe Anhang) erhalten Sie die Pinbelegung des 1x6 ISP-Headers auf dem KIM Uno. Der quadratische Pin in der Nähe der Sieben-Segment-Anzeige ist Pin 1 (GND). Die folgenden Pins sind (in der richtigen Reihenfolge): RESET, MOSI, MISO, SCK, VCC. Sie können VCC entweder an 3V3 oder an 5V anschließen.

Wenn Sie die 1x6-Stiftleiste nicht hinzugefügt haben, können Sie Steckbrettdrähte verwenden und diese in die Anschlusslöcher stecken und mit dem Finger abwinkeln - genau wie im Bild gezeigt. Dadurch wird genügend Kontakt hergestellt, um die Firmware zu flashen und die Sicherungen zu setzen. Wenn Sie jedoch ein dauerhafteres Setup mögen, sollten Sie auf jeden Fall die 1x6-Stiftleisten hinzufügen.

Ich habe zwei Geräte: eine Serienversion ohne Stiftleisten und eine Entwicklungsversion mit Stiftleisten, die ich angeschlossen lasse und während der Entwicklung immer wieder verwende. Das ist viel komfortabler.

Schritt 10: Fertig

Fertig
Fertig
Fertig
Fertig

Jetzt sind Sie fertig und können damit beginnen, Ihre eigenen Subleq-Programme auf Papier zu schreiben, zusammenzusetzen und dann in den Speicher einzugeben.

Der KIM Uno wird mit einer vorprogrammierten Fibonacci-Berechnung geliefert, die am Speicherplatz 0x0a beginnt. Es ist standardmäßig auf n = 6 eingestellt, sollte also einen Wert von 8 ergeben. Drücken Sie "Go", um die Berechnung zu starten.

Schritt 11: PCB-Designanalyse

PCB-Designanalyse
PCB-Designanalyse
PCB-Designanalyse
PCB-Designanalyse

Nach Abschluss dieses Projekts habe ich ein paar Punkte gefunden, die bemerkenswert sind und in einer neuen Überarbeitung des Boards behandelt werden sollten:

  • Der Siebdruck des ATMega328p hat nicht die übliche Kerbe, wo sich der erste Pin befindet. Der DIP-28-Footprint hat nicht einmal ein quadratisches Pad, wo sich der erste Pin befindet. Dies sollte auf jeden Fall mit einem detaillierteren Siebdruck verbessert werden, um Verwechslungen zu vermeiden
  • der ISP-Header hat keine Anschlussetiketten auf dem Siebdruck. Dies macht es schwierig zu erkennen, wie man es mit dem ISP verbindet
  • der ISP-Header könnte in einen 2x6-Pin-Header mit einem Standard-Pin-Layout geändert werden, um Verwechslungen zu vermeiden

Abgesehen von diesen Punkten bin ich ziemlich glücklich, wie es beim ersten Versuch geklappt hat und funktioniert hat.

Schritt 12: Wie programmiere ich SUBLEQ?

Image
Image
Wie programmiere ich SUBLEQ?
Wie programmiere ich SUBLEQ?
Wie programmiere ich SUBLEQ?
Wie programmiere ich SUBLEQ?

Wie eingangs erwähnt, emuliert die aktuelle Firmware des KIM Uno einen One Instruction Set Computer (OISC) und stellt die Subleq-Anweisung zur Berechnung bereit.

Der subleq-Befehl steht für Subtract and Branch, falls kleiner oder gleich Null. Im Pseudocode sieht das wie folgt aus:

subleq A B C mem[B] = mem [B] - mem[A]; if (mem[B] <= 0) goto C;

Da der KIM Uno eine 8-Bit-Maschine emuliert, sind alle Argumente A, B und C 8-Bit-Werte und kann somit einen Gesamt-Hauptspeicher von 256 Byte adressieren. Dies kann natürlich erweitert werden, indem A, B und C Multibyte-Werte gemacht werden. Aber jetzt halten wir es einfach.

Das KIM Uno hat auch "Peripherie": das Display und die Tastatur. Es verwendet eine Memory-Mapping-Architektur, um diese Peripheriegeräte zu verbinden, obwohl die Memory-Map sehr einfach ist:

  • 0x00 = das Z-Register (Null) und sollte Null gehalten werden.
  • 0x01 - 0x06 = sechs Bytes, die den Wert jedes der Anzeigesegmente darstellen (von rechts nach links). Ein Wert 0xf - siehe Quellcode (main.c) für weitere Details.
  • 0x07, 0x08, 0x09 = drei Bytes, wobei jedes Byte zwei Siebensegmentanzeigen darstellt (von rechts nach links). Diese Speicherplätze ermöglichen die einfache Anzeige eines Ergebnisses, ohne das Ergebnis in zwei Halbbytes aufzuteilen, um es in den einstelligen Speicherplätzen 0x01 - 0x06 zu platzieren.
  • 0x0a+ = Ein Programm startet bei 0x0a. Derzeit wird die "Go"-Taste ab 0x0a behoben ausgeführt.

Mit diesen Informationen kann man nun ein Programm in Assembler schreiben und die Anweisungen in den Speicher eintragen und dann ausführen. Da es nur eine Anweisung gibt, werden nur die Argumente (A, B und C) eingetragen. Nach drei Speicherplätzen beginnen also die nächsten Befehlsargumente und so weiter.

An diesen Schritt angehängt finden Sie die Datei "fibonacci.s" und auch ein Bild des handgeschriebenen Programms, das eine Beispielimplementierung von Fibonacci ist. Aber warten Sie: Es werden drei Befehle verwendet - nämlich ADD, MOV und HLT - die nicht untergeordnet sind. "Was ist los? Hast du nicht gesagt, dass es nur eine Anweisung gibt, Subleq?" du fragst? Es ist ganz einfach: mit subleq kann man diese Anweisungen ganz einfach nachahmen:

MOV a, b - Kopieren von Daten an Speicherort a nach b kann bestehen aus:

  1. subleq b, b, 2 (nächste Anweisung)
  2. subleq a, Z, 3 (nächste Anweisung)
  3. subleq Z, b, 4 (nächste Anweisung)
  4. untergeordnete Z, Z, z. B. 5 (nächste Anweisung)

Unter Verwendung der Subtraktionsfunktion von subleq, die mem - mem[a] macht und mem mit dem Ergebnis überschreibt, wird der Wert unter Verwendung des Nullregisters kopiert. Und "subleq Z, Z, …" setzt das Nullregister einfach auf 0 zurück, unabhängig vom Wert von Z.

ADD a, b - addiert die Werte a + b und speichert die Summe in b kann sich zusammensetzen aus:

  1. subleq a, Z, 2 (nächste Anweisung)
  2. subleq Z, b, 3 (nächste Anweisung)
  3. untergeordnete Z, Z, z. B. 4 (nächste Anweisung)

Diese Anweisung berechnet einfach mem - (-mem[a]), was mem + mem[a] ist, indem auch das Subtraktionsmerkmal verwendet wird.

HLT - stoppt die CPU und beendet die Ausführung:

Per Definition weiß der Emulator, dass die CPU terminieren möchte, wenn sie auf 0xff springt (oder -1, wenn sie gesingt ist). Also ein einfaches

untergeordnete Z, Z, -1

erledigt den Job und zeigt dem Emulator an, dass er die Emulation beenden soll.

Mit diesen drei einfachen Anweisungen kann der Fibonacci-Algorithmus implementiert werden und funktioniert gut. Dies liegt daran, dass der OISC alles berechnen kann, was ein "echter" Computer nur mit dem Befehl subleq berechnen kann. Aber natürlich müssen viele Kompromisse eingegangen werden - wie Codelänge und Geschwindigkeit. Aber nichtsdestotrotz ist es eine großartige Möglichkeit, mit Low-Level-Softwareprogrammierung und Computern zu lernen und zu experimentieren.

An diesen Schritt angehängt finden Sie auch das Zip-Archiv "kim_uno_tools.zip". Es enthält einige grundlegende Assembler und Simulatoren für KIM Uno. Sie sind in NodeJS geschrieben - stellen Sie sicher, dass Sie es installiert haben.

Zusammenstellung von Programmen

Wenn Sie sich "fibonacci/fibonacci.s" ansehen, werden Sie feststellen, dass es sich um den Quellcode für die besprochene Fibonacci-Implementierung handelt. Um es zusammenzubauen und daraus ein Programm zu machen, das KIM Uno ausführen kann, geben Sie den folgenden Befehl ein (im Stamm des entpackten Archivs "kim_uno_tools.zip"):

Knoten Assembler.js fibonacci/fibonacci.s

und es wird entweder einen Fehler ausgeben, wenn Sie einen Fehler gemacht haben, oder das resultierende Programm verschütten. Um es zu speichern, können Sie die Ausgabe kopieren und in einer Datei speichern oder einfach diesen Befehl ausführen:

Knoten Assembler.js fibonacci/fibonacci.s > yourfile.h

Die Ausgabe ist so formatiert, dass sie direkt als C-Header-Datei in die KIM Uno-Firmware eingebunden werden kann, aber auch vom Simulator zum Simulieren verwendet werden kann. Geben Sie einfach ein:

Knoten sim.js yourfile.h

Und Ihnen werden das Simulationsergebnis und die erwartete Ausgabe des KIM Uno auf dem Display angezeigt.

Dies war eine sehr kurze Einführung in diese Tools; Ich empfehle Ihnen, mit ihnen herumzuspielen und zu sehen, wie sie funktionieren. Auf diese Weise erhalten Sie ein tiefes Wissen und lernen die Funktionsweise von CPUs, Anweisungen, Assemblern und Emulatoren kennen;-)

Schritt 13: Ausblick

Ausblick
Ausblick
Ausblick
Ausblick
Ausblick
Ausblick

Herzliche Glückwünsche

Wenn Sie dies lesen, haben Sie wahrscheinlich dieses gesamte instructable durchlaufen und Ihr eigenes KIM Uno gebaut. Das ist wirklich schön.

Aber die Reise endet nicht hier - es gibt unendlich viele Möglichkeiten, wie Sie das KIM Uno modifizieren und an Ihre Bedürfnisse und Vorlieben anpassen können.

Zum Beispiel könnte der KIM Uno mit einem "echten" Retro-CPU-Emulator ausgestattet werden, der den berühmten MOS 6502 oder Intel 8085, 8086 oder 8088 emuliert. Dann würde es meiner ursprünglichen Vision entsprechen, bevor ich von OISCs erfuhr.

Es gibt jedoch auch andere Verwendungsmöglichkeiten, da das Hardware-Design ziemlich generisch ist. Der KIM Uno kann als …

  • … eine Fernbedienung z. B. für CNCs oder andere Geräte. Vielleicht verkabelt oder mit einer IR-Diode oder einem anderen drahtlosen Sender ausgestattet
  • … ein (hexadezimaler) Taschenrechner. Die Firmware lässt sich sehr einfach anpassen und das Boarddesign muss nicht sehr verändert werden. Vielleicht kann der Siebdruck mit mathematischen Operationen angepasst und die Lücke zwischen den Segmenten entfernt werden. Abgesehen davon ist es bereits bereit für diese Transformation

Ich hoffe, ihr hattet genauso viel Spaß beim Verfolgen und hoffentlich Bauen des KIM Uno wie ich beim Entwerfen und Planen. Und wenn Sie es erweitern oder ändern - lassen Sie es mich wissen. Danke schön!

PCB-Wettbewerb
PCB-Wettbewerb
PCB-Wettbewerb
PCB-Wettbewerb

Zweiter im PCB-Wettbewerb

Empfohlen: