diff --git a/circle1.asm b/circle1.asm new file mode 100644 index 0000000..1bec55c --- /dev/null +++ b/circle1.asm @@ -0,0 +1,204 @@ + +.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 +; R=30 +; XC=0:YC=R +; FX=0:FY=8*R:FS=4*R+3 +; WHILE FX0 +; FS=FS-FX-4 +; ELSE +; YC=YC-1 +; FY=FY-8 +; FS=FS-FX-4+FY +; ENDIF +; WEND +; splot8 + + mwa xdraw xcircle + mwa ydraw ycircle + +; XC=0:YC=R + mwa #0 xc + mva radius yc +; FX=0:FY=8*R:FS=4*R+3 + mva #0 fx + mva radius fy + asl FY + asl FY + mva FY FS + asl FY + ; A = FS and C = 0 + ;clc + ;lda FS + adc #3 + sta FS + +circleloop +; WHILE FX0 +; FS=FS-FX-4 + lda FS + beq else01 + bmi else01 + sec + sbc FX + sbc #4 + sta FS + jmp circleloop ; endif01 +else01 +; ELSE +; YC=YC-1 + dec YC +; FY=FY-8 + sec + lda FY + sbc #8 + sta FY +; FS=FS-FX-4+FY + lda FS + sec + sbc FX + sbc #4 + clc + adc FY + sta FS +endif01 +; ENDIF + jmp circleloop +; WEND +.endp + +.endif \ No newline at end of file diff --git a/circle2.asm b/circle2.asm new file mode 100644 index 0000000..8316a90 --- /dev/null +++ b/circle2.asm @@ -0,0 +1,174 @@ + +.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 \ No newline at end of file diff --git a/grafproc.asm b/grafproc.asm index c07ea72..3a48a61 100644 --- a/grafproc.asm +++ b/grafproc.asm @@ -289,193 +289,9 @@ EndOfDraw rts .endp -;-------------------------------------------------- -.proc circle ;fxxxing good circle drawing :) -; xdraw,ydraw (word) - coordinates of circle center -; radius (byte) - radius of circle -;-------------------------------------------------- -;Turbo Basic source -; R=30 -; XC=0:YC=R -; FX=0:FY=8*R:FS=4*R+3 -; WHILE FX0 -; FS=FS-FX-4 -; ELSE -; YC=YC-1 -; FY=FY-8 -; FS=FS-FX-4+FY -; ENDIF -; WEND -; splot8 +; Circle is now in external file + icl 'circle2.asm' - mwa xdraw xcircle - mwa ydraw ycircle - - mwa #0 xc - mva radius yc - mva #0 fx - mva radius fy - asl FY - asl FY - mva FY FS - asl FY - ; A = FS and C = 0 - ;clc - ;lda FS - adc #3 - sta FS - -circleloop - lda FX - cmp FY - 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 -;----- - - inc XC - - clc - lda FX - adc #8 - sta FX - - lda FS - beq else01 - bmi else01 - sec - sbc FX - sbc #4 - sta FS - jmp circleloop ; endif01 -else01 - dec YC - sec - lda FY - sbc #8 - sta FY - - lda FS - sec - sbc FX - sbc #4 - clc - adc FY - sta FS -endif01 - jmp circleloop -.endp ;-------------------------------------------------- .proc placetanks ;-------------------------------------------------- diff --git a/scorch.xex b/scorch.xex index 6faf3dd..7662365 100644 Binary files a/scorch.xex and b/scorch.xex differ