CP/M-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Memberlist || Home || Statistik || Kalender || Staff Willkommen Gast!
[ Unofficial CP/M Website ] [ Z80 Family Support Page ] [ Forum-Regeln ] [ Impressum/Kontakt ] [ Datenschutzerklärung ]

CP/M-Forum » CPU-und Computer-Emulatoren » Z80 BUS Emulator » Threadansicht

Autor Thread - Seiten: -1-
000
21.04.2014, 14:22 Uhr
timetube

Avatar von timetube

Hallo Leute,

ich habe mich in den letzten Jahren in meiner Freizeit immer mal wieder mit der Entwicklung eines eigenen Z80 Emulators befasst. Mehr so zur Spielerei "just for fun".

Über die Osterfeiertage nun habe ich diesen Emulator, inklusive einiger Testprojekte, veröffentlicht.

Natürlich gibt es mittlerweile unzählige, tolle Z80 Emulationen, dennoch habe ich mal versucht einen etwas anderen Ansatz zu wählen.

Dieser Emulator will nicht der schnellste sein, er dekodiert daher nicht über die üblichen Tabellen oder "BigSwitches", sondern über eine Logik, wie sie Cristian Dinu sie in seinem Dokument (see the acknowledgements section at http://www.z80.info/decoding.htm) beschrieben hat. Eine tolle Arbeit, die mich sehr inspiriert hat diesen Emulator, nach dem darin beschriebenen Verfahren, zu entwickeln. Vielen Dank Cristian.

Darüber hinaus unterstützt dieser Emulator, über eine einzige BUS-Funktion, den Zustand jedes einzelnen Logischen Pins des Z80-Chips in einer nahezu authentischen Weise. Ein an diesem Interface mitgeschnittenes Traces-Logfile, kann, über ein geeignetes z.B. Gnuplot Script, ein fast authentisches Logikanalyse-Diagramm erstellen.

Damit ist dieser Emulator ideal für Lehr- und Lernzwecke geeignet.

Wer wissen möchte welche dokumentierten und nicht dokumentierten OpCodes dieser Emulator unterstützt, der möge sich das Projekt Z80Test erstellen. Dieses gibt dann eine Liste in der Form (siehe weiter unten) aus.

Das Projekt libZ80Test führt wahlweise die legendären Test-Programme "zexall" und "zexdoc" aus. Da diese ursprünglich für CP/M entwickelt wurden, wird der CP/M Console-Output simuliert. Ansonsten ist es der original Programmcode, wie er auch u.A. vom YAZE Team verwendet wird. YAZE, ein sehr sehenswertes Projekt, von dem ich viel gelernt habe. http://www.mathematik.uni-ulm.de/users/ag/yaze-ag/

Das Projekt CPM 2.2 muss hier wohl nicht weiter beschrieben werden. Die CP/M Console wird über Telnet angebunden, was leicht verschiedene Terminaltemulationen ermöglicht (ANSI / VT100...) Über die Emulatorconsole können Programmcode zwischen CP/M System/Disks und Host-PC ausgetauscht werden. Diese parallel laufende Monitor ist beliebig erweiterbar, soll nur ein Muster sein.

Das Projekt QtZX80 ist ein vollwertiger ZX80 Qt-Emulator, welcher die original ROM-Codes des ZX80 verwendet. Hier wird besonders deutlich gemacht, wie nahe diese Emulation an der realen Z80-CPU liegt. Dieses ZX80 System verwendet derart trickreich selbst die Interrupt-ACK und Refreshsignale am BUS der Z80 CPU, dass mir kein weiterer Z80 Emulator bekannt ist, der ohne Tricks und Eingriffe in den Programmablauf, diesen ZX80 so naturgetreu emulieren kann. <stolz>

Dann noch das Projekt TK-80 ein NEC Trainings-Kit 80 Emulator, der mir mehr dazu diente mal mit so einem native! graphisches Uferinterface (Qt) herum zuspielen. Da ist noch einiges dran zu tun, dennoch macht das Teil schon Spaß und liegt somit bei.

Alle diese Projekte benötigen natürlich das Projekt Z80 (libZ80.so) um ausgeführt werden zu können. Diese shared Library muss daher zuvor erstellt und an eine Stelle kopiert werden, wo sie über das Environment LD_LIBRARY_PATH auch gefunden werden kann. Das Makefile versucht daher einen symbolischen Link unter ${HOME}/lib anzulegen.

Ach ja, um auch die Z80/8080A Programme erstellen zu können, braucht Ihr neben einer Linux/Qt Buildumgebung auch den ZMAC, einen sehr leistungsfähigen und zu den gängigen Z80 Assemblern kompatiblen Cross-Assembler.

Ich verwende
zmac 1.3, a Z80 macro cross-assembler.
Public domain by Bruce Norskog and others.


Quellcode:
-HL- -IX- -IY- -IR- -SP- -AF- -BC- -DE- -HL-  -PC-: M1 .. .. .. .. : Mnemonics
4042,sZyhxpNc,0000,4040,0000,4040,0000,0020,3435,ff29,ffff,0000,ffff  0004: dd c4 c6 c7    : CALL NZ, c7c6h; 4
4042,sZyhxpNc,0000,4040,0000,4040,0000,0021,3435,ff29,ffff,0000,ffff  0002: dd c5          : PUSH BC                    ; 4
4042,sZyhxpNc,0000,4040,0000,4040,0000,0022,3433,ff29,ffff,0000,ffff  0003: dd c6 c8       : ADD c8h                    ; 4
0809,szyhXpnC,0000,4040,0000,4040,0000,0023,3433,ff29,ffff,0000,ffff  0002: dd c7          : RST 00h                    ; 4
0809,szyhXpnC,0000,4040,0000,4040,0000,0024,3431,ff29,ffff,0000,ffff  0002: dd c8          : RET Z                      ; 4
0809,szyhXpnC,0000,4040,0000,4040,0000,0025,3431,ff29,ffff,0000,ffff  0002: dd c9          : RET                        ; 4
0809,szyhXpnC,0000,4040,0000,4040,0000,0026,3433,ff29,ffff,0000,ffff  0004: dd ca cc cd    : JP Z, cdcch                ; 4
0809,szyhXpnC,0000,4040,0000,4040,0000,0027,3433,ff29,ffff,0000,ffff  0004: dd cb cd 00    : LD B, RLC (IX-51)          ; 23
0844,sZyhxPnc,0000,4040,0000,4040,0000,0029,3433,ff29,ffff,0000,ffff  0004: dd cb cd 01    : LD C, RLC (IX-51)          ; 23
0844,sZyhxPnc,0000,4040,0000,4040,0000,002b,3433,ff29,ffff,0000,ffff  0004: dd cb cd 02    : LD D, RLC (IX-51)          ; 23
0844,sZyhxPnc,0000,0040,0000,4040,0000,002d,3433,ff29,ffff,0000,ffff  0004: dd cb cd 03    : LD E, RLC (IX-51)          ; 23
0844,sZyhxPnc,0000,0000,0000,4040,0000,002f,3433,ff29,ffff,0000,ffff  0004: dd cb cd 04    : LD H, RLC (IX-51)          ; 23
0844,sZyhxPnc,0000,0000,0000,4040,0000,0031,3433,ff29,ffff,0000,ffff  0004: dd cb cd 05    : LD L, RLC (IX-51)          ; 23
0844,sZyhxPnc,0000,0000,0000,4040,0000,0033,3433,ff29,ffff,0000,ffff  0004: dd cb cd 06    : RLC (IX-51)                ; 23
0844,sZyhxPnc,0000,0000,0000,4040,0000,0035,3433,ff29,ffff,0000,ffff  0004: dd cb cd 07    : LD A, RLC (IX-51)          ; 23
0044,sZyhxPnc,0000,0000,0000,4040,0000,0037,3433,ff29,ffff,0000,ffff  0004: dd cb cd 08    : LD B, RRC (IX-51)          ; 23
-AF- --Flag-- -BC- -DE- -HL- -IX- -IY- -IR- -SP- -AF- -BC- -DE- -HL-  -PC-: M1 .. .. .. .. : Mnemonics
0044,sZyhxPnc,0000,0000,0000,4040,0000,0039,3433,ff29,ffff,0000,ffff  0004: dd cb cd 09    : LD C, RRC (IX-51); 23
0044,sZyhxPnc,0000,0000,0000,4040,0000,003b,3433,ff29,ffff,0000,ffff  0004: dd cb cd 0a    : LD D, RRC (IX-51)          ; 23
0044,sZyhxPnc,0000,0000,0000,4040,0000,003d,3433,ff29,ffff,0000,ffff  0004: dd cb cd 0b    : LD E, RRC (IX-51)          ; 23
0044,sZyhxPnc,0000,0000,0000,4040,0000,003f,3433,ff29,ffff,0000,ffff  0004: dd cb cd 0c    : LD H, RRC (IX-51)          ; 23
0044,sZyhxPnc,0000,0000,0000,4040,0000,0041,3433,ff29,ffff,0000,ffff  0004: dd cb cd 0d    : LD L, RRC (IX-51)          ; 23
0044,sZyhxPnc,0000,0000,0000,4040,0000,0043,3433,ff29,ffff,0000,ffff  0004: dd cb cd 0e    : RRC (IX-51)  

Obwohl die beigelegten Testprogramme der Emulation schon einiges abverlangen, kann ich nicht für die vollständige Abarbeitung aller Z80 Codes garantieren. Hier seit Ihr aufgefordert mitzuhelfen. Es heißt also nicht "Finded Nemo" sondern "Findert die Fehle".

Also, wer das Projekt anschauen und ausprobieren möchte, hier nun der Link zu den Sources:

Yet Another, Another Z80 Emulator

Wer an diesen Projekten mitarbeiten möchte, kann das natürlich gerne tun. Er sei hiermit herzlichst eingeladen. Ich würde Dich dann als Developer in das Projekt eintragen, so dass Du zwanglos und eigenständig mitwirken kannst.

In diesem Sinne, frohe Ostern und viel Spaß mit diesem Emulator.

TimeTube @notwendig
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.

Dieser Post wurde am 21.04.2014 um 15:18 Uhr von timetube editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
001
21.04.2014, 15:55 Uhr
timetube

Avatar von timetube

Hubs, der Link ist irgendwie falsch und ich habe zu lange gebraucht um das zu bemerken um es noch ändern zu können. Daher hier nun der Nachsatz.

Link zum Dokument vom Cristian http://www.z80.info/decoding.htm
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
002
22.05.2014, 11:07 Uhr
timetube

Avatar von timetube

Hab mal ein Video von diesem Simulator gemacht

libZ80.o Application Demo

Für den der jetzt keine Lust hat das alles selber an den Start zu bringen.

j.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
003
26.05.2014, 17:27 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Jürgen

Habe mir dein Video angeschaut. Sehr interessant.
Hast du eine Quelle für ZAP ?

Grüße, Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
004
26.05.2014, 18:22 Uhr
timetube

Avatar von timetube


Zitat:
Hein_Ko postete
Hast du eine Quelle für ZAP ?

Es ist auf den Diskimage, "drivea.cpm" enthalten. Das Image stammt glaube ich vom z80pack projekt.

Es ist in meinem Projekt enthalten.

j.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
005
26.05.2014, 19:10 Uhr
Hein_Ko

Avatar von Hein_Ko

Danke.

Was suchst Du denn für einen Z80 SBC? Soll der CP/M können?

H.
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
006
26.05.2014, 19:48 Uhr
timetube

Avatar von timetube

Hi Hein

nicht unbedingt, jedenfalls ist das nicht das, was ich vorrangig damit vor habe

Aber wenn er 64K und rs232 hat, lässt sich CP/M Fähigkeit ja kaum noch verhindern )

Ich habe zwei Dinge damit vor.

Zum eine möchte ich meine Generator weiterentwickeln/testen, der führt alle dokumentierten und undokumentierten Z80-Opcodes aus und erzeugt ein komprimiertes Image, welches eine PC Z80 Simulation (aber auch andere Z80 Systeme) mittels einer kleinen Software dann zum Testen seiner eigenen Simulation verwenden kann. Ähnlich wie zexdoc.com, zexall.com, aber mit allen Opcodes und Hinweise darauf, welcher genau abweicht vom Z80-Muster. Es wird dann einfach sein für die unterschiedlichen Brandings (Z80 Varianten) ein Image im Netz zu haben und seinen Simulator auf ein Branding hin auszulegen oder auch viele Varianten Konfigurierbar zu unterstützen.

Ich bin damit schon recht weit, brauche nun ein handhabbares, kleines original Z80 Board, das ich auch in Hotels (bin Freiberufler) zur Freizeitentspannung benutzen kann

Zweitens möchte ich darauf auch mein ZERTOS weiter entwickeln, ein kleines Z80 RTOS. Daher wäre CTC PIO SIO DMA (zur floppy Emulation) .... sehr gut. Alles möglichst einfach, ohne fettes Equipment benutzbar.

j.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
007
26.05.2014, 19:59 Uhr
Hein_Ko

Avatar von Hein_Ko

Hi Jürgen

Schade, dann passt es nicht so richtig. Hätte sonst die SEPIA CPU noch für CP/M umgebaut und mit Bootloader erweitert... aber das ist dann doch zu viel für die EURO-Karte.

Grüße
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
008
26.05.2014, 20:18 Uhr
timetube

Avatar von timetube

Der ist schon nicht schlecht, aber nicht so ohne weiteres standalone in betrieb zu nehmen oder?
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
009
27.05.2014, 16:52 Uhr
Hein_Ko

Avatar von Hein_Ko

Die CPU-Karte ist auch als SBC (stand allone) einsatzfähig. Ich könnte die Karte eventuell so erweitern, das man keine MEM-Karte mehr benötigt. Dann wären 64 kB SRAM und ein abschaltbares Boot-ROM in der Lage CP/M zu booten. Die IDE, oder RAM-Floppy kämen jedoch wieder extra. Weitere Bauteile wie CTC PIO SIO DMA... passen platzmäßig nicht mehr drauf. Eine RS232 und LPT ist vorhanden. >> http://www.kolter.de/SEPIA-CPU.pdf
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
010
25.02.2017, 10:02 Uhr
Freizeitcoder



Hi timetube,
ich habe ein paar Probleme das Projekt zu bauen. libZ80_dbg.so fehlt mir. Ich habe sie auch nirgendwo im netz gefunden. Diese scheint aber sehr wichtig für alle Projekte im zip zu sein. Woher bekomme ich diese Library?
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
011
25.02.2017, 12:50 Uhr
timetube

Avatar von timetube

Hi
Zitat:
Freizeitcoder postete

Die Lib wird durch das Projekt Z80 erstellt und muss in ein Verzeichnis installiert werden, in dem das System, genauer der Linkloader, nach Shared-Objects sucht.

Das Makefile installiert die libZ80_dbg.so in ~/lib (also Dein Home-Verzeichnis ins Unterverzeichnis lib)

Das Verzeichnis muss es geben also!
mkdir ~/lib


Damit der Linkloader da auch nachschaut, muss die Environment-Variable LD_LIBRARY_PATH da hin zeigen.

Ich mach das beim Login durch die .profile datei, durch den Eintrag

Quellcode:
12 PATH=$PATH:$HOME/.local/bin:$HOME/bin
13 export PATH
14
15 LD_LIBRARY_PATH=$HOME/lib:$LD_LIBRARY_PATH
16 export LD_LIBRARY_PATH

Das sieht dann so aus bei mir


Quellcode:
[juergen@nadhh ~]$ echo $LD_LIBRARY_PATH
/home/juergen/lib:
[juergen@nadhh ~]$


--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
012
25.02.2017, 23:40 Uhr
Freizeitcoder




Zitat:
Die Lib wird durch das Projekt Z80 erstellt und muss in ein Verzeichnis installiert werden, in dem das System, genauer der Linkloader, nach Shared-Objects sucht.

Das Makefile installiert die libZ80_dbg.so in ~/lib (also Dein Home-Verzeichnis ins Unterverzeichnis lib)

Okay das habe ich jetzt korrigiert. der name juergen war hardcoded im Makefile, darum entstand das bei mir nicht in ~/lib. Allerdings liegen da nur libZ80.so mit diversen versionsnummern. keine libZ80_dbg.so. Wo entsteht die?

Wenn ich die Zeile änder, sodass gegen libZ80 gelinkt wird, dann bekomme ich diesen output:


Quellcode:
mainwindow.o: In function `Ui_MainWindow::setupUi(QMainWindow*)':
mainwindow.cpp:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[_ZN13Ui_MainWindow7setupUiEP11QMainWindow]+0x785): undefined reference to `SEG7::setBackr(QColor const&)'
mainwindow.cpp:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[_ZN13Ui_MainWindow7setupUiEP11QMainWindow]+0xcae): undefined reference to `SEG7::setBackr(QColor const&)'
mainwindow.cpp:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[_ZN13Ui_MainWindow7setupUiEP11QMainWindow]+0x1a56): undefined reference to `SEG7::setBackr(QColor const&)'
mainwindow.cpp:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[_ZN13Ui_MainWindow7setupUiEP11QMainWindow]+0x1de5): undefined reference to `SEG7::setBackr(QColor const&)'
mainwindow.cpp:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[_ZN13Ui_MainWindow7setupUiEP11QMainWindow]+0x2122): undefined reference to `SEG7::setBackr(QColor const&)'
mainwindow.o:mainwindow.cpp:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[_ZN13Ui_MainWindow7setupUiEP11QMainWindow]+0x231b): more undefined references to `SEG7::setBackr(QColor const&)' follow


Dieser Post wurde am 25.02.2017 um 23:45 Uhr von Freizeitcoder editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
013
26.02.2017, 07:21 Uhr
timetube

Avatar von timetube

Hi Freizeitcoder.

Ja, gebe es zu Dokumentation ist bei meinen "Just For Fun" Projekten er spärlich

Also, die Makefiles werden vom QtCreator mit absoluten Pfaden Generiert. Ich empfehle Dir daher dringend den QtCrator wenigstens zur Rekonfiguration und Regenerierung der Makefiles auch zu installieren. Der passt dann auch alle Pfade zu den Qt-Headern/Libs eg. an, so wie es auf Deinem System installiert wurde. Da kann man dann auch auswählen ob mit ohne ohne Debug-Informationen gebaut werden soll (*_dbg.so oder *.so).

Wenn Du vor hast selber ein wenig damit zu Programmieren, würde ich beide Versionen ALLER Projekte bauen und die Libs installieren.

Ach ja, alle Projekte die eine Library (.o oder .so) zum Ergebnis haben zu erst, dann erst die Executables, die diese Libraries ja verwenden könnten.

Nun zu den fehlenden Qt-GU Elementen (SEG7::setBackr...). Das sind vom Prinziep her auch Shared-Objects, werden aber nicht nur von der Qt-Applikation ran gezogen sondern bereits vom QTCreator bzw. dem von diesem aufgerufenem QtDesigner wie Plugins geladen, damit er die GUI Elemente im Designer richtig darstellen kann.

Alle GUI Elemente (libdevicesplugin.so) werden vom Projekt unter <projectroot>/qvintage gebaut und müssen anders wie die nicht GUI-Libraries (auch) in ein spezielles, dem QtDesigner bekanntes Pluginverzeichnis installiert werden. http://doc.qt.io/qtcreator/adding-plugins.html

Es kann dann sein, dass Du noch Qt-Pakete nachinstallieren musst, die meine Projekte verwenden, bei Dir aber noch nicht installiert sind. Dann bitte immer die developer-versionen (also libs und header) installieren. Wie, hängt von Deiner Distribution ab. Bei mir (Fadorea 25) ginge das mit "dnf install <qtpaket>-devel"

Ja, ich habe wirklich nicht gut Dokumentiert. Leute, die nicht mit Qt öffter Arbeiten, sind da aufgeschmissen, das gebe ich zu.

Ich hoffe meine Projekte entlohnen Dich für die Mühen und Zeit, die Du daran aufwendest.

Gruß Jürgen alias timetube
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
014
26.02.2017, 14:42 Uhr
Freizeitcoder



Danke für die ausgiebige Erklärung. Jetzt läuft es
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
015
26.02.2017, 16:10 Uhr
timetube

Avatar von timetube

OK, bis auf der COM Emulator, da bin ich gerade bei einen Remote DiskServer für zu schreiben, der ist im Moment nicht konsistent.

Viel Spaß damit dennoch

Noch ein Tipp. Wenn Du Programme für den ZX80 Emulator aus dem Netz saugst, werden nicht alles funktionieren. Ich simulire eine PAL Version dieser Hardware. Darauf laufen die für NTSC geschriebenen Programme nicht, weil die Hardware extrem sparsam TV Signale erzeugt und die meisten Programme direkt darauf aufsetzen.

Kannst Dich ja auf die Updates registrieren, dann bekommst mit, wenn ich mal wieder was daran machte.

Gruß
tt.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
Seiten: -1-     [ CPU-und Computer-Emulatoren ]  



gaby.de

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek