• Ok, haven't fully read your posts yet, which I will now, but here is what I have currently, which does work:

        var a = new Uint16Array(display2.buffer);
        var b = new Uint16Array(8);
        
        for(var i=0;i<a.length;i++)
        {
          var k = (i + 4) % 8;
          var x = a[i];
          
          // Uninterleave
          var t = (x ^ (x >> 1)) & 0x2222;  x = x ^ t ^ (t << 1); 
          t = (x ^ (x >> 2)) & 0x0C0C;  x = x ^ t ^ (t << 2); 
          t = (x ^ (x >> 4)) & 0x00F0;  x = x ^ t ^ (t << 4); 
          
          // Shift
          b[k] = ((x & 0x0F0F) << 4) | ((x & 0xF0F0) >> 4);
        }
        
        var tmp = new Uint8Array(17);
        tmp.set(new Uint8Array(b.buffer), 1);
        
        i2c.writeTo(address, tmp);
    

    the 'k' and 'shift' part of the sequence do the fixing of quadrents ('k' shifts up / down and the 'shift' code, shifts horizontally). Because I need to write one coordinates value to a different location, that is why I needed the 'b' array otherwise I'd overwrite values in 'a' I hadn't processed yet if I just tried to update 'a'.

About