update examples to use the new const eval syntax

coroutines
Ondřej Hruška 4 years ago
parent 66b3674f81
commit 4e67ac291f
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 23
      examples/life.csn
  2. 47
      examples/mandelbrot/mandelbrot-full.csn
  3. 49
      examples/mandelbrot/mandelbrot-interactive.csn
  4. 52
      examples/mandelbrot/mandelbrot-lowres.csn

@ -10,23 +10,22 @@
(def GENERATION_MS 200)
; Real pixel size
(sc-init 400 400)
; Upscaling factor (bug pixels)
(sc-opt SCREEN_UPSCALE 10)
; Number of big pixels
; Number of pixels
(def W 40)
(def H 40)
(def UPSCALE 10)
; --- end of config ---
; !!! If you change size, also update the following constants.
; Compile-time math is not implemented yet.
; Real pixel size
(sc-init (=mul UPSCALE W) (=mul UPSCALE H))
; Upscaling factor (bug pixels)
(sc-opt SCREEN_UPSCALE UPSCALE)
(def XMAX 39) ; W-1
(def YMAX 39) ; H-1
(def NCELLS 1600) ; W*H
(def XMAX (=sub W 1))
(def YMAX (=sub H 1))
(def NCELLS (=mul W H))
; --- end of config ---
(sc-opt SCREEN_AUTO_BLIT 0)
(sc-erase 0) ; all black

@ -1,17 +1,20 @@
(
(sc-init 800 600)
(sc-opt SCREEN_AUTOBLIT 0)
; High resolution mandelbrot
(def W 800)
(def H 600)
(def MAXITER 50)
(def MAXITER 50) ; Increase for more detail but slower render
(sc-init W H)
(sc-opt SCREEN_AUTOBLIT 0)
(sym gradient r9)
(sym asciigr r10)
(mkbf gradient (
0x421e0f 0x19071a 0x09012f 0x040449 0x000764 0x0c2c8a 0x1852b1 0x397dd1
0x421e0f 0x19071a 0x09012f 0x040449 0x000764 0x0c2c8a 0x1852b1 0x397dd1
0x86b5e5 0xd3ecf8 0xf1e9bf 0xf8c95f 0xffaa00 0xcc8000 0x995700 0x6a3403))
(sym x r7)
(sym y r8)
(:row)
@ -34,38 +37,38 @@
(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 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)
(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)
@ -74,18 +77,18 @@
(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)
(fmul r0 2.0)
(fadd r0 y0)
(ld y r0)
(ld y r0)
(ld x r2)
(inc iter)
(j :iter)
(:end)
(ret iter)
)

@ -1,10 +1,15 @@
(
(sc-init 1024 768)
(sc-opt SCREEN_AUTOBLIT 0)
(def W 1024)
(def H 768)
(sym MAXITER g0)
(ld MAXITER 50)
(def DEF_MAXITER 50)
; ---
(sc-init W H)
(sc-opt SCREEN_AUTOBLIT 0)
(sym maxiter g0)
(ld maxiter DEF_MAXITER)
(lds @cout "Interactive Mandelbrot\n")
(lds @cout "----------------------\n")
@ -18,7 +23,7 @@
; index into the skip/size table
(sym mb_skip_index r11)
; Interactive movement speed
(def ZOOM_STEP 0.1)
(def PAN_STEP 0.3)
@ -66,10 +71,10 @@
(sym did_change r15)
(sym is_first_render r6)
(ld is_first_render 1)
(sym GRADIENT g1)
(mkbf GRADIENT (
0x421e0f 0x19071a 0x09012f 0x040449 0x000764 0x0c2c8a 0x1852b1 0x397dd1
0x421e0f 0x19071a 0x09012f 0x040449 0x000764 0x0c2c8a 0x1852b1 0x397dd1
0x86b5e5 0xd3ecf8 0xf1e9bf 0xf8c95f 0xffaa00 0xcc8000 0x995700 0x6a3403))
; render row
@ -86,7 +91,7 @@
(ld x col)
(:col)
(call pixel x y px py scale)
(sub r0 MAXITER 1)
(sub r0 maxiter 1)
(rcmp res0 1 r0
(eq?
(mod r0 res0 16)
@ -106,7 +111,7 @@
(sc-poll)
; did_change -- did the user interact during this frame?
(ld did_change 0)
(sym pstep r2)
(sym zstep r3)
(ld pstep PAN_STEP)
@ -117,10 +122,10 @@
(fmul zstep 5.0)
))
(fadd zstep 1.0)
; scaled movement speed
(fdiv pstep mb_s)
(tst is_first_render (z?
; A <
(sc-key _ KEY_A (nz?
@ -154,7 +159,7 @@
(sc-key r0 KEY_Q (nz?
(fmul mb_s zstep)
(ld did_change 1)
(lds @cout "Zoom in\n")
(lds @cout "Zoom in\n")
))
; E -
@ -166,16 +171,16 @@
; R iter+
(sc-key r0 KEY_R (nz?
(add MAXITER 50)
(lds @cout "ITER=") (call printnum MAXITER) (ld @cout '\n')
(add maxiter 50)
(lds @cout "ITER=") (call printnum maxiter) (ld @cout '\n')
(mslp 200) ; Avoid unexpected rapid change
))
; F iter-
(sc-key r0 KEY_F (nz?
(cmp MAXITER 50)
(sub.gt MAXITER 50)
(lds @cout "ITER=") (call printnum MAXITER) (ld @cout '\n')
(cmp maxiter 50)
(sub.gt maxiter 50)
(lds @cout "ITER=") (call printnum maxiter) (ld @cout '\n')
(mslp 200) ; Avoid unexpected rapid change
))
@ -209,7 +214,7 @@
(unsym mb_col_skip)
(unsym mb_row_skip)
(cmp mb_row H
(cmp mb_row H
(lt?
; if mb_row < H
(add mb_row ROW_SKIP)
@ -220,7 +225,7 @@
(add mb_skip_index 1)
(ld is_first_render 0)
(cmp mb_skip_index MB_SKIP_TABLE_SIZE (ge?
(cmp mb_skip_index MB_SKIP_TABLE_SIZE (ge?
; if skip index is out of bounds, go back to repeating area
(ld mb_skip_index MB_SKIP_REPEAT_INDEX)
))
@ -229,7 +234,7 @@
(j :loop)
(proc pixel xi yi off_x off_y scale
(sym x0 r7)
(sym x0 r7)
(sym y0 r8)
(itf x0 xi)
(itf y0 yi)
@ -258,7 +263,7 @@
(sym iter r4)
(:iter)
(cmp iter MAXITER)
(cmp iter maxiter)
(j.eq :end)
(fmul r0 x x)
(fmul r1 y y)
@ -280,7 +285,7 @@
(:end)
(ret iter)
)
(proc printnum num
(mkbf r15)
(ld r1 num)

@ -1,18 +1,22 @@
(
(sc-init 1024 768)
(sc-opt SCREEN_AUTOBLIT 0)
(sc-opt SCREEN_UPSCALE 8)
(def W 128)
(def H 96)
(def PX_W 1024)
(def PX_H 768)
(def UPSCALE 8)
(def MAXITER 50)
(sc-init PX_W PX_H)
(sc-opt SCREEN_AUTOBLIT 0)
(sc-opt SCREEN_UPSCALE UPSCALE)
(def W (=div PX_W UPSCALE))
(def H (=div PX_H UPSCALE))
(sym gradient r9)
(sym asciigr r10)
(mkbf gradient (
0x421e0f 0x19071a 0x09012f 0x040449 0x000764 0x0c2c8a 0x1852b1 0x397dd1
0x421e0f 0x19071a 0x09012f 0x040449 0x000764 0x0c2c8a 0x1852b1 0x397dd1
0x86b5e5 0xd3ecf8 0xf1e9bf 0xf8c95f 0xffaa00 0xcc8000 0x995700 0x6a3403))
(sym x r7)
(sym y r8)
(:row)
@ -35,38 +39,38 @@
(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 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)
(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)
@ -75,18 +79,18 @@
(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)
(fmul r0 2.0)
(fadd r0 y0)
(ld y r0)
(ld y r0)
(ld x r2)
(inc iter)
(j :iter)
(:end)
(ret iter)
)

Loading…
Cancel
Save