From 8b955a500799093004e1e7ade7572d4509f7e4ca Mon Sep 17 00:00:00 2001 From: hugova Date: Thu, 26 Jun 2025 22:05:08 +0200 Subject: [PATCH] very cool but not working circle. --- wip-hugo/routines/circle/circle.inc | 8 ++++ wip-hugo/routines/circle/circle.s | 60 ++++++++++++++++++++++++++ wip-hugo/routines/circle/circle_test.s | 9 ++++ wip-hugo/source.s | 4 +- 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 wip-hugo/routines/circle/circle.inc create mode 100644 wip-hugo/routines/circle/circle.s create mode 100644 wip-hugo/routines/circle/circle_test.s diff --git a/wip-hugo/routines/circle/circle.inc b/wip-hugo/routines/circle/circle.inc new file mode 100644 index 0000000..81ba847 --- /dev/null +++ b/wip-hugo/routines/circle/circle.inc @@ -0,0 +1,8 @@ +;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*- +.include "../pixel/pixel.inc" +;; public args + radius = ARGVEC + 3 +;; private args + t1 = $E0 + t2 = $E1 + temp = $E2 diff --git a/wip-hugo/routines/circle/circle.s b/wip-hugo/routines/circle/circle.s new file mode 100644 index 0000000..9c52deb --- /dev/null +++ b/wip-hugo/routines/circle/circle.s @@ -0,0 +1,60 @@ +;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*- + +.proc circle + .include "circle.inc" + ;; We use the algorithm jerkos method + ;; https://schwarzers.com/algorithms/ + LDY Y_pos + LDX X_pos + ;; X_pos = X_pos + r (hack, should fix later ( xpos == ypos is not always true)) + CLC + LDA X_pos + ADC radius + STA X_pos + + + ;; t1 = radius >> 4 + LDA radius + LSR + LSR + LSR + LSR + STA t1 +while_x_bigger_then_y: + + STY Y_pos + STX X_pos + STA temp + jsr pixel_draw + LDY Y_pos + LDX X_pos + LDA temp + + + INY ; y++ + + ;;t1 += y + CLC + LDA t1 + STY temp + ADC temp + STA t1 + ;; t2 = t1 -x + SEC + STX temp + SBC temp + + ;; if t2 < 0 then skip to endif + CMP #$00 + BMI endif +if: + DEX; x-- + STA t1; t1 = t2 +endif: + ;; repeat if X > Y + STX temp + TYA + CMP temp + JMP while_x_bigger_then_y + BEQ while_x_bigger_then_y +.endproc diff --git a/wip-hugo/routines/circle/circle_test.s b/wip-hugo/routines/circle/circle_test.s new file mode 100644 index 0000000..de42b01 --- /dev/null +++ b/wip-hugo/routines/circle/circle_test.s @@ -0,0 +1,9 @@ +.scope circle_test + .include "circle.inc" + LDA #$50 + STA X_pos + STA Y_pos + LDA #$08 + STA radius + JSR circle +.endscope diff --git a/wip-hugo/source.s b/wip-hugo/source.s index 6cca178..5aa440e 100755 --- a/wip-hugo/source.s +++ b/wip-hugo/source.s @@ -9,7 +9,8 @@ ;.include "dubbel_buffer/raster_irqs.s" ;.include "routines/arithmatic/mult_test.s" -.include "routines/arithmatic/div_test.s" +;.include "routines/arithmatic/div_test.s" +.include "routines/circle/circle_test.s" ;.include "routines/line/line_test.s" ;.include "routines/text/char_draw_test.s" ;.include "routines/pixel/pixel_test.s" @@ -20,6 +21,7 @@ exit: JMP exit .include "../wip-duuqnd/public.inc" .include "routines/line/line.s" +.include "routines/circle/circle.s" .include "routines/triangle/triangle.s" .include "routines/pixel/pixel_draw.s" .include "routines/text/char_draw.s"