Copy Link
Add to Bookmark
Report

68030 timing tables

atari's profile picture
Published in 
atari
 · 29 Nov 2020

 68030 timing tables 
-Written by JHL/TRSI

/* recupere sur http://www.dtek.chalmers.se/~d2cg/docs/68030timings.html */


# - Add Calculate Effective Address time (CEA)
% - Add Calculate Immediate Effective Address time (CIEA)
* - Add Fetch Effective Address time (FEA)
! - Add Fetch Immediate Effective Address time (FIEA)
j - Add Jump Effective Address Time (JEA)


(r/p/w) r - Read Cycles
p - Prefetch Cycles
w - Write Cycles



Head Tail I-Cache No-Cache
move Rn,Dn 2 0 2(0/0/0) 2(0/1/0)
move Rn,An 2 0 2(0/0/0) 2(0/1/0)
*move EA,An 0 0 2(0/0/0) 2(0/1/0)
*move EA,Dn 0 0 2(0/0/0) 2(0/1/0)
move Rn,(An) 0 1 3(0/0/1) 4(0/1/1)
*move SOURCE,(An) 2 0 4(0/0/1) 5(0/1/1)
move Rn,(An)+ 0 1 3(0/0/1) 4(0/1/1)
*move SOURCE,(An)+ 2 0 4(0/0/1) 5(0/1/1)
move Rn,-(An) 0 2 4(0/0/1) 4(0/1/1)
*move SOURCE,-(An) 2 0 4(0/0/1) 5(0/1/1)
*move EA,(d16,An) 2 0 4(0/0/1) 5(0/1/1)
*move EA,xxx.W 2 0 4(0/0/1) 5(0/1/1)
*move EA,xxx.L 0 0 6(0/0/1) 7(0/2/1)
*move EA,(d8,An,Xn) 4 0 6(0/0/1) 7(0/1/1)
*move EA,(d16,An) 2 0 8(0/0/1) 9(0/2/1)
*move EA,(d16,PC) 2 0 8(0/0/1) 9(0/2/1)
*move EA,(d16,An,Xn) 2 0 8(0/0/1) 9(0/2/1)
*move EA,(d16,PC,Xn) 2 0 8(0/0/1) 9(0/2/1)
*move EA,([d16,An],Xn) 2 0 10(1/0/1) 11(1/2/1)
*move EA,([d16,PC],Xn) 2 0 10(1/0/1) 11(1/2/1)
*move EA,([d16,An],d16) 2 0 12(1/0/1) 14(1/2/1)
*move EA,([d16,PC],d16) 2 0 12(1/0/1) 14(1/2/1)
*move EA,([d16,An],d32) 2 0 14(1/0/1) 16(1/3/1)
*move EA,([d16,PC],d32) 2 0 14(1/0/1) 16(1/3/1)
*move EA,([d16,An],Xn,d32) 2 0 14(1/0/1) 16(1/3/1)
*move EA,([d16,PC],Xn,d32) 2 0 14(1/0/1) 16(1/3/1)
*move EA,(B) 4 0 8(0/0/1) 9(0/1/1)
*move EA,(d16,B) 4 0 10(0/0/1) 12(0/2/1)
*move EA,(d32,B) 4 0 14(0/0/1) 16(0/2/1)
*move EA,([B]) 4 0 10(1/0/1) 11(1/1/1)
*move EA,([B].l) 4 0 10(1/0/1) 11(1/1/1)
*move EA,([B],d16) 4 0 12(1/0/1) 14(1/2/1)
*move EA,([B].l,d16) 4 0 12(1/0/1) 14(1/2/1)
*move EA,([B],d32) 4 0 14(1/0/1) 16(1/2/1)
*move EA,([B].l,d32) 4 0 14(1/0/1) 16(1/2/1)
*move EA,([d16,B]) 4 0 12(1/0/1) 14(1/2/1)
*move EA,([d16,B].l) 4 0 12(1/0/1) 14(1/2/1)
*move EA,([d16,B],d16) 4 0 14(1/0/1) 17(1/2/1)
*move EA,([d16,B].l,d16) 4 0 14(1/0/1) 17(1/2/1)
*move EA,([d16,B],d32) 4 0 16(1/0/1) 19(1/3/1)
*move EA,([d16,B].l,d32) 4 0 16(1/0/1) 19(1/3/1)
*move EA,([d32,B]) 4 0 16(1/0/1) 18(1/2/1)
*move EA,([d32,B].l) 4 0 16(1/0/1) 18(1/2/1)
*move EA,([d32,B],d16) 4 0 18(1/0/1) 21(1/3/1)
*move EA,([d32,B].l,d16) 4 0 18(1/0/1) 21(1/3/1)
*move EA,([d32,B],d32) 4 0 18(1/0/1) 23(1/3/1)
*move EA,([d32,B].l,d32) 4 0 18(1/0/1) 23(1/3/1)
exg Ry,Rx 4 0 4(0/0/0) 4(0/1/0)
movec Cr,Rn 6 0 6(0/0/0) 6(0/1/0)
movec Rn,usp vbr caar msp isp 6 0 6(0/0/0) 6(0/1/0)
movec Rn,sfc dfc cacr 4 0 12(0/0/0) 12(0/1/0)
move ccr,Dn 2 0 4(0/0/0) 4(0/1/0)
#move ccr,mem 2 0 4(0/0/1) 5(0/1/1)
move Dn,ccr 4 0 4(0/0/1) 4(0/1/1)
#move EA,ccr 0 0 4(0/0/1) 4(0/1/1)
move sr,Dn 2 0 4(0/0/1) 4(0/1/1)
#move sr,mem 2 0 4(0/0/1) 4(0/1/1)
*move EA,sr 0 0 8(0/0/0) 10(0/1/0)
%movem EA,rl (+) 2 0 8+4n(n/0/0) 8+4n(n/1/0)
%movem rl,EA (+) 2 0 4+2n(0/0/n) 4+2n(0/1/n)
movep.w Dn,(d16,An) 4 0 10(0/0/2) 10(0/1/2)
movep.w (d16,An),Dn 2 0 10(2/0/0) 10(2/1/0)
movep.l Dn,(d16,An) 4 0 14(0/0/4) 14(0/1/4)
movep.l (d16,An),Dn 2 0 14(4/0/0) 14(4/1/0)
%moves EA,Rn 3 0 7(1/0/0) 7(1/1/0)
%moves Rn,EA 2 1 5(0/0/1) 6(0/1/1)
move usp,An 4 0 4(0/0/0) 4(0/1/1)
move An,usp 4 0 4(0/0/0) 4(0/1/0)
swap Dn 4 0 4(0/0/0) 4(0/1/0)
add Rn,Dn 2 0 2(0/0/0) 2(0/1/0)
adda.w Rn,An 4 0 4(0/0/0) 4(0/1/0)
adda.l Rn,An 2 0 2(0/0/0) 2(0/1/0)
*add EA,Dn 0 0 2(0/0/0) 2(0/1/0)
*adda.w EA,An 0 0 4(0/0/0) 4(0/1/0)
*adda.l EA,An 0 0 2(0/0/0) 2(0/1/0)
*add Dn,EA 0 1 3(0/0/1) 4(0/1/1)
and Dn,Dn 2 0 2(0/0/0) 2(0/1/0)
*and EA,Dn 0 0 2(0/0/0) 2(0/1/0)
*and Dn,EA 0 1 3(0/0/1) 4(0/1/1)
eor Dn,Dn 2 0 2(0/0/0) 2(0/1/0)
*eor Dn,EA 0 1 3(0/0/1) 4(0/1/1)
or Dn,Dn 2 0 2(0/0/0) 2(0/1/0)
or EA,Dn 0 0 2(0/0/0) 2(0/1/0)
or Dn,EA 0 1 3(0/0/1) 4(0/1/1)
sub Rn,Dn 2 0 2(0/0/0) 2(0/1/0)
*sub EA,Dn 0 0 2(0/0/0) 2(0/1/0)
*sub Dn,EA 0 1 3(0/0/1) 4(0/1/1)
suba.w Rn,An 4 0 4(0/0/0) 4(0/1/0)
suba.l Rn,An 2 0 2(0/0/0) 2(0/1/0)
*suba.w EA,An 0 0 4(0/0/0) 4(0/1/0)
*suba.l EA,An 0 0 2(0/0/0) 2(0/1/0)
cmp Rn,Dn 2 0 2(0/0/0) 2(0/1/0)
*cmp EA,Dn 0 0 2(0/0/0) 2(0/1/0)
cmpa Rn,An 4 0 4(0/0/0) 4(0/1/0)
*cmpa EA,An 0 0 4(0/0/0) 4(0/1/0)
!cmp2 EA,Rn (max) 2 0 20(1/0/0) 20(1/1/0)
*muls.w EA,Dn (max) 2 0 28(0/0/0) 28(0/1/0)
!muls.l EA,Dn (max) 2 0 44(0/0/0) 44(0/1/0)
*mulu.w EA,Dn (max) 2 0 28(0/0/0) 28(0/1/0)
!mulu.l EA,Dn (max) 2 0 44(0/0/0) 44(0/1/0)
divs.w Dn,Dn (max) 2 0 56(0/0/0) 56(0/1/0)
*divs.w EA,Dn (max) 0 0 56(0/0/0) 56(0/1/0)
!divs.l Dn,Dn (max) 6 0 90(0/0/0) 90(0/1/0)
!divs.l EA,Dn (max) 0 0 90(0/0/0) 90(0/1/0)
divu.w Dn,Dn (max) 2 0 44(0/0/0) 44(0/1/0)
*divu.w EA,Dn (max) 0 0 44(0/0/0) 44(0/1/0)
!divu.l Dn,Dn (max) 6 0 78(0/0/0) 78(0/1/0)
!divu.l EA,Dn (max) 0 0 78(0/0/0) 78(0/1/0)
moveq #(data),Dn 2 0 2(0/0/0) 2(0/1/0)
addq #(data),Rn 2 0 2(0/0/0) 2(0/1/0)
*addq #(data),Mem 0 1 3(0/0/1) 4(0/1/1)
subq #(data),Rn 2 0 2(0/0/0) 2(0/1/0)
*subq #(data),Mem 0 1 3(0/0/1) 4(0/1/1)
!addi #(data),Dn 2 0 2(0/0/0) 2(0/1/0)
!addi #(data),Mem 0 1 3(0/0/1) 4(0/1/1)
!andi #(data),Dn 2 0 2(0/0/0) 2(0/1/0)
!andi #(data),Mem 0 1 3(0/0/1) 4(0/1/1)
!eori #(data),Dn 2 0 2(0/0/0) 2(0/1/0)
!eori #(data),Mem 0 1 3(0/0/1) 4(0/1/1)
!ori #(data),Dn 2 0 2(0/0/0) 2(0/1/0)
!ori #(data),Mem 0 1 3(0/0/1) 4(0/1/1)
!subi #(data),Dn 2 0 2(0/0/0) 2(0/1/0)
!subi #(data),Mem 0 1 3(0/0/1) 4(0/1/1)
!cmpi #(data),Dn 2 0 2(0/0/0) 2(0/1/0)
!cmpi #(data),Mem 0 0 3(0/0/1) 2(0/1/0)
abcd Dn,Dn 0 0 4(0/0/0) 4(0/1/0)
abcd -(An),-(An) 2 1 13(2/0/1) 14(2/1/1)
sbcd Dn,Dn 0 0 4(0/0/0) 4(0/1/0)
sbcd -(An),-(An) 2 1 13(2/0/1) 14(2/1/1)
addx Dn,Dn 2 0 2(0/0/0) 2(0/1/0)
addx -(An),-(An) 2 1 9(2/0/1) 10(2/1/1)
subx Dn,Dn 2 0 2(0/0/0) 2(0/1/0)
subx -(An),-(An) 2 1 9(2/0/1) 10(2/1/1)
cmpm (An)+,(An)+ 0 0 8(2/0/0) 8(2/1/0)
pack Dn,Dn,#(data) 6 0 6(0/0/0) 6(0/1/0)
pack -(An),-(An),#(data) 2 1 11(1/0/1) 11(1/1/1)
unpk Dn,Dn,#(data) 8 0 8(0/0/0) 8(0/1/0)
unpk -(An),-(An),#(data) 2 1 11(1/0/1) 11(1/1/1)
clr Dn 2 0 2(0/0/0) 2(0/1/0)
#clr Mem 0 1 3(0/0/1) 4(0/1/1)
neg Dn 2 0 2(0/0/0) 2(0/1/0)
*neg Mem 0 1 3(0/0/1) 4(0/1/1)
negx Dn 2 0 2(0/0/0) 2(0/1/0)
*negx Mem 0 1 3(0/0/1) 4(0/1/1)
not Dn 2 0 2(0/0/0) 2(0/1/0)
*not Mem 0 1 3(0/0/1) 4(0/1/1)
ext Dn 4 0 4(0/0/0) 4(0/1/0)
nbcd Dn 0 0 6(0/0/0) 6(0/1/0)
scc Dn 4 0 4(0/0/0) 4(0/1/0)
#scc Mem 0 1 5(0/0/1) 5(0/1/1)
tas Dn 4 0 4(0/0/0) 4(0/1/0)
#tas Mem 3 0 12(1/0/1) 12(1/1/1)
tst Dn 0 0 2(0/0/0) 2(0/1/0)
*tst Mem 0 0 2(0/0/0) 2(0/1/0)
ls? #(data),Dy 4 0 4(0/0/0) 4(0/1/0)
ls? Dx,Dy (shift << size) 6 0 6(0/0/0) 6(0/1/0)
ls? Dx,Dy (shift >> size) 8 0 8(0/0/0) 8(0/1/0)
*ls? Mem (by one) 0 0 4(0/0/1) 4(0/1/1)
asl #(data),Dy 2 0 6(0/0/0) 6(0/1/0)
asl Dx,Dy 4 0 8(0/0/0) 8(0/1/0)
asl Mem (by one) 0 0 6(0/0/0) 6(0/1/0)
asr #(data),Dy 4 0 4(0/0/0) 4(0/1/0)
asr Dx,Dy (shift << size) 6 0 6(0/0/0) 6(0/1/0)
asr Dx,Dy (shift >> size) 10 0 10(0/0/0) 10(0/1/0)
*asr Mem (by one) 0 0 4(0/0/0) 4(0/1/0)
ro? #(data),Dy 4 0 6(0/0/0) 6(0/1/0)
ro? Dx,Dy 6 0 8(0/0/0) 8(0/1/0)
*ro? Mem (by one) 0 0 6(0/0/1) 6(0/1/1)
rox? Dn 10 0 12(0/0/0) 12(0/1/0)
*rox? Mem (by one) 0 0 4(0/0/0) 4(0/1/0)
btst #(data),Dn 4 0 4(0/0/0) 4(0/1/0)
btst Dn,Dn 4 0 4(0/0/0) 4(0/1/0)
!btst #(data),Mem 0 0 4(0/0/0) 4(0/1/0)
*btst Dn,Mem 0 0 4(0/0/0) 4(0/1/0)
bchg #(data),Dn 6 0 6(0/0/0) 6(0/1/0)
bchg Dn,Dn 6 0 6(0/0/0) 6(0/1/0)
!bchg #(data),Mem 0 0 6(0/0/1) 6(0/1/1)
*bchg Dn,Mem 0 0 6(0/0/1) 6(0/1/1)
bclr #(data),Dn 6 0 6(0/0/0) 6(0/1/0)
bclr Dn,Dn 6 0 6(0/0/0) 6(0/1/0)
!bclr #(data),Mem 0 0 6(0/0/1) 6(0/1/1)
*bclr Dn,Mem 0 0 6(0/0/1) 6(0/1/1)
bset #(data),Dn 6 0 6(0/0/0) 6(0/1/0)
bset Dn,Dn 6 0 6(0/0/0) 6(0/1/0)
!bset #(data),Mem 0 0 6(0/0/1) 6(0/1/1)
%bset Dn,Mem 0 0 6(0/0/1) 6(0/1/1)
bftst Dn 8 0 8(0/0/0) 8(0/1/0)
%bftst Mem (< 5 bytes) 6 0 10(1/0/0) 10(1/1/0)
%bftst Mem (> 5 bytes) 6 0 14(2/0/0) 14(2/1/0)
bfchg Dn 14 0 14(0/0/0) 14(0/1/0)
%bfchg Mem (< 5 bytes) 6 0 14(1/0/1) 14(1/1/1)
%bfchg Mem (> 5 bytes) 6 0 22(2/0/2) 22(2/1/2)
bfclr Dn 14 0 14(0/0/0) 14(0/1/0)
%bfclr Mem (< 5 bytes) 6 0 14(1/0/1) 14(1/1/1)
%bfclr Mem (> 5 bytes) 6 0 22(2/0/2) 22(2/1/2)
bfset Dn 14 0 14(0/0/0) 14(0/1/0)
%bfset Mem (< 5 bytes) 6 0 14(1/0/1) 14(1/1/1)
%bfset Mem (> 5 bytes) 6 0 22(2/0/2) 22(2/1/2)
bfexts Dn 10 0 10(0/0/0) 10(0/1/0)
%bfexts Mem (< 5 bytes) 6 0 12(1/0/0) 12(1/1/0)
%bfexts Mem (> 5 bytes) 6 0 18(2/0/0) 18(2/1/0)
bfextu Dn 10 0 10(0/0/0) 10(0/1/0)
%bfextu Mem (< 5 bytes) 6 0 12(1/0/0) 12(1/1/0)
%bfextu Mem (> 5 bytes) 6 0 18(2/0/0) 18(2/1/0)
bfins Dn 12 0 12(0/0/0) 12(0/1/0)
%bfins Mem (< 5 bytes) 6 0 12(1/0/1) 12(1/1/1)
%bfins Mem (> 5 bytes) 6 0 18(2/0/2) 18(2/1/2)
bfffo Dn 20 0 20(0/0/0) 20(0/1/0)
%bfffo Mem (< 5 bytes) 6 0 22(1/0/0) 22(1/1/0)
%bfffo Mem (> 5 bytes) 6 0 28(2/0/0) 28(2/1/0)
bcc (taken) 6 0 6(0/0/0) 8(0/2/0)
bcc.b (not taken) 4 0 4(0/0/0) 4(0/1/0)
bcc.w (not taken) 6 0 6(0/0/0) 6(0/1/0)
bcc.l (not taken) 6 0 6(0/0/0) 8(0/2/0)
dbcc (false,cnt not expired) 6 0 6(0/0/0) 8(0/2/0)
dbcc (false,but cnt expired) 10 0 10(0/0/0) 13(0/3/0)
dbcc (true) 6 0 6(0/0/0) 8(0/1/0)
andi to sr 4 0 12(0/0/0) 14(0/2/0)
eori to sr 4 0 12(0/0/0) 14(0/2/0)
ori to sr 4 0 12(0/0/0) 14(0/2/0)
andi to ccr 4 0 12(0/0/0) 14(0/2/0)
eori to ccr 4 0 12(0/0/0) 14(0/2/0)
ori to ccr 4 0 12(0/0/0) 14(0/2/0)
bsr 2 0 6(0/0/1) 9(0/2/1)
%cas (succesful compare) 1 0 13(1/0/1) 13(1/1/1)
%cas (unsuccesful compare) 1 0 11(1/0/0) 11(1/1/0)
cas2 (succesful compare) (max) 2 0 24(2/0/2) 26(2/2/2)
cas2 (unsuccesful compare)(max)2 0 24(2/0/0) 24(2/2/0)
chk Dn,Dn (no Exception) 8 0 8(0/0/0) 8(0/1/0)
chk Dn,Dn (Exception taken) 4 0 28(1/0/4) 30(1/3/4)
chk EA,Dn (no Exception) 0 0 8(0/0/0) 8(0/1/0)
chk EA,Dn (Exception taken)max 0 0 28(1/0/4) 30(1/3/4)
!chk2 Mem,Rn (no Exception)max 2 0 18(1/0/0) 18(1/1/0)
!chk2 Mem,Rn (Exception taken)mx2 0 40(2/0/4) 42(2/3/4)
jjmp 4 0 4(0/0/0) 6(0/2/0)
jjsr 0 0 4(0/0/1) 7(0/2/1)
#lea 2 0 2(0/0/0) 2(0/1/0)
link.w 0 0 4(0/0/1) 5(0/1/1)
link.l 2 0 6(0/0/1) 7(0/2/1)
nop 0 0 2(0/0/0) 2(0/1/0)
#pea 0 2 4(0/0/1) 4(0/1/1)
rtd 2 0 10(1/0/0) 12(1/2/0)
rtr 1 0 12(2/0/0) 14(2/2/0)
rts 1 0 9(1/0/0) 11(1/2/0)
unlk 0 0 5(1/0/0) 5(1/1/0)
bkpt 1 0 9(1/0/0) 9(1/0/0)
Interrupt (I-Stack) 0 0 23(2/0/4) 24(2/2/4)
Interrupt (M-Stack) 0 0 33(2/0/8) 34(2/2/8)
reset 0 0 518(0/0/0) 518(0/1/0)
stop 0 0 8(0/0/0) 8(0/2/0)
trace 0 0 22(1/0/5) 24(1/2/5)
trap #n 0 0 18(1/0/5) 20(1/2/4)
Illegal Instruction 0 0 18(1/0/5) 20(1/2/4)
A-Line trap 0 0 18(1/0/5) 20(1/2/4)
F-Line trap 0 0 18(1/0/5) 20(1/2/4)
Priviledge Violation 0 0 18(1/0/5) 20(1/2/4)
trapcc (Trap) 2 0 22(1/0/5) 24(1/2/5)
trapcc (No trap) 4 0 4(0/0/0) 4(0/1/0)
trapcc.w (Trap) 5 0 24(1/0/5) 26(1/3/5)
trapcc.w (No trap) 6 0 6(0/0/0) 6(0/1/0)
trapcc.l (Trap) 6 0 26(1/0/5) 28(1/3/5)
trapcc.l (No trap) 8 0 8(0/0/0) 8(0/2/0)
trapv (Trap) 2 0 22(1/0/5) 24(1/2/5)
trapv (No trap) 4 0 4(0/0/0) 4(0/1/0)

Bus Cycle Fault (Short) 0 0 36(1/0/10) 38(1/2/10)
Bus Cycle Fault (Long) 0 0 62(1/0/24) 64(1/2/24)
RTE (Normal Four Word) 1 0 18(4/0/0) 20(4/2/0)
RTE (Six Word) 1 0 18(4/0/0) 20(4/2/0)
RTE (Throwaway) 1 0 12(4/0/0) 12(4/0/0)
RTE (Coprocessor) 1 0 26(7/0/0) 26(7/2/0)
RTE (Short Fault) 1 0 36(10/0/0) 26(10/2/0)
RTE (Long Fault) 1 0 76(25/0/0) 76(25/2/0)


Fetch Effective Address (FEA)

Dn - - 0(0/0/0) 0(0/0/0)
An - - 0(0/0/0) 0(0/0/0)
(An) 1 1 3(1/0/0) 3(1/0/0)
(An)+ 0 1 3(1/0/0) 3(1/0/0)
-(An) 2 2 4(1/0/0) 4(1/0/0)
(d16,An) 2 2 4(1/0/0) 4(1/1/0)
(d16,PC) 2 2 4(1/0/0) 4(1/1/0)
(xxx).w 2 2 4(1/0/0) 4(1/1/0)
(xxx).l 1 0 4(1/0/0) 5(1/1/0)
#(data).b 2 0 2(0/0/0) 2(0/1/0)
#(data).w 2 0 2(0/0/0) 2(0/1/0)
#(data).l 4 0 4(0/0/0) 4(0/1/0)
(d16,An) 2 0 6(1/0/0) 7(1/1/0)
(d16,PC) 2 0 6(1/0/0) 7(1/1/0)
(d16,An,Xn) 4 0 6(1/0/0) 7(1/1/0)
(d16,PC,Xn) 4 0 6(1/0/0) 7(1/1/0)
([d16,An]) 2 0 10(2/0/0) 10(2/1/0)
([d16,PC]) 2 0 10(2/0/0) 10(2/1/0)
([d16,An],Xn) 2 0 10(2/0/0) 10(2/1/0)
([d16,PC],Xn) 2 0 10(2/0/0) 10(2/1/0)
([d16,An],d16) 2 0 12(2/0/0) 13(2/2/0)
([d16,PC],d16) 2 0 12(2/0/0) 13(2/2/0)
([d16,An],Xn,d16) 2 0 12(2/0/0) 13(2/2/0)
([d16,PC],Xn,d16) 2 0 12(2/0/0) 13(2/2/0)
([d16,An],d32) 2 0 12(2/0/0) 14(2/2/0)
([d16,PC],d32) 2 0 12(2/0/0) 14(2/2/0)
([d16,An],Xn,d32) 2 0 12(2/0/0) 14(2/2/0)
([d16,PC],Xn,d32) 2 0 12(2/0/0) 14(2/2/0)
(B) 4 0 6(1/0/0) 7(1/1/0)
(d16,B) 4 0 8(1/0/0) 10(1/1/0)
(d32,B) 4 0 12(1/0/0) 13(1/2/0)
([B]) 4 0 10(2/0/0) 10(2/1/0)
([B].l) 4 0 10(2/0/0) 10(2/1/0)
([B],d16) 4 0 12(2/0/0) 13(2/1/0)
([B].l,d16) 4 0 12(2/0/0) 13(2/1/0)
([B],d32) 4 0 12(2/0/0) 14(2/2/0)
([B].l,d32) 4 0 12(2/0/0) 14(2/2/0)
([d16,B]) 4 0 12(2/0/0) 13(2/1/0)
([d16,B].l) 4 0 12(2/0/0) 13(2/1/0)
([d16,B],d16) 4 0 14(2/0/0) 16(2/2/0)
([d16,B].l,d16) 4 0 14(2/0/0) 16(2/2/0)
([d16,B],d32) 4 0 14(2/0/0) 17(2/2/0)
([d16,B].l,d32) 4 0 14(2/0/0) 17(2/2/0)
([d32,B]) 4 0 16(2/0/0) 17(2/2/0)
([d32,B].l) 4 0 16(2/0/0) 17(2/2/0)
([d32,B],d16) 4 0 18(2/0/0) 20(2/2/0)
([d32,B].l,d16) 4 0 18(2/0/0) 20(2/2/0)
([d32,B],d32) 4 0 18(2/0/0) 21(2/3/0)
([d32,B].l,d32) 4 0 18(2/0/0) 21(2/3/0)

Fetch Immediate Effective Address (FIEA)

#(data).w,Dn 2+op 0 2(0/0/0) 2(0/1/0)
#(data).l,Dn 4+op 0 4(0/0/0) 4(0/1/0)
#(data).w,(An) 1 1 3(1/0/0) 4(1/1/0)
#(data).l,(An) 1 0 4(1/0/0) 5(1/1/0)
#(data).w,(An)+ 2 1 5(1/0/0) 5(1/1/0)
#(data).l,(An)+ 4 1 7(1/0/0) 7(1/1/0)
#(data).w,-(An) 2 2 4(1/0/0) 4(1/1/0)
#(data).l,-(An) 2 0 4(1/0/0) 5(1/1/0)
#(data).w,(d16,An) 2 0 4(1/0/0) 5(1/1/0)
#(data).l,(d16,An) 4 0 6(1/0/0) 8(1/2/0)
#(data).w,(xxx).w 4 2 6(1/0/0) 6(1/1/0)
#(data).l,(xxx).w 6 2 8(1/0/0) 8(1/2/0)
#(data).w,(xxx).l 3 0 6(1/0/0) 7(1/2/0)
#(data).l,(xxx).l 5 0 8(1/0/0) 9(1/2/0)
#(data).w,#(data).l 6+op 0 6(0/0/0) 6(0/2/0)
#(data).w,(d8,An,Xn) 6 2 8(1/0/0) 8(1/2/0)
#(data).w,(d8,PC,Xn) 6 2 8(1/0/0) 8(1/2/0)
#(data).l,(d8,An,Xn) 8 2 10(1/0/0) 10(1/2/0)
#(data).l,(d8,PC,Xn) 8 2 10(1/0/0) 10(1/2/0)
#(data).w,(d16,An) 4 0 8(1/0/0) 9(1/2/0)
#(data).w,(d16,PC) 4 0 8(1/0/0) 9(1/2/0)
#(data).l,(d16,An) 6 0 10(1/0/0) 11(1/2/0)
#(data).l,(d16,PC) 6 0 10(1/0/0) 11(1/2/0)
#(data).w,(d16,An,Xn) 6 0 8(1/0/0) 9(1/2/0)
#(data).w,(d16,PC,Xn) 6 0 8(1/0/0) 9(1/2/0)
#(data).l,(d16,An,Xn) 8 0 10(1/0/0) 11(1/2/0)
#(data).l,(d16,PC,Xn) 8 0 10(1/0/0) 11(1/2/0)
#(data).w,([d16,An]) 4 0 12(2/0/0) 14(2/2/0)
#(data).w,([d16,PC]) 4 0 12(2/0/0) 14(2/2/0)
#(data).l,([d16,An]) 6 0 14(2/0/0) 14(2/2/0)
#(data).l,([d16,PC]) 6 0 14(2/0/0) 14(2/2/0)
#(data).w,([d16,An],Xn) 4 0 12(2/0/0) 12(2/2/0)
#(data).w,([d16,PC],Xn) 4 0 12(2/0/0) 12(2/2/0)
#(data).l,([d16,An],Xn) 6 0 14(2/0/0) 14(2/2/0)
#(data).l,([d16,PC],Xn) 6 0 14(2/0/0) 14(2/2/0)
#(data).w,([d16,An],d16) 4 0 14(2/0/0) 15(2/2/0)
#(data).w,([d16,PC],d16) 4 0 14(2/0/0) 15(2/2/0)
#(data).l,([d16,An],d16) 6 0 16(2/0/0) 17(2/3/0)
#(data).l,([d16,PC],d16) 6 0 16(2/0/0) 17(2/3/0)
#(data).w,([d16,An],Xn,d16) 4 0 14(2/0/0) 15(2/2/0)
#(data).w,([d16,PC],Xn,d16) 4 0 14(2/0/0) 15(2/2/0)
#(data).l,([d16,An],Xn,d16) 6 0 16(2/0/0) 17(2/3/0)
#(data).l,([d16,PC],Xn,d16) 6 0 16(2/0/0) 17(2/3/0)
#(data).w,([d16,An],d32) 4 0 14(2/0/0) 16(2/3/0)
#(data).w,([d16,PC],d32) 4 0 14(2/0/0) 16(2/3/0)
#(data).l,([d16,An],d32) 6 0 16(2/0/0) 18(2/3/0)
#(data).l,([d16,PC],d32) 6 0 16(2/0/0) 18(2/3/0)
#(data).w,([d16,An],Xn,d32) 4 0 14(2/0/0) 16(2/3/0)
#(data).w,([d16,PC],Xn,d32) 4 0 14(2/0/0) 16(2/3/0)
#(data).l,([d16,An],Xn,d32) 6 0 16(2/0/0) 18(2/3/0)
#(data).l,([d16,PC],Xn,d32) 6 0 16(2/0/0) 18(2/3/0)
#(data).w,(B) 6 0 8(1/0/0) 9(1/1/0)
#(data).l,(B) 8 0 10(1/0/0) 11(1/2/0)
#(data).w,(d16,B) 6 0 10(1/0/0) 12(1/2/0)
#(data).l,(d16,B) 8 0 12(1/0/0) 14(1/2/0)
#(data).w,(d32,B) 10 0 14(1/0/0) 16(1/2/0)
#(data).l,(d32,B) 12 0 16(1/0/0) 18(1/3/0)
#(data).w,([B]) 6 0 12(2/0/0) 12(2/1/0)
#(data).l,([B]) 8 0 14(2/0/0) 14(2/2/0)
#(data).w,([B].l) 6 0 12(2/0/0) 12(2/1/0)
#(data).l,([B].l) 8 0 14(2/0/0) 14(2/2/0)
#(data).w,([B],d16) 6 0 14(2/0/0) 15(2/2/0)
#(data).l,([B],d16) 8 0 16(2/0/0) 17(2/2/0)
#(data).w,([B].l,d16) 6 0 14(2/0/0) 15(2/2/0)
#(data).l,([B].l,d16) 8 0 16(2/0/0) 17(2/2/0)
#(data).w,([B],d32) 6 0 14(2/0/0) 16(2/2/0)
#(data).l,([B],d32) 8 0 16(2/0/0) 18(2/3/0)
#(data).w,([B].l,d32) 6 0 14(2/0/0) 16(2/2/0)
#(data).l,([B].l,d32) 8 0 16(2/0/0) 18(2/3/0)
#(data).w,([d16,B]) 6 0 14(2/0/0) 15(2/2/0)
#(data).l,([d16,B]) 8 0 16(2/0/0) 17(2/2/0)
#(data).w,([d16,B].l) 6 0 14(2/0/0) 15(2/2/0)
#(data).l,([d16,B].l) 8 0 16(2/0/0) 17(2/2/0)
#(data).w,([d16,B],d16) 6 0 16(2/0/0) 18(2/2/0)
#(data).l,([d16,B],d16) 8 0 18(2/0/0) 20(2/3/0)
#(data).w,([d16,B].l,d16) 6 0 16(2/0/0) 18(2/2/0)
#(data).l,([d16,B].l,d16) 8 0 18(2/0/0) 20(2/3/0)
#(data).w,([d16,B],d32) 6 0 16(2/0/0) 19(2/3/0)
#(data).l,([d16,B],d32) 8 0 18(2/0/0) 21(2/3/0)
#(data).w,([d16,B].l,d32) 6 0 16(2/0/0) 19(2/3/0)
#(data).l,([d16,B].l,d32) 8 0 18(2/0/0) 21(2/3/0)
#(data).w,([d32,B]) 6 0 18(2/0/0) 19(2/2/0)
#(data).l,([d32,B]) 8 0 20(2/0/0) 21(2/3/0)
#(data).w,([d32,B].l) 6 0 18(2/0/0) 19(2/2/0)
#(data).l,([d32,B].l) 8 0 20(2/0/0) 21(2/3/0)
#(data).w,([d32,B],d16) 6 0 20(2/0/0) 22(2/3/0)
#(data).l,([d32,B],d16) 8 0 22(2/0/0) 24(2/3/0)
#(data).w,([d32,B].l,d16) 6 0 20(2/0/0) 22(2/3/0)
#(data).l,([d32,B].l,d16) 8 0 22(2/0/0) 24(2/3/0)
#(data).w,([d32,B],d32) 6 0 20(2/0/0) 23(2/3/0)
#(data).l,([d32,B],d32) 8 0 22(2/0/0) 25(2/4/0)
#(data).w,([d32,B].l,d32) 6 0 20(2/0/0) 23(2/3/0)
#(data).l,([d32,B].l,d32) 8 0 22(2/0/0) 25(2/4/0)

Calculate Effective Address (CEA)

Dn - - 0(0/0/0) 0(0/0/0)
An - - 0(0/0/0) 0(0/0/0)
(An) 2+op 0 2(0/0/0) 2(0/0/0)
(An)+ 0 0 2(0/0/0) 2(0/0/0)
-(An) 2+op 0 2(0/0/0) 2(0/0/0)
(d16,An) 2+op 0 2(0/0/0) 2(0/0/0)
(d16,PC) 2+op 0 2(0/0/0) 2(0/1/0)
(xxx).w 2+op 0 2(0/0/0) 2(0/1/0)
(xxx).l 4+op 0 4(0/0/0) 4(0/1/0)
(d8,An,Xn) 4+op 0 4(0/0/0) 4(0/1/0)
(d8,PC,Xn) 4+op 0 4(0/0/0) 4(0/1/0)
(d16,An) 2 0 6(0/0/0) 6(0/1/0)
(d16,PC) 2 0 6(0/0/0) 6(0/1/0)
(d16,An,Xn) 6+op 0 6(0/0/0) 6(0/1/0)
(d16,PC,Xn) 6+op 0 6(0/0/0) 6(0/1/0)
([d16,An]) 2 0 10(1/0/0) 10(1/1/0)
([d16,PC]) 2 0 10(1/0/0) 10(1/1/0)
([d16,An],Xn) 2 0 10(1/0/0) 10(1/1/0)
([d16,PC],Xn) 2 0 10(1/0/0) 10(1/1/0)
([d16,An],d16) 2 0 12(1/0/0) 13(1/2/0)
([d16,PC],d16) 2 0 12(1/0/0) 13(1/2/0)
([d16,An],Xn,d16) 2 0 12(1/0/0) 13(1/2/0)
([d16,PC],Xn,d16) 2 0 12(1/0/0) 13(1/2/0)
([d16,An],d32) 2 0 12(1/0/0) 13(1/2/0)
([d16,PC],d32) 2 0 12(1/0/0) 13(1/2/0)
([d16,An],Xn,d32) 2 0 12(1/0/0) 11(1/2/0)
([d16,PC],Xn,d32) 2 0 12(1/0/0) 13(1/2/0)
(B) 6+op 0 6(0/0/0) 6(0/1/0)
(d16,B) 4 0 8(0/0/0) 9(0/1/0)
(d32,B) 4 0 12(0/0/0) 12(0/2/0)
([B]) 4 0 10(1/0/0) 10(1/1/0)
([B].l) 4 0 10(1/0/0) 10(1/1/0)
([B],d16) 4 0 12(1/0/0) 13(1/1/0)
([B].l,d16) 4 0 12(1/0/0) 13(1/1/0)
([B],d32) 4 0 12(1/0/0) 13(1/2/0)
([B].l,d32) 4 0 12(2/0/0) 13(1/2/0)
([d16,B]) 4 0 12(1/0/0) 13(1/1/0)
([d16,B].l) 4 0 12(1/0/0) 13(1/1/0)
([d16,B],d16) 4 0 14(1/0/0) 16(1/2/0)
([d16,B].l,d16) 4 0 14(1/0/0) 16(1/2/0)
([d16,B],d32) 4 0 14(1/0/0) 16(1/2/0)
([d16,B].l,d32) 4 0 14(1/0/0) 16(1/2/0)
([d32,B]) 4 0 16(1/0/0) 17(1/2/0)
([d32,B].l) 4 0 16(1/0/0) 17(1/2/0)
([d32,B],d16) 4 0 18(1/0/0) 20(1/2/0)
([d32,B].l,d16) 4 0 18(1/0/0) 20(1/2/0)
([d32,B],d32) 4 0 18(1/0/0) 20(1/3/0)
([d32,B].l,d32) 4 0 18(1/0/0) 20(1/3/0)


Calculate Immediate Effective Address (CIEA) for WORDS
(for LONGS add 2 for head and cycle count)

Dn 2+op 0 2(0/0/0) 0(0/0/0)
(An) 2 0 2(0/0/0) 2(0/0/0)
(An)+ 2+op 0 4(0/0/0) 2(0/0/0)
-(An) 2+op 0 2(0/0/0) 2(0/0/0)
(d16,An) 4+op 0 4(0/0/0) 2(0/0/0)
(d16,PC) 4+op 0 4(0/0/0) 2(0/1/0)
(xxx).w 4+op 0 4(0/0/0) 2(0/1/0)
(xxx).l 6+op 0 6(0/0/0) 4(0/1/0)
(d8,An,Xn) 6+op 0 6(0/0/0) 4(0/1/0)
(d8,PC,Xn) 6+op 0 6(0/0/0) 4(0/1/0)
(d16,An) 4 0 8(0/0/0) 6(0/1/0)
(d16,PC) 4 0 8(0/0/0) 6(0/1/0)
(d16,An,Xn) 4+op 0 8(0/0/0) 6(0/1/0)
(d16,PC,Xn) 4+op 0 8(0/0/0) 6(0/1/0)
([d16,An]) 4 0 12(1/0/0) 6(1/1/0)
([d16,PC]) 4 0 12(1/0/0) 6(1/1/0)
([d16,An],Xn) 8+op 0 10(2/0/0) 10(2/1/0)
([d16,PC],Xn) 8+op 0 10(2/0/0) 10(2/1/0)
([d16,An],d16) 4 0 12(2/0/0) 13(2/2/0)
([d16,PC],d16) 4 0 12(2/0/0) 13(2/2/0)
([d16,An],Xn,d16) 4 0 12(2/0/0) 13(2/2/0)
([d16,PC],Xn,d16) 4 0 12(2/0/0) 13(2/2/0)
([d16,An],d32) 4 0 12(2/0/0) 14(2/2/0)
([d16,PC],d32) 4 0 12(2/0/0) 14(2/2/0)
([d16,An],Xn,d32) 4 0 12(2/0/0) 14(2/2/0)
([d16,PC],Xn,d32) 4 0 12(2/0/0) 14(2/2/0)
(B) 8+op 0 6(1/0/0) 7(1/1/0)
(d16,B) 6 0 8(1/0/0) 10(1/1/0)
(d32,B) 6 0 12(1/0/0) 13(1/2/0)
([B]) 6 0 12(1/0/0) 12(1/1/0)
([B].l) 6 0 12(1/0/0) 12(1/1/0)
([B],d16) 6 0 14(1/0/0) 15(1/2/0)
([B].l,d16) 6 0 14(1/0/0) 15(1/2/0)
([B],d32) 6 0 14(1/0/0) 15(1/2/0)
([B].l,d32) 6 0 14(1/0/0) 15(1/2/0)
([d16,B]) 6 0 14(1/0/0) 15(1/2/0)
([d16,B].l) 6 0 14(1/0/0) 15(1/2/0)
([d16,B],d16) 6 0 16(1/0/0) 18(1/2/0)
([d16,B].l,d16) 6 0 16(1/0/0) 18(1/2/0)
([d16,B],d32) 6 0 16(1/0/0) 18(1/2/0)
([d16,B].l,d32) 6 0 16(1/0/0) 18(1/2/0)
([d32,B]) 6 0 18(1/0/0) 19(1/2/0)
([d32,B].l) 6 0 18(2/0/0) 19(2/2/0)
([d32,B],d16) 6 0 20(1/0/0) 22(1/3/0)
([d32,B].l,d16) 6 0 20(1/0/0) 22(1/3/0)
([d32,B],d32) 6 0 22(1/0/0) 24(1/3/0)
([d32,B].l,d32) 6 0 22(1/0/0) 24(1/3/0)

Jump Effective Address (JEA)

(An) 2+op 0 2(0/0/0) 2(0/0/0)
(d16,An) 4+op 0 4(0/0/0) 4(0/0/0)
$00.w 2+op 0 2(0/0/0) 2(0/0/0)
$00.l 2+op 0 2(0/0/0) 2(0/0/0)
(d8,An,Xn) 6+op 0 6(0/0/0) 6(0/0/0)
(d8,An,PC) 6+op 0 6(0/0/0) 6(0/0/0)
(d16,An) 2 0 6(0/0/0) 6(0/0/0)
(d16,PC) 2 0 6(0/0/0) 6(0/0/0)
(d16,An,Xn) 6+op 0 6(0/0/0) 6(0/0/0)
(d16,PC,Xn) 6+op 0 6(0/0/0) 6(0/0/0)
([d16,An]) 2 0 10(1/0/0) 10(1/1/0)
([d16,PC]) 2 0 10(1/0/0) 10(1/1/0)
([d16,An],Xn) 2 0 10(1/0/0) 10(1/1/0)
([d16,PC],Xn) 2 0 10(1/0/0) 10(1/1/0)
([d16,An],d16) 2 0 12(1/0/0) 12(1/2/0)
([d16,PC],d16) 2 0 12(1/0/0) 12(1/2/0)
([d16,An],Xn,d16) 2 0 12(1/0/0) 12(1/2/0)
([d16,PC],Xn,d16) 2 0 12(1/0/0) 12(1/2/0)
([d16,An],d32) 2 0 12(1/0/0) 12(1/2/0)
([d16,PC],d32) 2 0 12(1/0/0) 12(1/2/0)
([d16,An],Xn,d32) 2 0 12(1/0/0) 12(1/2/0)
([d16,PC],Xn,d32) 2 0 12(1/0/0) 12(1/2/0)
(B) 6+op 0 6(0/0/0) 6(0/0/0)
(d16,B) 4 0 8(0/0/0) 9(0/1/0)
(d32,B) 4 0 12(0/0/0) 13(0/1/0)
([B]) 4 0 10(1/0/0) 10(1/1/0)
([B].l) 4 0 10(1/0/0) 10(1/1/0)
([B],d16) 4 0 12(1/0/0) 12(1/1/0)
([B].l,d16) 4 0 12(1/0/0) 12(1/1/0)
([B],d32) 4 0 12(1/0/0) 12(1/1/0)
([B].l,d32) 4 0 12(1/0/0) 12(1/1/0)
([d16,B]) 4 0 12(1/0/0) 13(1/1/0)
([d16,B].l) 4 0 12(1/0/0) 13(1/1/0)
([d16,B],d16) 4 0 14(1/0/0) 15(1/1/0)
([d16,B].l,d16) 4 0 14(1/0/0) 15(1/1/0)
([d16,B],d32) 4 0 14(1/0/0) 15(1/1/0)
([d16,B].l,d32) 4 0 14(1/0/0) 15(1/1/0)
([d32,B]) 4 0 16(1/0/0) 17(1/2/0)
([d32,B].l) 4 0 16(1/0/0) 17(1/2/0)
([d32,B],d16) 4 0 18(1/0/0) 19(1/2/0)
([d32,B].l,d16) 4 0 18(1/0/0) 19(1/2/0)
([d32,B],d32) 4 0 18(1/0/0) 19(1/2/0)
([d32,B].l,d32) 4 0 18(1/0/0) 19(1/2/0)


Some notes about 020+ made by JHL:

;-------------------------

Most of 020 cycletimes are same than on 030; havent found any differenties.

;-------------------------
...
clr.l -(a0)
clr.l -(a0)
...
is 25% faster than
...
clr.l (a0)+
clr.l (a0)+
...
;-------------------------
move.l (a0,d0.l) is faster than
move.l (a0,d0.w)
same with adda.w <-> adda.l etc.
;-------------------------
move.b d0,-(a7) will decrease a7 with 2!
;-------------------------

Never use those silly #xx,([a0]) new modes, they are slower than
move.l (a0),a0
move.l #xx,(a0)
...case you have no extra spare registers, but... that's rare.

;-------------------------

Time-optimizing on A1200 is more sparing BUS than CPU; the CHIP RAM
is just too slow.. Remeber to adjust your WRITES to CHIP; Adjusting
memory READS wont do you no good. (Naturally, how could computer keep
going on without knowing have we read something we're using?)

;--------------------

Interrupts are deadly slow, try to figure out something better.. like
Copper ;-) Just plain movem*2, Trap and RTE will take HUGE amount of
cycles.

movem.l all,-(sp)
movem.l (sp)+,all
rte

will take about 80 Cycles... okey, why use all regs ;-)

Comments, Bugreports, Optimizing bullshit to...

JHL/Zenlandia

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT