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 |