Пример #1
0
        public bool HasBASICJumpAddress(int DataStartAddress, out int SysAddress)
        {
            SysAddress = 0;
            if ((DataStartAddress == 0x0801) ||
                (DataStartAddress == 0x0800))
            {
                // validate basic header, look for jump address
                // 00 08 00 0C 08 0A 00 9E 32 30 36 34 00 00 00
                int dataPos = 0x0801 - DataStartAddress;

                ushort pointerToNextLine = m_SourceData.UInt16At(dataPos);
                ushort lineNumber        = m_SourceData.UInt16At(dataPos + 2);
                byte   sysInstruction    = m_SourceData.ByteAt(dataPos + 4);
                if (sysInstruction != 0x9e)
                {
                    // not a SYS command
                    return(false);
                }
                string sysAddress = "";
                dataPos += 5;
                while ((dataPos < m_SourceData.Length) &&
                       (m_SourceData.ByteAt(dataPos) != 0))
                {
                    sysAddress += m_SourceData.ByteAt(dataPos).ToString("X2");
                    ++dataPos;
                }
                GR.Memory.ByteBuffer sysAddrData = new GR.Memory.ByteBuffer();
                if (!sysAddrData.AppendHex(sysAddress))
                {
                    return(false);
                }
                SysAddress = GR.Convert.ToI32(sysAddrData.ToAsciiString());
                return(true);
            }
            return(false);
        }