Mandelbrot in BASIC

A bit more nostalgia, this time BBCSDL and a slightly dodgy Mandelbrot generator:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

MODE 0
ITERATIONS = 50
LIMIT = 50
DEF FN_mag(a,b) = SQR((a * a) + (b * b))
DEF FN_add_a(a,c) = a + c
DEF FN_add_b(b,d) = b +d
DEF FN_mult_a(a,b,c,d) = (a*c) - (b*d)
DEF FN_mult_b(a,b,c,d) = (a * d) + (b * c)

FOR a = -2 TO 2 STEP 0.01
FOR b = -2 TO 2 STEP 0.01
z_a = 0
z_b = 0
FOR iter = 0 TO ITERATIONS
orig_a = z_a
z_a = FN_mult_a(z_a, z_b, z_a, z_b)
z_b = FN_mult_b(orig_a, z_b, orig_a, z_b)
z_a = FN_add_a(z_a, a)
z_b = FN_add_b(z_b, b)
IF FN_mag(z_a, z_b)>LIMIT THEN EXIT FOR
NEXT
point_x = (a * 320) + 640
point_y = (b * 256) + 512
MOVE point_x, point_y
IF FN_mag(z_a,z_b)>LIMIT THEN
GCOL 0
ELSE
GCOL 1
ENDIF
DRAW point_x, point_y
NEXT
NEXT

And the output:

slightly grainy mandelbrot