private void button25_Click(object sender, EventArgs e)
        {
            byte[]     bytes = FDDProcessing.HexToBytes(tbBIN.Text);
            ushort     datacrcchk;
            Crc16Ccitt crc = new Crc16Ccitt(InitialCrcValue.NonZero3);

            datacrcchk = crc.ComputeGoodChecksum(bytes);
            tbTest.AppendText("CRC: " + datacrcchk.ToString("X4") + "\r\n");
        }
        private void AsciiCrcCheckBtn_Click(object sender, EventArgs e)
        {
            byte[] bytebuf = Encoding.ASCII.GetBytes(tbBIN.Text);

            ushort     datacrcchk;
            Crc16Ccitt crc = new Crc16Ccitt(InitialCrcValue.NonZero1);

            datacrcchk = crc.ComputeChecksum(bytebuf);
            tbTest.AppendText("CRC: " + datacrcchk.ToString("X4") + "\r\n");
        }
        public void CopySectorToBlue()
        {
            int i;
            int indexS1; //indexS2;
            int offset = 4;
            int diskoffset;
            //int x, y;
            //int bsbyte;
            int track, sectornr;
            int datacrc;
            //int processing.sectorspertrack;
            int threadid;

            switch ((int)processing.diskformat)
            {
            case 0:
                return;

            case 1:
                offset = 0;
                break;

            case 2:
                offset = 0;
                break;

            case 3:
                offset = 4;
                break;

            case 4:
                offset = 4;
                break;

            case 5:
                offset = 4;
                break;
            }

            if (BadSectorListBox.SelectedIndices.Count == 1)
            {
                indexS1  = ((badsectorkeyval)BadSectorListBox.Items[BadSectorListBox.SelectedIndices[0]]).id;
                threadid = ((badsectorkeyval)BadSectorListBox.Items[BadSectorListBox.SelectedIndices[0]]).threadid;

                // Copy sector from BadSectors to disk array
                if (BSBlueSectormapRadio.Checked && BSRedFromlistRadio.Checked)
                {
                    textBoxReceived.AppendText("Copy single sector to disk array.");
                    track    = processing.sectordata2[indexS1].track;
                    sectornr = processing.sectordata2[indexS1].sector;
                    datacrc  = processing.sectordata2[indexS1].crc;
                    //processing.sectorspertrack = 9;

                    //(tracknr * processing.sectorspertrack * 512 * 2) + (headnr * processing.sectorspertrack * 512) + (sectornr * 512);
                    diskoffset = track * processing.sectorspertrack * 512 + sectornr * 512;

                    for (i = 0; i < 512; i++)
                    {
                        processing.disk[diskoffset + i] = processing.sectordata2[indexS1].sectorbytes[i + offset];
                    }
                }

                // Copy sector from BadSectors to temporary sector buffer
                if (BlueTempRadio.Checked && BSRedFromlistRadio.Checked)
                {
                    textBoxReceived.AppendText("Copy full sector to Temp.");
                    track    = processing.sectordata2[indexS1].track;
                    sectornr = processing.sectordata2[indexS1].sector;
                    datacrc  = processing.sectordata2[indexS1].crc;

                    //processing.sectorspertrack = 9;

                    // I combined tracks and head to simplify stuff
                    // My track = tracks * 2 + headnr
                    // track 10 head 1 is 21
                    diskoffset = track * processing.sectorspertrack * 512 + sectornr * 512;

                    for (i = 0; i < 518; i++)
                    {
                        TempSector[i] = processing.sectordata2[indexS1].sectorbytes[i];
                    }

                    //Check crc
                    ushort     datacrcchk;
                    Crc16Ccitt crc = new Crc16Ccitt(InitialCrcValue.NonZero1);
                    datacrcchk             = crc.ComputeChecksum(TempSector);
                    BlueCrcCheckLabel.Text = "Crc: " + datacrcchk.ToString("X2");

                    processing.sectordata2[indexS1].crc = datacrcchk;
                }

                // Copy sector from temporary sector buffer to disk array
                if (BlueTempRadio.Checked && BSRedTempRadio.Checked)
                {
                    textBoxReceived.AppendText("Copy full sector to Temp.");
                    track    = processing.sectordata2[indexS1].track;
                    sectornr = processing.sectordata2[indexS1].sector;
                    datacrc  = processing.sectordata2[indexS1].crc;

                    //processing.sectorspertrack = 9;

                    //(tracknr * processing.sectorspertrack * 512 * 2) + (headnr * processing.sectorspertrack * 512) + (sectornr * 512);
                    diskoffset = track * processing.sectorspertrack * 512 + sectornr * 512;

                    for (i = 0; i < 512; i++)
                    {
                        processing.disk[diskoffset + i] = TempSector[i + offset];
                    }

                    //Do crc check
                    ushort     datacrcchk;
                    Crc16Ccitt crc = new Crc16Ccitt(InitialCrcValue.NonZero1);
                    datacrcchk             = crc.ComputeChecksum(TempSector);
                    BlueCrcCheckLabel.Text = "Crc: " + datacrcchk.ToString("X2");

                    processing.sectordata2[indexS1].crc = datacrcchk;
                }
            }
        }
        public void BadSectorPanelClick()
        {
            int indexS1;//, indexS2;
            int offset = 4;
            int diskoffset;
            int x, y;
            int bsbyte;
            int track, sectornr;
            int datacrc;

            int i;
            int threadid;

            BadSectorTooltipPos = BadSectorPanel.PointToClient(Cursor.Position);

            if (BadSectorListBox.SelectedIndices.Count >= 1)
            {
                indexS1  = ((badsectorkeyval)BadSectorListBox.Items[BadSectorListBox.SelectedIndices[0]]).id;
                threadid = ((badsectorkeyval)BadSectorListBox.Items[BadSectorListBox.SelectedIndices[0]]).threadid;

                int sectorlength = processing.sectordata2[indexS1].sectorlength;
                if (sectorlength < 512)
                {
                    tbreceived.Append("sector length is less than 512 bytes!!");
                    return;
                }

                if (ECMFMcheckBox.Checked)
                {
                    int w = 13;
                    int h = 8;
                    int lengthmfm;
                    int mfmoffset2 = 0;

                    switch ((int)processing.diskformat)
                    {
                    case 0:
                        return;

                    case 1:     //AmigaDos
                        offset    = -48;
                        lengthmfm = 8704;
                        break;

                    case 2:    //diskspare
                        offset    = -16;
                        lengthmfm = 8320;
                        break;

                    case 3:    //pcdd
                        offset     = -712;
                        lengthmfm  = 10464;
                        mfmoffset2 = -712;
                        break;

                    case 4:    //pchd
                        offset     = -712;
                        lengthmfm  = 10464;
                        mfmoffset2 = -712;
                        break;

                    case 5:    //pc2m
                        offset     = -712;
                        lengthmfm  = 10464;
                        mfmoffset2 = -712;
                        break;
                    }
                    //if (f == 0.0f) f = 1;
                    x = ((BadSectorTooltipPos.X) / w);
                    y = (int)(BadSectorTooltipPos.Y / h);
                    //int offset;


                    int mfmoffset = processing.sectordata2[indexS1].MarkerPositions;
                    bsbyte = ((y * 40 + x) * 8) + offset;
                    MFMByteStartUpDown.Value = ((y * 40 + x) * 8) + mfmoffset2;
                    int indexcnt = 0;
                    if (bsbyte > 0)
                    {
                        for (i = 0; i < bsbyte; i++)
                        {
                            if (processing.mfms[processing.sectordata2[indexS1].threadid][i + mfmoffset] == 1)
                            {
                                indexcnt++;
                            }
                        }
                    }
                    else
                    {
                        for (i = bsbyte; i < 0; i++)
                        {
                            if (processing.mfms[processing.sectordata2[indexS1].threadid][i + mfmoffset] == 1)
                            {
                                indexcnt--;
                            }
                        }
                    }
                    tbreceived.Append("index:" + indexcnt + "\r\n");
                    ScatterMinTrackBar.Value = indexcnt;
                    ScatterMaxTrackBar.Value = indexcnt + 14;
                    updateECInterface();
                }
                else
                {
                    int f = sectorlength / 512;

                    x = ((BadSectorTooltipPos.X) / 16);
                    y = (int)((BadSectorTooltipPos.Y) / (16 / f));

                    bsbyte = y * 32 + x;
                    // Temporary decouple event handler
                    byteinsector         = bsbyte;
                    BSEditByteLabel.Text = "Byte: " + bsbyte;

                    // Zoom in scatterplot
                    int indexcnt  = 0;
                    int mfmoffset = processing.sectordata2[indexS1].MarkerPositions;
                    // First find the period index
                    for (i = 0; i < (bsbyte + 4) * 16; i++)
                    {
                        if (processing.mfms[processing.sectordata2[indexS1].threadid][i + mfmoffset] == 1)
                        {
                            indexcnt++;
                        }
                    }
                    tbreceived.Append("index:" + indexcnt + "\r\n");
                    ScatterMinTrackBar.Value = indexcnt;
                    ScatterMaxTrackBar.Value = indexcnt + 14;
                    updateECInterface();
                    if ((int)BluetoRedByteCopyToolBtn.Tag == 1)
                    {
                        // Copy single byte from BadSectors to disk array
                        if (BSBlueSectormapRadio.Checked)
                        {
                            textBoxReceived.AppendText("Copy byte to disk array.");
                            track    = processing.sectordata2[indexS1].track;
                            sectornr = processing.sectordata2[indexS1].sector;
                            datacrc  = processing.sectordata2[indexS1].crc;

                            processing.sectorspertrack = 9;

                            //(tracknr * processing.sectorspertrack * 512 * 2) + (headnr * processing.sectorspertrack * 512) + (sectornr * 512);
                            diskoffset = track * processing.sectorspertrack * 512 + sectornr * 512;
                            processing.disk[diskoffset] = processing.sectordata2[indexS1].sectorbytes[bsbyte + offset];
                        }

                        //Copy byte from BadSectors to TempSector
                        if (BlueTempRadio.Checked)
                        {
                            textBoxReceived.AppendText("Copy byte to Temp.");
                            track    = processing.sectordata2[indexS1].track;
                            sectornr = processing.sectordata2[indexS1].sector;
                            datacrc  = processing.sectordata2[indexS1].crc;

                            processing.sectorspertrack = 9;

                            //(tracknr * processing.sectorspertrack * 512 * 2) + (headnr * processing.sectorspertrack * 512) + (sectornr * 512);
                            diskoffset = track * processing.sectorspertrack * 512 + sectornr * 512;
                            TempSector[bsbyte + offset] = processing.sectordata2[indexS1].sectorbytes[bsbyte + offset];
                        }

                        //Check crc
                        ushort     datacrcchk;
                        Crc16Ccitt crc = new Crc16Ccitt(InitialCrcValue.NonZero1);
                        datacrcchk             = crc.ComputeChecksum(TempSector);
                        BlueCrcCheckLabel.Text = "Crc: " + datacrcchk.ToString("X2");

                        processing.sectordata2[indexS1].crc = datacrcchk;
                    }
                }
            }
        }