Files
scorch_src/circle2.asm
T
2024-11-05 18:13:10 +01:00

174 lines
2.6 KiB
NASM

.IF *>0 ;this is a trick that prevents compiling this file alone
;--------------------------------------------------
.proc circle ;fxxxing good circle drawing :)
; xdraw,ydraw (word) - coordinates of circle center
; radius (byte) - radius of circle
;--------------------------------------------------
;Turbo Basic source
;XC=0
;YC=R
;PC=R (FS)
;
;WHILE XC<=YC
;
; SPLOT(XC,YC)
; IF PC>YC THEN
; YC=YC-1
; PC=PC-YC
; ENDIF
; XC=XC+1
; PC=PC+XC
;
;WEND
mwa xdraw xcircle
mwa ydraw ycircle
; XC=0:YC=R:FS=R
mwa #0 xc
mva radius yc
sta FS
circleloop
;WHILE XC<=YC
lda XC
cmp YC
bcc not_endcircleloop
endcircleloop
mwa xcircle xdraw
mwa ycircle ydraw
rts
not_endcircleloop
; jsr splot8
;----
; splot8
; plot xcircle+XC,ycircle+YC
; plot xcircle+XC,ycircle-YC
; plot xcircle-XC,ycircle-YC
; plot xcircle-XC,ycircle+YC
; plot xcircle+YC,ycircle+XC
; plot xcircle+YC,ycircle-XC
; plot xcircle-YC,ycircle-XC
; plot xcircle-YC,ycircle+XC
;clc - allways after BCC
lda xcircle
adc XC
sta xdraw
lda xcircle+1
adc #0
sta xdraw+1
;clc
lda ycircle
adc YC
sta ydraw
sta ytempDRAW
lda ycircle+1
adc #$00
sta ydraw+1
sta ytempDRAW+1
; plot xcircle+XC,ycircle+YC
jsr plot
sec
lda ycircle
sbc YC
sta ydraw
lda ycircle+1
sbc #$00
sta ydraw+1
; plot xcircle+XC,ycircle-YC
jsr plot
sec
lda xcircle
sbc XC
sta xdraw
lda xcircle+1
sbc #0
sta xdraw+1
; plot xcircle-XC,ycircle-YC
jsr plot
lda ytempDRAW
sta ydraw
lda ytempDRAW+1
sta ydraw+1
; plot xcircle-XC,ycircle+YC
jsr plot
;---
clc
lda xcircle
adc YC
sta xdraw
lda xcircle+1
adc #0
sta xdraw+1
;clc
lda ycircle
adc XC
sta ydraw
sta ytempDRAW
lda ycircle+1
adc #$00
sta ydraw+1
sta ytempDRAW+1
; plot xcircle+YC,ycircle+XC
jsr plot
sec
lda ycircle
sbc XC
sta ydraw
lda ycircle+1
sbc #$00
sta ydraw+1
; plot xcircle+YC,ycircle-XC
jsr plot
sec
lda xcircle
sbc YC
sta xdraw
lda xcircle+1
sbc #0
sta xdraw+1
; plot xcircle-YC,ycircle-XC
jsr plot
lda ytempDRAW
sta ydraw
lda ytempDRAW+1
sta ydraw+1
; plot xcircle-YC,ycircle+XC
jsr plot
;-----
; IF FS>YC THEN
lda YC
cmp FS
bcc endif01
; YC=YC-1
dec YC
; FS=FS-YC
sec
lda FS
sbc YC
sta FS
endif01
; ENDIF
; XC=XC+1
inc XC
; FS=FS+XC
clc
lda FS
adc XC
sta FS
jmp circleloop
; WEND
.endp
.endif