void WriteBackMixLZ77()
 {
     for (int i = 0; i < this.LZ77StructList.Count; i++)
     {
         LZ77Struct lz77Struct = this.LZ77StructList[i];
         WriteLZ77Bin(lz77Struct.Bin, lz77Struct.OrignalAddr, lz77Struct.OrignalDataSize, lz77Struct.DebugInfo);
     }
 }
        //ポインタが解決された
        void ResolvedPointer(uint labelPointer, uint addrPointer, string debugInfo)
        {
            Debug.Assert(labelPointer >= 0x08000000);
            Debug.Assert(addrPointer >= 0x08000000);

            this.AddressMap[labelPointer] = addrPointer;
            WriteApplyLog(labelPointer, addrPointer, debugInfo);

            //不明なポインタが解決された場合、書き戻す.
            for (int i = 0; i < this.MissingPointerList.Count; i++)
            {
                MissingPointer m = this.MissingPointerList[i];

                if (m.FindPointer == labelPointer)
                {
                    uint p = addrPointer;
                    if (m.Type == PointerType.ANTI_HUFFMAN)
                    {
                        p += 0x80000000;
                    }

                    if (m.IsLZ77)
                    {
                        uint       lz77uniq   = (uint)(m.WroteAddr >> LZ77UNIQ_SHIFT);
                        uint       pos        = (uint)(m.WroteAddr & ((1 << LZ77UNIQ_SHIFT) - 1));
                        LZ77Struct lz77struct = this.LZ77StructList[(int)lz77uniq];
                        U.write_u32(lz77struct.Bin, pos, p);
                    }
                    else
                    {
                        U.write_u32(this.WriteROMData32MB, m.WroteAddr, p);
                    }
                    //解決されたのでリストから消す.
                    this.MissingPointerList.RemoveAt(i);
                    i--;
                }
                else if (m.Type == PointerType.ASM)
                {
                    uint l;
                    uint p;
                    if (U.IsValueOdd(m.FindPointer))
                    {
                        if (U.IsValueOdd(labelPointer))
                        {
                            continue;
                        }
                        l = labelPointer + 1;

                        if (U.IsValueOdd(labelPointer))
                        {
                            p = addrPointer;
                        }
                        else
                        {
                            p = addrPointer + 1;
                        }
                    }
                    else
                    {
                        if (!U.IsValueOdd(labelPointer))
                        {
                            continue;
                        }
                        l = labelPointer - 1;

                        if (U.IsValueOdd(labelPointer))
                        {
                            p = addrPointer - 1;
                        }
                        else
                        {
                            p = addrPointer;
                        }
                    }

                    if (m.FindPointer != l)
                    {
                        continue;
                    }

                    if (m.IsLZ77)
                    {
                        uint       lz77uniq   = (uint)(m.WroteAddr >> LZ77UNIQ_SHIFT);
                        uint       pos        = (uint)(m.WroteAddr & ((1 << LZ77UNIQ_SHIFT) - 1));
                        LZ77Struct lz77struct = this.LZ77StructList[(int)lz77uniq];
                        U.write_u32(lz77struct.Bin, pos, p);
                    }
                    else
                    {
                        U.write_u32(this.WriteROMData32MB, m.WroteAddr, p);
                    }
                    //解決されたのでリストから消す.
                    this.MissingPointerList.RemoveAt(i);
                    i--;
                }
            }
        }