;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*- ;;drawing line from 2 cordinates ;;# * (X_end, Y_end) # ;;# # ;;# * # ;;# * # ;;# (X_pos, Y_pos) # ;; ;;NOTE THAT X_pos <= X_end, Y_pos >= Y_end. Max 45deg! .proc line_up ;; Look at line_down for referense .include "line.inc" LDA #$00 STA <V STA <dy_2 STA $FD LDA Y_pos SEC SBC Y_end STA >V STA >dy_2 LDA dx SEC SBC >V STA >V mult_16 >V, <V mult_16 >dy_2, <dy_2, ! LDA >dy_2 STA >D LDA <dy_2 STA <D Add_16 >D, <D, #$ff, #$01, ! Sub_16 >D, <D, dx, #$00 jsr pixel_draw LDX X_pos for_x: LDA byte_to_paint ORA (>btp_mem_pos), Y STA (>btp_mem_pos), Y increment_pixel_x: LSR byte_to_paint BCC increment_pixel_x_end move_8px_left: Add_16 >btp_mem_pos, <btp_mem_pos, #$08, #$00 LDA #%10000000 STA byte_to_paint increment_pixel_x_end: INX CPX X_end BEQ end Lag_16 >D, <D, #$00, #$02, case_2 case_1: Sub_16 >D, <D, >V, <V, ! decrement_y_pos: DEY CPY #$ff BNE for_x move_8px_up: LDY #$07 Sub_16 >btp_mem_pos, <btp_mem_pos, #$40, #$01, ! jmp for_x decrement_y_pos_end: case_2: Add_16 >D, <D, >dy_2, <dy_2, ! JMP for_x end: RTS .endproc