Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » zexall im Emulator » Themenansicht

Autor Thread - Seiten: -1-
000
22.03.2013, 15:36 Uhr
waldheinz



Hallo,

nachdem sich Mobby5 letztens mit einer Frage zum MPC an mich gewandt hat, hat es mich gejuckt, mein MPC - Emulator - Projekt doch mal wieder ein bisschen voran zu bringen. Um den/die Fehler etwas systematischer einzukreisen, wollte ich daher erst mal meine Z80 CPU mit dem zexall validieren.

Da zexall ja ein CP/M Programm ist, ich jedoch kein CP/M am laufen habe, musste dafür erst mal eine Lösung her. Das ging leichter als gedacht. Vom zexall habe ich mir die Version [1] gezogen, welche sich mit zmac assemblieren lässt und mal angeguckt. Zunächst wird von Adresse 0x06 ein Wort gelesen und damit der SP initialisiert. Außerdem werden zur Ausgabe BDOS - Aufrufe für String und einzelne Zeichen (Funktionen 2 und 9) genutzt.

Also ein minimales Test - System gebastelt, welches folgendes tut:

* zexall so patchen, dass statt "call 5" (CP/M rufen) auf einen Port geschrieben wird
* CPU mit 64kB RAM und einem "speziellen" I/O System verbunden
* das CP/M Binary ab 0x100 in den RAM kopieren
* in den RAM ab 0x06 den Wert 0xf000 eintragen
* den PC auf 0x100 (statt sonst 0x00) initialisieren
* CPU starten
* wenn ein Port - Zugriff festgestellt wird, dann spielt das "spezielle" I/O System halt mal CP/M, guckt sich Register C an und entscheidet was dann zu tun ist -- halt entweder ein Zeichen oder einen String ausgeben. Statt auf den Bildschirm geht die Ausgabe halt ins log

Das funktioniert so weit erstaunlich gut, hier die aktuelle Ausgabe:


Quellcode:
Z80all instruction exerciser
<adc,sbc> hl,<bc,de,hl,sp>....  ERROR **** crc expected:d48ad519 found:5011035d
add hl,<bc,de,hl,sp>..........  OK
add ix,<bc,de,ix,sp>..........  OK
add iy,<bc,de,iy,sp>..........  OK
aluop a,nn....................  OK
aluop a,<b,c,d,e,h,l,(hl),a>..  OK
aluop a,<ixh,ixl,iyh,iyl>.....  OK
aluop a,(<ix,iy>+1)...........  OK
bit n,(<ix,iy>+1).............  OK
bit n,<b,c,d,e,h,l,(hl),a>....  OK
cpd<r>........................  OK
cpi<r>........................  OK
<daa,cpl,scf,ccf>.............  ERROR **** crc expected:6d2dd213 found:5a200ea3
<inc,dec> a...................  OK
<inc,dec> b...................  OK
<inc,dec> bc..................  OK
<inc,dec> c...................  OK
<inc,dec> d...................  OK
<inc,dec> de..................  OK
<inc,dec> e...................  OK
<inc,dec> h...................  OK
<inc,dec> hl..................  OK
<inc,dec> ix..................  OK
<inc,dec> iy..................  OK
<inc,dec> l...................  OK
<inc,dec> (hl)................  OK
<inc,dec> sp..................  OK
<inc,dec> (<ix,iy>+1).........  ERROR **** crc expected:0b95a8ea found:58a87c5f
<inc,dec> ixh.................  OK
<inc,dec> ixl.................  OK
<inc,dec> iyh.................  OK
<inc,dec> iyl.................  OK
ld <bc,de>,(nnnn).............  OK
ld hl,(nnnn)..................  OK
ld sp,(nnnn)..................  OK
ld <ix,iy>,(nnnn).............  OK
ld (nnnn),<bc,de>.............  OK
ld (nnnn),hl..................  OK
ld (nnnn),sp..................  OK
ld (nnnn),<ix,iy>.............  OK
ld <bc,de,hl,sp>,nnnn.........  OK
ld <ix,iy>,nnnn...............  OK
ld a,<(bc),(de)>..............  OK
ld <b,c,d,e,h,l,(hl),a>,nn....  OK
ld (<ix,iy>+1),nn.............

Also viel Gutes, drei Problemfelder und die letzte Instruktion habe ich noch nicht implementierert, weiß also erst mal nicht was danach kommt.

Ich hätte auch ein paar Fragen:

* den Wert 0xf000 für den Stack habe ich willkürlich gewählt, gibt es da irgendwelche Vorgaben, was für Werte ein "echtes" CP/M typischerweise bereitstellen würde? Nicht, dass im Programm diesbezüglich Annahmen drin stecken, die ich damit kaputt mache.
* wie schneidet eigentlich ein aktueller JKCEMU mit diesem Test ab? Es gibt da zwar eine Anleitung [2], aber leider scheitere ich schon beim ersten Punkt, da ich nicht weiß wie ich das runtergeladene CP/M im Emulator starten soll. :-) Könnte evtl. jemand den zexall durchlaufen lassen und die Ergebnisse hier reintun? Oder, besser noch, mir sagen was ich tun muss um ihn selber laufen zu lassen?


Danke,
-Matthias

[1]: http://mdfs.net/Software/Z80/Exerciser/
[2]: http://www.jens-mueller.org/jkcemu/zextest.html
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
22.03.2013, 20:34 Uhr
jmueller



waldheinz schrieb:


Zitat:
* wie schneidet eigentlich ein aktueller JKCEMU mit diesem Test ab? Es gibt da zwar eine Anleitung [2], aber leider scheitere ich schon beim ersten Punkt, da ich nicht weiß wie ich das runtergeladene CP/M im Emulator starten soll.

Oh, da ist wohl meine Anleitung nicht verständlich genug?
Na gut, ich habe sie gerade etwas überarbeitet und noch ein kleines Video dazugetan.
Ich hoffe, damit kommst du klar.

Jens
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
29.03.2013, 15:06 Uhr
waldheinz



Vielen Dank für die überarbeitete Anleitung, da ich die "J DE00" Anweisung nicht kannte hatte ich vorher wohl keine Chance. :-)

Ich habe meine CPU nun auch so weit, dass sie alle Tests besteht. Ich verwende übrigens dieses:

> http://www.z80.info/decoding.htm

Schema zu dekodieren der Instruktionen, was recht kompakten Code ermöglicht. Damit kommt meine komplette CPU mit gut 1800 Zeilen JavaScript aus. Leider bleibt der MPC beim Booten immer noch an der gleichen Stelle stecken. Es gibt also noch viel zu tun!

Dieser Beitrag wurde am 29.03.2013 um 15:06 Uhr von waldheinz editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

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