From 76f463daffaa26c2d8e8e84330dd59e85dc31617 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Mon, 12 Sep 2022 22:30:26 +0200 Subject: [PATCH] Add fractal tree sample --- README.md | 6 ++++ samples/hires/fractaltree.c | 64 ++++++++++++++++++++++++++++++++++ samples/hires/fractaltree.png | Bin 0 -> 6894 bytes samples/hires/func3d.c | 2 ++ samples/hires/make.bat | 1 + samples/memmap/allmem.c | 2 ++ 6 files changed, 75 insertions(+) create mode 100644 samples/hires/fractaltree.c create mode 100644 samples/hires/fractaltree.png diff --git a/README.md b/README.md index 3207d25..5ccba5d 100644 --- a/README.md +++ b/README.md @@ -586,6 +586,12 @@ The C64 has a hires graphics mode with 320x200 pixels. Oscar provides a library Draws and clears lines with various patterns. +#### Draw lines "fractaltree.c" + +Draws a recursive fractal tree. + +![Fractal recursive tree](samples/hires/fractaltree.png) + #### Draw 3D wireframe "cube3d.c" Draws a rotating 3D wireframe cube using draw (OR) and clear (AND) operations. The 3D operations are performed using 12.4 bit fixpoint math. diff --git a/samples/hires/fractaltree.c b/samples/hires/fractaltree.c new file mode 100644 index 0000000..febfaf2 --- /dev/null +++ b/samples/hires/fractaltree.c @@ -0,0 +1,64 @@ +#include +#include +#include +#include +#include +#include + + +char * const Color = (char *)0xd000; +char * const Hires = (char *)0xe000; + +Bitmap Screen; +ClipRect Clip = {0, 0, 320, 200}; + +void init(void) +{ + mmap_trampoline(); + mmap_set(MMAP_RAM); + + memset(Color, 0x01, 1000); + memset(Hires, 0x00, 8000); + + mmap_set(MMAP_NO_ROM); + + vic_setmode(VICM_HIRES, Color, Hires); + + vic.color_border = VCOL_WHITE; + + bm_init(&Screen, Hires, 40, 25); +} + +void done(void) +{ + mmap_set(MMAP_ROM); + + getch(); + + vic_setmode(VICM_TEXT, (char *)0x0400, (char *)0x1000); +} + +void draw(float x, float y, float a, float s) +{ + if (s < 6.0) + return; + + float tx = x + cos(a) * s; + float ty = y + sin(a) * s; + + bm_line(&Screen, &Clip, x, y, tx, ty, 0xff, LINOP_SET); + + draw(tx, ty, a + 0.3, s * 0.9); + draw(tx, ty, a - 0.4, s * 0.8); +} + +int main(void) +{ + init(); + + draw(140, 199, PI * 1.5, 32); + + done(); + + return 0; +} diff --git a/samples/hires/fractaltree.png b/samples/hires/fractaltree.png new file mode 100644 index 0000000000000000000000000000000000000000..5ce401b2b70489f484765dd8439795ad3bc33c14 GIT binary patch literal 6894 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 literal 0 HcmV?d00001 diff --git a/samples/hires/func3d.c b/samples/hires/func3d.c index 605c385..7613594 100644 --- a/samples/hires/func3d.c +++ b/samples/hires/func3d.c @@ -8,6 +8,8 @@ #include #include +#pragma stacksize(1024) + #pragma region(main, 0x0a00, 0xc800, , , {code, data, bss, heap, stack} ) diff --git a/samples/hires/make.bat b/samples/hires/make.bat index 2742b41..f41a25a 100644 --- a/samples/hires/make.bat +++ b/samples/hires/make.bat @@ -4,3 +4,4 @@ call ..\..\bin\oscar64 lines.c -n call ..\..\bin\oscar64 polygon.c -n call ..\..\bin\oscar64 bitblit.c -n call ..\..\bin\oscar64 cube3d.c -n +call ..\..\bin\oscar64 fractaltree.c -n diff --git a/samples/memmap/allmem.c b/samples/memmap/allmem.c index 725730a..93e20eb 100644 --- a/samples/memmap/allmem.c +++ b/samples/memmap/allmem.c @@ -4,6 +4,8 @@ // make space until 0x1000 by for the stack +#pragma stacksize(0x0600) + #pragma region( stack, 0x0a00, 0x1000, , , {stack} ) // everything beyond will be code, data, bss and heap to the end