Jump to content
IGNORED

DRAW line routine in assembler


moulinaie

Recommended Posts

Hi,

 

I've been asked to share the DRAWTO routine in MLC, here it is with enough comments I thinkl.

The code is self modified for one line (the one with label "modif").

 

; INPUT
; R0 = X2, R2 = Y2
; R7 = X1, R8 = Y1

; you just have to provide a
; PLOT routine that plots the pixel
; (X1,Y1) = (R7,R8)
; the PLOT routine can use R0 to R6
mov r11,@DRAWRT ; save return address
mov r0,r10
s r7,r10	 ; dx=x2-x1
jgt gbd1
neg r10
mov r0,r1
mov r7,r0
mov r1,r7	 ; swap x1 and x2
mov r2,r1
mov r8,r2
mov r1,r8	 ; swap y1 and y2
gbd1
li r13,1	 ; k=1
mov r2,r12
s r8,r12	 ; dy=y2-y1
jlt gbd2
c r10,r12	 ; *** here if dy>0
jlt gbd3
gbd7
mov r10,r14	 ; e=dx *** here dx>=dy
mov r10,r9
inc r9		 ; R9 = number of loops (x2-x1+1)
a r10,r10	 ; dx*2
a r12,r12	 ; dy*2
plot1
bl @PLOT	 ; plot x1,y1
inc r7		 ; x1+1
s r12,r14	 ; e=e-dy
jgt gbd4
jeq gbd4
a r13,r8	 ; y1=y1+k (+/-1)
a r10,r14	 ; e=e+dx
gbd4
dec r9
jne plot1
gbd9
mov @DRAWRT,r11
b *r11
gbd3			 ; *** here dy>dx
li r0,>1500	 ; JGT
mov r12,r9
gbd8
inc r9		 ; number of loops (y2-y1+1)
movb r0,@modif
mov r12,r14	 ; e=dy
a r10,r10	 ; dx*2
a r12,r12	 ; dy*2
plot2
bl @PLOT	 ; plot x1,y1
a r13,r8	 ; y1 +/-1
s r10,r14	 ; e=e-dx
modif
jgt gbd5	 ; if dy>=0 then JGT (>15xx) else JLT (>11xx)
jeq gbd5
inc r7		 ; x1+1
a r12,r14	 ; e=e+dy
gbd5
dec r9
jne plot2
jmp gbd9
gbd2			 ; here dy<0
neg r13		 ; k=-1
mov r10,r1
a r12,r1
jlt gbd6
neg r12		 ; dy = -dy
jmp gbd7
gbd6
neg r10		 ; dx = -dx
mov r12,r9
neg r9
li r0,>1100	 ; JLT
jmp gbd8

 

(source: I worked from this article: http://fr.wikipedia.org/wiki/Algorithme_de_trac%C3%A9_de_segment_de_Bresenham)

 

Guillaume.

Edited by moulinaie
  • Like 1
Link to comment
Share on other sites

I guess it's much the same. I used the following link to draw lines and circles (and with a bit of changes you could get diamonds, squares and squares with rounded corners).

 

http://www.gamedev.n...algorithms-r767

 

Here's a cart demo from 07.12.2006

 

 

 

Great link. Just reading up on it. It actually makes sense!

Link to comment
Share on other sites

I guess it's much the same. I used the following link to draw lines and circles (and with a bit of changes you could get diamonds, squares and squares with rounded corners).

 

http://www.gamedev.n...algorithms-r767

 

Here's a cart demo from 07.12.2006

 

 

 

That's very interesting for the circle algorithm. I didn't know it was so simple...!

 

Guillaume.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...