+ while(running) {
+ cleardata();
+ increaseled();
+ switch(recvbyte()) {
+ case 0x13: //receive
+ Putch4(0x37);
+ increaseled();
+
+ address = recvdword();
+ increaseled();
+
+ size = recvword();
+ increaseled();
+
+ Putch4(0x04); //Received Metadata.
+ PDR14 = 0xff;
+ for(i=0; i<size; i++) { /* get data */
+ increaseled();
+ data[i] = recvbyte();
+ }
+ Putch4(0x08); //Received Data.
+
+ PDR14 = 0xff;
+ for(i=0; i<size; i+=4) { /* erase */
+ if(FLASH_SectorErase(address + i) != 1) {
+ panic();
+ }
+ increaseled();
+ }
+
+ Putch4(0x18); //Erasing done.
+ for(i=0; i<size; i++) { /* flash the data */
+ increaseled();
+ if(FLASH_WriteHalfWord(address + (2*i), data[i]) != 1) {
+ panic();
+ }
+ }
+ Putch4(0x28); //Flashing done.
+ break;
+
+ case 0x99: /* exit */
+ running = 0;
+ break;
+ default: break;
+ }
+ }
+
+ PDR14 = 0x55; //signal that we finished now!
+ halt();
+
+#if 0