Zum Inhalt springen

Assembler (z80)


StefanM

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...