From 4b5316a5f5190305ed29927c7d67ceb16cd5b59c Mon Sep 17 00:00:00 2001 From: Pecusx Date: Tue, 5 Nov 2024 18:13:10 +0100 Subject: [PATCH] New (faster) Circle proc - 43b saved --- circle1.asm | 204 +++++++++++++++++++++++++++++++++++++++++++++++++++ circle2.asm | 174 +++++++++++++++++++++++++++++++++++++++++++ grafproc.asm | 188 +---------------------------------------------- scorch.xex | Bin 32687 -> 32645 bytes 4 files changed, 380 insertions(+), 186 deletions(-) create mode 100644 circle1.asm create mode 100644 circle2.asm 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 6faf3dde6c24438a66729263039f2dfbf6e4b657..7662365f030e9523a85a94a7dccf7bb1d0656390 100644 GIT binary patch delta 4536 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 w?iaWR{69kK1?xkN7tR|QC;$Ke