Z80-Assembler-Programm im Logikanalysator

  • Hi,


    ich habe mit meinen Studenten letzte Woche eine kleine Multipliationsroutine in Assembler programmiert:


    Die Routine läuft in einer Endlosschleife ab, multipliziert 12 mit 9 und schreibt das Ergebnis ins RAM an Adresse &7000.


    Nun habe ich einen Logikanalysator an den Datenbus des Z80A angeschlossen (D0-D7) und versuche das Multiplikationsergebnis 01101100 vom Datenbus als Signalverlauf darzustellen.


    Obwohl das Programm in Endlosschleife läuft und ich zu Programmstart mit DI auch Interrupts abgeschaltet habe, kommen alle möglichen Signale auf D0-D7 ... nur meine Multiplikations-Bits nicht.


    Denke ich da irgendwie falsch? Die müssten doch da irgendwann zu messen sein? (Ich habe verschiedene Messlaufzeiten gewählt: von 20 Nanosekunden über 1 Millisekunde bis zu einer Sekunde ... nix.)


    Wer hat einen Tipp?


    µP

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

    • Offizieller Beitrag

    Es wird ja auch der abzuarbeitende Programmcode über den Datenbus laufen. Wenn man das ganze mit der R/W Leitung (ich nehme jetzt mal einfach an, daß die beim Z80 auch so heißt) verknüpft, sollte man m.E. in der Lage sein, das Ergebnis auf dem Datenbus zu erkennen.

    +++ ATH

  • Es wird ja auch der abzuarbeitende Programmcode über den Datenbus laufen. Wenn man das ganze mit der R/W Leitung (ich nehme jetzt mal einfach an, daß die beim Z80 auch so heißt) verknüpft, sollte man m.E. in der Lage sein, das Ergebnis auf dem Datenbus zu erkennen.


    Danke für den Tipp! Stimmt. Das Programm holt sich ja auch dauernd die Opcodes und daten aus dem RAM! :pinch:


    Was mich nur stutzig macht, ist, dass ich das Multiplikationsergebnis noch kein einziges mal angezeigt bekommen habe!


    Die R/W-Leitung müsste beim Z80 die MREQ sein, oder?

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

  • Wie wäre es mit folgendem:
    Statt das Ergebnis an eine Speicherstelle zu schreiben (was scheinbar in dem ganzen anderen R/W Wirrwarr untergeht) könntest Du es mal an irgendeinen Port OUTen.
    Wenn dann IORQ zu messen ist, sollte das Ergebnis auf D0-D7 zu sehen sein.


    Andere Frage: Das, was Du jetzt so auf D0-D7 siehst - erkennst Du da immer irgendwelche Opcodes/andere Daten des Programms wieder oder liegt da nur Chaos an?


    CU,
    Prodatron

  • Du es mal an irgendeinen Port OUTen.
    Wenn dann IORQ zu messen ist, sollte das Ergebnis auf D0-D7 zu sehen sein.


    Prima Idee. Das versuche ich morgen früh mal. IORQ kann ich sogar als Trigger einstellen, so dass D0-D7 erst gemessen werden, wenn vorher IORQ gemessen wurde. Frage: Dass bei den Pinout-Beschreibungen über einigen Pinbezeichnungen (darunter auch IORQ) ein langer Strich ist, heißt, dass die NOT sind - also immer auf 1 stehen, es sei denn, ein Signal kommt durch, dann gehen die auf 0? In diesem Fall müsste ich den Trigger nämlich auch auf NOT einstellen.


    Zitat

    Andere Frage: Das, was Du jetzt so auf D0-D7 siehst - erkennst Du da immer irgendwelche Opcodes/andere Daten des Programms wieder oder liegt da nur Chaos an?


    Ziemliches Chaos. Viele &00000000 und &FFFFFFFF dabei. Auf die Idee, dass da die Opcodes bei sein könnten, bin ich erst hier gebracht worden; da war ich schon 3 km vom Logikanalysator entfernt. Das wird morgen früh mein zweiter Versuch sein.


    Edit: Das Chaos wird wohl auch dadurch vermehrt, dass D0-D7 sowohl in- als auch out-Pins sind. Es dürfte wohl also reichen, den WR-Pin auf "0" (aktiv) zu triggern, um allein die out-Daten zu bekommen. Da müssten dann meine Multiplikationsdaten auf jeden Fall dabei sein.

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

    Einmal editiert, zuletzt von Microprofessor ()

  • Frage: Dass bei den Pinout-Beschreibungen über einigen Pinbezeichnungen (darunter auch IORQ) ein langer Strich ist, heißt, dass die NOT sind - also immer auf 1 stehen, es sei denn, ein Signal kommt durch, dann gehen die auf 0? In diesem Fall müsste ich den Trigger nämlich auch auf NOT einstellen.


    Ja, das ist so. Ich bezeiche das immer mit "low aktiv". Bei Ascii-Texten wir dafür meist ein "/" vorangestellt.

  • Microprofessor


    Die R/W Leitung als solche gibts beim Z80 nicht.
    Es gibt /WR und /RD sowie /MREQ (Memory Zugriff) und /IORQ (Periphiezugriff).


    Die einfachste Möglkichkeit wäre eine I/O Ausgabe des Ergebnisses.
    Dies könntest du dann ganz einfach mittels /IORQ=L und //WR=L als Trigger für den Logikanalysator nutzen.


    Gruß Jörg


  • ... und genau das versuche ich jetzt mal! Danke!

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung