Hier ist meine Situation:
Als persönliches Projekt möchte ich einen Emulator für den Sega Megadrive (Sega Genesis) schreiben, der auf AVR läuft. Daher habe ich nach einem Mikrocontroller gesucht, der ähnliche Eigenschaften wie das mit dem MegaDrive gelieferte Motorola 68k aufweist. Ich habe jedoch festgestellt, dass die Spezifikationen für den 68k im Vergleich zu den meisten Hobby-Mikros. Ich wähle AVR im Gegensatz zu ARM, weil mir die Architektur gefällt und ich dachte, es wäre eine gute Herausforderung.
M68K:
32-bit CPU
16-bit data bus
Up to 20 MHz
16 MB RAM
No I/O ports
Hier sind die Spezifikationen für einen Arduino Leonardo:
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V
Digital I/O Pins 20
PWM Channels 7
Analog Input Channels 12
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA
Flash Memory 32 KB (ATmega32u4) of which 4 KB used by bootloader
SRAM 2.5 KB (ATmega32u4)
EEPROM 1 KB (ATmega32u4)
Clock Speed 16 MHz
Length 68.6 mm
Width 53.3 mm
Weight 20g
Dies scheint ziemlich typisch für moderne Mikros der unteren Preisklasse zu sein. Ich sehe nie, dass der Widder viel in die Mbs gerät.
Ich bin mir sicher, dass der moderne SRAM nicht annähernd mit dem 68k identisch ist. Kann ich jedoch ein AVR-Mikro erwerben, das der Leistung eines 68k entspricht? Betrachte ich dieses Problem falsch? Muss ich mein Design ändern, um moderne Mikros aufzunehmen?
Ich weiß nicht, ob eine externe Speicherquelle schnell genug ist.
Antworten:
Obwohl das Motorola 68000 und das Sega Genesis ziemlich alt sind (Anfang der 1980er Jahre), werden Sie keinen Low-End-AVR (dh 8-Bit) finden, der die gesamte Spielmaschine emulieren kann.
Der Sega Genesis lief mit 7,61 MHz und hatte 72 KB RAM (plus zusätzliche 64 KB Video-RAM). Die Spielprogramme befanden sich jedoch im ROM, sodass Sie zusätzlichen RAM benötigen, um sie zu speichern (es sei denn, Sie planen, die Originalkassetten irgendwie einstecken zu können). Die meisten Spielekassetten waren unter 4 MB groß, aber es gibt mindestens ein Spiel (Pier Solar, veröffentlicht im Jahr 2010) mit einem 8-MB-ROM.
Darüber hinaus muss das System sicherlich ein System-ROM enthalten haben, das als eine Art Exekutive fungierte und auch eine gemeinsame E / A-Bibliothek für die Kassetten bereitgestellt hätte (ich kann keinen Hinweis darauf finden, wie groß diese war). Sie müssen die ROMs (oder ROM-Images) für diese finden und sie auch in Ihren RAM kopieren (oder Ihrem System einen Abschnitt des ROM hinzufügen).
IMO möchten Sie einen 32-Bit-Mikrocontroller verwenden. Wenn Sie die Originalkassetten und ein Programm-ROM verwenden und keine MB RAM benötigen, können Sie fast jeden 32-Bit-Mikrocontroller verwenden, der über genügend Speicherplatz für Ihren Emulator verfügt. Wenn Sie die Kassetten und das System-ROM-Image in den Arbeitsspeicher herunterladen möchten, benötigen Sie einen Mikrocontroller mit einem externen Speicherbus, um 8 MB oder mehr Arbeitsspeicher zu erhalten (8 MB können nicht aktiviert werden) der gleiche Chip wie der Mikrocontroller).
Da Sie bei AVR bleiben möchten, empfehle ich einen Prozessor wie den AT32UC3A3256 , der 256 KB Flash, 128 KB RAM und 84 MHz hat. Das Problem ist, dass es sich um ein 144-poliges Oberflächenmontagegerät handelt, das schwer zu löten sein wird.
Es gibt jedoch ein Evaluierungskit für diesen Prozessor von Element 14 für nur 31,25 USD. Sie müssen sich also keine Gedanken über das Löten machen. Außerdem verfügt die Karte über 8 MB externen RAM, sodass Sie eine Kassette in den RAM laden können.
Nur zur Veranschaulichung , ich denke immer noch, dass Sie den Raspberry Pi in Betracht ziehen sollten , der mit 700 MHz und 512 MB RAM für etwas weniger als die oben genannten Kosten für das Entwicklungsboard läuft. Wenn Sie mit dieser Geschwindigkeit arbeiten, haben Sie keine Probleme damit, den 68000-Code zu emulieren und E / A mit der richtigen Geschwindigkeit auszuführen.
Unabhängig davon, ob Sie sich für den AVR- oder den Raspberry Pi-Weg entscheiden, enthielt der Sega Genesis neben dem 68000 auch einen Zilog Z80 und mehrere Spezialchips, darunter den Yamaha YM2612 und den Texas Instruments SN76489A. Der Z80 wurde verwendet, um den Sound zu steuern und die Abwärtskompatibilität mit dem früheren Sega Master System zu gewährleisten. Der Yamaha-Chip war ein FM-Soundsynthesizer und der TI-Chip war ein programmierbarer Soundgenerator (dieses Gerät hatte viele Soundoptionen). Es gab auch einen Virtual Display Processor (VDP). Sie können den Sound wahrscheinlich überspringen (was bedeutet, dass Sie sich keine Gedanken über den Z80- oder den Yamaha- oder TI-Chip machen müssen), aber Sie müssen die Grafikhardware emulieren.
Ein paar Ressourcen:
EASy68K - Editor / Assembler / Simulator für den 68000. Open Source, damit Sie den 68K-Simulationscode ausgraben können
Cyclone 68000 - Emulator für den 68000-Mikroprozessor, geschrieben in ARM 32-Bit-Assembly. Nur nützlich, wenn Sie sich für den Raspberry Pi entscheiden
Wenn Sie mit dem 68000-Befehlssatz noch nicht vertraut sind, sollten Sie Wochen (oder länger) damit verbringen, Experte zu werden. Ein Großteil Ihres Debuggens wird auf Emulatorebene ausgeführt, um herauszufinden, warum ein Abschnitt mit 68000-Code in der Spielekassette nicht ordnungsgemäß ausgeführt wird. (Dies bedeutet, dass Sie wahrscheinlich eine virtuelle Haltepunktfunktion im Kassettencode einrichten möchten.) Sie benötigen außerdem einen Disassembler, damit Sie sich nicht mit Maschinencode befassen müssen. Hier ist die Quelle für einen .
quelle
Das wird nicht passieren.
Der größte Mikrocontroller in der ATmega-Reihe mit Unterstützung für externen Speicher ist der ATmega1284, der jedoch nur über 8 KB internen SRAM verfügt und bis zu 64 KB externen Speicher adressieren kann. Dies wird nicht ausreichen, um die Genesis zu emulieren, die 72 KB RAM und weitere 64 KB Videospeicher hatte. Es könnte möglich sein, den Zugriff auf zusätzlichen Speicher durch Bankumschaltung zu implementieren, dies würde jedoch den Zugriff auf Speicher vom AVR sehr kostspielig machen.
Es gibt einige Teile in der ATmega-Reihe mit mehr internem SRAM, wie den ATmega1284 (16 KB), aber diese unterstützen überhaupt keinen externen Speicher. Kurz gesagt, es ist ziemlich schwierig, über 64 KB RAM von einem ATmega zu adressieren.
(Ich bin nicht sicher, woher Sie die Zahl von 16 MB haben. Der 68000 hat außer Registern überhaupt keinen internen Speicher; die Speichermenge auf einem 68000-System kann dramatisch variieren.)
Zusätzlich läuft die 68000-CPU in der Genesis mit 7,6 MHz. Das Emulieren auf einem 16-MHz-AVR wird nicht möglich sein - während die Taktrate des AVR zugegebenermaßen etwas höher ist, ist der 68000 eine 32-Bit-CPU, sodass das Emulieren eines seiner Befehle häufig viel mehr als einen Befehl erfordert der AVR. (Selbst eine einfache Ergänzung erfordert wahrscheinlich ein paar Dutzend Anweisungen.)
Wenn Sie die Genesis emulieren möchten, empfehlen wir Ihnen, sich stattdessen ARM-Mikrocontroller anzusehen.
quelle
Gibt es einen Mikrocontroller mit 16 MB RAM?
Ja. Das einzige, das mir bekannt ist, gehört zur Renesas SuperH-Familie und enthält kein ROM. Sie müssen also über einen externen Flash-Speicher verfügen, verfügen jedoch über 16 MByte integrierten SRAM.
In der Atmel AVR-Familie gibt es keine 16-MByte-SRAM-Mikrocontroller. Oder irgendwo in der Atmel-Produktlinie.
Einige Geräte in der Atmel AVR-Reihe verfügen jedoch über eine externe Busschnittstelle, über die Sie zusätzlichen Speicher anschließen können. Insbesondere kann der ATxmega128A1U bis zu 16 MByte externen SRAM unterstützen.
...
Ah, hier ist das Problem, das du hast.
Der 68k-Prozessor (dh Motorola 68000) ist KEIN Mikrocontroller und verfügt NICHT über 16 MByte internen SRAM.
Während der Prozessor intern 32 Bit groß ist, kann er aufgrund von Pin-Einschränkungen nur bis zu 16 MByte externen Speicher adressieren, einschließlich Flash, RAM und allen Geräten mit Speicherzuordnung.
Sie benötigen keinen Mikrocontroller mit 16 MByte internem SRAM, um den 68k-Prozessor zu emulieren.
Gibt es einen Atmel AVR 8-Bit-Mikrocontroller, der den Motorolla 68000-Prozessor emulieren kann?
Ich glaube schon. Der ATxmega128A1U verfügt über einen externen Speicherbus, der so groß ist wie der Bus des 68k-Prozessors, und über ausreichend Flash und RAM, sodass eine Mikrocode-Version des 68k-Prozessors ausgeführt werden kann.
Es kann bis zu 32 MHz laufen und viele Anweisungen benötigen einen Zyklus, aber selbst im schlimmsten Fall dauert es 5 Zyklen im internen Speicher. Die externe Schnittstelle ist langsamer, aber wenn Sie sich für einen schnellen Speicher entscheiden, ist dieser immer noch viel schneller als der 68k.
Der 68k-Prozessor läuft nicht nur viermal langsamer, sondern die schnellsten Vorgänge dauern mindestens viermal, und viele dauern zwei- bis viermal länger, insbesondere Speicherzugriffe.
Mit einem selbst langsamen (nach heutigen Maßstäben) SRAM (z. B. einem 70-ns-8-MByte-Teil für weniger als 10 US-Dollar) können Sie 0 Wartezustände auf dem 32-MHz-Prozessor verwenden und Kreise um die 68-KByte mit 7 MHz laufen lassen. Zum Beispiel benötigt ein einfacher Bewegungsbefehl auf dem 68k, der 4 Zyklen bei 7,61 MHz benötigt, 525 nS. Eine ähnliche einfache Bewegungsanweisung auf dem ATxmega128A1U mit 32 MHz dauert 31 ns. Der AVR konnte also 16 Züge ausführen, bis der 68K mit einem fertig war. Der 68k benötigt für einige Interrupt-Typen 50 Zyklen, während der AVR in 3 Zyklen zum Interrupt springt. Der AVR kann also eine Handvoll Interrupts in der Zeit verarbeiten, die der 68k benötigt, um einfach in einen zu springen.
Ich gehe davon aus, dass Sie es mit sorgfältiger Anstrengung zyklusgenau ausführen können, wenn Sie etwas Jitter akzeptieren. Wenn Sie jedoch akribisch sind, können Sie es möglicherweise ohne Jitter perfekt zyklusgenau ausführen. Die AVR-Prozessoren funktionieren einwandfrei mit mäßigem Übertakten, sodass Sie sie wahrscheinlich mit 38,35 MHz betreiben und 5 AVR-Zyklen pro 68-KB-Taktzyklus haben können.
Dies bedeutet nicht, dass es einfach wäre, und es kann einige sehr knifflige Anweisungen geben, die auf dem AVR länger dauern würden als sonst - aber selbst diese können mit sorgfältigem Design berücksichtigt werden.
Kann ich eine Sega Genesis mit einem Atmel 8-Bit-AVR emulieren?
Nein. Der Sega Genesis verfügt im Kern über einen 68k-Prozessor, aber auch über einen Soundprozessor (Z80) und einen Videoprozessor, für deren Emulation Sie erheblich mehr Ressourcen benötigen würden. In der folgenden Abbildung finden Sie den 68k-Prozessor oben links. Beachten Sie, dass dies ein kleiner Teil von allem ist, was zur Emulation eines vollständigen Sega Genesis-Systems erforderlich ist.
Während Sie also problemlos den 68k-Kern des Sega Genesis emulieren könnten, könnten Sie keine Spiele für den Genesis mit nur einem AVR-Mikrocontroller ausführen. Es wäre schwierig genug, die 68k alleine auf einem Chip zu emulieren - selbst wenn Sie die Dinge vereinfachen würden, bezweifle ich, dass Sie alle drei Prozessoren in einen einzigen 32-MHz-AVR-Chip einbauen könnten.
Sie könnten diese beiden Chips jedoch wahrscheinlich mit zwei weiteren AVRs emulieren. Wenn Sie auf ein einfacheres Grafik-LCD abzielen, für das keine seltsamen NTSC-Timings und -Erzeugungen erforderlich sind, können Sie die Dinge möglicherweise ein wenig vereinfachen und möglicherweise sogar beide Funktionen auf einen separaten Chip übertragen.
Dies ist jedoch ein riesiges Projekt, sicherlich kein Wochenendprojekt. Wenn Sie sich in einem Stadium befinden, in dem Sie nur mit Arduino-Entwicklungsplatinen vertraut sind, kann es interessant sein, einen einfachen 68k-Prozessoremulator zu erstellen und ein kleines externes ROM und RAM für Speicherzugriffe anzuschließen. Der Arduino ATMega verfügt nicht über eine externe Speicherschnittstelle, aber Sie können auch E / A-Leitungen drehen und diese emulieren. Wenn Sie im Projekt weit genug kommen, um einfache 68k-Programme zu emulieren, lohnt es sich möglicherweise, Arduino mithilfe der Atmel-Entwicklungsumgebung und eines besseren AVR-Chips mit einer externen Busschnittstelle loszuwerden, und Sie können mit dem Lesen und Ausführen beginnen Patronen. Möglicherweise können Sie sogar Video- und Audiodaten an den Computer weiterleiten und bei der Verarbeitung interpretieren.
Stellen Sie sicher, dass Ihre Emulationsroutinen portabel sind und Sie problemlos auf einen besseren Prozessor umsteigen können, damit Sie nicht hängen bleiben.
Wenn das einfache Arduino Mega-Projekt nie weit kommt, haben Sie nicht viele Ressourcen für dieses Projekt verschwendet. Wenn Sie sich dazu getrieben fühlen, wird es nicht so überwältigend sein, auf einen leistungsfähigeren Atmel-Chip umzusteigen.
Ich sage, probieren Sie es aus. Einige von dem, was ich gesagt habe und andere gesagt haben, scheinen unüberwindbar zu sein, aber lassen Sie sich nicht von uns in die Quere kommen. Stellen Sie jedes Mal Fragen, wenn Sie auf ein Hindernis stoßen, und Sie werden feststellen, dass die meisten Ingenieure eine Herausforderung genießen und Ihnen das Verständnis und die Hilfe geben, die Sie benötigen, um diesen Weg weit zu gehen.
Emulation macht viel Spaß.
quelle
Keine der anderen Antworten hat erwähnt, dass Sie nur einen Chip bekommen könnten, auf dem der m86k-Befehlssatz nativ ausgeführt wird: die Coldfire- Serie. Eine Reihe von Anweisungen wurde entfernt. Wenn sie nicht zu häufig verwendet werden, können sie emuliert werden, indem der Interrupt "ungültiger Befehl" abgefangen wird.
Sie müssen jedoch weiterhin den Yamaha YM7101-Videoprozessor und den Yamaha YM2612-Soundprozessor emulieren. Sie können entweder versuchen, Softwareemulationen in einem viel schnelleren DSP zu erstellen, oder eine FPGA-Version davon erstellen. Möglicherweise basierend auf vorhandenen FPGA-Emulationen des Megadrive.
quelle
Ich bin mir ziemlich sicher, dass es keine Prozessoren mit 16 MB On-Chip-RAM gibt.
Der in einigen Beschreibungen des 68000 erwähnte "16 MB RAM" bezieht sich auf den externen 24-Bit-Adressbus, der theoretisch maximal bis zu 2 ^ 24 Bytes = 16 MB externen RAM adressieren könnte. Meines Wissens nach verbindet die überwiegende Mehrheit der Systeme, die den 68000 verwenden, weit weniger als 16 MB externen RAM.
Insbesondere das Sega Mega Drive (auch bekannt als Sega Genesis) verfügt über 72 KB RAM und 64 kB Video-RAM. Das ist externer RAM. Weder das Motorola 68000 noch das Zilog Z80 verfügen über On-Chip-RAM oder Cache.
Ich schlage vor, Sie erstellen eine zweite, unabhängige Frage mit einem Titel, der beschreibt, was Sie wirklich wissen möchten. Lassen Sie diese Frage jedoch als kanonische Frage zum Mikrocontroller-RAM, um den vielen, vielen Menschen zu helfen, die durch "16 MB RAM" irregeführt werden, was theoretisch bedeutet Maximaler externer DRAM in einigen Prozessoren, während "2,5 KB RAM" den tatsächlichen physischen On-Chip-SRAM bedeutet, der in anderen Prozessoren enthalten ist.
(*) Einige sehr High-End-Prozessoren, die nach 2006 hergestellt wurden, verfügen über 16 MB oder mehr On-Chip-Cache-Speicher. Diese Prozessoren benötigen jedoch noch mehr externen RAM. Wenn Sie also wirklich 16 MB RAM benötigen, werden Sie dies tun benötigen auf die eine oder andere Weise 16 MB externen RAM.
quelle
Sie können einen CORTEX-M4 von der STMF432-Karte verwenden ... sehr leistungsstark mit vielen Megabyte RAM und Peripheriegeräten
quelle