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 auf- gefü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 kom- men hier nochmals vor, da sie auch mit Adressierung verwendbar sind. Die Spal- ten der Tabelle stehen (von links nach rechts) für: "IMMediate", wenn der Ope- rand ein konstanter Wert ist ("LDA #00"), "ABSolut", für dirkete Speicher- adressierung ("LDA $1000"), "ABSolut,X" ("LDA $1000,X"), "ABSolut,Y", "ZeroPage" ("LDA $02"), "ZeroPage,X", "ZeroPage,Y", Zeropage indirekt-implizit "(zp,X)" und Zeropage implizit-idirekt "(zp),Y". Alle Zyklenangaben, die mit einem "*" mar- kiert 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 $10FF,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 eige- nen Tabelle erscheinen müssen, da sie immer 2 Taktzyklen verbrauchen. Es sei denn, die vom Befehl abgefragte Beding- ung trifft zu. In diesem Fall wird ein weiterer, dritter Takt in Anspruch ge- nommen. Das war es dann wieder für diesen Monat. Im nächsten Kursteil werden wir uns wei- terhin 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 Ra- ster-Effekt dienen: einer Routine zum Abschalten der seitlichen Ränder des Bildschirms.
(ub)