43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
_runtimePath_ "../runtime"
 | 
						|
_codeRomType_ ROMv2
 | 
						|
 | 
						|
mode 2
 | 
						|
cls
 | 
						|
 | 
						|
const colours = &h0600
 | 
						|
def byte(colours) = &h01, &h02, &h03, &h07, &h0b, &h0f, &h0e, &h0d, &h0c, &h3c, &h38, &h34, &h30, &h20, &h10, &h00
 | 
						|
 | 
						|
const xmin = -90
 | 
						|
const xmax =  70
 | 
						|
const ymin = -60
 | 
						|
const ymax =  60
 | 
						|
const dx = (xmax-xmin)/160
 | 
						|
const dy = (ymax-ymin)/120
 | 
						|
const fracbits = 5
 | 
						|
 | 
						|
cy = ymin 
 | 
						|
 | 
						|
'vram starting address embedded into py
 | 
						|
for py=8 to 67
 | 
						|
    cx = xmin
 | 
						|
    for px=0 to 159
 | 
						|
        x=0 : y=x : x2=y : y2=x2
 | 
						|
        
 | 
						|
        'c=15 when Mandelbrot equation tends to infinity
 | 
						|
        for c=0 &to 14
 | 
						|
            x2 = (x*x) LSR fracbits
 | 
						|
            y2 = (y*y) LSR fracbits
 | 
						|
            if x2+y2 &&> (2**fracbits * 4) then goto &break
 | 
						|
            
 | 
						|
            ' x*y may be -ve, so use arithmetic shift right, (ASR)
 | 
						|
            y = ((x*y) ASR (fracbits-1)) + cy
 | 
						|
            x = x2 - y2 + cx
 | 
						|
        next c
 | 
						|
break:
 | 
						|
        'use symmetry around y to cheat 2 pixels at a time
 | 
						|
        poke (py LSL 8) + px, peek(colours + c)
 | 
						|
        poke ((135 - py) LSL 8) + px, peek(colours + c)
 | 
						|
        cx = cx + dx
 | 
						|
    next px
 | 
						|
    cy = cy + dy
 | 
						|
next py |