diff --git a/examples/mandelbrot/mandelbrot-ascii.csn b/examples/mandelbrot/mandelbrot-ascii.csn new file mode 100644 index 0000000..747a517 --- /dev/null +++ b/examples/mandelbrot/mandelbrot-ascii.csn @@ -0,0 +1,87 @@ +( + (def W 128) + (def H 48) + (def MAXITER 50) + + (sym asciigr r10) + + (mkbf asciigr ( + '.' ',' ':' '+' '=' '%' '@' '#' + '$' '&' '*' '|' '-' ':' '.' ' ' + )) + + (sym x r7) + (sym y r8) + (:row) + (:col) + (call pixel x y) + (sub r0 MAXITER 1) + (rcmp res0 1 r0 + (eq? + (mod r0 res0 16) + (bfrd @cout @asciigr r0) + ) + (else? + (ld @cout ' ') + ) + ) + (sc-wr x y r0) + (inc x) + (cmp x W) + (j.ne :col) + (ld x 0) + (inc y) + (ld @cout '\n') + (cmp y H) + (j.ne :row) + + (halt) + + (proc pixel xi yi + (sym x0 r7) + (sym y0 r8) + (itf x0 xi) + (itf y0 yi) + + ; Scale to the interesting range + (itf r0 W) + (itf r1 H) + + (fdiv x0 r0) + (fmul x0 3.5) + (fsub x0 2.5) + + (fdiv y0 r1) + (fmul y0 2.4) + (fsub y0 1.2) + + (sym x r5) + (sym y r6) + (ld x 0.0) + (ld y 0.0) + (sym iter r4) + + (:iter) + (cmp iter MAXITER) + (j.eq :end) + (fmul r0 x x) + (fmul r1 y y) + (fadd r2 r1) + (fcmp r2 4.0) + (j.gt :end) + + (fsub r2 r0 r1) + (fadd r2 x0) + + (fmul r0 x y) + (fmul r0 2.0) + (fadd r0 y0) + (ld y r0) + (ld x r2) + (inc iter) + (j :iter) + + (:end) + (ret iter) + ) +) diff --git a/examples/mandelbrot/mandelbrot-full.csn b/examples/mandelbrot/mandelbrot-full.csn new file mode 100644 index 0000000..94335e3 --- /dev/null +++ b/examples/mandelbrot/mandelbrot-full.csn @@ -0,0 +1,92 @@ +( + (sc-init 800 600) + (sc-opt SCREEN_AUTOBLIT 0) + (def W 800) + (def H 600) + (def MAXITER 50) + + (sym gradient r9) + (sym asciigr r10) + + (mkbf gradient ( + 0x421e0f 0x19071a 0x09012f 0x040449 0x000764 0x0c2c8a 0x1852b1 0x397dd1 + 0x86b5e5 0xd3ecf8 0xf1e9bf 0xf8c95f 0xffaa00 0xcc8000 0x995700 0x6a3403)) + + (sym x r7) + (sym y r8) + (:row) + (:col) + (call pixel x y) + (sub r0 MAXITER 1) + (rcmp res0 1 r0 + (eq? + (mod r0 res0 16) + (bfrd r0 @gradient r0) + ) + (else? (ld r0 0)) + ) + (sc-wr x y r0) + (inc x) + (cmp x W) + (j.ne :col) + (ld x 0) + (inc y) + (sc-blit) ; Render after every row + (cmp y H) + (j.ne :row) + + ;(sc-blit) + + (:slp) + (sc-poll) + (mslp 10) + (j :slp) + + (proc pixel xi yi + (sym x0 r7) + (sym y0 r8) + (itf x0 xi) + (itf y0 yi) + + ; Scale to the interesting range x -2.5..1 and y -1..1 + (itf r0 W) + (itf r1 H) + + (fdiv x0 r0) + (fmul x0 3.5) + (fsub x0 2.5) + + (fdiv y0 r1) + (fmul y0 2.4) + (fsub y0 1.2) + + (sym x r5) + (sym y r6) + (ld x 0.0) + (ld y 0.0) + (sym iter r4) + + (:iter) + (cmp iter MAXITER) + (j.eq :end) + (fmul r0 x x) + (fmul r1 y y) + (fadd r2 r1) + (fcmp r2 4.0) + (j.gt :end) + + (fsub r2 r0 r1) + (fadd r2 x0) + + (fmul r0 x y) + (fmul r0 2.0) + (fadd r0 y0) + (ld y r0) + (ld x r2) + (inc iter) + (j :iter) + + (:end) + (ret iter) + ) +) diff --git a/examples/mandelbrot/mandelbrot-lowres.csn b/examples/mandelbrot/mandelbrot-lowres.csn new file mode 100644 index 0000000..094fa7a --- /dev/null +++ b/examples/mandelbrot/mandelbrot-lowres.csn @@ -0,0 +1,93 @@ +( + (sc-init 1024 768) + (sc-opt SCREEN_AUTOBLIT 0) + (sc-opt SCREEN_UPSCALE 8) + (def W 128) + (def H 96) + (def MAXITER 50) + + (sym gradient r9) + (sym asciigr r10) + + (mkbf gradient ( + 0x421e0f 0x19071a 0x09012f 0x040449 0x000764 0x0c2c8a 0x1852b1 0x397dd1 + 0x86b5e5 0xd3ecf8 0xf1e9bf 0xf8c95f 0xffaa00 0xcc8000 0x995700 0x6a3403)) + + (sym x r7) + (sym y r8) + (:row) + (:col) + (call pixel x y) + (sub r0 MAXITER 1) + (rcmp res0 1 r0 + (eq? + (mod r0 res0 16) + (bfrd r0 @gradient r0) + ) + (else? (ld r0 0)) + ) + (sc-wr x y r0) + (inc x) + (cmp x W) + (j.ne :col) + (ld x 0) + (inc y) + (sc-blit) ; Render after every row + (cmp y H) + (j.ne :row) + + ;(sc-blit) + + (:slp) + (sc-poll) + (mslp 10) + (j :slp) + + (proc pixel xi yi + (sym x0 r7) + (sym y0 r8) + (itf x0 xi) + (itf y0 yi) + + ; Scale to the interesting range x -2.5..1 and y -1..1 + (itf r0 W) + (itf r1 H) + + (fdiv x0 r0) + (fmul x0 3.5) + (fsub x0 2.5) + + (fdiv y0 r1) + (fmul y0 2.4) + (fsub y0 1.2) + + (sym x r5) + (sym y r6) + (ld x 0.0) + (ld y 0.0) + (sym iter r4) + + (:iter) + (cmp iter MAXITER) + (j.eq :end) + (fmul r0 x x) + (fmul r1 y y) + (fadd r2 r1) + (fcmp r2 4.0) + (j.gt :end) + + (fsub r2 r0 r1) + (fadd r2 x0) + + (fmul r0 x y) + (fmul r0 2.0) + (fadd r0 y0) + (ld y r0) + (ld x r2) + (inc iter) + (j :iter) + + (:end) + (ret iter) + ) +) diff --git a/examples/mandelbrot/output-ascii.txt b/examples/mandelbrot/output-ascii.txt new file mode 100644 index 0000000..c8ca2bd --- /dev/null +++ b/examples/mandelbrot/output-ascii.txt @@ -0,0 +1,48 @@ +::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++==============+++++++++++++++++++=::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++========%%%%%=@%%%%%++++++++========:::::::::::::::::::: +::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++=========%%@#.&$#%%%%%%%%=============::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::===+++++++++++++++++++++++++++++==========%%%%##.-##@@@%%%===============:::::::::::::::::: +::::::::::::::::::::::::::::::::::::=======+++++++++++++++++++++++++==========%%%%##$&::& ||#@%%===============::::::::::::::::: +:::::::::::::::::::::::::::::::::::===========+++++++++++++++++++%%%=========@@@@@##$**:.|&$@@@@================:::::::::::::::: +::::::::::::::::::::::::::::::::::=================++++++++++%%%%%%%%%%%%%@@@@@@@$$&*& ::=&$##@@@%================:::::::::::::: +::::::::::::::::::::::::::::::::=========================%%%%%%%%%%%%%%%%%@@@@##$:#$.#& :-:$$@@@%%%%%%%%%=========::::::::::::: +:::::::::::::::::::::::::::::::==========================%%%%%%%%%%%%%%%%@@@@@##$*:= :&###%%%%%%%%%%=========+::::::::::: +:::::::::::::::::::::::::::::============================%%%%%%%%%@%%%%####@$$$&&|. *.&$####@%@@@@%%=========++:::::::::: +:::::::::::::::::::::::::::==============================%%%%%%%%@@##$$$:*$$&&**|-:$ -**&&$##@@@#|#%========+++++:::::::: +:::::::::::::::::::::::::+==============================%%%%%%%%%@@@&|:&,:|*|# , | *..#.*$&$&&: #@@=====++++++++:::::: +:::::::::::::::::::::::+++============================@@%%%%%%%%@@@$&|:@ =, * + --,%% :,#%%%%%=++++++++++:::: +:::::::::::::::::::::++++++==============%%%========@@@@@@@%%%#####$$*. @-*#%%%%%%++++++++++++:: +:::::::::::::::::::++++++++=============%%%%%%%%%@@@@@@@@@@@@###$$&* - : :,*$@@@%%%%++++++++++++++ +::::::::::::::::++++++++++==============%%%@####@@@@@#@@@@@@####$*=: -&###@%%%%++++++++++++++ +::::::::::::::++++++++++++=============%%%%@$||&#$$##$$##$$$$##&&&- %-*&:@%%%%++++++++++++++ +:::::::::::++++++++++++++=============%%%%##&.:**&&$&::**&&$$$&&*% =,#%%%==+++++++++++++ +::::::::++++++++++++++++%%%%========@@@@@@##&&|. ,.::.+ .,.****|-&* *#@@@====++++++++++++ +::::::+++++++++++++++++%%%%%%%%%%%@@@@@@@@$$$*|.& @ =::-:. |$@@======+++++++++++ +:::++++++++++++++++++%%%%%%%%%%%%%@@@@####$$*--.$ , , %-#@@========+++++++++ +:++++++++++++++++++==%%%%%%%%%%%%@@@@@#*-&**--= %# :$#%%%=========+++++++ ++++++++++++++++++====%%%%%@@@@#####$$$$&|:. .- , $$@@%%%%==========+++++ +++++++++++++++======@@@##@$*$$##$#&$$-*|.+ : #$#@@@%%%%%==========+++ ++++++++++++++====%@ - |*$$#@@@%%%%%=========+++ +++++++++++++++======@@@##@$*$$##$#&$$-*|.+ : #$#@@@%%%%%==========+++ ++++++++++++++++++====%%%%%@@@@#####$$$$&|:. .- , $$@@%%%%==========+++++ +:++++++++++++++++++==%%%%%%%%%%%%@@@@@#*-&**--= %# :$#%%%=========+++++++ +:::++++++++++++++++++%%%%%%%%%%%%%@@@@####$$*--.$ , , %-#@@========+++++++++ +::::::+++++++++++++++++%%%%%%%%%%%@@@@@@@@$$$*|.& @ =::-:. |$@@======+++++++++++ +::::::::++++++++++++++++%%%%========@@@@@@##&&|. ,.::.+ .,.****|-&* *#@@@====++++++++++++ +:::::::::::++++++++++++++=============%%%%##&.:**&&$&::**&&$$$&&*% =,#%%%==+++++++++++++ +::::::::::::::++++++++++++=============%%%%@$||&#$$##$$##$$$$##&&&- %-*&:@%%%%++++++++++++++ +::::::::::::::::++++++++++==============%%%@####@@@@@#@@@@@@####$*=: -&###@%%%%++++++++++++++ +:::::::::::::::::::++++++++=============%%%%%%%%%@@@@@@@@@@@@###$$&* - : :,*$@@@%%%%++++++++++++++ +:::::::::::::::::::::++++++==============%%%========@@@@@@@%%%#####$$*. @-*#%%%%%%++++++++++++:: +:::::::::::::::::::::::+++============================@@%%%%%%%%@@@$&|:@ =, * + --,%% :,#%%%%%=++++++++++:::: +:::::::::::::::::::::::::+==============================%%%%%%%%%@@@&|:&,:|*|# , | *..#.*$&$&&: #@@=====++++++++:::::: +:::::::::::::::::::::::::::==============================%%%%%%%%@@##$$$:*$$&&**|-:$ -**&&$##@@@#|#%========+++++:::::::: +:::::::::::::::::::::::::::::============================%%%%%%%%%@%%%%####@$$$&&|. *.&$####@%@@@@%%=========++:::::::::: +:::::::::::::::::::::::::::::::==========================%%%%%%%%%%%%%%%%@@@@@##$*:= :&###%%%%%%%%%%=========+::::::::::: +::::::::::::::::::::::::::::::::=========================%%%%%%%%%%%%%%%%%@@@@##$:#$.#& :-:$$@@@%%%%%%%%%=========::::::::::::: +::::::::::::::::::::::::::::::::::=================++++++++++%%%%%%%%%%%%%@@@@@@@$$&*& ::=&$##@@@%================:::::::::::::: +:::::::::::::::::::::::::::::::::::===========+++++++++++++++++++%%%=========@@@@@##$**:.|&$@@@@================:::::::::::::::: +::::::::::::::::::::::::::::::::::::=======+++++++++++++++++++++++++==========%%%%##$&::& ||#@%%===============::::::::::::::::: +:::::::::::::::::::::::::::::::::::::===+++++++++++++++++++++++++++++==========%%%%##.-##@@@%%%===============:::::::::::::::::: +::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++=========%%@#.&$#%%%%%%%%=============::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++========%%%%%=@%%%%%++++++++========:::::::::::::::::::: diff --git a/examples/mandelbrot/output-full.png b/examples/mandelbrot/output-full.png new file mode 100644 index 0000000..f9aa398 Binary files /dev/null and b/examples/mandelbrot/output-full.png differ