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


von Joerg W. (joergwolfram)


Angehängte Dateien:

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

von Ale (Gast)


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...

von Joerg W. (joergwolfram)


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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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!

von Joerg W. (joergwolfram)


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

von Bruno (Gast)


Lesenswert?

Geniales Projekt!
Hut ab!

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

von Joerg W. (joergwolfram)


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

von Joerg W. (joergwolfram)


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

von David R. (retrogadgets)


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

von Joerg W. (joergwolfram)


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

von Christopher B. (christopher_b)


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ß

von Immanuel Cunt (Gast)


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.

von Joerg W. (joergwolfram)


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

von KILO (Gast)


Lesenswert?

Hammer Jörg!

Hammer!! :)

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

von Joerg W. (joergwolfram)


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

von Joerg W. (joergwolfram)


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

von David R. (retrogadgets)


Lesenswert?

Greetings Jorg

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

von Joerg W. (joergwolfram)


Angehängte Dateien:

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.
1
LOW-FUSE       0xA6
2
HIGH-FUSE      0xD4
3
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:
1
CTRL + ALT + DEL   startet das Gesamtsystem neu
2
CTRL + F5          startet den Emulator im Defaultmode neu
3
CTRL + F6          startet den Emulator im Usermode neu
4
CTRL + F7          startet den Emulator im System-Mode neu
5
CTRL + F10         macht einen Snapshot des aktuellen Emulators
6
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

von Joerg W. (joergwolfram)


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

: Bearbeitet durch User
von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

Finally managed to re flash the 1284p with my usb asp remembering the 
trouble I had last time I used the usb tiny. The usb tiny would only 
flash 64k.

Well finally did it see my pictures, not tried with the keyboard yet, 
but its great on my chipbasic 2 board.

von David R. (retrogadgets)


Lesenswert?

Hello Jorg

playin around with the spectrum emulator whilst pressing

> CTRL + F7          startet den Emulator im System-Mode neu

brought up the familar spectrum copyright screen.

so nice after all these years

i wrote a little program
10 dim d(1000)

ran it, then Typed New.

The spectrum reset, but if ctrl+alt+del is pressed, the program comes 
back after the AX82 welcome screen !!

also nice to see the save feature is still visable, does this output 
anywhere to the outside world ?

typing border 0 , also resets the emulator!

von David R. (retrogadgets)


Lesenswert?

whilst flashing my avr chip

the avrdude program said my atmega1284p had a different signature , 
whilst it was expecting 1E 97 05, it found 1E 97 06, the date code is 
1133 on the mcu.

does this mean anything.

I flashed the mcu with the overide siganture command under avrdude.

von Joerg W. (joergwolfram)


Angehängte Dateien:

Lesenswert?

Hello David,

the AX82B was an experiment and because of only feedback of one person 
(YOU) I stopped it. The snapshot function saves into internal flash, 
using of SD-card or external flash was prepared but never realized.

I append the sources of version 0.23 (probably the last) and of the 
patched FBZX which is used to create images and memory maps.

Best regards,

Joerg

von Franz R. (Gast)


Lesenswert?

Intressiert wäre ich auch, allerdings hab ich das ganze nicht nachgebaut 
bisher da mir der erforderliche CPLD fehlt :/

Habe bereits den AX81 auf PCB hier und war sehr begeistert davon :)
Wenn ich noch die Folientastatur dran kriege könnte ich ihn glatt in 
meinen defekten ZX81 einbauen.

von David R. (retrogadgets)


Lesenswert?

Greetings Joerg

Would you publish the design for the 128k ram version of the AX82.

Thank you

David

von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

My own eagle design of the Ax82 incorporating the psu, vga, joystick, 
Jtag and SD sockets

von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

Gerber view

von Joerg W. (joergwolfram)


Lesenswert?

Hello David,

This looks nice. My 128K version uses only 64k like the version with the 
two 32k chips. At the beginning of the project I had only one 32k chip 
which was fast enough...

Joerg

von Thomas T. (knibbel)


Lesenswert?

David R. schrieb:
> My own eagle design of the Ax82 incorporating the psu, vga, joystick,
> Jtag and SD sockets

Hello David,

there are a couple of points to improve your pcb-design:

1) Most important: Move the connectors to the edge of the pcb, otherwise 
they can not be used properly (VGA-, Keyboard-, Serial-, 
Power-Connectors)

2) The width of the power traces of the pcb should be made thicker, i.e. 
3 times the signal traces. Even the signal traces could be made 
thicker...

3) Are you sure that the VGA-Cable should be connected at the front of 
the PCB. Suggestion: Rotate all the Silkscreen-Text by 180°, so that the 
VGA-Connector seems to be placed at the back.

4) The Routing can be improved a lot. E.g. IC3 Pin 18 and 20. Connection 
at Top Layer can be routed without crossing through pins...

5) Try to route without 90°-turns, better use 45°-turns instead.

6) Some people like it, some do not: Ground-Filling on one side...


David, you should use another two to three weeks to improve this 
pcb-design, so that it is usable for others.

Regards,
Thomas

: Bearbeitet durch User
von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

New Layout

von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

My new pcb batch

von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

Nearly fully populated

Beitrag #5309564 wurde vom Autor gelöscht.
von Uli (Gast)


Lesenswert?

Ich finde das Projekt klasse, auch wenn ich nie ein grosser freund vom 
ZX Spectrum oder ZX81 war.

Warum hast Du in heutiger Zeit nicht einen ARM Cortex M3 /M4 genommen?
Die sind doch um einiges schneller und man braucht kaum noch was außen 
drumherum. Wenn ich da an so was wie einen kleinen STM32F407 denke dann 
bleibt nicht wirklich viel Hardware übrig.

VG, Uli

von Joerg W. (joergwolfram)


Lesenswert?

Man kann in "heutiger Zeit" auch einen Raspberry Pi nehmen, aber oh je, 
da gibt es ja so etwas schon. Das Projekt hatte ich vor 6-7 Jahren 
begonnen, auch gibt es inzwischen Emulatoren auf diversen STM32 Boards. 
Warum also noch Variante X+1 hinzufügen?

Demnächst gibt es aber ein neues "Emulationsprojekt", welches u.a. wohl 
auch auf diversen STM32 laufen wird.

Jörg

von Uli (Gast)


Lesenswert?

Ein Raspberry Pi ist aber nicht mehr ein kleiner Prozessor sondern ein 
vollwertiges Linux System und wäre damit in meinen Augen nicht mehr dem 
Projekt würdig. Da könnte man dann auch sagen nim einen PC!

Das das ganze auf einem AVR läuft ist schon mal eine tolle Sache aber 
ich denke das man nicht immer alles auf den letzten "kleinen Krücken" 
versuchen muss. Ich erinnere mich an ein nettes Projekt wo jemand ein 
ARM Prozessor auf einem AVR genacht hat und dann ein LINUX darauf hat 
laufen lassen. Ist sportlich und sicherlich mal ein netter Zeitverteib 
aber null nutzen.

Dieser Emulator hat dagegen einen Nutzen und der wird bestimmt von 
einigen nachgebaut werden. Und darauf zielte meine Frage, weniger teile 
== einfacher.
Außerdem ist es halt einfacher einen etwas grösseren Prozessor zu nehmen 
und man hat genug Speicher + Speed um alles in top Qualität zu machen.

VG Uli

von David R. (retrogadgets)


Lesenswert?

Greetings Joerg

What are the fuse settings for the 644p

Thanks
David

von Olaf (Gast)


Lesenswert?

> Projekt würdig. Da könnte man dann auch sagen nim einen PC!

Das denke ich auch. Solche Dinge brauchen einen gewissen Schnuckelfaktor 
um cool zu wirken. Ein Beispiel dafuer waere z.B ein komplettes CP/M in 
einen modernen ARM mit 3x3mm DFN Gehaeuse auf dem TurboPascal laeuft. 
Das waer cool. Und UCSD/P waere noch cooler. :-)
Noch cooler waere es wenn der Controller BLE integriert haette und man 
von seinem Handy aus programmieren koennte. Also legt los...

Olaf

von Joerg W. (joergwolfram)


Lesenswert?

Hello David,

this information is located in the "liesmich" (readme) file.

Fuse LOW:   0xE6
Fuse HIGH:  0xD1
Fuse EXT:   0xFC


@Olaf

Na dann leg` mal selber los, so schwer kann das ja gar nicht sein...

von Tom (Gast)


Lesenswert?

Olaf schrieb:
> komplettes CP/M in
> einen modernen ARM mit 3x3mm DFN Gehaeuse auf dem TurboPascal laeuft.
> Das waer cool. Und UCSD/P waere noch cooler. :-)
> Noch cooler waere es wenn der Controller BLE integriert haette und man
> von seinem Handy aus programmieren koennte. Also legt los...
Wurde doch alles schon erfunden:
https://github.com/SmallRoomLabs/cpm8266

von David R. (retrogadgets)


Lesenswert?

Thanks.  Programmed the atmega and set the fuses.

Problem.  I dont have xilinx software.

Can anyone program the xc chip for me in exchange for a pcb ?

von Joerg W. (joergwolfram)


Lesenswert?

Hi David,

I can do this. If You use linux, You can also build my UPROG2 programmer 
which also can program these Xilinx CPLD's from the SVF files. Probably 
any other SVF-player can do this.

Best regards,

Joerg

von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

Managed to program the cpld with a xvsf player, but the picture is 
unrecogniseable

Must still have errors on pcb.

Might have to consider releasing the eagle files, for help on this 
project.

von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

Any help would be appreciated.

von Joerg W. (joergwolfram)


Lesenswert?

Hello David,

- Do You get pixel clock at PB4?
- There are HSYNC and VSYNC active toggling?
- Do You get signals on MCU_BE and MCU_DE?

These signals should be also active with a blank or missing CPLD.

If You can send me a blank PCB, I will try to build it and get it to 
work.

Best regards,

Joerg

von David R. (retrogadgets)


Lesenswert?

Joerg pm your postal address and I'll send you a board. Thanks.

von David R. (retrogadgets)


Lesenswert?

Joerg. Based on the ax82 could there possibly be a new zx81 emulator 
with the full 64k ram with high resolution graphics capabilities ?

von Joerg W. (joergwolfram)


Lesenswert?

A ZX81 emulator should be possible, with the ATMega1284P probably both 
emulators switchable. The CPLD should work with both variants and also 
most of the emulator core.
This must be changed:

- video signal generation
- Memory protection for ROM, if UDG should be possible
- image handling for disk

Beware of the complete programm is written in AVR assembler, most is 
commented but it may be hard to understand and expand it.

Joerg

von David R. (retrogadgets)


Lesenswert?

Joerg send me your postal address to
Zxmaker at g mail dot com


Joerg W. schrieb:
> Hello David,
>
> - Do You get pixel clock at PB4?
> - There are HSYNC and VSYNC active toggling?
> - Do You get signals on MCU_BE and MCU_DE?
>
> These signals should be also active with a blank or missing CPLD.
>
> If You can send me a blank PCB, I will try to build it and get it to
> work.
>
> Best regards,
>
> Joerg

von David R. (retrogadgets)


Angehängte Dateien:

Lesenswert?

David R. schrieb:
> Nearly fully populated

New revised board. Earlier board had 14 incorrectly named address 
line's.
Now corrected and making use of one 128k ram ic.

von Detlef K. (detlef-k)


Lesenswert?

Frage:Ist es möglich eine neue Überarbarbeitete Leiterplatte zu erwerben 
??
Grüß Detlef

von David R. (retrogadgets)


Lesenswert?

Shall be listing on ebay shortly titled
AX82

for user name is my sellers name.

von Thomas W. (diddl)


Lesenswert?

Da finde ich leider nichts auf eBay von AX82

von David R. (retrogadgets)


Lesenswert?

Thomas W. schrieb:
> Da finde ich leider nichts auf eBay von AX82

Try now.  Item number 183994764800

Regards

von Thomas W. (diddl)


Lesenswert?

danke!

von Frank Roper (Gast)


Lesenswert?

Of course, email me at zxmaker at gmail dot com

von chris_ (Gast)


Lesenswert?

Probably we should have a link here to the Zx81plus38:
Beitrag "ZX81 plus38 Clone"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.