home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ST-Computer Leser 2002 January
/
STC_CD_01_2002.iso
/
SCENE
/
IMATROLL
/
SRC
/
TC_LINE.S
< prev
Wrap
Text File
|
2001-11-06
|
3KB
|
79 lines
; In: D0.w - x1
; D1.w - y1
; D2.w - x2
; D3.w - y2
; D4.w - Farbe
tc_line:
cmp.w D2,D0 ;always left to right
ble.s noother
exg D0,D2
exg D1,D3
noother:
move.l #640,D7 ;Y-Inc (Length of a Scanline)
move.l screen_adr,A0 ;get Screenadr.
sub.w D0,D2 ;dx
add.w D0,D0 ;*2
adda.w D0,A0 ;X-Screenadr.
sub.w D1,D3 ;dy
bpl.s noabs2 ;positve?
neg.w D3
neg.l D7 ;then Y-Inc must be Y-Dec
noabs2:
muls #640,D1
adda.l D1,A0 ;Pixel-Screenadr.
;alt. you could use
;add.l (multab.l,pc,d1*4),a0
cmp.w D2,D3 ;dy>dx?
bgt.s moredy
;----------------------------------
moredx:
move.w D3,D1 ;d = 2*dy-dx
add.w D1,D1
move.w D1,D5 ;inc1=2*dy
sub.w D2,D1
move.w D1,D6 ;inc2=2*(dy-dx)
sub.w D2,D6
tst.w D1 ;init flags in the first run
setline_mdx:
bpl.s incy
incx:
move.w D4,(A0)+ ;SetPix & X-Add
add.w D5,D1 ;d=d+inc1
dbra D2,setline_mdx ;doesn't change flags
rts
incy:
move.w D4,(A0)+ ;SetPix & X-Add
adda.l D7,A0 ;Y-Add
add.w D6,D1 ;d=d+inc2
dbra D2,setline_mdx ;doesn't change flags
rts
;----------------------------------
moredy:
move.w D2,D1 ;d = 2*dx-dy
add.w D1,D1
move.w D1,D5 ;inc1=2*dx
sub.w D3,D1
move.w D1,D6 ;inc2=2*(dx-dy)
sub.w D3,D6
tst.w D1
setline_mdy:
bpl.s incy2
incx2:
move.w D4,(A0) ;SetPix
adda.l D7,A0 ;Y-Add
add.w D5,D1 ;d=d+inc1
dbra D3,setline_mdy ;doesn't change flags
rts
incy2:
move.w D4,(A0)+ ;SetPix & X-Add
adda.l D7,A0 ;Y-Add
add.w D6,D1 ;d=d+inc2
dbra D3,setline_mdy ;doesn't change flags
rts