3) DIE ZYKLENTABELLE
Kommen wir nun noch zu der Tabelle mit
den Zyklendauern der einzelnen Befehle.
Da viele darunter mit unterschiedlichen
Adressierungsarten verwendbar sind, habe
ich Ihnen zwei Einzeltabellen aufgeführt, in denen ähnliche Befehle zu
Gruppen zusammengefasst wurden. Kommen
wir hierbei zunächst zu den impliziten
Befehlen. Sie bestehen lediglich aus
einem Befehlswort und benötigen keinen
Operanden:
Befehl Zyklen
ASL 2 LSR 2 ROL 2 ROR 2 CLC 2 SEC 2 CLD 2 SED 2 CLI 2 SEI 2 CLV 2 NOP 2 RTS 6 RTI 6 BRK 7 TAX 2 TAY 2 TXA 2 TYA 2 TXS 2 TSX 2 PLA 4 PHA 3 PLP 4 PHP 3 INX 2 DEX 2 INY 2 DEY 2
Es folgen nun die Befehle, die entweder
direkt, oder über Speicheradressen eine Operation mit den Prozessorregistern
durchführen. Die Bitschiebebefehle kommen hier nochmals vor, da sie auch mit
Adressierung verwendbar sind. Die Spalten der Tabelle stehen ( von links nach
rechts) für:" IMMediate", wenn der Operand ein konstanter Wert ist (" LDA
#00")," ABSolut", für dirkete Speicheradressierung (" LDA $1000")," ABSolut, X"(" LDA $1000, X")," ABSolut, Y"," ZeroPage"(" LDA $02")," ZeroPage, X"," ZeroPage, Y", Zeropage indirektimplizit "( zp, X)" und
Zeropage implizitidirekt "( zp), Y" . Alle
Zyklenangaben, die mit einem "*" markiert sind verlängern sich um einen
Taktzyklus, wenn bei dieser Adressierung
eine Bereichsüberschreitung stattfindet, was bedeutet, daß wenn die Summe des
Offsetregisters und des Basiswertes das
High-Byte überschreitet, ein Takt mehr
benötigt wird, als angegeben. Dies ist
z. B. bei dem Befehl " LDA $10 FF, X" der
Fall. Dann, wenn nämlich im X-Register
ein Wert größer oder gleich 1 steht:
Bef Imm Abs Abs Abs ZP ZP ZP (,X) (,Y) ,X ,Y ,X ,Y
BIT - 4 - - 3 - - - - CPX 2 4 - - 3 - - - - CPY 2 4 - - 3 - - - - CMP 2 4 4* 4* 3 4 - 6 5* ADC 2 4 4* 4* 3 4 - 6 5* SBC 2 4 4* 4* 3 4 - 6 5* AND 2 4 4* 4* 3 4 - 6 5* ORA 2 4 4* 4* 3 4 - 6 5* EOR 2 4 4* 4* 3 4 - 6 5* INC - 6 7 - 5 6 - - - DEC - 6 7 - 5 6 - - - LDA 2 4 4* 4* 3 4 - 6 5* LDX 2 4 - 4* 3 - 4 - - LDY 2 4 4 - 3 4* - - - STA - 4 5 5 3 4 - 6 6 STX - 4 - - 3 - 4 - - STY - 4 - - 3 4 - - - ASL - 6 7 - 5 6 - - - LSR - 6 7 - 5 6 - - - ROL - 6 7 - 5 6 - - - ROR - 6 7 - 5 6 - - - JMP - 3 - - - - - - - JSR - 6 - - - - - - -
Zudem kennt der JMP-Befehl auch noch die
indirekte Adressierung, über einen Low-/ High-Bytezeiger ( z. B." JMP ($ A000)"), der 5 Taktzyklen verbraucht.
Es fehlen jetzt nur noch die Branch-Befehle, die jedoch nicht in einer eigenen Tabelle erscheinen müssen, da sie
immer 2 Taktzyklen verbrauchen. Es sei
denn, die vom Befehl abgefragte Bedingung trifft zu. In diesem Fall wird ein
weiterer, dritter Takt in Anspruch genommen.
Das war es dann wieder für diesen Monat.
Im nächsten Kursteil werden wir uns weiterhin ein wenig mit Timingproblemen
beschäftigen müssen, und uns ansehen, wie man IRQs " glättet" . Dies soll uns dann als Grundlage für den nächsten Raster- Effekt dienen: einer Routine zum
Abschalten der seitlichen Ränder des
Bildschirms.
(ub)