|
|
|
@ -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) |
|
|
|
|