   i2c_stop();
 }
 
-static void load_flash()
-{
-  GD.begin(0);
-
-  if (GD3) {
-    uint8_t stage[128];
-    memcpy(stage, GD3_43__init, 128);
+static void load_flash(uint8_t *config)
+{
+    byte b[128];
 
     i2c_begin();
-
-    GD.Clear();
-    GD.cmd_text(240, 100, 30, OPT_CENTERX, "please tap on the dot");
-    GD.self_calibrate();
-    GD.finish();
-
-    for (int i = 0; i < 24; i++)
-      stage[CALIBRATION_OFFSET + i] = GD.rd(REG_TOUCH_TRANSFORM_A + i);
-
-    ram_write(stage);
-    byte b[128];
+    ram_write(config);
     ram_get(b);
-    Serial.print("compare ");
-    int diff = memcmp(stage, b, 128);
+    int diff = memcmp(config, b, 128);
     if (diff != 0) {
+      Serial.println("Flash fault");
       GD.Clear();
-      GD.cmd_text(240, 100, 30, OPT_CENTERX, "FLASH fault");
+      GD.cmd_text(GD.w / 2, GD.h / 2, 30, OPT_CENTERX, "Flash fault");
       GD.swap();
       for (;;);
     }
-    Serial.println(diff);
+    Serial.println("Flash verified OK");
+    GD.begin(0);
+}
+
+static void setup_flash()
+{
+  GD.begin(0);
+
+  if (GD3) {
+    uint8_t stage[128];
+    memcpy(stage, GD3_7__init, 128);
+
+    load_flash(stage);
+
+    // GD.self_calibrate();
+    GD.finish();
+
+    for (int i = 0; i < 24; i++)
+      stage[CALIBRATION_OFFSET + i] = GD.rd(REG_TOUCH_TRANSFORM_A + i);
+
+    load_flash(stage);
   }
 }
 

void setup()
{
  Serial.begin(UART_SPEED);
  Serial.println("---- GAMEDUINO 2 SELFTEST ----");
}

static void ramp(int y, uint32_t color)

    GD.ColorRGB(0x808000);
  else
    GD.ColorRGB(pass ? 0x40ff40 : 0xff4040);
  GD.cmd_text(GD.w / 2, 180, 31, OPT_CENTER, message);

  GD.ColorRGB(0xffffff);
  GD.Begin(LINES);
