_packet[9500] is bytes array struct with overloads ( WARNING!!! 8kbit eeprom wont fit full program! )
_packet.add() is a function that increment array index and set value, also you may reduce size by detecting end of Program RAM and Parameter RAM, i already do that, but code is not with me right now.
_packet.clear is memset( _packet,0,sizeof(_packet));


typedef union uint16_u {
  uint16_t value;
  struct {
    uint8_t lsb;
    uint8_t msb;
  };
};

uint16_u addr;
_packet.clear();
_packet.index = 0;

// Register 081C
addr.value = 0x081c;
_packet.add(1);
_packet.add(0);
_packet.add(5);
_packet.add(0);
_packet.add(addr.msb);
_packet.add(addr.lsb);
_packet.add(0x0);
_packet.add(0x18);

// DSP CMD 0x03 ( DSP NOOP ), its a delay!
for (uint8_t i = 1; i < 23; i++) { _packet.add(0x3); }

// Registers 0x0800 to 0x0808 ( Clear all )
_packet.add(1);
_packet.add(0);
_packet.add(37);
_packet.add(0);
_packet.add(0x8);
_packet.add(0x0);
for (uint16_t i = 0x0800; i < 0x0807; i++) {
_packet.add(0);
_packet.add(0);
_packet.add(0);
_packet.add(0);
}
_packet.add(0);
_packet.add(0);

// Parameter RAM 0x0000 to 0x03FF
addr.value = 0x0;
_packet.add(1);
_packet.add(0); // size
_packet.add(0); // size
_packet.add(0);
_packet.add(addr.msb);
_packet.add(addr.lsb);
for (uint16_t i = 0x0; i < 0x03ff; i++) {
_packet.add(0);
_packet.add(0);
_packet.add(0);
_packet.add(0);
}

// Program RAM 0x0400 to 0x07FF
addr.value = 0x0400;
_packet.add(1);
_packet.add(0); // size
_packet.add(0); // size
_packet.add(0);
_packet.add(addr.msb);
_packet.add(addr.lsb);
for (uint16_t i = 0x0400; i < 0x07ff; i++) {
_packet.add(0);
_packet.add(0);
_packet.add(0);
_packet.add(0);
_packet.add(0);
}

// Register 081C
addr.value = 0x081C;
_packet.add(1);
_packet.add(0);
_packet.add(5);
_packet.add(0);
_packet.add(addr.msb);
_packet.add(addr.lsb);
_packet.add(0x0);
_packet.add(0x1C);

// Controle Register 0x081D
addr.value = 0x081D;
_packet.add(1);
_packet.add(0);
_packet.add(0); // Dynamic
_packet.add(0);
_packet.add(addr.msb); // Dynamic
_packet.add(addr.lsb); // Dymamic
_packet.add(0);

// Controle Register 0x081E
addr.value = 0x081E;
_packet.add(1);
_packet.add(0);
_packet.add(0); // Dynamic
_packet.add(0);
_packet.add(addr.msb); // Dynamic
_packet.add(addr.lsb); // Dymamic
_packet.add(0);
_packet.add(0);

addr.value = 0x081F;
_packet.add(1);
_packet.add(0);
_packet.add(0); // Dynamic
_packet.add(0);
_packet.add(addr.msb); // Dynamic
_packet.add(addr.lsb); // Dymamic
_packet.add(0);

// Controle Register 0x0820 to 0x0821
for (uint16_t i = 0x0820; i < 0x0821; i++) {
addr.value = i;
_packet.add(1);
_packet.add(0);
_packet.add(0); // Dynamic
_packet.add(0);
_packet.add(addr.msb); // Dynamic
_packet.add(addr.lsb); // Dymamic
_packet.add(0);
_packet.add(0);
_packet.add(0);
}

// Controle Register 0x0823 to 0x0827
for (uint16_t i = 0x0823; i < 0x0827; i++) {
addr.value = i;
_packet.add(1);
_packet.add(0);
_packet.add(0); // Dynamic
_packet.add(0);
_packet.add(addr.msb); // Dynamic
_packet.add(addr.lsb); // Dymamic
_packet.add(0);
_packet.add(0);
}

// Register 081C
addr.value = 0x081C;
_packet.add(1);
_packet.add(0);
_packet.add(5);
_packet.add(0);
_packet.add(addr.msb);
_packet.add(addr.lsb);
_packet.add(0x0);
_packet.add(0x1C);

// End
_packet.add(0x6);

_packet.saveToFile("eeprom.bin");