Example #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            byte[] array = new byte[128];
            base.Update();
            PICkitFunctions.RunScript(0, 1);
            if (PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].EERdPrepScript > 0)
            {
                if (PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].EEMemHexBytes == 4)
                {
                    PICkitFunctions.DownloadAddress3((int)(PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].EEAddr / 2u));
                }
                else
                {
                    PICkitFunctions.DownloadAddress3(0);
                }
                PICkitFunctions.RunScript(8, 1);
            }
            int eEMemBytesPerWord = (int)PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].EEMemBytesPerWord;
            int num  = 128 / ((int)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].EERdLocations * eEMemBytesPerWord);
            int num2 = num * (int)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].EERdLocations;
            int num3 = 0;

            do
            {
                PICkitFunctions.RunScriptUploadNoLen(9, num);
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 0L, 64L);
                PICkitFunctions.UploadDataNoLen();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 64L, 64L);
                int num4 = 0;
                for (int i = 0; i < num2; i++)
                {
                    int  num5 = 0;
                    uint num6 = (uint)array[num4 + num5++];
                    if (num5 < eEMemBytesPerWord)
                    {
                        num6 |= (uint)((uint)array[num4 + num5++] << 8);
                    }
                    num4 += num5;
                    if (PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].ProgMemShift > 0)
                    {
                        //num6 = (num6 >> 1 & eEBlank);
                    }
                    PICkitFunctions.DeviceBuffers.EEPromMemory[num3++] = num6;
                    if (num3 >= (int)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].EEMem)
                    {
                        break;
                    }
                }
            }while (num3 < (int)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].EEMem);
            PICkitFunctions.RunScript(1, 1);

            foreach (var a in array)
            {
                this.textBox1.AppendText(a.ToString());
                this.textBox1.AppendText(" ");
            }
        }
        public void ReadTestMemory()
        {
            byte[] array = new byte[128];
            PICkitFunctions.RunScript(0, 1);
            int bytesPerLocation = PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BytesPerLocation;
            int num  = 128 / (PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].TestMemoryRdWords * bytesPerLocation);
            int num2 = num * PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].TestMemoryRdWords;
            int num3 = 0;

            prepTestMem();
            do
            {
                PICkitFunctions.RunScriptUploadNoLen(27, num);
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 0L, 64L);
                PICkitFunctions.UploadDataNoLen();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 64L, 64L);
                int num4 = 0;
                for (int i = 0; i < num2; i++)
                {
                    int  num5 = 0;
                    uint num6 = array[num4 + num5++];
                    if (num5 < bytesPerLocation)
                    {
                        num6 = (uint)((int)num6 | (array[num4 + num5++] << 8));
                    }
                    if (num5 < bytesPerLocation)
                    {
                        num6 = (uint)((int)num6 | (array[num4 + num5++] << 16));
                    }
                    if (num5 < bytesPerLocation)
                    {
                        num6 = (uint)((int)num6 | (array[num4 + num5++] << 24));
                    }
                    num4 += num5;
                    if (PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].ProgMemShift > 0)
                    {
                        num6 = ((num6 >> 1) & PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BlankValue);
                    }
                    TestMemory[num3++] = num6;
                }
            }while (num3 < FormPICkit2.TestMemoryWords);
            PICkitFunctions.RunScript(1, 1);
        }
        public static bool PE_Connect()
        {
            PICkitFunctions.RunScript(0, 1);
            if (PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgMemWrPrepScript != 0)
            {
                PICkitFunctions.DownloadAddress3(8389568);
                PICkitFunctions.RunScript(5, 1);
            }
            byte[] array = new byte[128];
            PICkitFunctions.RunScriptUploadNoLen(3, 1);
            Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 0L, 64L);
            PICkitFunctions.UploadDataNoLen();
            Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 64L, 64L);
            int num = array[72];

            num |= array[73] << 8;
            if (num != 155)
            {
                PICkitFunctions.RunScript(1, 1);
                return(false);
            }
            num  = array[75];
            num |= array[76] << 8;
            if (num != 38)
            {
                PICkitFunctions.RunScript(1, 1);
                return(false);
            }
            PICkitFunctions.RunScript(1, 1);
            int i = 0;

            byte[] array2 = new byte[64];
            array2[i++] = 166;
            array2[i++] = 0;
            array2[i++] = 250;
            array2[i++] = 247;
            array2[i++] = 249;
            array2[i++] = 245;
            array2[i++] = 243;
            array2[i++] = 0;
            array2[i++] = 232;
            array2[i++] = 20;
            array2[i++] = 246;
            array2[i++] = 251;
            array2[i++] = 231;
            array2[i++] = 23;
            array2[i++] = 250;
            array2[i++] = 247;
            array2[i++] = 231;
            array2[i++] = 47;
            array2[i++] = 242;
            array2[i++] = 178;
            array2[i++] = 242;
            array2[i++] = 194;
            array2[i++] = 242;
            array2[i++] = 18;
            array2[i++] = 242;
            array2[i++] = 10;
            array2[i++] = 246;
            array2[i++] = 251;
            array2[i++] = 232;
            array2[i++] = 6;
            array2[1]   = (byte)(i - 2);
            for (; i < 64; i++)
            {
                array2[i] = 173;
            }
            PICkitFunctions.writeUSB(array2);
            i           = 0;
            array2[i++] = 166;
            array2[i++] = 12;
            array2[i++] = 242;
            array2[i++] = 0;
            array2[i++] = 242;
            array2[i++] = 128;
            array2[i++] = 243;
            array2[i++] = 2;
            array2[i++] = 231;
            array2[i++] = 5;
            array2[i++] = 240;
            array2[i++] = 240;
            array2[i++] = 240;
            array2[i++] = 240;
            array2[i++] = 170;
            for (; i < 64; i++)
            {
                array2[i] = 173;
            }
            PICkitFunctions.writeUSB(array2);
            if (!PICkitFunctions.readUSB())
            {
                PICkitFunctions.RunScript(1, 1);
                return(false);
            }
            if (PICkitFunctions.Usb_read_array[1] != 4)
            {
                PICkitFunctions.RunScript(1, 1);
                return(false);
            }
            if (PICkitFunctions.Usb_read_array[2] != 8 || PICkitFunctions.Usb_read_array[3] != 0 || PICkitFunctions.Usb_read_array[4] != 0 || PICkitFunctions.Usb_read_array[5] != 64)
            {
                PICkitFunctions.RunScript(1, 1);
                return(false);
            }
            i           = 0;
            array2[i++] = 166;
            array2[i++] = 14;
            array2[i++] = 243;
            array2[i++] = 0;
            array2[i++] = 242;
            array2[i++] = 13;
            array2[i++] = 242;
            array2[i++] = 128;
            array2[i++] = 243;
            array2[i++] = 2;
            array2[i++] = 231;
            array2[i++] = 5;
            array2[i++] = 240;
            array2[i++] = 240;
            array2[i++] = 240;
            array2[i++] = 240;
            array2[i++] = 170;
            for (; i < 64; i++)
            {
                array2[i] = 173;
            }
            PICkitFunctions.writeUSB(array2);
            if (!PICkitFunctions.readUSB())
            {
                PICkitFunctions.RunScript(1, 1);
                return(false);
            }
            if (PICkitFunctions.Usb_read_array[1] != 4)
            {
                PICkitFunctions.RunScript(1, 1);
                return(false);
            }
            if (PICkitFunctions.Usb_read_array[2] != 216 || BitReverseTable[PICkitFunctions.Usb_read_array[3]] != 38 || PICkitFunctions.Usb_read_array[4] != 0 || PICkitFunctions.Usb_read_array[5] != 64)
            {
                PICkitFunctions.RunScript(1, 1);
                return(false);
            }
            return(true);
        }
        public static bool DownloadPE()
        {
            PICkitFunctions.RunScript(0, 1);
            PICkitFunctions.ExecuteScript(PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].DebugWriteVectorScript);
            if (PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgMemWrPrepScript != 0)
            {
                PICkitFunctions.DownloadAddress3(8388608);
                PICkitFunctions.RunScript(6, 1);
            }
            int num  = 0;
            int num2 = 0;

            byte[] array = new byte[64];
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    num2 = 0;
                    if (j == 0)
                    {
                        array[num2++] = 167;
                    }
                    array[num2++] = 168;
                    array[num2++] = 48;
                    for (int k = 0; k < 16; k++)
                    {
                        array[num2++] = (byte)(PIC24_PE_Code[num] & 0xFF);
                        array[num2++] = (byte)((PIC24_PE_Code[num] >> 8) & 0xFF);
                        array[num2++] = (byte)((PIC24_PE_Code[num] >> 16) & 0xFF);
                        num++;
                    }
                    for (; num2 < 64; num2++)
                    {
                        array[num2] = 173;
                    }
                    PICkitFunctions.writeUSB(array);
                }
                num2          = 0;
                array[num2++] = 166;
                array[num2++] = 0;
                array[num2++] = 212;
                array[num2++] = 0;
                array[num2++] = 211;
                array[num2++] = 1;
                array[num2++] = 212;
                array[num2++] = 3;
                array[num2++] = 211;
                array[num2++] = 2;
                array[num2++] = 217;
                array[num2++] = 128;
                array[num2++] = 11;
                array[num2++] = 187;
                array[num2++] = 216;
                array[num2++] = 216;
                array[num2++] = 217;
                array[num2++] = 129;
                array[num2++] = 155;
                array[num2++] = 187;
                array[num2++] = 216;
                array[num2++] = 216;
                array[num2++] = 217;
                array[num2++] = 130;
                array[num2++] = 139;
                array[num2++] = 187;
                array[num2++] = 216;
                array[num2++] = 216;
                array[num2++] = 217;
                array[num2++] = 131;
                array[num2++] = 27;
                array[num2++] = 187;
                array[num2++] = 216;
                array[num2++] = 216;
                array[num2++] = 233;
                array[num2++] = 32;
                array[num2++] = 31;
                array[num2++] = 217;
                array[num2++] = 97;
                array[num2++] = 231;
                array[num2++] = 168;
                array[num2++] = 216;
                array[num2++] = 217;
                array[num2++] = 0;
                array[num2++] = 2;
                array[num2++] = 4;
                array[num2++] = 216;
                array[num2++] = 233;
                array[num2++] = 1;
                array[num2++] = 3;
                array[num2++] = 231;
                array[num2++] = 72;
                array[1]      = (byte)(num2 - 2);
                for (; num2 < 64; num2++)
                {
                    array[num2] = 173;
                }
                PICkitFunctions.writeUSB(array);
            }
            if (PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgMemWrPrepScript != 0)
            {
                PICkitFunctions.DownloadAddress3(8388608);
                PICkitFunctions.RunScript(5, 1);
            }
            byte[] array2 = new byte[128];
            num = 0;
            for (int l = 0; l < 16; l++)
            {
                PICkitFunctions.RunScriptUploadNoLen(3, 1);
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array2, 0L, 64L);
                PICkitFunctions.UploadDataNoLen();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array2, 64L, 64L);
                int num3 = 0;
                for (int m = 0; m < 32; m++)
                {
                    uint num4 = array2[num3++];
                    num4 = (uint)((int)num4 | (array2[num3++] << 8));
                    num4 = (uint)((int)num4 | (array2[num3++] << 16));
                    if (num4 != PIC24_PE_Code[num++])
                    {
                        PICkitFunctions.RunScript(1, 1);
                        return(false);
                    }
                }
            }
            PICkitFunctions.RunScript(1, 1);
            return(true);
        }
        public static bool PE24FVerify(string saveText, bool writeVerify, int lastLocation)
        {
            if ((!writeVerify || !PEGoodOnWrite) && !PE_DownloadAndConnect())
            {
                return(false);
            }
            PEGoodOnWrite = false;
            if (!writeVerify)
            {
                lastLocation = (int)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem;
            }
            UpdateStatusWinText(saveText);
            byte[] array = new byte[128];
            _ = PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BytesPerLocation;
            int num  = 32;
            int num2 = 0;
            int num3 = 0;
            int num4 = 0;

            byte[] array2 = new byte[64];
            ResetStatusBar(lastLocation / num);
            do
            {
                num4           = 0;
                array2[num4++] = 166;
                array2[num4++] = 0;
                array2[num4++] = 243;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = 4;
                array2[num4++] = 242;
                array2[num4++] = 32;
                array2[num4++] = 242;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[num];
                array2[num4++] = 242;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 >> 15) & 0xFF];
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 >> 7) & 0xFF];
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 << 1) & 0xFF];
                array2[num4++] = 243;
                array2[num4++] = 2;
                array2[num4++] = 231;
                array2[num4++] = 5;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 240;
                array2[num4++] = 240;
                array2[num4++] = 240;
                array2[num4++] = 233;
                array2[num4++] = 3;
                array2[num4++] = 31;
                array2[num4++] = 172;
                array2[num4++] = 172;
                array2[1]      = (byte)(num4 - 4);
                for (; num4 < 64; num4++)
                {
                    array2[num4] = 173;
                }
                PICkitFunctions.writeUSB(array2);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 0L, 64L);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 64L, 64L);
                num3 = 0;
                for (int i = 0; i < num; i += 2)
                {
                    uint num5 = (uint)(BitReverseTable[array[num3++]] << 8);
                    num5 |= BitReverseTable[array[num3++]];
                    uint num6 = (uint)(BitReverseTable[array[num3++]] << 16);
                    num5  = (uint)((int)num5 | (BitReverseTable[array[num3++]] << 16));
                    num6  = (uint)((int)num6 | (BitReverseTable[array[num3++]] << 8));
                    num6 |= BitReverseTable[array[num3++]];
                    if (PICkitFunctions.DeviceBuffers.ProgramMemory[num2++] != num5)
                    {
                        string text = "";
                        text  = (writeVerify ? "Programming failed at Program Memory address\n" : "Verification of Program Memory failed at address\n");
                        text += $"0x{--num2 * PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].AddressIncrement:X6}";
                        UpdateStatusWinText(text);
                        PICkitFunctions.RunScript(1, 1);
                        restoreICSPSpeed();
                        return(false);
                    }
                    if (PICkitFunctions.DeviceBuffers.ProgramMemory[num2++] != num6)
                    {
                        string text2 = "";
                        text2  = (writeVerify ? "Programming failed at Program Memory address\n" : "Verification of Program Memory failed at address\n");
                        text2 += $"0x{--num2 * PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].AddressIncrement:X6}";
                        UpdateStatusWinText(text2);
                        PICkitFunctions.RunScript(1, 1);
                        restoreICSPSpeed();
                        return(false);
                    }
                    if (num2 >= lastLocation)
                    {
                        break;
                    }
                }
                StepStatusBar();
            }while (num2 < lastLocation);
            PICkitFunctions.RunScript(1, 1);
            restoreICSPSpeed();
            return(true);
        }
        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);
        }
        public static bool PE24FRead(string saveText)
        {
            if (!PE_DownloadAndConnect())
            {
                return(false);
            }
            UpdateStatusWinText(saveText);
            byte[] array = new byte[128];
            _ = PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BytesPerLocation;
            int num  = 32;
            int num2 = 0;
            int num3 = 0;
            int num4 = 0;

            byte[] array2 = new byte[64];
            ResetStatusBar((int)((long)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem / (long)num));
            do
            {
                num4           = 0;
                array2[num4++] = 166;
                array2[num4++] = 0;
                array2[num4++] = 243;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = 4;
                array2[num4++] = 242;
                array2[num4++] = 32;
                array2[num4++] = 242;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[num];
                array2[num4++] = 242;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 >> 15) & 0xFF];
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 >> 7) & 0xFF];
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 << 1) & 0xFF];
                array2[num4++] = 243;
                array2[num4++] = 2;
                array2[num4++] = 231;
                array2[num4++] = 5;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 240;
                array2[num4++] = 240;
                array2[num4++] = 240;
                array2[num4++] = 233;
                array2[num4++] = 3;
                array2[num4++] = 31;
                array2[num4++] = 172;
                array2[num4++] = 172;
                array2[1]      = (byte)(num4 - 4);
                for (; num4 < 64; num4++)
                {
                    array2[num4] = 173;
                }
                PICkitFunctions.writeUSB(array2);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 0L, 64L);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 64L, 64L);
                num3 = 0;
                for (int i = 0; i < num; i += 2)
                {
                    uint num5 = (uint)(BitReverseTable[array[num3++]] << 8);
                    num5 |= BitReverseTable[array[num3++]];
                    uint num6 = (uint)(BitReverseTable[array[num3++]] << 16);
                    num5  = (uint)((int)num5 | (BitReverseTable[array[num3++]] << 16));
                    num6  = (uint)((int)num6 | (BitReverseTable[array[num3++]] << 8));
                    num6 |= BitReverseTable[array[num3++]];
                    PICkitFunctions.DeviceBuffers.ProgramMemory[num2++] = num5;
                    PICkitFunctions.DeviceBuffers.ProgramMemory[num2++] = num6;
                    if (num2 >= PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem)
                    {
                        break;
                    }
                }
                StepStatusBar();
            }while (num2 < PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem);
            PICkitFunctions.RunScript(1, 1);
            restoreICSPSpeed();
            return(true);
        }
        public static bool PE24FBlankCheck(string saveText)
        {
            if (!PE_DownloadAndConnect())
            {
                return(false);
            }
            UpdateStatusWinText(saveText);
            int num = (int)(PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem - PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigWords);

            byte[] array = new byte[128];
            _ = PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BytesPerLocation;
            int num2 = 32;
            int num3 = 0;
            int num4 = 0;
            int num5 = 0;

            byte[] array2 = new byte[64];
            ResetStatusBar((int)((long)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem / (long)num2));
            uint num6 = PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BlankValue;

            do
            {
                num5           = 0;
                array2[num5++] = 166;
                array2[num5++] = 0;
                array2[num5++] = 243;
                array2[num5++] = 0;
                array2[num5++] = 242;
                array2[num5++] = 4;
                array2[num5++] = 242;
                array2[num5++] = 32;
                array2[num5++] = 242;
                array2[num5++] = 0;
                array2[num5++] = 242;
                array2[num5++] = BitReverseTable[num2];
                array2[num5++] = 242;
                array2[num5++] = 0;
                array2[num5++] = 242;
                array2[num5++] = BitReverseTable[(num3 >> 15) & 0xFF];
                array2[num5++] = 242;
                array2[num5++] = BitReverseTable[(num3 >> 7) & 0xFF];
                array2[num5++] = 242;
                array2[num5++] = BitReverseTable[(num3 << 1) & 0xFF];
                array2[num5++] = 243;
                array2[num5++] = 2;
                array2[num5++] = 231;
                array2[num5++] = 5;
                array2[num5++] = 239;
                array2[num5++] = 239;
                array2[num5++] = 239;
                array2[num5++] = 239;
                array2[num5++] = 240;
                array2[num5++] = 240;
                array2[num5++] = 240;
                array2[num5++] = 233;
                array2[num5++] = 3;
                array2[num5++] = 31;
                array2[num5++] = 172;
                array2[num5++] = 172;
                array2[1]      = (byte)(num5 - 4);
                for (; num5 < 64; num5++)
                {
                    array2[num5] = 173;
                }
                PICkitFunctions.writeUSB(array2);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 0L, 64L);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 64L, 64L);
                num4 = 0;
                for (int i = 0; i < num2; i += 2)
                {
                    uint num7 = (uint)(BitReverseTable[array[num4++]] << 8);
                    num7 |= BitReverseTable[array[num4++]];
                    uint num8 = (uint)(BitReverseTable[array[num4++]] << 16);
                    num7  = (uint)((int)num7 | (BitReverseTable[array[num4++]] << 16));
                    num8  = (uint)((int)num8 | (BitReverseTable[array[num4++]] << 8));
                    num8 |= BitReverseTable[array[num4++]];
                    if (num3 >= num)
                    {
                        num6 = (uint)(0xFF0000 | PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigBlank[num3 - num]);
                    }
                    if (num6 != num7)
                    {
                        string str = "Program Memory is not blank starting at address\n";
                        str += $"0x{num3 * PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].AddressIncrement:X6}";
                        UpdateStatusWinText(str);
                        PICkitFunctions.RunScript(1, 1);
                        restoreICSPSpeed();
                        return(false);
                    }
                    num3++;
                    if (num3 >= num)
                    {
                        num6 = (uint)(0xFF0000 | PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigBlank[num3 - num]);
                    }
                    if (num6 != num8)
                    {
                        string str2 = "Program Memory is not blank starting at address\n";
                        str2 += $"0x{num3 * PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].AddressIncrement:X6}";
                        UpdateStatusWinText(str2);
                        PICkitFunctions.RunScript(1, 1);
                        restoreICSPSpeed();
                        return(false);
                    }
                    num3++;
                    if (num3 >= PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem)
                    {
                        break;
                    }
                }
                StepStatusBar();
            }while (num3 < PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem);
            PICkitFunctions.RunScript(1, 1);
            restoreICSPSpeed();
            return(true);
        }