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)