//衝突したデータの長さ
        uint find_length_conflict_diffdebug(uint start, uint length, DiffDebugMethod method)
        {
            uint last = start;
            uint miss = 0;

            for (uint i = start + 1; i < length; i++)
            {
                byte a = U.at(this.AData, i); //ok
                byte b = U.at(this.BData, i); //ng
                if (a != b)
                {
                    miss = 0;
                    last = i;
                    continue;
                }
                byte c = U.at(this.CData, i); //current
                if (a != c)
                {
                    miss = 0;
                    last = i;
                    continue;
                }

                if (method == DiffDebugMethod.Method1)
                {
                    if (b != c)
                    {//現状がNG ROMと同じではないので無視する.
                        miss = 0;
                        last = i;
                        continue;
                    }
                }

                miss++;
                if (miss >= 4)
                {
                    break;
                }
            }
            return(last - start + 1);
        }
        public void InitDiffDebug(InputFormRef.AutoPleaseWait wait, byte[] okData, byte[] ngData, DiffDebugMethod method)
        {
            this.ALabel = "OK ROM ";
            this.BLabel = "NG ROM ";
            this.CLabel = "CURRENT";
            this.CData  = (byte[])Program.ROM.Data.Clone();
            this.BData  = ngData;
            this.AData  = okData;

            this.ChangeDataList = new List <ChangeDataSt>();

            uint length = (uint)this.CData.Length;

            if (length < this.BData.Length)
            {
                length = (uint)this.BData.Length;
            }
            if (length < this.AData.Length)
            {
                length = (uint)this.AData.Length;
            }

            uint nextDoEvents = 0;

            for (uint i = 0; i < length;)
            {
                if (i > nextDoEvents)
                {//毎回更新するのは無駄なのである程度の間隔で更新して以降
                    wait.DoEvents(R._("データ確認中 {0}/{1}", i, length));
                    nextDoEvents = i + 0xfff;
                }

                byte a = U.at(this.AData, i);
                byte b = U.at(this.BData, i);
                if (a == b)
                {//NG ROMとOK ROMが同一なので無視
                    i++;
                    continue;
                }
                byte c = U.at(this.CData, i);
                if (a == c)
                {//現状がOK ROMと同じなので無視
                    i++;
                    continue;
                }

                if (method == DiffDebugMethod.Method1)
                {
                    if (b != c)
                    {//現状がNG ROMと同じではないので無視する.
                        i++;
                        continue;
                    }
                }

                //変更点
                {
                    uint size = find_length_conflict_diffdebug(i, length, method);
                    this.ChangeDataList.Add(new ChangeDataSt(i, size, MargeMethod.NONE));
                    i += size;
                }
            }

            wait.DoEvents(R._("ヒント用にマップファイルを構築しています"));
            MakeWhatIs();

            wait.DoEvents(R._("相違点をリストにまとめています"));
            this.AddressList.DummyAlloc(this.ChangeDataList.Count, 0);
            MakeListboxContextMenuN(AddressList, AddressList_KeyDown);
            UpdateTitle();
        }