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.
Oder: https://github.com/MockbaTheBorg/RunCPM Das einzige Problem ist die RAM-Speichergroesse. Heute sind Mikrocontroller gut genug: Beitrag "CP/M auf dem Raspberry Pi Pico" Gruesse Th.
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_t startTime = micros(); |
2 | for (int n = 0; n < 1000; n++) |
3 | {
|
4 | StepZ80(&cpu); |
5 | }
|
6 | uint32_t duration_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 machen https://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_t startTime = micros(); |
2 | for (int n = 0; n < 1000; n++) |
3 | {
|
4 | StepZ80(&cpu); |
5 | }
|
6 | float duration_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=B62k7iKK2rU chris_ 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.
Das ist die beste Idee, die ich je gehört hab! Man könnte aber auch alternativ einen roten Gummibärchen einbuddeln ...
Beitrag #7202677 wurde von einem Moderator gelöscht.
https://www.cpcwiki.eu/forum/applications/symamp-with-amiga-mod-support/ Abgfefahren in der Z80 und Symbos schon:-) https://www.youtube.com/watch?v=kahDREIaOog Und mit einem echten Z80 kannst du Symbiface nutzen https://www.cpcwiki.eu/index.php/SYMBiFACE_II
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
Es gibt ein neues Z80-OS. Vielleicht könnte man das auf den "Arduino-artigen" laufen lassen ;-) https://hackaday.com/2022/11/08/z80-gets-new-os/
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.
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch Moderator
Frank M. (ukw) (Moderator) >Ich meine einen STM32F407VET6. Das im STECCY-Artikel verlinkte Board https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0 Es wird ja praktischerweise von STM mit STM32duino unterstützt. https://github.com/stm32duino/Arduino_Core_STM32 Man kann also direkt die Z80 Library darauf laufen lassen: https://github.com/jkingsman/Z80Mega/blob/master/src/Z80.c Oben habe ich ja den Benchmark für das mit nur 72Mhz getaktete Nucleo F303K8 gemacht: Beitrag "Re: Z80 Emulation auf dem Arduino" Steccy ist ja ein sehr schönes Projekt. Vielleicht könnte man deren Z80 Emulation in eine Library fassen, aber sie scheint ziemlich viele Abhängigkeiten zu anderen Modulen zu haben: https://github.com/ukw100/STECCY/blob/main/src/z80/z80.c
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...
:
Bearbeitet durch Moderator
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.