Vorne weg: Dieser Thread ist ausschließlich zum Spaß an der
Beschäftigung mit Z80 MCUs als Vintage Hobby. Dieser Thread richtet sich
an Interessierte aus dieser Zeit, die ein wenig Lust haben, wieder mit
dem Z80 Befehlssatz zu spielen.
Vor einigen Jahrzehnten hatte ich Spaß am Programmieren und Basteln mit
der Z80 CPU. Vor kurzem bin ich auf diese Arduino Library gestoßen
https://github.com/jkingsman/Z80Mega
und überlege mir, was man lustiges damit anstellen könnte.
Eigentlich fehlt in der Library ein kleines Z80 Assembler Beispiel zum
Blinken der "LED_BUILTIN" beim Arduino.
Vielleicht sollte man mal einen Benchmark schreiben, um zu sehen, wie
schnell die Emulation läuft.
Na ja... so eine Emulation auf einem AVR zum laufen bringen ist eine
echte Herausforderung. Das bringt Spaß. Einen alten Sinclair Rechner
wieder instand setzen und darauf Programmieren bring auch Spaß.
Aber ich befürchte, du wirst ziemlich schnell sehen, warum niemand diese
Emulation benutzt.
chris_ schrieb:> Eigentlich fehlt in der Library ein kleines Z80 Assembler Beispiel zum> Blinken der "LED_BUILTIN" beim Arduino.> Vielleicht sollte man mal einen Benchmark schreiben, um zu sehen, wie> schnell die Emulation läuft.
wenn Du RunCPM auf dem Arduino Due laufen laesst kann man ueber BDOS/Z80
Assembler auch die GPIOs schalten.
Schau Dir dazu mal folgendes BASIC-Programm an, welches per READ/DATA
ein Assembler-Program laufen laesst ;)
https://github.com/MockbaTheBorg/RunCPM/blob/master/ArduinoInterface/LED.BAS
CPM auf einem Arduino wäre eine lustige Sache.
Laut Beschreibung soll die Library nur auf einem Arduino Mega laufen.
https://github.com/jkingsman/Z80Mega
Beim ersten Überfliegen der Sourcen sehe ich aber keinerlei
Prozessorabhängigkeit. Insofern sollte die Library auf jedem Arduino
Framwork laufen sofern der Prozessor ausreichend Speicher besitzt
(ESP32, PiPico, STM32 derivate).
von Ein Kommentar (Gast)
24.09.2022 18:33
>Na ja... so eine Emulation auf einem AVR zum laufen bringen ist eine>echte Herausforderung. Das bringt Spaß.
Mit dem ArduinoMega geht das natürlich schneller.
Ich hab's grad mal probiert:
Start 19:50
1. Zum Schrank laufen und ArduinoMega holen
2. Library als ZIP runter laden und in den Libraries Ordner kopieren
3. ArduinoMegaADK auswählen
4. Beispiel flashen
5. Serial Terminal auf 9600 Baud auswählen
19:55: der simulierte Z80 meldet sich per Arduino Serial Monitor
Hallo
chris_ schrieb:> 19:55: der simulierte Z80 meldet sich per Arduino Serial Monitor
Und dann?
Die Frage ist nicht (!) ironisch sondern ernsthaft gemeint.
Was macht man dann mit so einen "Z80" der ja in der Praxis dann fast
immer noch einen PC (Laptop, Smartphone, Tablett) bracht um den Serial
Monitor Ausgaben darzustellen.
Was konnte man mit einen Z80 eigentlich sinnvoll machen (Auch hier
wieder: Keine Ironie, keine Hetze sondern eine ernst gemeinte Frage)?
Und mit sinnvoll meine ich sinnvolle, einen Vorteile, Vereinfachungen,
Spaß bringende Anwendungen.
Warum sollte man sich einen Z80 mit all seinen Beschränkungen antun,
wenn ein auch schon (fast) Historischer und aus der Zeit gefallener
ATMega 8 oder ein PIC 16F84 deutlich mehr leisten, die GUI und
Entwicklungsumgebungen wesentlich Anwendungsfreundlicher und dabei sogar
meist kostenlos sind.
Nur um die rosarote Nostalgiebrille zu tragen und sich selbst was
vorzumachen (der Körper wird nämlich nicht auf einmal wieder Jung,
vertane Chancen eröffnen sich nicht neu, geliebte Leute und Freund
werden nicht auferstehen...) ?
Wenn ich den Wikipedia Artikel richtig interpretiere gibt es auch heute
noch "Z80"er die aber wohl außer den Prozessorkern wenig mit den
Original Z80 (Systeme) gemeinsam haben (?).
Warum dann einen Z80 Emulieren - man kann doch scheinbar immer noch ein
"Original" nutzen wenn man will (Wohl dann auch mit Zeitgemäßer
Entwicklungsumgebung und Programmern)?
Guido L. (guidol1970)
24.09.2022 19:42
>wenn Du RunCPM auf dem Arduino Due laufen laesst kann man ueber BDOS/Z80>Assembler auch die GPIOs schalten.https://github.com/MockbaTheBorg/RunCPM/tree/master/RunCPM
Leider ist die CPU von RunCPM nicht in der Arduino üblichen Form als
Library gekapselt.
Es wäre interesant, die Performance der beiden CPU-Implementierungen
vergleichen zu können.
Ich habe gerade mal versucht, die Leistungdaten von
https://github.com/jkingsman/Z80Mega
zu "Benchmarken":
Simulation: ArduinoMega
Flash: 63476 Bytes
Ram: 7054 Bytes
Instruction Speed ermittelt mit
1
uint32_tstartTime=micros();
2
for(intn=0;n<1000;n++)
3
{
4
StepZ80(&cpu);
5
}
6
uint32_tduration_us=micros()-startTime;
7
Serial.print("instructions per microsecond (mean):");Serial.println(1.0/(duration_us/1000));
instructions per microsecond (mean):0.17
Wie liegt eigentlich der Z80 im Normalfall?
Pre Z80 (Gast)
>Und dann?>Die Frage ist nicht (!) ironisch sondern ernsthaft gemeint.>Was macht man dann mit so einen "Z80" der ja in der Praxis dann fast>immer noch einen PC (Laptop, Smartphone, Tablett) bracht um den Serial>Monitor Ausgaben darzustellen.
Die CPU braucht keinen PC(Latop, Smartphone, Tablett) oder ähnliches.
Mit den IO-Funktionen kann man auch einfach nur eine LED blinken lassen
oder einen Roboter, Waschmaschine, Heizung oder was auch immer steuern.
Aber klar .. wie ich im Eingangspost schon erwähnte: Das ganze macht
vermutlich keinen Sinn, aber ich habe grad Spaß drann.
Wenn man CP/M auf 'nem Z80 zum laufen bekommt, kann man ihn mit
TurboPascal programmieren, das gabs tatsächlich für CP/M auf Z80. Manch
einer mag sowas.
Da zufälligerweise gerade ein NucleoF303K8 vor meiner Nase auf dem
Schreibtisch liegt,
https://os.mbed.com/platforms/ST-Nucleo-F303K8/
habe ich den Benchmark mal darauf geflasht (exact den gleichen Code wie
auf dem ArduinoMega):
Flash: 62744
Ram: 1652
instructions per microsecond (mean):0.50
Die CPU läuft auf dem STM32F303 also ca. 3 mal schneller als auf dem
ArduinoMega.
FCPU ArduinMega:16MHz
FCPU STM32F303K8: 72MHz
70MHz/16MHz=4.5
Seltsam: der Ram-Verbrauch ist deutlich kleiner als beim Atmega
und:Obwohl fast die 4.5 fache Clock und 32 Bit ist es auf dem STM nur 3
mal schneller.
Pre Z80 schrieb:> Was konnte man mit einen Z80 eigentlich sinnvoll machenhttps://de.wikipedia.org/wiki/Zilog_Z80#Verwendung
Ansonsten unter CP/M gab es schon (fast) alles was es heute auch noch
gibt: Textverarbeitung (WordStar), Tabellenkalkulation (Supercalc),
Datenbank (dBASE)
DerEchteHugo schrieb:> das gabs tatsächlich für CP/M auf Z80. Manch> einer mag sowas.
Aber ob er das auch noch mag wenns auf Arduino emuliert wird? Übrigens
macht CP/M mit weniger als 64 kB RAM sowieso wenig Sinn.
Georg
Peter K. (os2fan2)
24.09.2022 21:17
> http://www.symbos.de/
Uhh .. das ist aber arg farbig. Da darf man nicht rot grün blind sein.
Ich vermute, ein PiPico könnte für sowas inclusive Monitoransteuerung
reichen.
Spasseshalber habe ich den Benchmark Code mal auf den ESP32 geflasht.
Er lief erst mal nicht. Ich musste die Variable für die Zeitmessung auf
float umstellen. Scheinbar gibt es beim Compiler Unterschiede zum
Compiler für den AVR und den STM32.
Der Benchmark sieht jetzt so aus:
1
uint32_tstartTime=micros();
2
for(intn=0;n<1000;n++)
3
{
4
StepZ80(&cpu);
5
}
6
floatduration_us=micros()-startTime;
7
Serial.print("instructions per microsecond (mean):");Serial.println(1.0/(duration_us/1000));
Die Benutzung der Z80 Lib
https://github.com/jkingsman/Z80Mega
auf dem ESP32 ergibt für die Simulation der CPU:
Flash: 253250 Bytes
Ram: 14036 Bytes
instructions per microsecond (mean): 2.11
Die Z80 Simulation läuft damit auf dem ESP32 als 4x schneller als auf
dem STM32F303K8 bzw. 12x schneller als auf dem Atmega.
Ich schätze mal, dass bei einem 4MHz getakteten Z80 die
Ausführungsgeschwindigkeit bei ca. 500.000 Instruktionen/Sec liegt.
Damit wäre die Simulation auf einem Core des ESP32 etwa 4x schneller.
Bernd:
>Pre Z80 schrieb:>> Was konnte man mit einen Z80 eigentlich sinnvoll machen>https://de.wikipedia.org/wiki/Zilog_Z80#Verwendung
Aus dem Text:
"Anfangs wurde der Z80 häufig in Arcade-Spielen eingesetzt, so in
Galaxian (1979) und Pac-Man, aber auch der Mikrocomputer Intertec
Superbrain nutzte den Prozessor. Der Z80 hat sich dabei bis Ende der
1980er Jahre als Spiele-Prozessor bewährt. Um gewünschte Effekte zu
erzielen, setzten Automaten-Hersteller später auch bis zu drei Z80
parallel ein."
Nach dem obigen Benchmark zu urteilen kann der ESP32 mit der Z80 Arduino
Library 4 Z80 Kerne auf einem seiner Kerne mit der Geschwindigkeit eines
4MHz getakteten Z80 simulieren. Das dürfte für so ein Arkade Spiel
reichen.
Dass die Verwendung des Z80 für Spiele als erstes genannt ist dürfte der
Neigung der schreibenden Autoren geschuldet sein.
Ich hätte die größte Verbreitung eher in Maschinensteuerungen erwartet.
Die Verwendung als Steuerungs-CPU interessiert mich eher.
Die Fae´rben sind super.
Da ist nicht schrecklich.
Auf der Beispielseite sind verschiedene Desktops Beispiele abgebildet.
https://www.youtube.com/watch?v=B62k7iKK2rUchris_ schrieb:> Peter K. (os2fan2)> 24.09.2022 21:17>>> http://www.symbos.de/>> Uhh .. das ist aber arg farbig. Da darf man nicht rot grün blind sein.> Ich vermute, ein PiPico könnte für sowas inclusive Monitoransteuerung> reichen.
chris_ schrieb:> Vielleicht sollte man mal einen Benchmark schreiben, um zu sehen, wie> schnell die Emulation läuft.
Es gibt nicht "den Arduino". Der Unterschied zwischen einem Arduino Due
und einem Arduino Uno ist nun mal beträchtlich.
Wolfgang (Gast)
25.09.2022 07:22
>Es gibt nicht "den Arduino". Der Unterschied zwischen einem Arduino Due>und einem Arduino Uno ist nun mal beträchtlich.
Echt jetzt?
Man Leute, lest mal den Thread zumindest in groben Zügen durch, bevor
ihr etwas postet.
chris_ schrieb:> Echt jetzt?> Man Leute, lest mal den Thread zumindest in groben Zügen durch, bevor> ihr etwas postet.
Die Überschrift ist doch ganz klar formuliert. Darauf habe ich mich
bezogen.
>Die Überschrift ist doch ganz klar formuliert. Darauf habe ich mich>bezogen.
Ja, nur manchmal muss man den ganzen Artikel lesen, bevor man weiß, um
was es geht.
Guck mal hier:
Beitrag "Re: Z80 Emulation auf dem Arduino"
chris_ schrieb:> Guck mal hier:>> Beitrag "Re: Z80 Emulation auf dem Arduino"
Eine float-Variable für die Differenz von Integer ist an sich schon
einmal krank - kein weiterer Kommentar
Peter K. schrieb:> Die Fae´rben sind super.> Da ist nicht schrecklich.
Sieht aus wie die Versuche aus den frühen 90ern, mit Corel Draw dem
Nagelstudio von der Uschi ein neues "Design" zu verpassen.
Peter K. (os2fan2)
25.09.2022 07:25
>Hier sieht man SymAmp:-) (Winamp Clone im Einsatz)>https://www.youtube.com/watch?v=IlOkLrhfZFA
Ist nur bei mir kein Ton im Video? Ich hätte vermutet, dass der Winamp
Clone Sound erzeugt.
Die Frage ist: Die Leistung eines Z80 würde vielleicht gerade reichen,
um die Daten aus dem Speicher zu einem DAC zu schaufeln, aber von MP3
ist das weit entfernt.
chris_ schrieb:> Ist nur bei mir kein Ton im Video?
Ab etwa 2:30 kommt welcher. Man muss aber schon recht hartgesotten sein,
um der ... äh, "hochauflösenden" Graphik bis dahin gebannt zuzugucken.
Allerdings habe ich leichte Zweifel daran, daß der Ton irgendwas mit
dem Z80-System zu tun hat, das hier zu sehen ist.
DerEinzigeBernd schrieb:> Allerdings habe ich leichte Zweifel daran, daß der Ton irgendwas mit> dem Z80-System zu tun hat, das hier zu sehen ist.
Na ja, ab 04:42 hat das wieder ein Ende und es ist diese Mischung aus
Netzbrumm und Rauschen hinterlegt.
chris_ schrieb:> Obwohl fast die 4.5 fache Clock und 32 Bit> ist es auf dem STM nur 3 mal schneller.
Das ist überhaupt nicht seltsam. 32 Bit breite Register nützen dir
nichts, wenn du nur mit 8 Bit Daten arbeitest. Zudem braucht ein STM32
für viele Dinge mehr CPU Takte und Befehle, als ein AVR.
Bei gleicher Taktfrequenz kann ein STM32 durchaus langsamer sein, als
ein AVR. Insbesondere wenn das Programm viel an den I/O Pins herum
wackelt.
Stefan ⛄ F. (stefanus)
25.09.2022 16:35
>Das ist überhaupt nicht seltsam. 32 Bit breite Register nützen dir>nichts, wenn du nur mit 8 Bit Daten arbeitest. Zudem braucht ein STM32>für viele Dinge mehr CPU Takte und Befehle, als ein AVR.
Die Begründung ist mir dann auch eingefallen. Ein wenig könnten die
32Bit doch bringen, da der Z80 auch ein paar Befehle, die 16 Bit
benutzen wie z.B. die Adressierungsarten über HL, BC oder den PC.
Etwas positive ist mir dann doch die Geschwindigkeit des ESP32
aufgefallen. Allerdings wundert mich der enorme Flash Bedarf, da muss
das Framework irgend was riesiges mitziehen .. vielleicht den gesamten
WIFI-Stack.
Beitrag "Re: Z80 Emulation auf dem Arduino"
Der Speicherbedarf der Library auf dem Arduino-Mega ist meiner Meinung
nach auch viel zu hoch: Eigentlich sollte es möglich sein, den Z80 mit
<8kB Flash und 256Byte Ram zu simulieren.
Wenn es die verwendete Simulation hier
https://www.mikrocontroller.net/articles/AVR_CP/M als Arduino-Lib
gäbe, wäre das super. Allerdings wäre das Ganze dann nicht mehr auf
andere Architekturen portabel, was auch wieder blööd ist.
Falls man der Aktion, einen Z80 zu simulieren etwas nützliches
abgewinnen will: Man kann auch ohne CPM einen Basic Interpreter laufen
lassen.
http://searle.x10host.com/z80/SimpleZ80.html
Das Arduino Projekt hat hier einer mit der Lib dazu erstellt:
https://github.com/tmacauley/Z80Pico/tree/master/examples/GrantSearle7ChipZ80
chris_ schrieb:> Wie liegt eigentlich der Z80 im Normalfall?
Schon vergessen? Im Mittel braucht der Z80 pro Instruktion 4 Taktzyklen.
Also ein historischer Z80 mit 4 MHz Takt arbeitet 1 Instruktion pro µs
ab. Damit liegt er so etwa gleichauf mit sowas wie klassischen PIC16,
die aber deutlich weniger Speicher adressieren können. Nun ja, neuere
Z80 vertragen 20 MHz Takt und da sind so etwa 5 Instruktionen/µs drin.
Ich schreibe hier immer 'so etwa', weil der Z80 eben verschiedene
Befehlslängen und Interface-Sequenzen einschließlich Wait und
dazugehörige Waitstates kennt. Er ist eben kein Controller, sondern ein
Prozessor.
Allerdings sind solche Emulationen mir immer suspekt, denn was soll es
heißen: "19:55: der simulierte Z80 meldet sich per Arduino Serial
Monitor". Der Z80 meldet sich überhaupt nicht. Und zwar nie und
nirgends. Was sich da melden kann, ist ein Programm, das von ihm
(virtuell) ausgeführt wird. Also wenn man das so sehen will, dann eine
Art Script, ausgeführt auf einem passenden Interpreter. Und der wiederum
ausgeführt auf einem Interpreter für diesen Interpreter.
W.S.
W.S. schrieb:> Im Mittel braucht der Z80 pro Instruktion 4 Taktzyklen.
Nie im Leben.
Wenn mich mein Gedächtnis nicht trügt, braucht der kürzeste
Befehl 4 Takte (der längste liegt bei 19 Takten oder so.)
Im Mittel 8 Takte je Befehl haut m.E. schon ganz gut hin.
Grummler schrieb:> Wenn mich mein Gedächtnis nicht trügt, braucht der kürzeste> Befehl 4 Takte
Korrekt, siehe auch https://clrhome.org/table/
NOP allein braucht schon 4 cycles.
Apropos Z80-Emulator: Siehe auch STECCY. Diese Emulation bildet
timinggenau einen Z80 mit 3,5MHz ab, kann aber mittels Turbo-Taste um
ein Vielfaches beschleunigt werden. Der Emulator läuft aber auf einem
STM32 und nicht auf einem Arduino.
Frank M. (ukw) (Moderator)
>Der Emulator läuft aber auf einem>STM32 und nicht auf einem Arduino.
Du meinst jetzt so einen wie den hier:
https://store.arduino.cc/products/portenta-h7
chris_ schrieb:> Du meinst jetzt so einen wie den hier:> https://store.arduino.cc/products/portenta-h7
Nee, das Teil ist viel zu fett und zu teuer dafür. :-)
Ich meine einen STM32F407VET6. Das im STECCY-Artikel verlinkte Board
kostete Anfang 2020 noch knapp 10 EUR. Mittlerweile leider wegen der
STM32-Knappheit 40 EUR. Ich hoffe, das gibt sich bald wieder.
chris_ schrieb:> aber sie scheint ziemlich viele Abhängigkeiten zu anderen Modulen zu> haben:
Ja, weil gleichzeitig auch die Spectrum-ZX-Hardware emuliert wird. Eine
Kapselung des reinen Z80-Emulators kann man machen, wird bei STECCY aber
höchstwahrscheinlich zu Performance-Einbußen führen, da die
Original-ZX-Spectrum-Peripherie von Sinclair ziemlich eng mit dem Z80
"verzahnt" wurde.
Zum Beispiel wurde ein "gleichzeitiger" RAM-Zugriff über den ULA-Chip
zur Bilddarstellung realisiert, indem dieser mal kurz reingrätscht und
die Z80 immer wieder zyklisch stoppt... Es gibt da noch viele andere
Tricks, die damals genutzt wurden, um den ZX-Spectrum preisgünstig ohne
viel Hardware-Aufwand herzustellen.
Wenn ich mal Lust und Zeit habe, kann ich den reinen Z80-Emulator aus
STECCY herausoperieren...
>Eine Kapselung des reinen Z80-Emulators kann man machen, wird bei STECCY aber
höchstwahrscheinlich zu Performance-Einbußen führen, da die
Original-ZX-Spectrum-Peripherie von Sinclair ziemlich eng mit dem Z80
"verzahnt" wurde.
Ohja, das klingt kompliziert. Wahrscheinlich ist es eher nicht machbar.
Es wäre natürlich schon schön, wenn man die einzelnen Chips als
Softwaremodule hätte und sie einfach "zusammenstöpseln" kann.
Im Moment habe ich die Spektrum Platine oben herumliegen, die darauf
wartet, mühselig bestückt zu werden ...
chris_ schrieb:> was man lustiges damit anstellen könnte.
Man könnte auf dem AVR einen Z80 emulieren der einen 6502 emuliert 🙄
Wenn man dann noch den AVR auf dem stm32 emuliert und den dann auf einem
RiscV, der von einem Raspi emuliert wird, der von einem Ryzen emuliert
wird ...
.. Viele Lichtjahre von der Sinnhaftigeit entfernt dringt die
Emulatorprise in Galaxien vor, die nie ein Mensch zuvor gesehen hat.
>Man könnte auf dem AVR einen Z80 emulieren der einen 6502 emuliert 🙄>Wenn man dann noch den AVR auf dem stm32 emuliert und den dann auf einem>RiscV, der von einem Raspi emuliert wird, der von einem Ryzen emuliert>wird ...
Statt einen Ryzen wäre aber ein Atmega lustiger:
https://dmitry.gr/?r=05.Projects&proj=07.%20Linux%20on%208bit