 static void update_display(void)
 {
   int i;
+  
+  uint8_t buf[2][8];
+  int x,y,d;
+  memset(buf, 0, sizeof(buf));
+  for (y = 0; y < 8; y++) {
+    for (d = 0; d < 2; d++) {
+      for (x = 0; x < 8; x++) {
+        int shift = 8 + (d * 8) + x;
+        boolean bit = (frame[y] & (1L << shift)) != 0;
+        if (bit) {
+          buf[1 - d][7 - x] |= 1L << y;
+        }
+      }
+    }
+  }
+  
+  // send to display
   for (i = 0; i < 8; i++) {
-    lc.setRow(0, i, frame[i] >> 24);
+    lc.setRow(0, i, buf[0][i]);
+    lc.setRow(1, i, buf[1][i]);
   }
 }
 

    static int phase = 0;
    static const uint8_t radio[8] = {0x3C, 0x5A, 0x99, 0x99, 0xFF, 0xE7, 0x42, 0x3C};
    static const uint8_t mask[8] =  {0x7C, 0xFE, 0x92, 0xFE, 0x7C, 0x38, 0x7C, 0x7C};
    static const uint8_t skull[8] = {0x7C, 0xFE, 0xFE, 0x92, 0x92, 0x6C, 0x38, 0x38};
    
    phase = (phase + 1) % 64;
    if (phase < 32) {

   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  lc.shutdown(1,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,15);
  lc.setIntensity(1,15);
  /* and clear the display */
  lc.clearDisplay(0);
  lc.clearDisplay(1);
  
  /* NRF init */
    Serial.begin(115200);
    rf.begin();
    rf.setRetries(15, 15);
    rf.enableDynamicPayloads();
    rf.openReadingPipe(0, address);
    rf.startListening();  
}

// reverses bit order in a byte
