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 |