c64-livecoding/wip-hugo/routines/memory/line_down.s

76 lines
1.4 KiB
ArmAsm

;;drawing line from 2 cordinates
.proc line
testing:
;;# (X_pos, Y_pos) #
;;# * #
;;# * #
;;# * #
;;# (X_end, Y_end) #
;;
;;NOTE THAT X_pos <= X_end and line is going downwords max 45deg!
;;Not values but register position in memory
X_end = $04
Y_end = $05
X_pos = $FC
Y_pos = $FB
dy = $06
dx = $07
D = $08
;;Set values
LDA #$00
STA $FD ; for pixel_draw
;;example values ~~~~~ SHOULD BE PRECOMPILED
LDA #$00
STA X_pos
STA Y_pos
LDA #$50
STA X_end
STA dx
LDA #$40
STA Y_end
STA dy
LDA #($40 + $40 - $50 )
STA D ; = 2*dy - dx
;; ~~~~~~~
for_x:
jsr pixel_draw
;;LDY D ; FOR DEBUG
;;If D <= 0 then: skipp
LDX D;
DEX
BMI case_2
case_1:
INC Y_pos
;;D = D_before -2*dx
LDA dx
ROL A
TAX
LDA D
STX D ; D = -2*dx, A = D_before
SEC
SBC D ; A = D_before -2*dx
STA D;
jmp last
case_2:
;;D = D + 2*dx
LDA dx
ROL
CLC
ADC D
STA D
last:
CMP #$00
;;increment x untill x == large
INC X_pos
LDA X_pos
CMP #199
BEQ end
JMP for_x
end:
jmp testing
.endproc