home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
514b.lha
/
line+fill
/
linedraw.s
< prev
next >
Wrap
Text File
|
1991-06-08
|
2KB
|
111 lines
Here is a part of the source i use when i want *fast* lines.
It uses the blitter and writes directly to the DFF regs
(no flames please, i *did* call Ownblitter first)
There are som things left out, like where how to find the address of the
bitplane to draw in, and where the coordinates comes from, but that
should be easy to fill in.
/$DR.HEX$
DMACONR=2
BLTCON0=$40
BLTCON1=$42
BLTAMOD=$64
BLTBMOD=$62
BLTCMOD=$60
BLTAPT=$50
BLTCPT=$48
BLTDPT=$54
BLTADAT=$74
BLTBDAT=$72
BLTAFWM=$44
BLTSIZE=$58
OwnBlitter=-456
DisownBlitter=-462
width=80 ;80 bytes = 640 pixels
Draw_all_lines:
move.l 4.w,a6
move.l (a6),a6
move.l (a6),a6 ;get base of Gfxlib
jsr OwnBlitter(a6)
lea $dff000,a6
move #$8000,BLTADAT(a6)
move #-1,BLTAFWM(a6)
move #width,BLTCMOD(a6)
move #$FFFF,BLTBDAT(a6) ;$FFFF=draw , $0000=clear
;These values are the same for all lines, no need to tell
;the blitter about them more than once
move.l <startaddress of bitplane>,a0
moveq #<numlines-1>,d7
bsr.s drawem
move.l 4.w,a6
move.l (a6),a6
move.l (a6),a6
jmp DisOwnBlitter(a6)
drawem: move <X0>,d0
move <Y0>,d1
move <X1>,d2
move <Y1>,d3
moveq #width,d4
mulu d1,d4
;This could be sped up by reading a table with values
;0,width,width*2,width*3 etc.
moveq #-16,d5
and d0,d5
lsr #3,d5
add d5,d4
add.l a0,d4
moveq #0,d5
sub d1,d3
roxl.b #1,d5
tst d3
bge.s y2gy1
neg d3
y2gy1: sub d0,d2
roxl.b #1,d5
tst d2
bge.s x2gx1
neg d2
x2gx1: move d3,d1
sub d2,d1
bge.s dygdx
exg d2,d3
dygdx: roxl.b #1,d5
move.b table(pc,d5.w),d5
add d2,d2
wait: btst #6,DMACONR(a6)
bne.s wait
move d2,BLTBMOD(a6)
sub d3,d2
bge.s signn1
or.b #$40,d5
signn1: move d2,BLTAPT+2(a6)
sub d3,d2
move d2,BLTAMOD(a6)
and #15,d0
ror #4,d0
or #$bca,d0
move d0,BLTCON0(a6)
move d5,BLTCON1(a6)
move.l d4,BLTCPT(a6)
move.l d4,BLTDPT(a6)
addq #1,d3
lsl #6,d3
addq #2,d3
move d3,BLTSIZE(a6) ;GO!
dbra d7,drawem ;do next line
rts
table: dc.b 1,17,9,21,5,25,13,29