/
mandel.bcpl
executable file
·82 lines (73 loc) · 1.77 KB
/
mandel.bcpl
1
get "streams.d"external[Ws;Wns;MulFull;DoubleAdd;keys;Gets;]let Main() be[Ws("Hello World!*N")let v = vec 30705v = (v + 1) & -2 // Data needs to be 32-bit aligned (?)let dcb = vec 5dcb = (dcb + 1) & -2dcb!0 = 0 // End of disply listdcb!1 = 38 // 38 words per linedcb!2 = v // Data pointerdcb!3 = 404 // # lines / 2let lvdas = #420lvdas!0 = dcbfor i = 0 to 30703 do v!i = 0 // Clearlet x0 = (-2) lshift 12let x1 = 1 lshift 12let y0 = (-1) lshift 12let y1 = 1 lshift 12let xstep = (x1 - x0) / 600let ystep = (y1 - y0) / 400let x2 = vec 2let y2 = vec 2let xy = vec 2let cy = y0for ypos = 0 to 400 do // line count [ let cx = x0 for h = 0 to 37 do // horizontal word count [ for b = 0 to 15 do // horizontal bit count [ let x = cx let y = cy for n = 0 to 999 do [ MulFull(y, y, y2) MulFull(x, x, x2) if x2!0 + y2!0 ge 1024 then break // Quit if x^2 + y^2 > 4 if n eq 20 then // Last iteration. Inside set. [ let adr = (200 + ypos) * 38 + h v!adr = v!adr % (1 lshift (15-b)) break ] // Convert to single precision by dropping 12 bits. // rshift 12 = lshift top word 4 let x2sp = (x2!0 lshift 4) % (x2!1 rshift 12) let y2sp = (y2!0 lshift 4) % (y2!1 rshift 12) MulFull(x, y, xy) let xysp = (xy!0 lshift 4) % (xy!1 rshift 12) // z = z^2 + c (complex arithmetic, z = x+iy) // i.e. y = 2xy + cy // x = x^2 - y2 + cx y = xysp + xysp + cy x = x2sp - y2sp + cx ] cx = cx + xstep ] ] cy = cy + ystep ]Gets(keys)]