 
 byte checksum; // Global is simplest
 
-byte blinkyGt1[] = {
+const byte blinkyGt1[] PROGMEM = {
   0x7f, 0x00, 0x0b, // Segment 7f00: 11 bytes
   0x11, 0x50, 0x44, // 7f00 LDWI $4450  ; Load address of center of screen
   0x2b, 0x30,       // 7f03 STW  'p'    ; Store in variable 'p' (at $0030)

  interrupts(); // So delay() can work again
}

void resetChecksum(byte n, word address, byte *data)
{
  // Send one frame with false checksum to force
  // a checksum resync at the receiver
  checksum = 0;
  sendFrame(-1, n, address, data);

  // Setup checksum properly
  checksum = 'g';
}

void sendFrame(byte firstByte, byte len, word address, byte message[])
{
  // Send one frame of data
  //


  sendFirst(firstByte, 8);     // Protocol byte
  checksum += firstByte << 6;  // Keep Loader.gcl dumb
  sendBits(page_len, 6);       // Length 0, 1..60
  sendBits(address&255, 8);    // Low address bits
  sendBits(address>>8, 8);     // High address bits
  for (byte i=0; i<N; i++)     // Payload bytes
    sendBits(i < data_len ? message[i] : 0, 8);
  byte lastByte = -checksum;   // Checksum must come out as 0
  sendBits(lastByte, 8);
  checksum = lastByte;         // Concatenate checksums
