;drawing line from 2 cordinates .proc line_up_inv ;;# (X_end, Y_end) # ;;# * # ;;# * # ;;# * # ;;# (X_pos, Y_pos) # ;;NOTE THAT Y_pos >) Y_end, X_pos <= X_end. Min 45deg! .include "line.inc" ;;We need to clear this memory LDA #$00 STA <V STA <dx_2 STA $FD ; for pixel_draw ;; V = 2*(dy -dx) ;; where: dy = Y_pos - Y_end, dx = X_end - X_start LDA X_end SEC SBC X_pos STA >V STA >dx_2; >dy_2 = dy. Needed for dy_2 (not for V) LDA Y_pos SEC SBC Y_end STA dy SEC SBC >V STA >V; <V = dx - dy mult_16 >V, <V; V = 2*(dx -dy) ;dy_2 = dy*2 mult_16 >dx_2, <dx_2 ;;D = 2*dx - dy + 2*255 ;;Our D is bigger then wikipedia because D is unsigned. LDA >dx_2 STA >D LDA <dx_2 STA <D Add_16 >D, <D, #$ff, #$01 Sub_16 >D, <D, dy, #$00 for_y: jsr pixel_draw ;;Increment Y until Y_pos = Y_end and X_pos = X_end DEC Y_pos LDY Y_pos CPY Y_end BEQ end ;;If D < %00000010 00000000: case_2 ;;else case 1. Lag_16 >D, <D, #$00, #$02, case_2 case_1: INC X_pos Sub_16 >D, <D, >V, <V; D = D - V JMP for_y case_2: Add_16 >D, <D, >dx_2, <dx_2;D = D + 2*dy JMP for_y end: RTS .endproc