StefanM Geschrieben 6. April 2008 Teilen Geschrieben 6. April 2008 Hi, ich wollte mal was proggen, aber um die genaue Zeiht rauszubekommen fehlen mir die Informationen, wieviel Takte pro Befehl benötigt werden. Folgendes Programm: anfang: LD B, xxH loop1: LD HL,xxxxH loop2: Dec HL JPNZ, loop2 DEC B JPNZ, loop1 JP, anfang [/PHP] ich wollte damit im z80 eine [b]Zeitschleife von 1 Sekunde[/b] erzeugen, daher bei [b]10MHz[/b] z.B. wären das [b]10mio schritte[/b], die benötigt würden Zu den einzelnen Befehlen habe ich mir nur etwas notiert, was aber nicht unbedingt richtig sein muss: [PHP]DEC B oder HL braucht 1 Takt ? LD B, xxH braucht 7 Takte ? LD HL,xxxxH braucht 10 Takte ? JPNZ, .... braucht 7 Takte, wenn er nicht springt und 12, wenn er nach .... springt?? Ich brauch dringend ne Hilfestellung, ob die Angaben so richtig sind und wie ich das auf 1Mio schritte hinbekomme. Danke im voraus Gruß Stefan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 6. April 2008 Teilen Geschrieben 6. April 2008 Also ich würde entweder eine Taktzyklenbefehlstabelle für den Z80 irgendwo rauskramen oder die Schleife mit einem Timer-Interrupt starten und unterbrechen lassen (ein Flag abfragen o.ä.). Anstatt die Zahlen runter zu zählen, zähle sie einfach hoch und notiere Dir das Ergebnis während des Interrupts. Genauer wirst Du das wohl kaum hinbekommen. Falls noch weitere Hardware wie Soundchip, Grafikchip oder anderer IRQs vorhanden sind, verfälschen Dir die während der Laufzeit ohnehin das Ergebnis, weil Speicherzugriffe sich dadurch verzögern können. Also alles an laufender Hardware ausschalten, dann ist das Ergebnis am nahesten am Ziel. Die Tests & Branches brauchen je nachdem, ob sie verzweigen oder nicht auch noch oftmals unterschiedliche Taktzyklen. Das solltest Du mitberechnen. Was willst Du eigentlich genau? Die Laufzeit eines bestimmten Befehls so irgendwie feststellen? Hat das ganze einen echten Sinn? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
StefanM Geschrieben 6. April 2008 Autor Teilen Geschrieben 6. April 2008 Also ich würde entweder eine Taktzyklenbefehlstabelle für den Z80 irgendwo rauskramen oder die Schleife mit einem Timer-Interrupt starten und unterbrechen lassen (ein Flag abfragen o.ä.). Ja die Taktzyklenbefehlstabelle: Z80-CPU - FLAG-Dokumentation Also ich gehe noch zur Schule, daher hat es keinen wirklichen Sinn^^. Ich sollte nur ein Lauflicht progrmmieren und immer 1 sekunde warten, bevor es sich um eins verschiebt. Aber ich soltle glaube ich etwas runterzählen lassen oder so! Mich würde dieses Interrupt aber doch noch interessieren ... hab gefunden : DI Disable Interrupt Interrupt sperren EI Enable Interrupt Interrupt freigeben aber keine Ahnugn wie ich das in Assembler umsetzen soll oder wie lang sei unterbrechen??? Hab echt kein Plan davon. Also wenn ich ein Falg abfrage, muss ich doch erstmal Sachen reinschreiben, oder? aber wenn das dann soviel Sachen sind, dassich 255 Zahlen reinschreiben muss, die der dann abfragt?? dann ists mir zu umständlich. Weil ich brauche doch viele Abfragen, ich weis nciht, was für einen Unterschied das auch zu meinem Zähler machen würde? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 6. April 2008 Teilen Geschrieben 6. April 2008 Sorry, hab mich vielleicht falsch mit dem "Flag" ausgedrückt: Im Timer-Interrupt könnte man die Counter dann einfach auslesen und wüßte, welche Schleife auf welchem Stand ist. Andererseits könnte man den Timer in der Schleife abfragen, bis eine Sekunde vorbei ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
StefanM Geschrieben 12. April 2008 Autor Teilen Geschrieben 12. April 2008 naja, ich habs versucht, aber keine ahnugn, wie ich das jetzt programmiert bekomme ... würde sich jemand bereit erklären es zu machen, wenn ich ein fertiges programm mache ohne die ganzen genauen zählwerte udn meine takt-tabellen einscanne? also es ginge nur um die berechnung, welche zahlen ich in die schleife einsetzen muss? Würde mir sehr helfen, aber wenn es eh keiner mcht oder kann, spar ich mir die arbeit, da ich zu jemand anderem zum eiscannen muss. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.