Nächstes Jahr werde ich EE-Studenten im dritten Jahr eine 2-Semester-Mikroprozessor-Klasse beibringen Wenn Sie sich für die Klasse anmelden, müssen die Schüler Programmier- und Digitalsystemkurse abgeschlossen haben.

Um die Schüler mit einer praktischen Anwendung der im Unterricht gelehrten Konzepte zu motivieren, erwäge ich die Möglichkeit einer Aufgabe Die Schüler erstellen einen Emulator für ein älteres System von Grund auf neu, als Gruppenprojekt, das bis zum Ende des Kurses abgeschlossen werden soll (der, wie bereits erwähnt, 2 Semester lang ist).

Ich versuche es ein gutes Zielsystem für dieses Projekt zu wählen, mit dem Hauptziel, dass es ziemlich einfach zu emulieren sein sollte. Je weniger Peripheriegeräte emuliert werden sollen, desto besser. Je weniger Macken und Fehler repliziert werden müssen, desto besser. Ich möchte die Schüler mit den wichtigen Konzepten der Assemblersprache, der Befehlscodierung, der Adressierungsmodi, der CPU-Register, der speicherabgebildeten Hardwareregister usw. vertraut machen und nicht unbedingt mit den Tricks, die erforderlich sind, um Sprites schnell genug zu rendern, um ein interessantes Videospiel zu erstellen mit der Halbleitertechnologie, die in den 1980er Jahren zu akzeptablen Kosten erhältlich war. Ich verstehe, dass dies zu der Zeit notwendig war; ich versuche nur, ein System zu finden, das diese Tricks nicht zu sehr missbraucht. Idealerweise sollte das fragliche System dies nicht tun erfordern eine zyklusgenaue Emulation oder Tricks wie das Verfolgen der Scanlinie.

Eine zweite Anforderung betrifft die Leistung. Die Schüler sind sicherlich nicht mit Softwareoptimierungstechniken vertraut. Wenn Sie also versuchen, selbst die erste Playstation oder den Nintendo 64 zu emulieren, treten wahrscheinlich Leistungsprobleme auf (möglicherweise sogar SNES und Genesis). An diesem Punkt müssen sich die Schüler nur noch Sorgen machen Den Emulator korrekt und nicht effizient implementieren. Die CPU-Emulation wird sicherlich von einem Interpreter implementiert, nicht von einem Übersetzer / Recompiler.

Schließlich denke ich nicht, dass die Schüler den Emulator interessant finden würden, wenn er beispielsweise Nur Registerwerte nach der Ausführung eines Spielzeugprogramms angezeigt (obwohl dies das Projekt viel einfacher machen würde). Ich möchte ein System auswählen, für das Spiele erstellt wurden, auch wenn dieses System keine dedizierte Videospielkonsole war. Ich bin der Meinung, dass es für die Schüler sehr motivierend wäre, Spiele auf dem Emulator ausführen zu können.

Zum Beispiel schaue ich mir gerade das NES an , aber es fühlt sich immer noch etwas kompliziert an, insbesondere die PPU. Gibt es einfachere Optionen?

Kommentare

  • Interessante Frage Es könnte wichtig sein, ein Plädoyer für Antworten hinzuzufügen, um sich von den üblichen Kämpfen um das bessere System / cpu / vdu / etc. fernzuhalten und sich auf den didaktischen Teil zu konzentrieren.
  • Die Frage enthält einen offensichtlichen Widerspruch Zum einen möchte sich der Autor auf die CPU-Emulation konzentrieren, zum anderen möchte er auch Bilder und Ton vom gesamten emulierten System ausgeben lassen. Die Anfrage nach letzterem ist zwar verständlich, führt aber zu der ebenso harten Arbeit Emulieren der Peripheriegeräte, Anzeigen von Bildern und Abspielen von Tonaufgaben.
  • Möglicherweise hilfreiche Ressource, wenn es sich eher um eine Z80-Maschine als um eine 6502 handelt: z80.info/decoding.htm zur algorithmischen Dekodierung von Z80-Anweisungen (vorbehaltlich einer Reihe von Sonderfällen, aber es gibt sie). Das Erfordernis eines Emulators, der tatsächlich algorithmisch und nicht durch Nachschlagen dekodiert, würde die Fähigkeit der Schüler zum Kopieren und Einfügen einschränken und für einen Mikroprozessorkurs relevant sein?
  • Dies ist möglicherweise nicht das, wonach Sie suchen, aber vielleicht Anstatt einen Emulator zu schreiben (von dem ich ‚ annehme, dass sie auf ihrem PC ausgeführt werden), können sie möglicherweise dasselbe konzeptionelle Wissen demonstrieren, indem sie mit tatsächlicher Hardware arbeiten. Lassen Sie sie ein ARM Cortex M4-basiertes Entwicklungsboard erwerben und lernen, mit dem Bare Metal zu arbeiten.
  • vielleicht TI-83 …?

Antwort

Ich setze CHIP-8 vorwärts.

Dieses System ist Im Wesentlichen eine virtuelle Maschine, die aus irgendeinem Grund entwickelt wurde. Es gibt Spiele, die für den CHIP-8 geschrieben wurden. Sie verfügt über einige Opcodes, einen Stapel, einige Timer und ein Bitmap-Display mit niedriger Auflösung, ist aber so einfach wie die ersten Emulatoren passen auf frühen 8-Bit-Computern in ein paar Kilobyte.

Es gibt mehr als ein paar Referenzimplementierungen, die Sie verwenden können.

Es gibt Spiele usw., die öffentlich zugänglich sind Domain bereits, wie hier , damit Sie keine eigenen Spiele bereitstellen müssen.

Kommentare

  • Ayy für Chip 8. Es ist ‚ einfach, Implementierungen in vielen Sprachen zu finden, und die Architektur ist einfach.
  • CHIP-8 ist großartig Idee für eine Einführung in emu wegen seiner Einfachheit.Nachdem ich zuvor einen NES-Emulator geschrieben habe, kann ich Ihnen sagen, dass das Schreiben der CPU extrem zeitaufwändig und mühsam war – und der 6502 ist für CPUs einfach. Im Gegensatz dazu enthält CHIP-8 nur 35 sehr einfache Anweisungen. Darüber hinaus stützten sich viele Systeme auf ein genaues Timing-Verhalten zwischen der CPU und dem Rest der Hardware, während CHIP-8 keine solchen Anforderungen stellt.
  • Kommentare sind nicht für eine ausführliche Diskussion gedacht. Diese Konversation wurde in den Chat verschoben .
  • Ich ‚ bin ein erfahrener Programmierer, aber Ich habe nie einen Emulator geschrieben. Nach dieser Antwort dachte ich: “ Hey, dieser Chip8 sieht einfach aus, ich ‚ werde vielleicht ein paar Stunden damit verbringen „. Drei Wochen später bin ich ‚ immer noch hier, um herauszufinden, warum Programme immer wieder aus dem Speicherplatz springen. Viel Spaß, auch viel “ was zum Teufel „.
  • Ich frage mich, ob es welche gegeben hätte Hindernis für das Entfernen der vblank-Wartezeit aus der Plot-Sprite-Routine und das Hinzufügen einer expliziten vblank-wait-Anweisung? Der CDP1802 ist nicht ‚ ein Geschwindigkeitsdämon, könnte jedoch ohne vblank-Wartezeit mit ziemlicher Sicherheit mehr als ein Sprite pro Frame zeichnen.

Antwort

Oh. Gute Frage. Ich werde versuchen, ein paar Hinweise zu geben, aber ich würde das Problem als zu weit gefasst betrachten, um es hier zu beantworten, anstatt eine aussagekräftigere Konversation. Dennoch:


[…] die Schüler damit beauftragen, einen Emulator für ein älteres System zu erstellen

Ziemlich cool.

von Grund auf neu,

Wenn dies wirklich von Grund auf neu und in Software sein soll, wäre es nicht wirklich Betrachten Sie es als eine Aufgabe, die für Neulinge in einer so begrenzten Zeit geeignet ist. Wenn es keine Möglichkeit gibt, Echtzeitanforderungen (die für Spiele noch relevanter sind) zu ermitteln, wäre ich eher vorsichtig.

Tatsächlich Da es sich um EE handelt, warum nicht echte Hardware? Es ist immer noch einfach, (einige) klassische CPUs und verwandte Geräte zu bekommen. In Kombination mit einem modernen LCD ist der Hardware-Aufwand in wenigen Wochen sehr detailliert.

als Gruppenprojekt, das bis Ende abgeschlossen sein soll die Klasse (die, wie bereits erwähnt, 2 Semester lang ist).

Dies könnte die engste Bedingung sein.

Ich versuche, ein gutes Zielsystem für dieses Projekt auszuwählen, mit dem Hauptziel, dass es ziemlich einfach zu emulieren ist. Je weniger Peripheriegeräte emuliert werden sollen, desto besser weniger Macken und Fehler, die repliziert werden müssen, auch umso besser.

Klingt nach einem guten Versuch. Und wichtiger ist, dass einige scheinbar einfache Systeme entfernt werden (z Singleboarder) aus der Liste, da sie sich auf die komplexe Handhabung von E / A-Geräten verlassen (wie den Echtzeitzugriff auf Ports, um LED-Segmente scheinbar kontinuierlich anzusteuern).

Ich möchte die Schüler mit den wichtigen Konzepten der Assemb vertraut machen Sprache, Befehlskodierung, Adressierungsmodi, CPU-Register, speicherabgebildete Hardwareregister usw.

Etwas, das mit einer echten Hardware als möglich ist Nicht wahr?

Idealerweise sollte das betreffende System keine zyklusgenaue Emulation oder Tricks wie das Verfolgen der Scanlinie erfordern.

Zusammen mit der impliziten Anforderung einer Videoausgabe erfordert dies eine einfache nicht beschleunigte Bitmap-Logik.

Eine zweite Anforderung betrifft die Leistung. Die Schüler sind mit Softwareoptimierungstechniken sicherlich nicht vertraut. Wenn Sie also versuchen, selbst die erste Playstation oder den Nintendo 64 zu emulieren, treten wahrscheinlich Leistungsprobleme auf (möglicherweise sogar SNES und Genesis).

Ich würde hier nicht viel befürchten, da die eigentliche PC-Hardware ziemlich schnell ist. Die eigentlichen Probleme sind hier nicht die Geschwindigkeit der Emulation, sondern Echtzeitaspekte – das Synchronisieren verschiedener Emulationsteile -, die ein sehr sorgfältiges und genau abgestimmtes Software-Design erfordern. Hier nicht zu erwarten. Ganz der von Ihnen erwähnte Teil „Racing the Beam“.

An dieser Stelle müssen sich die Schüler nur darum kümmern, den Emulator korrekt und nicht effizient zu implementieren. Die CPU-Emulation wird sicherlich von einem Interpreter implementiert, nicht von einem Übersetzer / Recompiler.

Selbst für die primitivsten ist eine Echtzeitsynchronisation erforderlich ein Spiel zu spielen. Zumindest eine Synchronisation der Bildschirmrückverfolgung ist ein Muss – nicht zuletzt, um das Umschalten der Simulation selbst zu beschleunigen.

Die inhärente Notwendigkeit von Spielen, Timing-Effekte zu verwenden – und eine synchronisierte Bildschirmmanipulation auf einer feineren Ebene als Frames – macht es schwierig, jedes Spiel der realen Welt auf dem vorgeschlagenen Emulator auszuführen.

Ich möchte ein System auswählen, für das Spiele erstellt wurden, auch wenn dieses System keine dedizierte Videospielkonsole war. Ich bin der Meinung, dass es für die Schüler sehr motivierend wäre, Spiele auf dem Emulator ausführen zu können.

Ich stimme hier voll und ganz zu. Ein Großteil des Erfolgs der Experimentier- und Lernsysteme von Andre LaMothe basiert auf der Fähigkeit, Spiele zu spielen.

Zum Beispiel schaue ich mir gerade das NES an, aber es fühlt sich immer noch etwas kompliziert an, insbesondere die PPU. Gibt es einfachere Optionen?

Es wird schwierig, da sich die grundlegenden Anforderungen widersprechen. Nur erfolgreiche Konsolen / Computer haben eine große Auswahl an Spielen, aber diese haben auch eine komplexere Hardwarestruktur, die großartige Spiele ermöglicht.

Lassen Sie uns einige bekannte Systeme überprüfen. Ich möchte sie trennen „einfache“ und „komplexe“ Systeme entlang der Komplexität ihrer Videologik (* 1)

Einfache Systeme

In der ersten Iteration sind dies alles Systeme ohne dedizierten VDC / CRTC.

  • Atari VCS – schließlich das ultimative System, um Assembler zu lernen, auf einer extremen Basisebene zu arbeiten, ohne dazwischen und nicht viel zu erledigen. Gleichzeitig „s der Namensgeber für den Begriff“ Racing the Beam „.

    Trotzdem kann es immer noch ein System sein, nach dem gesucht werden muss, da die zeitabhängigen Teile gut definiert sind und (im Vergleich zu jedem anderen Video) extrem einfach und leicht zu emulieren – außer, dass es sich nicht um Neulinge handelt. Außerdem ist es in allgemein verfügbaren Quellen sehr gut dokumentiert.

  • Commodore PET – Ein ziemlich einfaches System, besonders seit Der gesamte Videoteil kann ziemlich abstrakt emuliert werden, dennoch müssen die VIAs zumindest teilweise emuliert werden. Am wichtigsten ist, dass es nur zwei Zeitquellen (neben der Uhr) enthält.

    Ein großes Plus für das PET (und die Nachverfolgung) ist die gute Dokumentation (auch aufgrund seiner Einfachheit). Während es ein CRTC enthält, hat fast kein Spiel (oder eine andere Software) die Neuprogrammierung überhaupt genutzt, um einen einfachen Weg und eine unvollständige (abstrakte) Emulation zu ermöglichen.

    Auf der Rückseite gibt es Nur eine relativ kleine Anzahl von Spielen und die meisten davon sind in BASIC geschrieben. Dies erfordert möglicherweise einige Nachforschungen, um den Grad der Abstraktion gegenüber den Details in der Emulation zu ermitteln.

  • Apple II – Wieder ein unglaublich gut dokumentiertes System mit viel Software. Vieles davon basiert auf der Versammlung. Obwohl die Hardware vollständig dokumentiert ist und nur aus TTL besteht, ist ihre Funktionsweise nicht wirklich einfach. Da einige Spiele stark auf Macken und Zählschleifen für ein genaues Timing angewiesen sind, kann die Emulation viel komplizierter werden als auf den ersten Blick angenommen.

    Ein Plus für Sie könnte sein, dass der Apple II in Brasilien (damals) sehr beliebt war.

  • TRS-80 – Auch hier die Videologik ist aus TTL aufgebaut, aber viel einfacher als auf dem Apple. Ähnliche andere E / A sind recht einfach. Auf der negativen Seite ist wieder eine relativ kleine Anzahl von Spielen.

Bisher können die wirklichen Alten, aber auch einige spätere Systeme als einfach eingestuft werden:

  • Sinclair-Spektrum – Obwohl die Logik einige Tricks bietet, pfeift &, handelt es sich um ein direkt gekacheltes Bitmap-Design. Bisher stehen die Chancen für eine Emulation gut, außer dass Spiele wie üblich sehr stark vom Timing abhingen, was die Emulation erneut erschwerte.

    Ebenso wie beim Apple II gab es in Brasilien einige Klone .

  • Ein ähnlicher Fall kann für die ORIC-Familie gemacht werden.

  • Atari ST – Aus heutiger Sicht kann dies eine Überraschung sein Der Atari ST verfügte jedoch über keine hochentwickelte Videohardware. Nur 3 Grafikauflösungen und eine 9-Bit-CLUT für bis zu 16 gleichzeitige Farben. Ein paar Synchronisationspunkte und ein einziger Timer. Dazu eine modernere CPU und ein dedizierter Soundchip. Klingt nach einem Match, das im Himmel gemacht wurde, wenn es nicht wieder für die Programmierer von Spielen wäre. Auch hier implizierte Software eine ganze Reihe von Tricks, um großartige Spiele zu erstellen (* 2).

Eine erste Schlussfolgerung für „einfache“ Systeme ist, dass die Hardware zwar weniger komplex ist, die Software jedoch große Anstrengungen unternommen hat, um dies zu überwinden. Infolgedessen kann sie Es muss gesagt werden, dass weniger komplexe Systeme eine Emulation nicht weniger komplex machen müssen, da nicht mehr unterschiedliche Hardware emuliert werden soll, sondern die einfache Hardware zeitlich sehr genau befolgt werden muss, damit vorhandener Spielcode ausgeführt wird.

Komplexe Systeme

Dies sind im Allgemeinen alle Systeme mit einem hoch entwickelten VDC

  • 9918 ff .- Hier geht es nicht so sehr um ein einzelnes System, sondern um das am häufigsten verwendete VDC (TI nannte es VDP). Während es für den TI 99/4 konzipiert wurde, verkaufte TI es an alle Interessierten. Es führte zur Mehrheit aller Systeme (* 3) mit einem 9918 oder einem seiner Folgedesigns (9928/38/58 / …).

    Spielekonsolen wie Coleco Vision , Sega SG-1000 bis zum Master-System sowie Computer von TI 99/4 oder Memotech MTX bis zum Die gesamte Welt der MSX -Maschinen hat diese Familie verwendet.

    Klingt großartig, nicht wahr? Natürlich gibt es viele Spiele, die verwendet werden müssen. Darüber hinaus trägt ein solches VDP zur Vereinfachung der Emulation bei, da es eine klare Trennung zwischen CPU und Anzeige bietet und die „Tricks“ eines Spiels auf das beschränkt, was das VDP bietet, was wiederum klar definiert ist. Und wieder ist es die vorhandene Software, die die Emulation schwierig macht, da Programmierer natürlich wieder Timing-Tricks verwendeten, um den Bildschirm zum richtigen Zeitpunkt zu manipulieren. Hat jemand „Racing the Beam“ erwähnt?

  • Commodore VC20, C64, C16 usw. – Das Gleiche gilt für alle Commodores-Heimcomputer. Sie unterscheiden sich in ihrer Komplexität zwar durch Sprites oder nicht, bieten Timer oder nicht und Sound oder nicht, das Grundlegende Das Problem ist das gleiche wie bei der 9918-Familie: Software, die bestimmte Zeitsituationen verwendet, um Spieleffekte zu erzeugen.

  • 6847-Systeme – Tandy CoCo, Matra Alice und andere weisen dasselbe Problem auf.

Ich könnte mit Spielsystemen wie NES oder MegaDrive weitermachen, aber ich werde diese Liste hier beenden, da das Prinzip jetzt klar sein sollte: Während einige Systeme wie Naht mögen Das zu emulierende Problem ist nicht die Komplexität der Videohardware, sondern immer dann, wenn ein Programmierer „verbessert“, was durch clevere Programmierung erreicht werden kann (* 4). Das eigentliche Problem für Ihr Projekt ist also nicht (so sehr) die Hardware (* 5), da es sich um die Software handelt, , insbesondere die Tricks und Tools, die in realen vorhandenen Spielen verwendet werden .

Das ist besonders schlecht, da Sie (wie ich es lese) vorhandene Spiele als Motivation verwenden möchten. Es werden nicht viele weiterlaufen Eine weniger harte Echtzeitemulation.

Durch Verringern dieser Abhängigkeit wird die Anzahl der Spiele verringert, die korrekt ausgeführt werden. Wenn Sie es auf ein Niveau reduzieren, das es ermöglicht, es in einem zeitlich begrenzten Kurs zu handhaben, ist es fast unmöglich, geeignete Spiele zu finden.

Fazit: Finden des Der richtige Kompromiss ist ein Weg, der jedoch erhebliche Forschung erfordert und gleichzeitig die Benutzerfreundlichkeit einschränkt.


Vielleicht ist es jetzt möglich anzugreifen Dies aus einem etwas anderen Blickwinkel. Versuchen wir Folgendes:

  • Verwendung vorhandener alter Hardware:

    Obwohl dies nachweislich funktioniert (* 6), aufgrund offener Entwicklungsumgebungen höchste Kompatibilität und Benutzerfreundlichkeit bietet, wird möglicherweise der „Build“ -Anreiz für EE-Studenten verfehlt.

  • Verwenden Sie vorhandene Lernspielsysteme:

    Systeme wie Andre LaMothes XGS sind großartige Tools, um in die detaillierte Hardwareerstellung und -programmierung einzutauchen. Sicher, etwas Löten erforderlich (es sind fertige Builds verfügbar), es handelt sich um fast vollständige softwaredefinierte Systeme, die durchgehend dokumentiert sind und eine riesige Bibliothek an Spielen bieten. Ganz zu schweigen von seinen Büchern über Spielprogrammierung.

    Ein großer Bonus ist, dass die Schüler das System möglicherweise auch nach Beendigung des Kurses mit nach Hause nehmen und spielen können.

  • Erstellen Sie Ihr eigenes einfaches System:

    Nehmen Sie eine klassische CPU (z. B. 6502). etwas RAM, FLASH und ein VIA sowie ein FPGA, um einen sehr einfachen CRTC zu implementieren und fertig. Die Schüler werden es löten, können sich über die Komponenten und ihre Interaktion informieren, einschließlich der FPGA-Nutzung (was heutzutage ohnehin ein Muss sein könnte) und dann ihre Software auf echter Hardware ausführen. Selbst mit kleinen Stückzahlen sollte es möglich sein, ein solches Board für 50 Euro oder weniger herzustellen. Wie die XGS-Idee wird es nach dem Ende des Kurses funktionieren – einschließlich des Gefühls der Eigenverantwortung als ihr System.

    Natürlich müssen die Schüler ihre eigenen Spiele schreiben, aber Einfache Spiele können in relativ kurzer Zeit durchgeführt werden – ganz zu schweigen davon, dass in Folgekursen auch Spiele verwendet werden können, die die vorherige Klasse geschrieben hat.

  • Emulieren Sie „Ihr eigenes“ System

    Ähnlich wie zuvor, nur dass alles virtuell ist. Es hat den Vorteil, ein Brunnen zu sein definiert und schließt das System, insbesondere eines, bei dem es keine Einschränkungen hinsichtlich einer weniger „perfekten“ Emulation gibt – die Emulation ist per Definition perfekt und alle ihre Macken sind die, die das System hat. Nachteil ist wieder der Software-Teil.

  • Verwenden Sie „weiche“ Hardware:

    Es gibt ein Projekt von Neil Franklin, das eine Reihe allgemeiner Systemkomponenten erstellt, ähnlich wie bei klassischen Computern, jedoch Mikrocontroller anstelle dedizierter Chips verwendet. Es kombiniert Emulation mit echter Hardware. Während Komponenten noch als Emulation entwickelt werden, sollen diese in einem Mikrocontroller laufen und ähnlich wie „echte“ Chips verwendet werden. Ein System kann mithilfe eines SoftCPU-Moduls eingerichtet werden, das beispielsweise einen 6502 mit etwas RAM und ROM emuliert, kombiniert mit einem SoftVGA, das eine terminalähnliche Videoschnittstelle und eine SoftPS2-emulierende Tastatur und Maus liefert. Alle sind über einen parallelen oder seriellen (SPI) Bus verbunden, der das Hinzufügen weiterer Komponenten ermöglicht, die auch der Emulation präsentiert werden können.

    Abgesehen davon, dass es nur um Emulation geht, verfügt es über eine begrenzte Menge an Hardware, die kann auf einem Steckbrett durchgeführt werden (dennoch ist es nie zu früh, mit dem Löten zu beginnen), es zeigt auch eine ganz typische Aufgabe des heutigen Engineerings – das Ersetzen der traditionellen Logik durch Mikrocontroller – im praktischen Gebrauch.

    Die Das Ergebnis ist ein System, das den Touch und das Gefühl eines echten (alten) Computers bietet, während es mit moderner Hardware erstellt wird, auf der parallele Emulationen ausgeführt werden.

  • Verwendung eines konfigurierbaren Emulators:

    Nein, hier geht es nicht um MAME oder ähnliches, sondern um ein in JavaScript geschriebenes Emulator-Framework, das die generischen Teile verarbeitet (einschließlich Timing), wo Ihre Schüler ihre Emulationen hinzufügen (was ein Ziel war, nicht wahr?), um ein ganzes System zu bilden. Da JS in der Quelle geliefert wird, kann sogar das Framework selbst geändert werden.

    Abhängig von der Qualität jeder Emulation kann dies für alles verwendet werden, von einem einfachen Demonstrationssystem bis zu einer vollständigen Neuerstellung der 1980er Jahre Computer.

Vielleicht sind einige der oben genannten Variationen ein guter Anfang?


* 1 – Ich werde mich nur auf Video konzentrieren (und CPU), um es einfach zu halten. Auch Video alleine funktioniert bereits gut, um komplette Systeme auszusortieren. Sound fügt eine weitere Dimension hinzu und kann dies weit über diesen Rahmen hinaus erschweren.

* 2 – Schauen Sie sich Xenon an. Ein bahnbrechender vertikaler Scroller mit mehreren Verschiebungsebenen und vielen animierten Objekten, die alle in der Software super flüssig laufen. Tatsächlich war es so fein abgestimmt, dass das Portieren auf den (normalerweise) leistungsfähigeren Amiga (grafisch gesehen) einige Zeit in Anspruch nahm und zu einem etwas geringeren Spiel führte.

* 3 – Systeme, die nicht erforderlich waren Einheiten verkauft. Andererseits waren einige Spielekonsolen mehr als nur erfolgreich, sodass sie möglicherweise sogar die Mehrheit in Zahlen erhalten.

* 4 – Die Blogposts des Hauptentwicklers des Glide64 für N64-Emulatoren hat eine mehrteilige Serie geschrieben ( Intro , P. .1 , S.2 , S.3 ) von Blogposts über Die Hürden, die er überwinden musste, damit der Videoemulationsteil funktioniert – alles nicht über die Komplexität der Emulation der Hardware, sondern über alle Möglichkeiten, mit denen die CPU die Ausgabe modifiziert und optimiert hat neben der Videologik. Dies ist umso bemerkenswerter, als das N64 bereits ein ziemlich abstraktes und geschlossenes System ist.

* 5 – Tatsächlich würde ich komplexere Videohardware als eine großartige Lektion für EE-Studenten betrachten, da es auch zeigt, was kann mit ein paar Toren anstelle von Software-Haufen gemacht werden – umso mehr, als sie später Hardware machen werden, nicht wahr?

* 6 – Stefan Höltgen von der FU Berlin verwendet zum Beispiel alte Spielesysteme in seinen Klassen, um (Nicht-EE-) Schülern echte Hardware und echte Programmierung sowie deren Auswirkungen auf alltägliche Aufgaben (und Spiele) vorzustellen.

Kommentare

  • @Tommy Nun, ich würde dies gerne vermeiden, da es keine einfache Antwort gibt. Das Wichtigste hier könnte sein, dass der Z80 etwas “ schrullig „, der 68k ist alles andere als einfach. Mit allen Erweiterungswörtern (bis zu CPU32) kann ein einzelner Befehl bis zu 11 Wörter (22 Byte) enthalten, und das Dekodieren ist ein ernstes Durcheinander. Andererseits hängt alles von der Art und Weise ist der Emulator aufgebaut. Der Z80 ist ein ziemlich geradliniger 8080, der einfach zu emulieren ist und einige Modifikatoren enthält, die einfach zu handhaben sind. Für die 68k, auch nur für die ursprüngliche, wird es viel mehr Arbeit sein.
  • “ Aufgabe, die in einer so begrenzten Zeit für Neulinge geeignet ist. “ Er sagte, dies seien Studenten im dritten Jahr, keine Studienanfänger, und sie ‚ haben bereits mehrere Voraussetzungen erfüllt.
  • @ wizzwizz4 Nun, Unabhängig von unserer persönlichen Meinung ist JS der rechtmäßige Erbe von BASIC. Ernst und in jeder Hinsicht! Denken Sie nur darüber nach.Es wird nicht nur n neben jedem tatsächlichen Computer ausgeführt, sondern ‚ ist sogar standardmäßig installiert, und es gibt so gut wie keine Möglichkeit, es zu entfernen, ohne viel Funktionalität zu verlieren. Denken Sie noch mehr darüber nach, wie viel schlechte und unglaublich langsame Software in JS geschrieben wurde – der perfekte Beweis ist nicht ‚ t it?
  • @Raffzahn It ‚ ist völlig anders Zum einen hatte BASIC mehrere inkompatible Geräte … Ohhh! Es ist der Nachfolger von BASIC!
  • Sie ‚ sind immer noch keine Studienanfänger, die Studienanfänger sind. Und ich denke, Sie sollten dem OP den Vorteil des Zweifels geben, dass er das Projekt nicht ‚ zuweisen würde, wenn die Schüler ‚ nicht haben den erforderlichen Hintergrund.

Antwort

Bisher gibt es einige gute Ideen.

Aber etwas zu beachten.

Wenn Sie so etwas wie eine CP / M-Maschine machen, sind sie wirklich recht einfach und einfach, zumal nicht nur das BIOS, sondern auch die IN / OUT-Natur alles isoliert der 8080 / Z80-Familie.

Es scheint mir nicht unangenehm, dass eine CP / M-Maschine das Ziel des ersten Semesters ist. (Ich kenne Ihren Lehrplan nicht)

Eine CP / M-Basismaschine benötigt jedoch keine Zyklusgenauigkeit, keine Interrupts. Das Komplizierteste ist, die Tastatur abzufragen, um festzustellen, ob eine Taste gedrückt wurde. (Im Gegensatz zur Überwachung von Keydown und Keyup oder irgendetwas anderem.)

Im zweiten Semester können Sie dann die Anforderungen wie die Schnittstelle zu einem Grafikchip hinzufügen. Die obige Instanz des SG-1000 könnte im ersten Semester leicht eine CP / M-Maschine sein und dann im zweiten Semester leicht in den SG-1000 umgewandelt werden (da Sie den Z80-Teil alle im ersten Semester erledigt haben).

Schließlich denke ich, dass es für Ihre Klasse wichtig ist, ein Akzeptanzprogramm zu haben, mit dem die Schüler ihre CPU überprüfen können. Nur wenige Dinge sind aufregender als das Debuggen einer fehlerhaften CPU, insbesondere in Bezug auf die Maschinensprache, mit der Sie möglicherweise nicht vertraut sind

Die 6502-Community verfügt über Testprogramme, mit denen überprüft werden kann, ob eine CPU alle Anweisungen ordnungsgemäß ausführt. Ich bin mir nicht sicher, was für die anderen CPUs verfügbar ist.

Und wenn Es ist ein Trost für den Umfang, ich habe sowohl einen Simulator als auch einen zugehörigen Assembler über einen zweiwöchigen Weihnachtsurlaub hin und her geschrieben, wenn Ihnen das hilft, wie groß die tatsächlichen Projekte sind. Grundlegende CPUs sind ziemlich einfach.

Kommentare

  • Auf dem Z80 bietet FUSE Tests an, obwohl nicht alle generisch sind oder hinsichtlich des genauen Zyklus unbedingt korrekt sind zeitliche Koordinierung; Sie ‚ sind ebenfalls in einem Ad-hoc-Textformat, aber ich ‚ habe sie in JSON transkribiert: github.com/TomHarte/CLK/tree/master/OSBindings/Mac/… – Verwenden Sie tests.in.json, um Anfangszustände festzulegen und herauszufinden, wie lange sollten Sie laufen, dann tests.expected.json, um die Ergebnisse zu überprüfen. Es gibt ‚ auch Zexall und Zexdoc, ursprünglich CP / M-Dateien, aber weitgehend angepasst und sehr langsam. Das Übergeben des ersteren erfordert eine Reihe von undokumentierten Dingen, um korrekt zu sein. Das Übergeben des letzteren ist nicht ‚ t.
  • … und das einzige, was ich ‚, das jemals für den 6809 gefunden wurde, vorausgesetzt, jemand dachte daran, einen Vectrex oder Coco / Dragon vorzuschlagen, ist in einer breiteren Williams Arcade Machine Test Suite unter seanriddle.com/wetsold.html . Für den 6502 bin ich bei den Tests von Klaus Dormann, Wolfgang Lorenz und AllSuiteA sehr an Bord, die alle viel prominenter zu sein scheinen als die Tests Z80 oder 6809.
  • @Tommy Soweit Ich ‚ weiß, dass jeder Test von Fuse ‚ zyklusgenau ist. Bitte melden Sie Fehler, wenn sie ‚ nicht sind 🙂
  • @PhilipKendall siehe meine E-Mail vom 29.5.2017 an fuse-emulator-devel re: DJNZ und ob der Offset bei einer letzten Iteration gelesen wird. Alan Cox kam zu dem Schluss, dass das getestete Verhalten von FUSE ‚ korrekt ist, dass es ‚ s “ offen für Interpretationen “ basierend auf den verfügbaren Quellen. Daher fand ich “ nicht unbedingt korrekt. “ war fair. Ich hätte wahrscheinlich klar sein müssen: Ich habe nur eine Handvoll Abweichungen in der Interpretation der Beweise Ihres Teams ‚ und meiner eigenen gefunden. Entschuldigung für die schlechte Form.
  • @Tommy – “ Schlussfolgerung von Alan Cox, ob FUSE ‚ getestet wurde Das richtige Verhalten war, dass es ‚ s “ offen für Interpretationen ist “ basierend auf dem verfügbaren Quellen “ …Obwohl ich viel Respekt vor dem habe, was Alan tut, ist es ‚ ziemlich einfach zu überprüfen, ob das getestete Verhalten mit einer tatsächlichen Z80-CPU identisch ist (insbesondere für CMOS-Versionen) Dies kann auf einem Steckbrett mit niedrigen Taktraten ausgeführt werden, um sehr einfach detaillierte Tests einzurichten. Dies ist also definitiv ein Fall, in dem er der Meinung ist, dass ‚ etwas nicht stimmt kann es sehr einfach demonstrieren.

Antwort

Kann ich die SG-1000 ?

Das System besteht kaum mehr als aus drei handelsüblichen Chips – dem Z80, dem TMS9928A für Grafik und dem SN76489 für Sound mit den Controllern als dumme Gruppen von NO-Schaltern (normalerweise offen).

In Software oder Hardware können Sie jeden Teil davon isoliert oder alle zusammen simulieren oder emulieren, um das gesamte System zu erstellen.

Die Das System verwendet für seine Spiele einfache, nicht bankgeschaltete ROMs, die normalerweise verwendet werden Sie sollten sich nicht auf Tricks wie Interrupts in der Mitte des Bildschirms oder Zykluszählung verlassen, um deren Effekte zu erzielen. Nur eine einzige Kachelkarte und eine Reihe von Sprites oben drauf. Ich schlage vor, dass dies viel einfacher ist als ein System, das viele interagierende interne Komponenten und intelligente Kassetten wie das NES enthält.

Sie sollten Ihre eigenen Spiele zum Emulieren bereitstellen, anstatt nicht lizenzierte zu verteilen Natürlich urheberrechtlich geschütztes Material.

Kommentare

  • … und für die Aufzeichnung ist die ColecoVision genau dieselbe Sammlung von Komponenten mit unterschiedlichen Verbindungen Logik und etwas kompliziertere Joypads. Daher ist ein SG-1000-Emulator normalerweise leicht zu erweitern, um beide zu unterstützen.
  • Bemerkenswert ist auch, dass der 9918 ein komplexer Chip mit Sprites, komplexen Modi und Daten ist, wie er es nicht getan hat ‚ möchte nicht verwenden. Ist ‚ das?

Antwort

Eine einfache, Ein einfacher Computer wie der ZX Spectrum klingt vernünftig – aber es gibt einfach zu viele gute Emulatoren, um dies zu einer nützlichen Option zu machen. Ich denke auch, dass der 6502 einfacher zu emulieren ist.

Eine mögliche Option könnte also das Oric-1 oder Atmos by Tangerine-Systeme sein , die einen 6502-Speicher ohne Bankverbindung, keine benutzerdefinierten Chips außer einfachem Video und einen relativ einfachen Bildpuffer verwendeten. Es ist auch bei weitem nicht so bekannt wie das Spektrum, dennoch gibt es Software (Spiele), mit der einige einfache Kompatibilitätstests durchgeführt werden können (ich denke, ein gewisses „Erfolgserlebnis“ ist für Studenten äußerst wichtig). Es gibt bereits eine Reihe von Emulatoren für den Atmos (meines Wissens drei), aber ihre Anzahl ist begrenzt, sodass Sie leicht herausfinden können, ob jemand betrogen und einfach Code kopiert hat.

Keiner der Oric-Spiele waren meines Wissens so ausgefeilt, dass Sie eine 100% zyklusgenaue Emulation benötigen würden, um die Spiele auszuführen.

Kommentare

  • I ‚ d argumentieren, dass die Oric-Architektur Rasterrennen abschreckt, indem sie keinen Seitenkanal mit Videosteuerungsregistern hat und nicht so eingerichtet ist, dass Rennen möglicherweise Ihre Farbauflösung erhöhen (im Gegensatz zu einem Spektrum). Wenn es nur zwei HIRES-Puffer hätte, würde ich dies ‚ sicherer sagen. Würden Sie dem zustimmen?
  • @Tommy Ich ‚ bin mit der Oric-Videoschaltung nicht allzu vertraut. Was ich auf jeden Fall sagen würde, ist, dass der Oric eine so kurze Lebensdauer und eine so begrenzte Benutzerbasis hatte, dass ausgefeilte Techniken zum Optimieren des Videos, wie wir sie aus dem ZX-Spektrum kennen, nicht ‚ t waren entwickelt (zumindest nicht während des aktiven Lebens des Computers, gibt es ‚ eine Reihe interessanter Demos hier demozoo.org/platforms/ 49 )
  • Oh, dann werde ich ‚ bessere Argumente liefern: Der Oric-Videochip hat einen modalen Status, einschließlich Text- oder Grafikmodus, aber nein exponierte Register. Alles wird durch Steuerbytes im Videostream festgelegt – einschließlich Vordergrund- und Hintergrundattributen. Die Leute neigen dazu, sich darüber zu beschweren, weil dies bedeutet, dass Sie ‚ auf vier Farben pro Zeile beschränkt sind, von denen zwei die bitweisen Ergänzungen der beiden anderen sind. Einige der modernen Spiele sehen jedoch immer noch sehr gut aus – z. Stormlord youtube.com/watch?v=QSDy-BC580M
  • @Tommy Die seriellen Attribute machen die Programmierung etwas schwieriger, I ‚ Ich vermute, aber das Ausmaß der Attributkollision ist meiner Meinung nach sogar noch besser als beim ZX-Spektrum.
  • Xenon 1 muss exakt zyklisch sein, sonst blockiert es, wenn das Schiff explodiert (Haftungsausschluss: Ich habe einen orischen Emulator für den Amiga namens amoric geschrieben und bin auf dieses Problem gestoßen, aber nur auf dieses Spiel)

Antwort

Basierend auf Ihren Kriterien und der Notwendigkeit, das Projekt für Ihre Schüler interessant zu halten, würde ich empfehlen ernsthaft in Betracht gezogen das Vectrex Arcade-System, das Anfang der 1980er Jahre von Milton Bradley verkauft wurde.

Geben Sie hier die Bildbeschreibung ein.

Da der Vectrex eine Vektoranzeige anstelle einer Rasteranzeige verwendet, ist dies nicht der Fall Die Anzeige wird von der CPU verwaltet, und die Anzeige selbst ist auf einem modernen System einfach und mit guter Leistung zu emulieren.

Neben der Emulation der Vektoranzeige kann die CPU ( Motorola 6809) und der E / A-Chip (MOS 6522) stehen nicht für zu schleimig Dies ist eine Herausforderung, da es sich um einfache 8-Bit-Teile handelt, die sehr gut dokumentiert sind.

Das Speichermodell ist auch sehr einfach, ohne dass mir Bankschemata bekannt sind. Es gibt einen gemeinsamen PSG-Soundchip im Vectrex, aber die Emulation könnte als „Extra Credit“ angesehen werden.

Im Gegensatz zu anderen einfachen Spielekonsolen der frühen 1980er Jahre haben sich die Vectrex-Spiele angesichts der Tatsache recht gut behauptet seine Fähigkeit, glatte monochrome Grafiken einschließlich 3D-Drahtgitter zu rendern. Dies wird weiter durch die Popularität der modernen „Home Brew“ -Entwicklung belegt, in der Entwickler weiterhin neue Vectrex-Spiele entwickeln.

Ein letzter Vorteil für Vectrex besteht darin, dass das ursprüngliche System-ROM frei verteilbar ist.

Kommentare

  • Außer, dass der Vectrex auch die ‚ Racing the Beam Kategorie, nicht ‚ nicht?
  • @Raffzahn, so wie ich es verstehe, steuert die Vectrex-CPU der Elektronenstrahl – genau das Gegenteil von einer “ rennenden “ Situation, in der Software genau zeitgesteuerte Zustandsänderungen vornehmen muss Bleiben Sie mit einer extern zeitgesteuerten Raster-Scan-Anzeige auf dem Laufenden.
  • @Mark ‚ ist mit dem VCS identisch. Auch hier wird der Strahl von der CPU gesteuert. Ohne dass die CPU in jeder Zeile auf WSYNC zugreift und bevor die Zeile fertig ist, wird der Bildschirm ins Stocken geraten. Und soweit ich das OP verstehe, geht es ‚ genau darum, kein System mit strengen Timing-Anforderungen neu zu erstellen, die für den Vectrex unerlässlich sind.
  • @Raffzahn: Die CPU im VCS steuert die Vertikale, aber nicht die Horizontale. ‚ ist es nicht ungewöhnlich, dass ein Spiel Dutzende oder sogar Hunderte von Scanzeilen ohne dazwischenliegende WSYNC ausgibt. Ohne WSYNC befindet sich der Strahl alle 76. Zyklus an derselben horizontalen Position. Das Speichern von WSYNC ist oft der einfachste Weg, um darauf zu warten, dass der Strahl die rechte Seite des angezeigten Bereichs erreicht, aber ‚ ist kaum der einzige Weg. Ein Programmierer, der so geneigt war, konnte die komplizierten Details von Sprite-Bewegungen und Verhaltensweisen ausnutzen, um ein Spiel zu schreiben, das WSYNC überhaupt nicht verwendete.
  • Ähm, Leute, wir sprechen hier von einem Emulator. Es wird kein Problem mit dem Verblassen der Leuchtstoffe geben, während die emulierte CPU zu lange braucht, um den nächsten Frame zu zeichnen. Es gibt keinen “ Strahl “ und es gibt sicherlich keinen Grund, warum der Emulator “ rennen „, da die Emulatoranzeige zwischen den Frames so lange wie nötig ziemlich statisch bleibt.

Antwort

Das Erstellen eines Emulators von Grund auf ist eine relativ große Aufgabe, insbesondere für unerfahrene Schüler, und kann sich als problematisch erweisen. Sie müssen also wirklich vorsichtig sein, welche Plattform Sie emulieren und welche Informationen Sie teilen / verwenden möchten. Für mich ist die beste Wahl eine ZX 48K-Plattform , da ich darauf gewachsen bin und mit deren Innenleben vertraut bin, daher die Antwort wird dadurch voreingenommen sein … Aber wir müssen bedenken, dass die Schüler heutzutage normalerweise nicht so viel gesehen / benutzt / gewusst haben wie wir … Was Sie erreichen müssen, ist:

  1. korrekte CPU-Iset-Emulation

    , selbst wenn es Unmengen von Befehlssatzdokumenten gibt Sie müssen vorsichtig sein, da beispielsweise bei Z80 99,99% Fehler enthalten. Sie sollten also eine getestete Referenz-Iset für sie auswählen, die jetzt korrekt (oder zumindest grundlegend funktionsfähig) ist.

    Hier ist zum Beispiel meine Z80-Iset, die ZEXAL mit 100% Erfolg übergibt:

    Die Z80-Plattform hat einen großen Vorteil: Es gibt umfangreiche Tester dafür wie ZEXALL Übung , die beim Debuggen des Emulators sehr hilfreich sein kann.

    Ich denke, dort gab es auch Versionen für i8080, aber ich kenne keine solchen Tester für unterschiedliche CPU-Familie.

  2. Timing

    Gut für die grundlegende Emulation ist die Clock-Tics-Methode (oder Drosselung) ausreichend, die bekannt und verwendet ist … Ich sehe hier kein Problem. Heutzutage haben Computer eine relativ gute Auflösung für das Timing (auf PC: RDTSC, unter Windows PerformanceCounter, …).

    Der Basisemulator kann die INHALTE der emulierten Plattform ignorieren, aber Vorsicht vor einigen Betriebssystemen / Spielen / Apps unbrauchbar gemacht werden, wenn nicht richtig emuliert. Dies gilt nicht nur für Demos. Das übliche Timing auf alten Computern wurde von einem Interrupt (normalerweise Videoaktualisierung) und einer begrenzten Anzahl von Zyklen abgeleitet, die zuvor ausgeführt werden konnten. Bei Konflikten kann die Anzahl der gleichzeitig ausgeführten Anweisungen sehr unterschiedlich sein, und einige Programme können überlaufen und sich selbst beschädigen oder einfrieren. Die CONTENTION ist mit Clock Tics am schwierigsten zu implementieren, daher sollten Sie sie unbedingt vermeiden … Andererseits ist sie mit MC-Level-Timings sehr einfach und nur ein paar Codezeilen.

  3. Sound

    Dies ist ein plattformabhängiges Problem, und Sie sollten die API auswählen, für die verwendet wird Ton Eingabe / Ausgabe korrekt. Unter Windows ist WAvEIN / WAVEOUT aufgrund der geringen Latenz und der einfachen Verwendung die einzige verwendbare Option. DirectX ist unbrauchbar (zumindest zu dem Zeitpunkt, als ich versuchte, es für eine solche Aufgabe zu verwenden), da es hohe Latenzen und keine funktionierenden Rückrufe aufweist.

    Ich würde einen gepufferten Ansatz anstelle der direkten Lautsprechersteuerung verwenden, damit Ihre Emulation platzen kann die Ausführungszeit anstelle von korrekte Ausführung auf MC-Ebene (was ich trotzdem mache, aber ich bezweifle, dass die Schüler dies in der vorliegenden Zeit tun könnten).

  4. Video

    Dieses Video ist ebenfalls plattformabhängig. .. und Sie sollten API verwenden, mit der Ihre Schüler vertraut sind. Sogar die Strahlverfolgung ist mit einer einfachen Bitmap relativ einfach zu implementieren … Auf Computern wie ZX hat die Scanline-Reihenfolge eine besondere Bedeutung und kann für Neulinge sehr ablenkend sein. Daher ist es besser, Übersetzungs-LUT-Tabellen zu verwenden, die zwischen Adresse und y-Koordinate vor und zurück konvertieren.

    Die meisten älteren Plattformen verwendeten eine Bildwiederholfrequenz von 50 Hz / 60 Hz und eine relativ kleine Auflösung, sodass Computer heutzutage auch mit nicht gut optimierter Emulation immer noch schnell genug dafür sein sollten. Wenn nicht, können Sie auch Frames überspringen …

  5. andere HW- und Peripheriegeräte

    Das absolute Minimum ist RAM / ROM-Speicher und Tastatur. Der Speicher ist normalerweise sehr einfach, nur statisches Array und einige Dinge zum Wechseln von Seiten … Die Tastatur kann emuliert werden, indem die E / A entsprechend den gedrückten Tasten eingestellt wird. Die E / A kann ebenso wie der Speicher einem Speicher zugeordnet werden. Das Überfüllen der ISR-Routine ist ebenfalls eine Option, die jedoch die Tastatur für benutzerdefinierte Tastenhandler unbrauchbar macht.

    Ich würde mich nicht um FDC-, AY- usw. Peripheriegeräte kümmern, da der Emulator so einfach wie möglich gehalten werden sollte. Aber wenn Sie Glück haben, gibt es möglicherweise einige Studenten, die anderen bei diesem Projekt weit voraus sind. Für diejenigen, die Sie vorschlagen, können Sie aufregende Funktionen wie FDC, DMA und sogar echten Soundkarten-Sound (für echte Bänder oder Audio-Player) implementieren ermöglicht viele nette Funktionen, siehe zum Beispiel:

  6. Dateien

    Ich würde mich für Z80 / SNA-Dateiformate entscheiden Die Verwendung von TAP / TZX ist nett, aber von Anfang an wäre der Emulator ziemlich fehlerhaft, sodass das Laden von Routinen möglicherweise nicht richtig funktioniert, was das Verwenden und Debuggen sehr schwierig macht.

  7. ROM

    Dies ist der problematischste Teil, da viele Plattform-ROMs immer noch nicht kostenlos sind und durch Extrahieren / Herunterladen / Verwenden für Bei der Emulation besteht möglicherweise das Risiko von rechtlichen Problemen.

    Aus einigen Kommentaren hier geht hervor, dass ZX-ROMs jetzt gemeinfrei sind … und es gibt auch Kommentare zu kommentierten ROMs Es macht es viel einfacher, die ersten Schritte des Emulators zu debuggen (wenn noch nichts funktioniert).

    Aber Sie sollten immer Emulation und rechtliche Dinge berücksichtigen, insbesondere wenn die Emulatoren irgendwo im Internet platziert werden

Hier einige verwandte QA-Links von mir:

Antwort

Suchen Sie eine Ich schlage vor, in 8-Bit-Computern (oder frühen einfachen 16/32-Bit-Computern) zu bleiben. ZX Spectrum 48k ist ein relativ einfaches System – sehr gut dokumentiert, keine Sprites, kein Audio-Chip, nein RAM-Bänke, einfache E / A, si Viele Grafiken (allerdings mit einem seltsamen Layout), keine perfekte Emulation des Zyklus erforderlich, bekannte CPU, einfache Handhabung der Kassette (könnte durch ROM-Traps noch einfacher werden). Es gibt Tonnen Spiele, viele davon mit zulässiger Lizenzierung.

Der Nachteil: Es gibt eine enorme Anzahl verfügbarer Emulatoren, viele selbst in der Retro-Kategorie und viele mit Quellcode verfügbar, daher ist die Gefahr des Betrugs und des Kopierens von anderem Code hoch.

Und natürlich würde die Arbeit an einem Emulator eines zuvor nicht emulierten Systems einen zusätzlichen Vorteil für das Gefühl der Leistung bieten.

Kommentare

  • Ich hatte den gleichen Instinkt, würde aber erweitern, indem ich vorschlage, dass SNA und Z80 und ausreichend gut definierte Snapshot-Formate, die Sie nicht benötigen ‚ Sorgen Sie sich nicht einmal um die Bandemulation. Und lassen Sie uns ‚ ehrlich sein, TZX ist zu diesem Zeitpunkt ein kleines Miasma.
  • Ich glaube, das Spectrum-ROM ist jetzt gemeinfrei kann helfen (oder die Dinge zu einfach machen)
  • Das ZX Spectrum ist ein großartiges Beispiel für einfache Hardware, aber auch eine recht komplexe Programmierung für die Zykluszählung (Racing the Beam), um brauchbare Spieleffekte zu erzielen.
  • @Tommy Oh, ich würde den ZX80 / 81 aus dem gleichen Grund niemals vorschlagen. Und obwohl ich kein echter Spectrum-Fan bin, habe ich einen guten zeitabhängigen Code dafür gesehen. Die meisten prominenten Bildschirmmanipulationen, nachdem dieser Teil angezeigt wurde, aber bevor er einmal ausgeführt wird. ‚ ist ein sehr einfaches Problem, das auf vielen Systemen auftritt. Kein großes Problem, aber zeitabhängig. Zum Beispiel einfache Emulationsschemata, bei denen nur die Geschwindigkeit auf Frame-Ebene gedrosselt wird und auf schnelleren Emulations-Hosts Mist erzeugt wird …
  • @Stormcloud Das Spectrum-ROM ist nicht gemeinfrei, obwohl die Berechtigung erteilt wurde gewährt, um es zur Verwendung mit Emulatoren zu verteilen. Die ZX80- und ZX81-ROMs wurden unter der GPL veröffentlicht.

Antwort

Darf ich einen Blick darauf werfen? einige frühe Arcade-Spiele? Speziell diese beiden 8080 / Z80-Plattformen:

  • Midway 8080 – Entwickelt 1975 und unterstützt Space Invaders . Verwendet einen Schwarzweiß-Frame-Puffer mit 256 x 224 x 1 Bit im RAM.

  • VIC Dual – Sega / Gremlin „s Plattform wurde 1977 entwickelt – das bekannteste Spiel ist Carnival . Das Video ist ein 32×28-Array mit 8×8 Zeichen (alle im RAM) und kann ein einfaches unterstützen Farbpalette, die einem PROM zugeordnet ist.

Diese sind sehr einfach zu emulieren, sobald die Z80-Emulation funktioniert. Es gibt keine lustigen Scanline-Tricks oder seltsamen CPU-Wartezustände. Player Steuerelemente sind über Bitmap-E / A-Ports verfügbar.

Sie können mit diesen Plattformen interaktiv auf http://8bitworkshop.com/ (Vollständige Offenlegung: Ich betreibe diese Website und bin der Autor der auf der Website verlinkten Bücher, die diese Plattformen beschreiben.)

Der Apple] [ist auch eine gute Wahl für eine 6502-basierte Plattform. obwohl das Video-Subsystem komplizierter ist als in den beiden Arcade-Plattformen.

Kommentare

  • Für was es ‚ wert, ich denke Space Invaders ist ein inspirierter Vorschlag. Wenn der Speicher dazu dient, ‚ ist nur ein 8080 mit einem 1bpp-Bitmap-Bildschirm, einigen Port-E / A für die Steuerelemente, kein Versuch, das Raster zu starten, Audio, das nur die Form “ Rauschen X jetzt auslösen „, sehr entspannte Genauigkeitsanforderungen, und es entsteht ein Spiel, das sie gelegentlich noch zu verkaufen versuchen. Es ist ‚ nur das Legalitätsproblem, das eine Pause geben könnte, obwohl ich ‚ bei akademischen Ausnahmen immer verschwommen bin.
  • Das ‚ ist ziemlich richtig, es gibt ‚ auch einen externen Chip, der beim 8080 ‚ hat keinen Barrel Shifter. Es sollte ‚ kein Legalitätsproblem geben, das die Hardware emuliert (es gibt ‚ kein urheberrechtlich geschütztes BIOS oder anderen Code) und es ‚ ist ziemlich einfach, ein eigenes Spiel zu schreiben, z. B.: 8bitworkshop.com/v3.2.0/?platform=mw8080bw& file = game2.c

Antwort

PET oder TRS80 funktionieren möglicherweise Gut. Einfache Hardware mit Text auf dem Bildschirm, damit sie mit geradem Text emuliert werden können, indem sie später Code für ihre ungeraden Zeichensätze hinzufügen, und es ist unwahrscheinlich, dass sie viel Code für den exakten Zykluszähler enthalten.

Bonusidee nach, wenn Sie Wenn Sie sich für ein PET entscheiden und C64-Unterstützung hinzufügen, erhalten Sie Grafiken.

Der 6502 ist wahrscheinlich einfacher zu emulieren.

Der letzte Gedanke könnte das Ohio Scientific Superboard II oder die britische Inkarnation sein UK101, da ich nicht glaube, dass es umprogrammierbare Videohardware hat.

Kommentare

  • Ja, alle drei (PET, TRS, Superboard (ich habe es total vergessen) über die spätere)) sind großartige einfache Maschinen und ideal für Emulationen. Es fehlt aber auch eine gute Auswahl an gebrauchsfertigen Spielen. Ganz zu schweigen von Farbe und Ähnlichem, die Menschen heute erwarten können.

Antwort

Der digitale PDP-8 ist ein sehr guter einfache Architektur, für die es einfach sein kann, einen Emulator zu schreiben. Einige Gründe hierfür sind:

  • Nur 8 grundlegende Anweisungen
  • Keine zu emulierende Videoschnittstelle usw., nur Terminal-E / A
  • Keine Notwendigkeit Zyklusgenauigkeit, die tatsächliche Reihe von Maschinen selbst hat nicht das gleiche Verhalten für die verschiedenen Implementierungen garantiert.
  • Kann mit einer einfachen Einrichtung beginnen (z. B. einer 4Kword-Maschine mit FOCAL-69) und den Emulator schrittweise weiterentwickeln komplex (z. B. eine 32Kword-Maschine mit erweiterter Arithmetik, auf der OS / 8 von einer RK05-Festplatte ausgeführt wird)
  • Viele Handbücher online verfügbar
  • Die MAINDEC-Diagnose und ihre Anweisungen sind online verfügbar kann verwendet werden, um zu testen, ob die Emulation ordnungsgemäß funktioniert.

Dies deckt möglicherweise nicht alle Ihre Anforderungen ab, z. B. speicherabgebildete E / A, umfasst jedoch sicherlich Dinge wie Befehlsdecodierung und Adressierungsmodi. Vieles Die Dokumentation reicht bis zur grundlegenden Hardware-Ebene, die für einen EE-Kurs geeignet sein könnte.

Kommentare

  • Ein interessanter Punkt ist, dass die meisten der oben genannten Systeme entweder Z80- oder 6502-CPUs haben, die beide hinsichtlich ihrer unterstützten Adressierungsmodi etwas fehlen. Wenn die Abdeckung von Adressierungsmodi wichtig ist, kann der PDP-8 eine viel bessere Auswahl demonstrieren.
  • Für das Spiel “ “ Aspekt der Frage, ich glaube, dass Adventure für PDP-Architekturen immer noch beibehalten / wiederbelebt wird (aber überprüfen Sie das – ich könnte mich irren).
  • @TobySpeight You ‚ ist richtig, es wird beibehalten oder wiederbelebt, aber für das PDP-10 , das mit dem PDP-8 völlig inkompatibel ist.

Antwort

Die Option ZX Spectrum wurde bereits erwähnt: Ihre Stärke liegt in der äußerst vereinfachten E / A-Hardware und der Tatsache, dass viele vorhandene Spiele KEINEN präzisen Zyklus erfordern -Korrekte Emulation aller Macken mit Ausnahme des Klangs (nichts in der Nähe des korrekten Klangs ohne zyklusgenaue Emulation der CPU und korrektes Downsampling des von der CPU erzeugten 1-Bit-Zwischentonstroms).

Jede andere Option für Gaming-Hardware wie NES, G. enesis und all die ähnlichen Sprite-basierten Maschinen sind offensichtlich keine Option, da viel Zeit benötigt wird, um die komplexe Hardware zu erlernen, Möglichkeiten zu entwickeln, sie zu emulieren, Mängel in der Emulation zu umgehen usw. Zum Beispiel sogar „einfaches“ Super Mario Das Spiel auf NES funktioniert nur, wenn das Sprite-Kollisionsbit in der PPU korrekt emuliert ist.

Die verbleibenden Optionen sind meiner Meinung nach die folgenden:

  1. IBM PC auf der Basis des frühen Textmodus
  2. eine der vorhandenen CP / M-Maschinen
  3. (ohne „große“ Maschinen vor der „Mikro“ -Ära)

Der entscheidende Punkt Hier ist die Anzeige im Textmodus, die nicht so schwer zu emulieren und auf dem Host-Computer viel einfacher anzuzeigen ist (auch wenn keine Pixelgrafiken angezeigt werden müssen, arbeiten Sie mit dem Fenstersystem / SDL / usw.!).

Es sind jedoch noch einige Untersuchungen erforderlich, um die richtigen Programme für die Arbeit zu sammeln, einschließlich Spiele. Es gibt einige Spiele im Textmodus in CP / M und sollten auch einige für IBM PC sein.

Kommentare

  • Mit dem potenziellen Vorteil von a CP / M-Maschine ist, dass es ‚ mindestens eine gibt, für die eine bloße 8080-Emulation ausreicht?
  • Schön, aber es gibt sie auch Gibt es nicht viele Spiele für IBM im Textmodus?
  • @Raffzahn – es muss nur einen geben .
  • @Jules Hehehe … ja richtig. Aber dann würde ich ‚ sagen, dass ein Minimum von 8080 den Trick macht.

Antwort

Ein System mit der geringsten Anzahl an benutzerdefinierten Chips wäre wahrscheinlich ein saubereres Ziel, das emuliert werden muss.

Ein Apple II ist eines der einfachsten Systeme (kein LSI außer der 6502-CPU), für die Es wurden riesige Mengen (leicht verfügbarer) Spiele geschrieben.

Es wurden auch Tonnen von (Vintage-) Büchern und Artikeln über die Systemarchitektur von Apple II und 6502 CPU veröffentlicht. Daher wurde das System von mehreren (zitierfähigen) Quellen ziemlich gut dokumentiert.

Emulatoren für einen Apple II können in der Größenordnung von 10 KB Zeilen C-Code liegen, möglicherweise etwas weniger, was möglicherweise in Ihren passt Kurszeitrahmen.

Kommentare

  • Die CPU mag einfach sein, aber das Emulieren von Peripheriegeräten (Anzeige usw.) wäre wahrscheinlich immer noch eine beträchtliche Aufgabe

Antwort

Angenommen, es handelt sich um einen Beitrag, sind dies meine direkten Notizen zu den Maschinen, für die ich Emulatoren geschrieben habe. in ungefährer chronologischer Startreihenfolge, hoffentlich mit etwas Farbe für Dateiformate usw .:

Atari 2600

Das Unterscheidungsmerkmal des Atari 2600 ist die Synergie zwischen Prozessor- und Grafikausgabe; Spiele Es ist eine Echtzeitfunktion implementiert, die während der Ausführung des Rasters grafische Komponenten für die Videoausgabe bereitstellt. Ich denke, dies ist eine schlechte Wahl für den angegebenen Zweck – die eigentliche harte Arbeit beim Schreiben eines 2600-Emulators ist das Timing und das Zusammenspiel außerhalb des Mikroprozessors.

Apple II

Relativ einfache Hardware, aber sehr nuanciert, mit mehreren Grafikmodi, und Sie müssen NTSC-Video lernen, um dies zu können Dekodieren Sie die Farbausgabe. Das Emulieren der Disk II ist ebenfalls ein Muss, aber das ist eine Herausforderung für sich, da die gängigsten Dateiformate von Ihnen erwarten, dass Sie einen Apple GCR-Encoder bereitstellen.

ZX80 / 81

Auch für den angegebenen Zweck wahrscheinlich zu kompliziert, besteht die zentrale Idee darin, den Aktualisierungszyklus der CPU und eine Teilmenge von Befehlsabrufen neu zu verwenden, um Videos zu scannen. Wenn Sie diesen Mechanismus nicht wie das Original erneut implementieren möchten, wird nur der ROM-Standardtextmodus verwendet.

Commodore Vic-20

Dies ist eine einfache Bitmap-Maschine Mit einem einfachen Prozessor im 6502 und einer anständigen Menge an Spielen, von denen einige auf Kassette geliefert wurden, müssen Sie kein Band- oder Festplattenlaufwerk mehr emulieren. Die einzige Fliege in der Salbe sind die 6522er. Dies sind Kombinations-Timer / Shifter / Input / Output-Chips mit einer ganzen Reihe von Macken. Ein guter Vorteil des Vic-20 ist jedoch, dass er ohne funktionierende 6522s bis zur BASIC-Eingabeaufforderung bootet und BASIC selbst nur mit den implementierten Timern des 6522 funktioniert Auch ungenau.

Die kurze Zeit als Marktführer vor der Einführung des C64 begrenzt auch die Anzahl der Titel, die die Hardware fortgeschritten nutzen – es gibt zeitgenössische Beispiele für Rasterrennen wie die Imagic-Titel , aber sie sind in der Minderheit.

Die Dateiformate, in denen Daten aufbewahrt werden, sind ein Chaos Wenn Sie sich jedoch auf die Unterstützung von Kassetten beschränken und darauf achten, nur die Titel zu verwenden, die auf der Kassette geliefert wurden, sollte dieses Problem vermieden werden.

ZX-Spektrum

An anderer Stelle behandelt; Ich denke eine gute Wahl. Vor allem, wenn Sie sich an die Snapshot-Dateiformate halten.

Oric 1 / Atmos

An anderer Stelle behandelt; Eine gute Wahl, aber es gibt noch eine andere dieser nervigen 6522er. Die meisten Spiele sind auf Band verfügbar. Sie müssen all das unterstützen.

Acorn Electron

Bitmapped, Ein 6502 plus eine relativ einfache externe Logik, aber sechs verschiedene Grafikmodi und das Timing wären problematisch – die Kosten für jeden Zyklus hängen vom Bereich ab, auf den zugegriffen wird (ROM gegenüber RAM), dem Grafikmodus (40 Spalten gegenüber 80 Spalten) Modi) und möglicherweise den aktuellen Grafikausgabezustand (80-Spalten-Modi blockieren RAM-Zugriffe während des Pixelbereichs; 40-Spalten-Modi nicht). Sie können ihn jedoch für die meisten Spiele einfach als 1-MHz-Maschine modellieren und meistens davonkommen Eine zeilenorientierte Version der Grafikausgabe.

Es gibt eine geringe Anzahl von Spielen im ROM, aber zum Glück erlaubt die Bandhardware meistens eine Emulation von sehr geringer Qualität: Es ist der Typ, der eine Unterbrechen Sie beim Empfang von Bytes mit nur zwei Titeln, von denen ich mir eine tiefere Selbstbeobachtung vorstellen kann.

Amstrad CPC

Wahrscheinlich einer Für den angegebenen Zweck zu vermeiden – es hat einen 6845 CRTC, der für eine sehr konfigurierbare Grafikausgabe und damit viele Titel sorgt, die das Raster rennen. Die Festplattennutzung war ebenfalls weit verbreitet, aber der 8272-Festplattencontroller bereitet im Vergleich zum WD1770, den Sie an anderer Stelle häufig sehen, zusätzliche Kopfschmerzen.

MSX und / oder ColecoVision / SG1000

Unterschiedliche Soundchips, gleiche CPU und Video.Ich denke tatsächlich, dass man das Timing-Zusammenspiel ziemlich weit ignorieren kann, weil der Videochip seinen eigenen RAM auf Distanz hält. Aber es sind Kacheln und Sprites und vier verschiedene Grafikmodi, für ein wahrscheinlich zu umfangreiches Unterfangen für einen Mikroverarbeitungskurs.

Mastersystem

Technisch gesehen ein verbessertes SG1000, das alles ist, was die Maschine tut, plus einen zusätzlichen Grafikmodus, aber der zusätzliche Grafikmodus ist so viel besser als die anderen, dass nur ein Titel etwas verwendet sonst. Es vereinfacht die Dinge also etwas, wenn Sie „glücklich sind, das Timing größtenteils zu ignorieren.

Aber Sie sprechen immer noch davon, Sprite-Prioritäten zu berücksichtigen, nach Kollisionen pro Pixel zu suchen usw. Wahrscheinlich zu viel .

Fußnote: Betrug mit Bandzugriff

Bei einigen der oben genannten Heimcomputer können Sie die Bandemulation für alles, was im Standard-ROM-Format codiert ist, überspringen, indem Sie sie einfach einfügen ein geeigneter Trap in das System-ROM und das Einspulen aus der Quelldatei. Viele, aber nicht alle Titel basieren vollständig auf dem integrierten ROM für Band-E / A, so dass viele Titel ohne wirklichen Hardwareversuch geladen werden können.

In jedem Fall ist es ein „Bodge-Job-Hack“. Aber es wird funktionieren, wenn diese Seite der Emulation für Sie nicht wichtig ist – Sie möchten sie lieber einfach aus der Gleichung entfernen und ignorieren, was nicht funktioniert.

Speziell:

Vic-20:

  • Wenn der Programmzähler 0xf7b2 erreicht, kopieren Sie den nächsten Band-Header an die durch b3 angegebene Position: b2, 0x90 und 0x93 auf Null setzen und von 0xf7b5 fortfahren (da Sie ein JSR vermeiden);
  • Trap 0xf90b, prüfen Sie auf X = 0xe, wenn ja, dann Holen Sie sich den nächsten Banddatenkörper und schreiben Sie unabhängig von der Größe des Körpers von c2: c1 in den emulierten Speicher, jedoch nicht weiter als af: ae. Setzen Sie dann Bit 6 auf 0x90, löschen Sie die Übertrags- und Interrupt-Flags und fahren Sie mit 0xfccf fort.

Oric:

Fangen Sie für ROM 1.0 den PC ab unter der Adresse 0xe630. Achten Sie bei 1.1 auf die Adresse 0xe6c9.

Laden Sie A mit dem nächsten Byte vom Band und setzen Sie das Null-Flag entsprechend seinem Wert.

Dann RTS.

Es gibt auch ein Flag bei 0x67 im Original-ROM oder 0x24d, das zwischen den schnellen und langsamen Bandcodierungen des Geräts unterscheidet, aber das übliche Banddateiformat hat nur die decodierten Bytes, um schnell und schnell zu sein Dirty Emulation, mach dir keine Sorgen.

Elektron:

Installieren NOPs bei 0xf4e5, 0xf6de, 0xf6fa und 0xfa51 zum Deaktivieren der Bandverzweigungen. Das Betriebssystem versucht nun, Banddaten wie in einem seriellen ROM zu laden.

Überprüfen Sie den PC bei 0xf0a8 und überprüfen Sie, ob das X vorhanden ist Das Register ist gleich 14 und der Wert an der Adresse 0x247 ist Null. Dann wissen Sie, dass das ROM versucht, das nächste Byte vom Band abzurufen.

Setzen Sie das nächste Byte in Y und setzen Sie A auf 0 und RTS.

Das primäre Banddateiformat ermöglicht es Ihnen meistens, Bytes direkt aus der Datei zu spulen (nach einigen trivialen Chunk-Navi und über ZLib oder einen anderen GZ-Dekomprimierer, obwohl Sie dies einfach im Voraus tun können.

ZX-Spektrum:

(Dieser ist aus sehr alten Noten transkribiert; Es kann sich lohnen, dies gegen eine ROM-Demontage zu bestätigen.

Fangen Sie den PC im 48-KB-ROM mit 0x056c ab. Nehmen Sie den nächsten Block vom Band (wenn Sie eine TAP-Datei verwenden, erhalten Sie diese direkt; ich würde sagen, Sie sollten sich nicht die Mühe machen, TZX in dieser Art von Projekt zu unterstützen).

If Seine Länge ist kleiner als der Wert in DE, Übertrag und Rückgabe zurücksetzen.

Vergleichen Sie das erste Byte des Blocks mit dem Wert B. Wenn sie nicht übereinstimmen, setzen Sie Übertrag und Rückgabe zurück.

Andernfalls spoolen Sie die ersten DE-Bytes, die Sie an die Adresse erhalten haben, auf die IX zeigt, und setzen Sie das niedrige Bit von C und setzen Sie Carry.

Führen Sie dann entweder direkt ein RET durch oder überspringen Sie einfach den PC vor 0x05e2, dem RET, der normalerweise das Laden des Bandes beendet.

Die 128-KB-Computer werden zum Laden des Bandes in das 48-KB-ROM überführt, sodass der gleiche Hack angewendet wird, sofern überprüft wird, was ausgelagert wird.

Kommentare

  • Nettes Schreiben. Ich stimme mit allem überein, was gesagt wurde – vielleicht mit zwei kleinen Addons für den Apple II. Obwohl es stimmt, dass die Video-Hardware einige Überlegungen erfordert, seine Finesse kann in der Emulation völlig ignoriert werden, wie nur die Die Äquivalenz bestimmter Bitmuster muss in Farbe übersetzt werden – wenn überhaupt, da A2 häufig mit einem monochromen Bildschirm ausgeführt wird, mit dem es ohne weitere Details als einfache Bitmap emuliert werden kann. Zweitens ist keine detaillierte Disk II-Emulation erforderlich, solange die zu spielenden Gemes ProDOS-basiert sind, da diese mit unterschiedlichster Hardware funktionieren.
  • @Raffzahn, wofür wäre die einfachste Form einer Nachschlagetabelle? Farbausgabe sein?Wenn ich von NTSC zurückkehre und alles als zerlegbar in doppelt hohe Auflösung behandle, kann ich mir eine Tabelle vorstellen, die durch einen Drei-Bit-Zähler indiziert ist, der die Phase plus ein Fünf-Bit-Schieberegister der Videoausgabe darstellt, um einen halben Farbzyklus mit einem Mittelpunkt zu erhalten. Also eine Tabelle mit 256 Einträgen. Aber das ‚ ist eine sehr naive Argumentation; Haben die Leute es besser gemacht?
  • @Tommy: Ein einfacher Ansatz besteht darin, einfach eine sich wiederholende Vierfarbensequenz (ich denke (rot, dunkelgelb, grün, blau) für doppelt hochauflösende Pixel und Unschärfe zu verwenden Der Bildschirm hinterlässt ein wenig Farbsäume an den Dingen, aber echte Monitore tendierten sowieso dazu. Da das Apple] [Video nicht den Spezifikationen entspricht, gibt es ‚ s-Nr Eine “ richtige “ Art, es anzuzeigen, und echte Monitore neigen dazu, Dinge etwas anders anzuzeigen.

Antwort

Ich denke, die Verwendung von Grafikspielen als Ziel streckt Ihre Schüler möglicherweise zu weit. Das Ausführen eines Spiels erfordert im Allgemeinen eine gute Emulation nicht nur der Die meisten Funktionen des Prozessors, aber auch viel Hardware, nicht zuletzt die Videokreise (die oft recht komplex sind und in vielen Fällen viele Probleme mit dem Timing verursachen). Wenn etwas nicht ganz richtig funktioniert, sind die Ergebnisse wahrscheinlich sehr dis sein Ernennung. Ich würde vorschlagen, mit einem einfacheren Ziel zu beginnen.

Ich würde ein System anstreben, das eher eine Textmodus-Oberfläche als eine grafische hat, da solche Schnittstellen normalerweise viel einfacher sind und möglicherweise keine besonderen Timing-Anforderungen haben Dies muss erfüllt sein (dh sie arbeiten häufig vollständig parallel zum Speicherzugriff des Prozessors, ohne den Prozessor zu beeinträchtigen). Ich würde auch ein System empfehlen, das über ein integriertes Überwachungsprogramm auf Maschinenebene verfügt, da dies das Debuggen von Programmen erleichtert Wird auf dem Computer ausgeführt, ohne dass ein Debugger auf Emulationsebene implementiert werden muss.

Ein Vorschlag, der auf meinem aktuellen persönlichen Forschungsprojekt basiert, ist der Nascom 2-Computer. Dies ist ein relativ einfacher Z80-basierter Computer mit Textmodus-Hardware, der interagiert nicht mit der CPU (wenn es Konflikte gibt, wird dies zugunsten der CPU gelöst, was bedeutet, dass theoretisch eine Handvoll Pixel in jedem Frame möglicherweise nicht angezeigt werden, wenn gleichzeitig mit der Aktualisierung auf den Bildschirm zugegriffen wird vorkommend, aber th Dies ist wahrscheinlich nicht besonders auffällig oder sogar häufig, so dass mit sehr einfacher Hardware ein brauchbares Ergebnis erzielt werden kann. Ein genaues Timing ist daher für diese Maschine wahrscheinlich nicht besonders schwierig oder wichtig. Die Maschinenhardware ist sowohl einfach als auch gut dokumentiert. Integrierte Peripheriegeräte sind ein UART (der entweder für ein Remote-Terminal / einen Remote-Drucker oder zum Laden und Speichern von Kassetten verwendet werden kann. Dies bedeutet, dass die Kassettenhandhabung auf Audiopegel nicht emuliert werden muss, wodurch viel Implementierungszeit gespart wird.) und ein paralleles E / A-Modul. Die verfügbaren Tools fördern auch das Experimentieren in Assemblersprache, was meiner Meinung nach ein wünschenswertes Ziel für Ihren Kurs ist.

Eine interessante Sache an dieser Maschine ist, dass es eine Lücke in den verfügbaren Emulationsoptionen gibt: die Die bekannteste Webseite über die Maschine hat einen Javascript-basierten Emulator angefordert, den sie in die Seite einbetten können, aber bisher hat noch niemand einen bereitgestellt.

Antwort

Ich habe mit Swift zwei und ein bisschen von Grund auf neue Emulationen für den Mac durchgeführt. Dies sind meine persönlichen Beobachtungen, die auf meiner Erfahrung basieren.

Keine meiner Emulationen ist vollständig zyklusgenau, was zu einigen Problemen führt.

Commodore PET

Dies war die erste Emulation, die ich geschrieben habe. Sie benötigen mindestens eine 6502-Emulation, eine PIA-Emulation, eine VIA-Emulation und eine Video-Emulation.

Der 6502 ist wirklich einfach und zunächst ein ausgezeichneter Prozessor. Es ist auch ziemlich gut dokumentiert. Die Visual6502-Site war von unschätzbarem Wert, um das genaue Verhalten von Anweisungen zu ermitteln, bei denen die Dokumentation nicht eindeutig war. Nebenbei habe ich eine Emulation eines etwas späteren Prozessors (ich vergesse welchen) geschrieben, der einige davon ausfüllte Dies machte das Schreiben von 6502-Testcode viel einfacher (selbst PHX und PHY vereinfachen einige Dinge. Ein Andererseits bricht jede Software, die die „undokumentierten Anweisungen“ des ursprünglichen 6502 verwendet hat, bei meiner Emulation.

PIA und VIA sind relativ einfach zu emulierende E / A-Chips. Der Videotreiber kann so einfach sein wie Lesen des Bildschirm-RAM, Übersetzen in ASCII oder eine enge Annäherung und Zeichnen des resultierenden Textes in einem Fenster. Schließlich erstellte ich eine Reihe von Bitmaps, die genaue Kopien des PET-Zeichensatzes waren.

Meine Hauptressource für Das PET war „Programming the PET / CBM“ von Raeto West. Ich habe eine Originalkopie, aber es gibt PDF ver sionen online. Wichtig ist auch die Verfügbarkeit von BASIC- und KERNAL-ROMs.Sie möchten das Betriebssystem nicht neu schreiben.

Das Emulieren des Bandlaufwerks war eine PITA. Meine Softwareversion war weniger zuverlässig als die echte, von der PET-Besitzer wissen, dass sie wirklich etwas sagt Das Problem, dachte ich, ist, dass es auf zyklusgenauen Zeitsteuerungsimpulsen beruht, und obwohl mein Emulator Taktimpulse zählt, hat er den Zeitgeber-Interrupt nicht unbedingt genau zum richtigen Zeitpunkt aufgerufen.

Ich hatte mehr Erfolg beim Schreiben eine Emulation der Dual-Disk-Laufwerke. Dies erforderte ebenfalls eine robuste IEEE 488-Emulation, aber die Emulation des Festplattenlaufwerks war recht einfach. Es ist keine Hardware-Emulation, es nimmt nur die vom PET gesendeten Befehle und führt sie mit Flatfiles auf der Festplatte des Mac aus.

Am Ende habe ich einen Code geschrieben, der das stoppen würde Emulator, fügen Sie direkt eine Programmdatei in den Speicher ein und starten Sie den Emulator erneut. Dies erwies sich als so viel praktischer als das Emulieren von Datenträgern oder Bändern, dass ich nicht mehr daran arbeite.

Mein Emulator funktioniert mit den meisten PET-Codes gut genug. Leider gibt es ein Problem mit PET Space Invaders – wahrscheinlich verursacht durch den Tastaturcode -, sodass Tastendrücke nicht richtig erkannt werden. Außerdem habe ich nicht versucht, die Klangerzeugung zu beheben.

Sinclair ZX Spectrum

In mancher Hinsicht ist dies sogar einfacher als das PET. Sie müssen einen Z80-Emulator schreiben, der komplexer als der 6502 ist, aber es gibt eine CPM-Testsuite, mit der Sie einen Großteil seiner Funktionalität überprüfen können. Sie müssen lediglich die Zeichenausgabesubroutine von CPM emulieren, um sie funktionsfähig zu machen.

Die einzigen anderen Chips, die Sie emulieren müssen, sind die ULA, und Sie müssen nicht viel davon tun, wenn Sie bereit sind, auf ein Bandlaufwerk zu verzichten. Auch der Videogenerator, der in der Art und Weise, wie er den Bildschirm-RAM anspricht, etwas seltsam ist.

Das wirklich Schöne am Spectrum ist, dass sich der Bildschirm immer im Bitmap-Modus befindet und das Betriebssystem Zeichen direkt erstellt Schreiben der Schreibpixelmuster. Sie müssen sich keine Gedanken über einen Zeichensatz machen, da dieser auf magische Weise vorhanden ist, wenn Sie den Emulator mit geladenen Spectrum-ROMs starten.

Ich habe das Spectrum so weit gebracht, dass ich Manic Miner laden und ausführen kann und es war spielbar, wenn auch ohne Ton. Es dauerte ungefähr drei Monate, vielleicht acht Stunden pro Woche von Anfang bis Ende zu arbeiten.

Commodore 64

Dies ist eine laufende Arbeit. Offensichtlich hatte ich bereits einen 6502, den ich modifiziert habe, um mir den E / A-Port des 6510 zu geben. Bisher macht es die Bank Beim korrekten Umschalten ist ein Teil der CIA-Funktionalität implementiert und es ist genügend VIC II-Funktionalität emuliert, um mir ein PET-Äquivalent zu geben, dh der normale Textmodus funktioniert. Auch der Rahmen- und Zeichenfarbspeicher funktionieren.

Ich immer noch habe die komplizierteren Grafikmodi zu emulieren und Sprites und ich sollte in der Lage sein, etwas mit dem Sound zu tun, da dies ein separater Chip ist, ich bin nicht auf genaues CPU-Timing angewiesen.

TL; DR

Abgesehen von der CPU war die einfachste Emulation Das Spektrum. Ich würde wahrscheinlich damit beginnen, obwohl ein alter CP / M 8080-basierter Computer möglicherweise noch einfacher ist, wenn Sie CP / M erhalten.

Weitere Beobachtungen

Sie benötigen wahrscheinlich einen guten Cross Assembler für Ihre Zielplattform. Es wird sehr mühsam, Code für Unit-Tests von Hand zusammenzusetzen.

Auch ein Disassembler ist nützlich. Ich musste die Commodore BASIC ROMs nicht zerlegen, da Demontagen im Internet frei verfügbar sind. Aber als ich versuchte, Space Invaders zum Laufen zu bringen, funktionierte es zunächst nicht und der Disassembler war für die Fehlersuche von unschätzbarem Wert.

Aus diesem Grund ist die cc65-Suite ein gutes Argument für den Start mit einem 6502-basierten Computer. Es hat einen guten Assembler und einen exzellenten Disassembler. Die Z80-Situation war nicht so gut, aber ich habe am Ende einen vernünftigen Assembler namens z80asm gefunden. Ich glaube, ich musste es aus dem Quellcode kompilieren.

Außerdem benötigen Sie eine gute solide Dokumentation. Auch hier ist die 6502-Dokumentation, die online ist, praktisch beispiellos. Dokumente sind für das Spektrum weniger verfügbar, aber es ist So einfach, dass Sie mit einer ziemlich schlechten ULA-Emulation davonkommen können.

Antwort

Zusammen mit all den anderen guten Vorschlägen, as Als Alternative zu Z-80 und CP / M können Sie ein generisches Motorola 6809 -System in Betracht ziehen, um FLEX oder möglicherweise OS-9 , beide Unix-inspiriert. Als CLI-basiertes System ist es nicht erforderlich, ein genaues Timing zu erhalten.

Wenn Sie den Simulator neu erstellen, ähnelt dies eher dem Erstellen der Hardware. Die Portierung des Betriebssystems war ein echte Aufgabe – was ich in den 1980er Jahren getan habe – im Gegensatz zu einer Klon-etwas-für-Bildung-Aufgabe.“Startet es das Betriebssystem und führt es die Programme aus?“ ist ein sehr realistisches Ziel.

Da es ein tragbares Betriebssystem ausführt, das auf der Hardware vieler verschiedener Hersteller ausgeführt wird, bedeutet dies, dass die Schüler nicht nur eine Möglichkeit haben, dies zu tun. Schüler A könnte bauen Eine Bitmap-Anzeige: Schüler B erstellt möglicherweise einen UART und verfügt über eine serielle Schnittstelle. Einige versuchen möglicherweise, jeden Zyklus richtig zu machen, andere versuchen möglicherweise, jede Operation korrekt auszuführen. Versuchen Sie daher einfach, etwas zu kopieren, ohne das Original unbedingt zu verstehen Designbeschränkungen beschäftigen sich die Schüler mit einer richtigen technischen Frage: Was ist ein guter Weg, dies zu tun?

CPU

  • Der 6809 war zu dieser Zeit insofern einzigartig, als es möglich war, vollständig positionsunabhängigen Code zu schreiben, der überall dort, wo er sich im Speicher befand, identisch ausgeführt wurde.
  • Der Befehlssatz war fast vollständig orthogonal.
  • Als 8-Bit-CPU mit 16-Bit-Adressbus ist er ziemlich einfach.
  • Der Ausnahmemechanismus und effektiv -Adresse-Manipulationen sind modernen Prozessoren sehr ähnlich.
  • Als Motorola-Design hatte es speicherabgebildete E / A-Vorgänge anstelle spezieller E / A-Anweisungen.
  • Einfacher als Z-80 (viel weniger Anweisungen) ) oder 6502 (weniger Sonderfälle)
  • Material über https://en.wikipedia.org/wiki/Motorola_6809

FLEX wurde als Unix-inspiriertes System für 8-Bit-CPUs

  • Es wurde speziell für die Portabilität entwickelt, und um es zum Booten zu bringen, mussten nur sehr wenige Systemaufrufe implementiert werden – ich denke, nur das Lesen / Schreiben von Zeichen, das Lesen / Schreiben von Diskettenblöcken und eine Art Boot (Lesesektor und Sprung) dazu).
  • Hardware-unabhängig für diese Grundfunktionen, was die Simulation viel einfacher macht
  • Es ist aufregend, nur ein paar Funktionen zu schreiben und ein ganzes Betriebssystem zu starten
  • Keine Grafiken, über die man sich ärgern muss (was je nach Ansicht positiv oder negativ ist)
  • Viel verfügbares Material, f ind via https://en.wikipedia.org/wiki/FLEX_(operating_system)
  • OS-9 ähnlich in der Absicht

    • Unix-ähnlicher als FLEX, etwas schwieriger zu portieren, soweit ich mich erinnere
    • Später auf 68000 portiert
    • Viel verfügbares Material, finden Sie über https://en.wikipedia.org/wiki/OS-9

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.