
;  man5

; mandelbrot     5 Dec 2012   Long Live the King
;       assembly for npu2
;	modified from Nattapong's machine code
;	Prabhas Chongstitvatana

;  use fixed point, Q = 8
;  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 #8	; >>8
mul 13 1 1 	; y*y
ashr 13 13 #8	; >>8
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 #8	; >>8
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 #32	; x0 += xstep
dec 17		; j--
jnz 17 @forj

addi 5 5 #-8	; y0 -= step
dec 16		; i--
jnz 16 @fori

sys 4 		; stop
.end

; data

@100 
; -384 -352 -320 -288
:x0 -384 -376 -368 -360	
:y0 256	
:i 64
:j 16
:iter 256
:bound 1024


.end




