T8SuitePro.Disassembler.build_displacement C# (CSharp) Method

build_displacement() private method

private build_displacement ( long trgaddr, long addr, long offset, byte ch2, BinaryReader br ) : uint
trgaddr long
addr long
offset long
ch2 byte
br System.IO.BinaryReader
return uint
        unsafe uint build_displacement(long* trgaddr, long addr, long offset, byte ch2, BinaryReader br)
        {
            uint ilen = 0;
            byte ch3, ch4, ch5, ch6;
            long trgdata = 0;
            long disp = 0;

            if ((ch2 > 0) && (ch2 < 0xff))
            {
                disp = (long)ch2;
                if ((disp & 0x80) == 0) disp = (0x0000007F & disp);
                else disp = (0xFFFFFF80 | disp);
            }
            else if (ch2 == 0)
            {
                ch3 = br.ReadByte(); ch4 = br.ReadByte();
                disp = (long)ch4;
                disp += (long)(ch3) << 8;
                if ((disp & 0x8000) == 0) disp = (0x00007FFF & disp);
                else disp = (0xFFFF8000 | disp);
                ilen++;
            }
            else if (ch2 == 0xff)
            {
                ch3 = br.ReadByte(); ch4 = br.ReadByte(); ch5 = br.ReadByte(); ch6 = br.ReadByte();
                disp = (long)ch6;
                disp += (long)(ch5) << 8;
                disp += (long)(ch4) << 16;
                disp += (long)(ch3) << 24;
                if ((disp & 0x8000000) == 0) disp = (0x7FFFFFFF & disp);
                else disp = (0x80000000 | disp);
                ilen += 2;
            }
            *trgaddr = addr + disp + 2 + offset;
            return (ilen);
        }