www.mikrocontroller.net

Forum: Projekte & Code AX82 - ZX Spectrum Emulator mit AVR + CPLD


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Joerg Wolfram (joergwolfram)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Endlich habe ich die Doku vom AX82 fertigbekommen und das Projekt online 
gestellt.

http://www.jcwolfram.de/projekte/avr/ax82/main.php

Emuliert wird ein Standard ZX Spectrum mit 48K RAM, basierend auf meinem 
Z80 Emulator, den ich für dieses Projekt stark erweitert habe bzw. 
erweitern musste. So werden jetzt z.B. alle 3 Interrupt-Modi 
unterstützt.
Neben dem AVR (Mega644) werden noch ein CPLD (XC9536) und zwei 32Kx8 
(Cache-) RAMs benötigt. Die Ausgabe erfolgt umschaltbar auf TV (RGB) 
oder auch VGA, die Eingabe über eine PS2-Tastatur.Sound geht leider 
nicht, da aufgrund des völlig anderen Timings die Qualität gegen Null 
geht.
Die Geschwindigkeit erreicht bei TV-Ausgabe ungefähr Original-Niveau, 
bei VGA-Ausgabe nur ca. 87 Prozent. Snapshots können von SD-Karte 
geladen und dorthin zurückgespeichert werden, das Handling ist 
weitestgehend identisch zum AX81b. Auch der integrierte Monitor ist 
wieder dabei. Auch habe ich den Anschluss von einem Joystick bereits 
hardwaremäßig vorgesehen, allerdings noch nicht in der Software. Das 
kommt eventuell später noch, wenn Interesse besteht.


Jörg

Autor: Ale (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tool ohne Ende. Ich frage mich ob man mit einem ATXMega ~100% mit VGA 
kriegen könnte... und der Built-in SRAM/SDRAM kontroller nutzen...

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man das gleiche Grunddesign nimmt, 32MHz Clock und VGA4 statt VGA3, 
könnte es schon klappen. Ob man den internen Memorycontroller benutzen 
kann glaube ich eher nicht, habe aber keinerlei Erfahrungen mit den 
ATXMegas. Man braucht für 8 Pixel zwei Speicherzugriffe und muss die 
Daten noch an den Video-Shifter (CPLD) ausgeben.

Jörg

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joerg Wolfram schrieb:
> Ob man den internen Memorycontroller benutzen
> kann glaube ich eher nicht, habe aber keinerlei Erfahrungen mit den
> ATXMegas.

Klar kann man den benutzen, dafür ist er doch da ;-). Läuft mit Fcpu/4 
bei 0 Waitstates und schnellem RAM (12..15ns):

1.Adresse ausgeben
2.Latch betätigen
3.Daten lesen
4.CPU hat Daten verfügbar

Joerg Wolfram schrieb:
> Man braucht für 8 Pixel zwei Speicherzugriffe und muss die
> Daten noch an den Video-Shifter (CPLD) ausgeben.

DMA!

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher lässt sich da einiges anstellen und es ist wahrscheinlich auch 
mit vielen Änderungen im Sourcecode (evtl. auch im CPLD) verbunden. Und 
deshalb gleich vorneweg: Eine XMega-Version wird es von mir mit hoher 
Sicherheit nicht geben. Da das Projekt ja Open Souce ist muss sich halt 
nur jemand finden, der die Anpassungen für den XMega macht und bei einer 
"1:1" Portierung kann ich vielleicht eher noch etwas Unterstützung 
geben.

Jörg

Autor: Bruno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geniales Projekt!
Hut ab!

Nur mal interessehalber: Warum hast du das ganze nicht gleich in einem 
FPGA untergebracht?

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz einfach, weil ich nichts mit FPGAs mache. Die Gehäuse sind meiner 
Meinung nach eher "bastlerunfreundlich" und mit einseitigen 
Leiterplatten ist da meist auch nicht mehr viel auszurichten. XC9536 
habe ich noch ein paar rumliegen und PLCC mit Sockel passt auch auf 
Lochrasterplatten. Außerdem gibt es ja schon ZX Spectrum im FPGA, wäre 
also nix Neues und damit für mich uninteressant.

Jörg

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe am WE mal getestet, wievie schneller der AVR sein müsste. Mit 
27MHz waren es noch keine 100% und mit 32MHz externem Oszillator kam nur 
noch Mist. Aber dabei sind mir noch ein paar Ideen gekommen. Wenn man 
den Clock zum CPLD führt, sollten sich auch 80 Zeichen darstellen lassen 
was vielleicht interessant für einen Port von AVRCPM sein könnte. 
Außerdem sollte es auch möglich sein, einen KC85/2 (oder/3) zu 
emulieren. Mit einem ATMega1284P und einem XC9572 sollte sich das sogar 
umschaltbar realisieren lassen.

Jörg

Autor: David Roper (retrogadgets)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Greetings Jorg

Another marvelous creation, of yours i see.

Will the pcb be available, from the website like the chipbasic2 design.


how do you program the CPLD ?


regards

David

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I dont know because the chipbasic2 pcb and kit was not initiated by me, 
I placed only the links on my website. For the AX81 I think there exist 
already community pcbs and kits. The AX82 is a little bit more difficult 
to build (CPLD) so it perhaps will be take more time...

For the programming I used the Xilinx webpack (Ver. 7.x), the 
USBDRIVER.HEAD and a simple parallelport programmer.

Joerg

Autor: Christopher B. (christopher_b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geniales Projekt! Mal schauen, ob ich bei der nächsten 
Reichelt-Bestellung die entsprechenden Teile mitnehme.

Hast du dir mal den ATmega 644PA-PU angesehen? Die zweite Revision (A) 
lässt sich meistens etwas mehr übertakten. Beim SwinSID (vielleicht ist 
dir das ein Begriff; SID-Nachbau mit AVR) wurde ein ATmega88PA-AU 
benutzt, weil dieser sich besser übertakten ließ.
32MHz sind idR kein Problem.

Gruß

Autor: Immanuel Cunt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man hätte ja gleich nen 80 MHz ARM nehmen können, dann hätte man sich 
auch das CPLD sparen können, wäre am Ende viel einfacher und billiger 
geworden.

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Immanuel Cunt
Dann zeig mal wie das geht...

Ansonsten hätte man auch einfach FUSE auf seinem Rechner installieren 
können, das würde dann gar nichts kosten, man braucht keine Leiterplatte 
und ist noch schneller ;-)

Jörg

Autor: KILO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hammer Jörg!

Hammer!! :)

Schön wäre jetzt noch der Joystick!!!!!!!!

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist in Arbeit, aber noch nicht aufgebaut und getestet. Im Moment habe 
ich ein größeres Projekt, welches ich möglicht bis Weihnachten fertig 
haben möchte und darum läuft alles andere erstmal auf Sparflamme.

Jörg

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da die meisten wohl eher wegen der alten Spiele ausprobieren wollen, 
wird es demnächst wohl einen "Nachfolger" geben. Basis wird das 
ChipBasic Board mit 16-Farben Erweiterung sein, auf dem dann ein 
Mega1284P läuft. Ohne externes RAM und ohne CPLD, dafür halt nur 
TV-Output. Joystickanschluss über den Parallelport. Sound wird es aber 
(leider) auch hier nicht geben.
Die verfügbaren 15K RAM sollten für viele Spiele ausreichen, da nur noch 
RAM für veränderliche Daten (z.B. Bildspeicher, Systemvariablen, Stack) 
benötigt wird. Der Speicher ist in 256 Bytes große Pages aufgeteilt, die 
entweder im Flash oder im RAM des AVR liegen. Bei Schreibzugriffen auf 
Adressen ausserhalb des ROM-Bereiches, die aber noch auf AVR-Flash 
zeigen, wird bei noch freien RAM-Pages die Flash-Page ins RAM kopiert 
und die Page entsprechend markiert. Übertaktung ist nicht mehr 
vorgesehen, dafür scheint zumindest der Mega1284P nicht geeignet zu sein 
und es gibt haufenweise Probleme bei den "Nachbauern". Die Performance 
(20MHz AVR-Takt) liegt beim aktuellen Entwicklungsstand bei ca. 60% 
Originalgeschwindigkeit, mit einem zusätzlichen Mega88 als aktivem 
Videoshifter und -cache am Parallelport ungefähr bei 93%. Massenspeicher 
ist nicht zwingend notwendig (Snapshot-Funktion), es wird aber eher auf 
einen Dataflash-Baustein als auf SD-Karte hinauslaufen. Ein großes 
Dateihandling wird es sowieso nicht geben, die verfügbaren Programme 
sollen sich in einer Art Preview beim Start auch mit dem Joystick 
auswählen lassen.
Man kann dann noch wählen, ob das "Original" oder der Snapshot geladen 
wird, das war es dann auch. Ein 1MB DataFlash kann 16 Programme incl. 
Snapshots speichern, das sollte eigentlich ausreichen. Für das Erstellen 
der Snapshots auf dem PC bin ich gerade dabei, mir den FBZX-Emulator 
zurechtzupatchen damit er Schreibzugriffe auf das RAM mitloggt. Wenn man 
ein Programm ein bisschen ausprobiert, kann man damit schon eine recht 
optimale Speicherbelegungstabelle erzeugen. So komme ich z.B. bei 
Chequered Flag auf 39 Pages mit Schreibzugriffen, was gerade mal knapp 
10K RAM bedeutet.
Im Moment geht es eher schleppend voran, da ich auch noch an drei 
anderen Projekten bastle. Von daher würde mich interessieren, inwieweit 
überhaupt Interesse daran besteht.

Jörg

Autor: David Roper (retrogadgets)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Greetings Jorg

Just to let you know there is interest in this project,  I await your 
next incarnation!

Autor: Joerg Wolfram (joergwolfram)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, hier gibt es schon mal eine Preview-Version. Als Programm habe 
ich Cyrus-Schach fest mit eingebunden. Hardware ist identisch zum 
ChipBasic2 mit 16-Farb-Erweiterung, lediglich wird ein ATMega1284P 
verwendet. Die Taktfrequenz beträgt 20MHz, die Fuses sind bereits so 
konfiguriert, dass am Parallelport schon der 20MHz Takt (CLKOUT) für den 
"Beschleuniger" zur Verfügung steht.
LOW-FUSE       0xA6
HIGH-FUSE      0xD4
EXT-FUSE       0xFC
SD-Karten werden ähnlich wie beim AX81B/AX82 unterstützt, ein passendes 
Image wird es aber erst zum offiziellen Release geben. Generell gibt es 
3 Modi, wie der emulierte Spectrum gestartet wird, im Usermode wird der 
aktuelle Snapshot geladen, im Defaultmode das geladene Programm (Hier im 
Beispiel: CYRUS) und im System-Mode wird ein Spectrum mit 15,5K RAM 
emuliert. Defaultmäßig wird im Usermode gestartet. Wie immer gibt es 
einige Tasten mit Sonderfunktionen:
CTRL + ALT + DEL   startet das Gesamtsystem neu
CTRL + F5          startet den Emulator im Defaultmode neu
CTRL + F6          startet den Emulator im Usermode neu
CTRL + F7          startet den Emulator im System-Mode neu
CTRL + F10         macht einen Snapshot des aktuellen Emulators
ALT + Pfeiltasten  5,6,7,8
Man kann also unabhängig vom geladenen Programm eigene Programme 
schreiben und Snapshot speichern.
Ich habe das jetzt hier mit angehängt, kann aber bei bedarf auch einen 
neuen Thread aufmachen...

Jörg

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach langer Pause habe ich mich mal wieder über das Projekt hergemacht. 
Jetzt gibt es auch ein Kempston-Joystick kompatibles Interface und die 
Dateiimage-Tools habe ich von C nach Perl umgestellt und dabei ein paar 
Fehler korrigiert. Für alle, die nicht damit zuechtkommen, habe ich ein 
neues Image erstellt.

http://www.jcwolfram.de/projekte/avr/ax82/main.php

Viele Grüße,

Jörg

10.08.2014 14:30: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.