c64-livecoding/wip-hugo/routines/memory/line_down.s
2025-02-27 22:04:43 +01:00

81 lines
1.5 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