Skip to content
Kristopher38 edited this page Sep 1, 2022 · 2 revisions

Amiga 500 knowledge base

Documentation

  1. Amiga Hardware Reference Manual

  2. Custom Register Index

  3. MOTOROLA M68000 FAMILY Programmer's Reference Manual

  4. DMA Time Slot Allocation / Horizontal Line

Tricks

  1. English Amiga Board - coders forum:

  2. Amiga Demoscene Archive Forum: coding

  3. Subpixel line drawing using Blitter: part 1 and part 2.

MC68000 instruction timing

Taken from EAB post.

mnemonic syntax    dy ay (ay) (ay)+ -(ay) (d,ay) (d,ay,r) (m).w (m).l (d,pc) (d,pc,r) #d ccr sr usp
abcd.b dx,<> 6
-(ax),<> 18
add.bw dx,<> 4 12 12 14 16 18 16 20
<>,dx 4 4 8 8 10 12 14 12 16 12 14
add.l dx,<> 8 20 20 22 24 26 24 28
<>,dx 8 8 14 14 16 18 20 18 22 18 20
adda.w <>,ax 8 8 12 12 14 16 18 16 20 16 18 12
adda.l <>,ax 8 8 14 14 16 18 20 18 22 18 20 16
addi.bw #d,<> 8 16 16 18 20 22 20 24
addi.l #d,<> 16 28 28 30 32 34 32 36
addq.bw #d,<> 4 8 12 12 14 16 18 16 20
addq.l #d,<> 8 8 20 20 22 24 26 24 28
addx.bw dx,<> 4
-(ax),<> 18
addx.l dx,<> 8
-(ax),<> 30
and.bw dx,<> 4 12 12 14 16 18 16 20
<>,dx 4 8 8 10 12 14 12 16 12 14
and.l dx,<> 8 20 20 22 24 26 24 28
<>,dx 8 14 14 16 18 20 18 22 18 20
andi.bw #d,<> 8 16 16 18 20 22 20 24 20 20
andi.l #d,<> 16 28 28 30 32 34 32 36
dy ay (ay) (ay)+ -(ay) (d,ay) (d,ay,r) (m).w (m).l (d,pc) (d,pc,r) #d ccr sr usp
asl.bw dx,<> 6+2n
asr.bw #d,<> 6+2n
asl.l dx,<> 8+2n
asr.l #d,<> 8+2n
asl.w
asr.w
<> 12 12 14 16 18 16 20
bcc.b label 10/8 (taken/not taken)
bcc.w label 10/12 (taken/not taken)
bra.bw label 10
bsr.bw label 18
bchg dx,<> 6+x 12 12 14 16 18 16 20
#d,<> 10+x 16 16 18 20 22 20 24
bclr dx,<> 8+x 12 12 14 16 18 16 20
#d,<> 12+x 16 16 18 20 22 20 24
bset dx,<> 6+x 12 12 14 16 18 16 20
#d,<> 10+x 16 16 18 20 22 20 24
x = 0 if bit is lower than 16, 2 otherwise
btst dx,<> 6 8 8 10 12 14 12 16 12 14
#d,<> 10 12 12 14 16 18 16 20 16 18
chk <>,dx 10+x 14+x 14+x 16+x 18+x 20+x 18+x 22+x 18+x 20+x 14+x
x = 30 if trap taken
clr.bw <> 4 12 12 14 16 18 16 20
clr.l <> 6 20 20 22 24 26 24 28
dy ay (ay) (ay)+ -(ay) (d,ay) (d,ay,r) (m).w (m).l (d,pc) (d,pc,r) #d ccr sr usp
cmp.bw <>,dx 4 4 8 8 10 12 14 12 16 12 14
cmp.l <>,dx 6 6 14 14 16 18 20 18 22 18 20
cmpa.w <>,ax 6 6 10 10 12 14 16 14 18 14 16 10
cmpa.l <>,ax 6 6 14 14 16 18 20 18 22 18 20 14
cmpi.w #d,<> 8 12 12 14 16 18 16 20
cmpi.l #d,<> 14 20 20 22 24 26 24 28
cmpm.bw (ax)+,<> 12
cmpm.l (ax)+,<> 20
dbcc dx,label 10/12/14 (taken/cc true/not taken)
divs.w
divu.w
<>,dx 0+x 4+x 4+x 6+x 8+x 10+x 8+x 12+x 8+x 10+x 4+x
x = 140-158 (less than 10% difference between the best and worst case)
eor.bw dx,<> 4 12 12 14 16 18 16 20
eor.l dx,<> 8 20 20 22 24 26 24 28
eori.bw #d,<> 8 16 16 18 20 22 20 24 20 20
eori.l #d,<> 16 28 28 30 32 34 32 36
exg <>,<> 6 6
ext.wl <> 4
illegal 34
dy ay (ay) (ay)+ -(ay) (d,ay) (d,ay,r) (m).w (m).l (d,pc) (d,pc,r) #d ccr sr usp
jmp <> 8 10 14 10 12 10 14
jsr <> 16 18 22 18 20 18 22
lea <>,ax 4 8 12 8 12 8 12
link <>,#d 16
lsl.bw dx,<> 6+2n
lsr.bw #d,<> 6+2n
lsl.l dx,<> 8+2n
lsr.l #d,<> 8+2n
lsl.w
lsr.w
<> 12 12 14 16 18 16 20
move.bw dx,<> 4 8 8 8 12 14 12 16 12 12
ax,<> 4 8 8 8 12 14 12 16
(ax),<> 8 12 12 12 16 18 16 20 16 16
(ax)+,<> 8 12 12 12 16 18 16 20 16 16
-(ax),<> 10 14 14 14 18 20 18 22 18 18
(d,ax),<> 12 16 16 16 20 22 20 24 20 20
(d,ax,r),<> 14 18 18 18 22 24 22 26 22 22
(m).w,<> 12 16 16 16 20 22 20 24 20 20
(m).l,<> 16 20 20 20 24 26 24 28 24 24
(d,pc),<> 12 16 16 16 20 22 20 24 20 20
(d,pc,r),<> 14 18 18 18 22 24 22 26 22 22
#d,<> 8 12 12 12 16 18 16 20 16 16
ccr/sr,<> 6 12 12 14 16 18 16 20
dy ay (ay) (ay)+ -(ay) (d,ay) (d,ay,r) (m).w (m).l (d,pc) (d,pc,r) #d ccr sr usp
move.l dx,<> 4 12 12 12 16 18 16 20
ax,<> 4 12 12 12 16 18 16 20 4
(ax),<> 12 20 20 20 24 26 24 28
(ax)+,<> 12 20 20 20 24 26 24 28
-(ax),<> 14 22 22 22 26 28 26 30
(d,ax),<> 16 24 24 24 28 30 28 32
(d,ax,r),<> 18 26 26 26 30 32 30 34
(m).w,<> 16 24 24 24 28 30 28 32
(m).l,<> 20 28 28 28 32 34 32 36
(d,pc),<> 16 24 24 24 28 30 28 32
(d,pc,r),<> 18 26 26 26 30 32 30 34
#d,<> 12 20 20 20 24 26 24 28
usp,<> 4
movea.w <>,ax 4 4 8 8 10 12 14 12 16 12 14 8
movea.l <>,ax 4 4 12 12 14 16 18 16 20 16 18 12
movem.w list,<> 8+4n 8+4n 12+4n 14+4n 12+4n 16+4n
<>,list 12+4n 12+4n 16+4n 18+4n 16+4n 20+4n 18+4n 18+4n
movem.l list,<> 8+8n 8+8n 12+8n 14+8n 12+8n 16+8n
<>,list 12+8n 12+8n 16+8n 18+8n 16+8n 20+8n 18+8n 18+8n
movep.w dx,<> 16
(d,ax),<> 16
movep.l dx,<> 24
(d,ax),<> 24
moveq #d,<> 4
muls.w
mulu.w
<>,dx 0+x 4+x 4+x 6+x 8+x 10+x 8+x 12+x 8+x 10+x 4+x
x = 38+2n (s: the number of 10 or 01 pairs in <>0, u: the number of 1s in <>)
dy ay (ay) (ay)+ -(ay) (d,ay) (d,ay,r) (m).w (m).l (d,pc) (d,pc,r) #d ccr sr usp
nbcd.b <> 6 12 12 14 16 18 16 20
neg.bw <> 4 12 12 14 16 18 16 20
neg.l <> 6 20 20 22 24 26 24 28
negx.bw <> 4 12 12 14 16 18 16 20
negx.l <> 6 20 20 22 24 26 24 28
nop 4
not.bw <> 4 12 12 14 16 18 16 20
not.l <> 6 20 20 22 24 26 24 28
or.bw dx,<> 4 12 12 14 16 18 16 20
<>,dx 4 8 8 10 12 14 12 16 12 14
or.l dx,<> 8 20 20 22 24 26 24 28
<>,dx 8 14 14 16 18 20 18 22 18 20
ori.bw #d,<> 8 16 16 18 20 22 20 24 20 20
ori.l #d,<> 16 28 28 30 32 34 32 36
pea <> 12 16 20 16 20 16 20
reset 132
dy ay (ay) (ay)+ -(ay) (d,ay) (d,ay,r) (m).w (m).l (d,pc) (d,pc,r) #d ccr sr usp
rol.bw dx,<> 6+2n
ror.bw #d,<> 6+2n
rol.l dx,<> 8+2n
ror.l #d,<> 8+2n
rol.w
ror.w
<> 12 12 14 16 18 16 20
roxl.bw dx,<> 6+2n
roxr.bw #d,<> 6+2n
roxl.l dx,<> 8+2n
roxr.l #d,<> 8+2n
roxl.w
roxr.w
<> 12 12 14 16 18 16 20
rte 20
rtr 20
rts 16
sbcd.b dx,<> 6
-(ax),<> 18
scc <> 4+x 12 12 14 16 18 16 20
x=2 if cc is true
stop #d 4
dy ay (ay) (ay)+ -(ay) (d,ay) (d,ay,r) (m).w (m).l (d,pc) (d,pc,r) #d ccr sr usp
sub.bw dx,<> 4 12 12 14 16 18 16 20
<>,dx 4 4 8 8 10 12 14 12 16 12 14
sub.l dx,<> 8 20 20 22 24 26 24 28
<>,dx 8 8 14 14 16 18 20 18 22 18 20
suba.w <>,ax 8 8 12 12 14 16 18 16 20 16 18 12
suba.l <>,ax 8 8 14 14 16 18 20 18 22 18 20 16
subi.bw #d,<> 8 16 16 18 20 22 20 24
subi.l #d,<> 16 28 28 30 32 34 32 36
subq.bw #d,<> 4 8 12 12 14 16 18 16 20
subq.l #d,<> 8 8 20 20 22 24 26 24 28
subx.bw dx,<> 4
-(ax),<> 18
subx.l dx,<> 8
-(ax),<> 30
swap dx 4
tas <> 4 14 14 16 18 20 18 22
trap #d 38
trapv 34/4 (taken, not taken)
tst.bw <> 4 8 8 10 12 14 12 16
tst.l <> 4 12 12 14 16 18 16 20
unlk <> 12
dy ay (ay) (ay)+ -(ay) (d,ay) (d,ay,r) (m).w (m).l (d,pc) (d,pc,r) #d ccr sr usp
Clone this wiki locally