model tiny,pascal .code .286 jumps public line line proc uses es arg x1,y1,x2,y2:word,color:byte local delta1,factor1,delta2,factor2:word cld mov ax,y1 mov di,ax shl di,6 shl ax,8 add ax,x1 add di,ax push 0a000h pop es mov ax,1 mov bx,320 mov dx,y2 sub dx,y1 jge keep_y neg bx neg dx keep_y: mov delta1,bx mov cx,x2 sub cx,x1 jge keep_x neg ax neg cx keep_x: add delta1,ax cmp cx,dx jge hors xor ax,ax xchg cx,dx jmp savs hors: xor bx,bx savs: add ax,bx mov delta2,ax shl dx,1 mov factor2,dx sub dx,cx mov ax,dx sub ax,cx mov factor1,ax inc cx mov al,color put_pixel: stosb dec di cmp dx,0 jge dilin add di,delta2 add dx,factor2 loop put_pixel ret dilin: add di,delta1 add dx,factor1 loop put_pixel ret line endp end