; man12 ; mandelbrot 5 Dec 2012 Long Live the King ; assembly for npu2 ; modified from Nattapong's machine code ; Prabhas Chongstitvatana ; use fixed point, Q = 12 ; grid 64 x 64 ; x0 -1.5 to 1 ; y0 1.0 ; r0 x ; r1 y ; r2 iter ; r3 bound ; r4 x0 ; r5 y0 ; r16 i ; r17 j ; r23 color :main ldw @i ldr 16 ; set i ldw @y0 ldr 5 ; set y0 ldw @bound ldr 3 ; set bound :fori ldw @j ldr 17 ; set j ld 0 @100 ld 1 @101 ld 2 @102 ld 3 @103 ldr 4 ; set x0 :forj ; one row clr 0 ; x = 0 clr 1 ; y = 0 ldw @iter ldr 2 ; set iter ldr 23 ; set color ; pre: set x,y, iter->color ; use r8, r12..r15, r20..23 :onepix mul 12 0 0 ; x*x ashr 12 12 #12 ; >>12 mul 13 1 1 ; y*y ashr 13 13 #12 ; >>12 add 14 12 13 ; x*x + y*y lt 8 14 3 ; x*x + y*y < bound jz 8 @exit sub 15 12 13 ; x*x - y*y add 20 15 4 ; x*x - y*y + x0 -> x' mul 21 0 1 ; x*y ashr 21 21 #12 ; >>12 add 21 21 21 ; 2*x*y add 22 21 5 ; 2*x*y + y0 -> y' mv_t 8 0 20 ; x'->x mv_t 8 1 22 ; y'->y mv_t 8 23 2 ; iter->color dec 2 ; iter-- jnz 2 @onepix :exit sys 5 0 0 ; plot i,j,color r16,17,23 addi 4 4 #512 ; x0 += xstep dec 17 ; j-- jnz 17 @forj addi 5 5 #-128 ; y0 -= step dec 16 ; i-- jnz 16 @fori sys 4 ; stop .end ; data @100 :x0 -6144 -6016 -5888 -5760 :y0 4096 :i 64 :j 16 :iter 256 :bound 16384 .end