Annotation of OpenXM_contrib/gnuplot/lineproc.mac, Revision 1.1
1.1 ! maekawa 1: ; lineproc.mac
! 2: ; MASM macro definition for Bresenham line-drawing routine
! 3: ; Colin Kelley
! 4: ; January 13, 1987
! 5:
! 6:
! 7: INCAX equ 40h ; for Self-Modifying Code
! 8: INCBX equ 43h
! 9: DECAX equ 48h
! 10: DECBX equ 4bh
! 11:
! 12: ; usage:
! 13: ; lineproc linename, pixelname
! 14: ;
! 15: ; where linemane is the name you want for the proc, and pixelname is the
! 16: ; name of the routine that linename is to call to set pixels
! 17: ;
! 18:
! 19: lineproc macro linename, pixelname
! 20: beginproc linename
! 21:
! 22: push bp
! 23: mov bp,sp
! 24: push si
! 25: push di
! 26: mov ax,[bp+X] ; x1
! 27: mov bx,[bp+X+2] ; y1
! 28: mov cx,[bp+X+4] ; x2
! 29: mov si,[bp+X+6] ; y2
! 30:
! 31: cmp ax,cx ; x1,x2
! 32: jne i19
! 33: cmp bx,si ; y1,y2
! 34: jne i19
! 35:
! 36: call pixelname
! 37:
! 38: jmp i28
! 39: i19:
! 40: mov dx,ax ; dx,x1
! 41: sub dx,cx ; x2
! 42: jnc noabsx
! 43: neg dx
! 44: noabsx:
! 45: mov di,bx ; dy,y1
! 46: sub di,si ; y2
! 47: jnc noabsy
! 48: neg di ; dy
! 49: noabsy:
! 50: cmp dx,di ; dx,dy
! 51: jb i21 ; go iterate y's
! 52: ;
! 53: ; iterate x's
! 54: ;
! 55: cmp bx,si ; y1,y2
! 56: jb forwardy
! 57: mov byte ptr cs:yinc1,DECBX
! 58: jmp short i22
! 59: forwardy:
! 60: mov byte ptr cs:yinc1,INCBX
! 61: i22:
! 62: cmp ax,cx ; x1,x2
! 63: jae l20004
! 64: mov byte ptr cs:xinc1,INCAX
! 65: jmp short l20005
! 66: l20004:
! 67: mov byte ptr cs:xinc1,DECAX
! 68: l20005:
! 69: mov bp,dx ; sum,dx
! 70: shr bp,1 ; sum
! 71: d23:
! 72: cmp ax,cx ; x1,x2
! 73: je i28 ; done
! 74: xinc1: inc ax ; may become inc or dec
! 75: add bp,di ; sum,dy
! 76: cmp bp,dx
! 77: jb i27
! 78: sub bp,dx ; sum,dx
! 79: yinc1: inc bx ; may become inc or dec
! 80: i27:
! 81: call pixelname
! 82: jmp short d23
! 83:
! 84: ;
! 85: ; else iterate y's
! 86: ;
! 87: i21:
! 88: cmp ax,cx ; x1,x2
! 89: jae l20006
! 90: mov byte ptr cs:xinc2,INCAX
! 91: jmp short l20007
! 92: l20006:
! 93: mov byte ptr cs:xinc2,DECAX
! 94: l20007:
! 95: cmp bx,si ; y1,y2
! 96: jb forwardy2
! 97: mov byte ptr cs:yinc2,DECBX
! 98: jmp short i29
! 99: forwardy2:
! 100: mov byte ptr cs:yinc2,INCBX
! 101: i29:
! 102: mov bp,di ; sum,dy
! 103: shr bp,1 ; sum,1
! 104: d30:
! 105: cmp bx,si ; y1,y2
! 106: je i28
! 107: yinc2: inc bx ; may become inc or dec
! 108: add bp,dx ; sum,dx
! 109: cmp bp,di ; sum,dy
! 110: jb i34
! 111: sub bp,di ; sum,dy
! 112: xinc2: inc ax ; may become inc or dec
! 113: i34:
! 114: call near ptr pixelname
! 115: jmp short d30
! 116: ;
! 117: ; clean up and exit
! 118: ;
! 119: i28:
! 120: pop di
! 121: pop si
! 122: pop bp
! 123: ret
! 124:
! 125: linename endp
! 126: endm
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>