public static bool PE24FWrite(int endOfBuffer, string saveText, bool writeVerify) { if (!PE_DownloadAndConnect()) { PEGoodOnWrite = false; return(false); } PEGoodOnWrite = true; UpdateStatusWinText(saveText); if (endOfBuffer == PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem) { for (int num = PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigWords; num > 0; num--) { PICkitFunctions.DeviceBuffers.ProgramMemory[endOfBuffer - num] &= (uint)(0xFF0000 | PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigBlank[PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigWords - num]); } } byte[] array = new byte[256]; int num2 = 64; int num3 = 0; ResetStatusBar(endOfBuffer / num2); do { int num4 = 0; for (int i = 0; i < num2; i += 2) { uint num5 = PICkitFunctions.DeviceBuffers.ProgramMemory[num3++]; array[num4 + 1] = BitReverseTable[num5 & 0xFF]; num5 >>= 8; array[num4] = BitReverseTable[num5 & 0xFF]; num5 >>= 8; array[num4 + 3] = BitReverseTable[num5 & 0xFF]; num5 = PICkitFunctions.DeviceBuffers.ProgramMemory[num3++]; array[num4 + 5] = BitReverseTable[num5 & 0xFF]; num5 >>= 8; array[num4 + 4] = BitReverseTable[num5 & 0xFF]; num5 >>= 8; array[num4 + 2] = BitReverseTable[num5 & 0xFF]; num4 += 6; } for (int num6 = PICkitFunctions.DataClrAndDownload(array, 0); num6 < num4; num6 = PICkitFunctions.DataDownload(array, num6, num4)) { } int j = 0; byte[] array2 = new byte[64]; array2[j++] = 166; array2[j++] = 0; array2[j++] = 243; array2[j++] = 0; array2[j++] = 242; array2[j++] = 10; array2[j++] = 242; array2[j++] = 198; array2[j++] = 242; array2[j++] = 0; array2[j++] = 242; array2[j++] = BitReverseTable[(num3 - 64 >> 15) & 0xFF]; array2[j++] = 242; array2[j++] = BitReverseTable[(num3 - 64 >> 7) & 0xFF]; array2[j++] = 242; array2[j++] = BitReverseTable[(num3 - 64 << 1) & 0xFF]; array2[j++] = 241; array2[j++] = 241; array2[j++] = 241; array2[j++] = 233; array2[j++] = 3; array2[j++] = 63; array2[j++] = 243; array2[j++] = 2; array2[j++] = 231; array2[j++] = 118; array2[j++] = 240; array2[j++] = 240; array2[j++] = 240; array2[j++] = 240; array2[j++] = 170; array2[1] = (byte)(j - 3); for (; j < 64; j++) { array2[j] = 173; } PICkitFunctions.writeUSB(array2); if (!PICkitFunctions.readUSB()) { UpdateStatusWinText("Programming Executive Error during Write."); PICkitFunctions.RunScript(1, 1); restoreICSPSpeed(); return(false); } if (PICkitFunctions.Usb_read_array[1] != 4) { UpdateStatusWinText("Programming Executive Error during Write."); PICkitFunctions.RunScript(1, 1); restoreICSPSpeed(); return(false); } if (BitReverseTable[PICkitFunctions.Usb_read_array[2]] != 21 || PICkitFunctions.Usb_read_array[3] != 0 || PICkitFunctions.Usb_read_array[4] != 0 || BitReverseTable[PICkitFunctions.Usb_read_array[5]] != 2) { UpdateStatusWinText("Programming Executive Error during Write."); PICkitFunctions.RunScript(1, 1); restoreICSPSpeed(); return(false); } StepStatusBar(); }while (num3 < endOfBuffer); if (!writeVerify) { PICkitFunctions.RunScript(1, 1); restoreICSPSpeed(); } return(true); }