Home Hardware Busemulation Systemstart
 

3.5.3 Timing


68030 CPU Timing


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






Copyright © Robert Schaffner (support@doitarchive.de)
Letzte Aktualisierung am 23. Dezember 2003
Home Hardware Busemulation Systemstart