CODING ★ Vertrackte Warte-Takte ★

Das CPU-Timing des Schneider CPC (Computer Technik)
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Wer mit dem Schneider in Maschinensprache arbeitet, kann nicht in gewohnter Manier die Ausführungszeiten der einzelnen Befehle einem Assembler-Handbuch entnehmen. Die Z80A-CPU muß nämlich WAIT-Zyklen ausführen, damit sie nicht gleichzeitig mit dem Video-Controller auf den gemeinsamen Speicher zugreift. Rund 20% Wartezeitverlust sind daher zu beklagen. Wenn man sich aber nicht mit diesem groben Mittelwert zufriedengeben möchte, benötigt man genaue Angaben über die tatsächlichen Ausführungszeiten.

Für viele Zwecke reicht es zwar, mit den Original-Taktangaben der Befehle und einer effektiven Taktfrequenz von 3,2 MHz zu rechnen, für zeitkritische Routinen aber - wie beispielsweise SuperTape - ist die Kenntnis der genauen Werte unverzichtbar. Um diese Ausführungszeiten der einzelnen Maschinensprachebefehle zu bestimmen, kann man zwei Wege gehen: entweder man ermittelt die Zeiten empirisch durch Messung, oder man analysiert die Auswirkungen der WAIT- Signale auf die einzelnen Prozessor-Zyklen. In vorliegendem Fall ist der zweite

Nun darf man daraus aber nicht den Schluß ziehen, die CPU wäre demnach drei Viertel der Zeit ‘abgehängt'. Der Z80-Prozessor fragt nämlich den WAIT-Eingang nur zu bestimmten Zeitpunkten während der Ausführung eines Maschinensprachebefehls ab. So ein Befehl kann einen Bearbeitungs-Zyklus (Beispiel LD A.B) oder bis zu sechs Zyklen (Beispiel EX (SP),IX) erfordern, wobei jeder Zyklus normalerweise - ohne WAIT - drei bis sechs Takte lang ist. Der Abfragezeitpunkt für WAIT fällt auf die fallende Flanke des zweiten Taktes eines Zyklus. Wenn nun diese fallende Flanke genau auf den inaktiven WAIT-Zustand trifft, also auf logisch 'eins', so beendet der Prozessor den laufenden Zyklus ungestört. Falls dieser Zyklus insgesamt vier Takte währt, fällt beim nächsten Zyklus die fallenden Flanke von T2 wiederum auf das inaktive WAIT-Signal.

Bild I. Einfluß des WAIT-Signals auf die CPU-Zyklen >>

ln diesem Fall 'sieht' der Prozessor nichts vom WAIT (Bild 1c). Hat der Zyklus jedoch drei Takte, so erwischt die CPU beim nächsten Zyklus noch einen WAIT-Takt (Bild Id). Besonders hart trifft es einen Zyklus mit fünf Takten, der zusätzlich drei Wartetakte erzwingt, zwei sind es beim Sechs-Takte-Zyklus (Bild 1e,f). Das Taktschema (Bild 1) verdeutlicht diese Zwangssynchronisation mit dem WAIT-Signal: Alle Zyklen sind entweder vier oder acht Takte lang, der Zeitbedarf der Befehle ist demnach immer ein Vielfaches von vier Takten.

Zugriffsart

Um die Sache aber etwas komplizierter zu gestalten, gibt es beim Z80 auch Zyklen, die gar keine WAIT-Abfrage durchführen. Das sind die internen Rechenzyklen, bei denen der Prozessor weder auf den Speicher noch auf einen Port zugreift. Die genaue Kenntnis der Zugriffsarten ist also zusätzlich für die Berechnung der Ausführungszeiten notwendig. So benötigt beispielsweise der BeWeg beschritten worden, wobei allerdings die Messung als 'ultima ratio' die Ergebnisse bestätigte.

Das WAIT-Signal, das die Arbeit des Prozessors kurzzeitig unterbricht, kommt völlig regelmäßig vom Gate-Array mit einer Periode von vier Takten (Bild la,b). Für die Dauer von drei Takten liegt es danach auf logisch 'null' ujjd einen Takt lang auf logisch 'eins'. Logisch 'null' kennzeichnet bei diesem Signal die aktive Phase (active low), das heißt, daß dann die CPU in den Wartezustand übergehen soll.

fehl 'CPl' vier Zyklen: zwei Lesezyklen ä vier Takte zum Lesen der beiden Opcode-Bytes EDA1, mit der Signalkennung 'M1', einen normalen Lesezugriff (RD) mit drei Takten und einen internen Zyklus mit fünf Takten. Diese letzten fünf Takte werden aber durch WAIT nicht auf acht Takte aufgebläht, sondern quasi als Verlängerung des vorausgehenden Lesezyklus gewertet (Bild lg). Dieser wird dadurch 3 + 5 = 8 Takte lang, hat also schon das erforderliche 'Synchronmaß', so daß die Ausführungszeit des CPI-Befehls durch die WAITs unbeeinflußt bei 16 Takten bleibt.

Eine weitere Besonderheit tritt beim Timing der In/Out-Befehle zutage. Der bei diesen Befehlen von der CPU grundsätzlich eingefügte zusätzliche WAIT-Takt führt zu einer veränderten Situation (Bild lh.i). So bekommt beispielsweise der Befehl IN A,(C) trotz dreier Vier-Takte-Zyklen noch ein WAIT von weiteren vier Takten 'aufgebrummt'.

Für die nachfolgende Tabelle wurden die Werte für Takte und Zyklen dem 'Z80-Assembly Language Programming Manual' des Z80-Ent Wicklers Zilog entnommen. Die Zugriffsarten sind darin leider nicht verzeichnet, so daß sie aus den Befehlen und den Zyklen hergeleitet werden mußten. 'M1' markiert dabei einen Befehlhol-Zyklus, 'RD' und 'WR' stellen einen normalen Lesebeziehungsweise Schreibzugriff auf den Speicher dar, während 'IORD' und 'IOWR' auf einen Port zugreifen. Interne Zyklen sind durch '-' gekennzeichnet.

Die Blockbefehle 'OTIR/ OTDR' und 'INIR/INDR' lassen sich beim Schneider nicht sinnvoll verwenden, da dabei das B-Register und somit die Portadresse (siehe c't 8/85: ‘Des Schneiders Kern') verändert werden.

Andreas Stiller, c't

★ PUBLISHER: Computer Technik (c't)
★ YEAR: 1985
★ LANGUAGE:
★ AUTHOR: Andreas STILLER
★ INFO: Tabelle 1. Die Ausführungszeiten aller Z80-Befehle werden beim Schneider auf ein Vielfaches von vier Takten ausgedehnt.
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Manuel d'utilisation & doc:
» Das  CPU-Timing  des  Schneider  CPC    (Computer  Technik)    GERMANDATE: 2024-03-08
DL: 26
TYPE: PDF
SiZE: 145Ko
NOTE: Supplied by archive.org ; 1 page/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Timings en Nops (Pot de Call)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 455 millisecondes et consultée 76 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.