Variables x,y,z, t,u,v are set as follows;
        x: ranges from 0...1 horizontally across the image
        y: ranges from 0...1 vertically down the image
        z: distance from center of image
        t: time in seconds 
        u: ranges from -1...+1 horizontally across the image
        v: ranges from -1...+1 vertically down the image

        Opcodes available:

        'x': push current x value  
        'y': push current y value
        't': push current timer value
        other variables available are 'u', 'v', 'z'
        'X','Y','U','V','Z' sets the variables with to top stack entry

        '*':  (a * b),
        '/':  (a / b),
        '-':  (a - b),
        '+':  (a + b),
        'p':  perlin( a, b),
        'w':  wrapPerlin(a, b, c),
        'W':  wrapPerlin(a, b, c, d), 
        'e':  smoothStep(a), 
        'E':  smoothStep(a,b,c), 
        's':  sin(a),
        'c':  cos(a),
        'q':  sqrt(a),
        'l':  log(a),
        '~':  abs(a),
        '#':  round(a),
        '$':  Math.floor(a),
        'C':  clamp(a),
      
        '<': min(a, b),
        '>': max(a, b),
        '^':  pow(a, b),
      
        'a': atan2(a, b),
        'r': random(),  
        
        '%': positiveMod(a, b),
        '!': (1 - a),
        '?': (a <= 0 ? 0 : 1)
      
        'o':   a xor b scaled by c;   ((a*c) xor (b*c))/c

        'P':  push Pi
        'd':  duplicate the top stack entry
        ':':  swap the top two stack entries
        ';':  swap the top and third stack entries