int131d@monu3.cc.monash.edu.au (mr s.d. twyford) (04/26/91)
Lately there has been a few requests for a mythical very fast line drawing routine, posted to a comp.sys.amiga.* news group some time in the past, this is not it. This is, however, a good line drawing routine written by me, and using Bresenham's line drawing algorithm taken from, Computer Graphics, Donald Hearn, M. Pauline Baker published by Prentice-Hall International. It also produces lines identicle to lines drawn by the blitter. Stuart Twyford Internet: int131d@monu3.cc.monash.edu.au Bresenham_line: INPUT: d0<31-16> Y cordinate of start point d0<15-0> X cordinate of start point d1<31-16> Y cordinate of end point d1<15-0> X cordinate of end point a0 pointer to bit plane USES: d0-d7 a0-a1 Bresenham_line: move.w #1,d6 sub.w d0,d1 bge.s .got_deltaX neg.w d1 neg.w d6 .got_deltaX: swap d0 move.w d1,d2 swap d1 move.w #Width_in_bytes,d7 sub.w d0,d1 bge.s .got_deltaY neg.w d1 neg.w d7 .got_deltaY: clr.w d5 cmp.w d1,d2 bge.s .got_L_and_Sdelta swap d1 not.w d5 .got_L_and_Sdelta: move.w d0,d2 mulu #Width_in_bytes,d2 adda.w d2,a0 swap d0 movea.w d7,a1 move.w d1,d2 swap d1 add.w d2,d2 move.w d2,d3 sub.w d1,d3 move.w d3,d4 sub.w d1,d4 tst.w d5 bne.s .deltaY_greater .next_X: move.w d0,d7 not.w d7 move.w d0,d5 asr.w #3,d5 bset d7,(a0,d5.w) tst.w d1 beq.s .line_done subq.w #1,d1 add.w d6,d0 tst.w d3 bge.s .add_d4_to_Y add.w d2,d3 bra.s .next_X .add_d4_to_Y: adda.w a1,a0 add.w d4,d3 bra.s .next_X .deltaY_greater: .next_Y: move.w d0,d7 not.w d7 move.w d0,d5 asr.w #3,d5 bset d7,(a0,d5.w) tst.w d1 beq.s .line_done subq.w #1,d1 adda.w a1,a0 tst.w d3 bge.s .add_d4_to_X add.w d2,d3 bra.s .next_Y .add_d4_to_X: add.w d6,d0 add.w d4,d3 bra.s .next_Y .line_done: rts