コード例 #1
0
        public void load(byte[] format, X00Header pHeader)
        {
            info.m_formatString = Encoding.ASCII.GetString(format);

            {   // Decode file name
                Ptr <byte> spPet = new Ptr <byte>(pHeader.name, X00_NAME_LEN);
                info.m_infoString.Add(petsciiToAscii(ref spPet));
            }

            // Automatic settings
            fileOffset           = X00_ID_LEN + X00_NAME_LEN + 1;
            info.m_songs         = 1;
            info.m_startSong     = 1;
            info.m_compatibility = SidTuneInfo.compatibility_t.COMPATIBILITY_BASIC;

            // Create the speed/clock setting table.
            convertOldStyleSpeedToTables(0xffffffff, (Int64)info.m_clockSpeed);// ~0, info.m_clockSpeed);
        }
コード例 #2
0
        public static SidTuneBase load(string fileName, byte[] dataBuf)
        {
            string ext = SidTuneTools.fileExtOfPath(fileName);

            // Combined extension & magic field identification
            if (ext.Length != 4)
            {
                return(null);
            }

            //if (!isdigit(ext[2]) || !isdigit(ext[3]))
            //return null;
            if ("0123456789".IndexOf(ext[2]) < 0 || "0123456789".IndexOf(ext[3]) < 0)
            {
                return(null);
            }

            string    format = null;
            X00Format type;

            switch (ext[1].ToString().ToUpper()[0])
            {
            case 'D':
                type   = X00Format.X00_DEL;
                format = TXT_FORMAT_DEL;
                break;

            case 'S':
                type   = X00Format.X00_SEQ;
                format = TXT_FORMAT_SEQ;
                break;

            case 'P':
                type   = X00Format.X00_PRG;
                format = TXT_FORMAT_PRG;
                break;

            case 'U':
                type   = X00Format.X00_USR;
                format = TXT_FORMAT_USR;
                break;

            case 'R':
                type   = X00Format.X00_REL;
                format = TXT_FORMAT_REL;
                break;

            default:
                return(null);
            }

            // Verify the file is what we think it is
            Int32 bufLen = dataBuf.Length;

            if (bufLen < X00_ID_LEN)
            {
                return(null);
            }

            X00Header pHeader = new X00Header();

            mem.memcpy(ref pHeader.id, dataBuf, X00_ID_LEN);
            Ptr <byte> p = new Ptr <byte>(pHeader.name, 0);

            mem.memcpy(ref p, new Ptr <byte>(dataBuf, X00_ID_LEN), X00_NAME_LEN);
            pHeader.length = dataBuf[X00_ID_LEN + X00_NAME_LEN];

            if (Encoding.ASCII.GetString(pHeader.id) == P00_ID)
            {
                return(null);
            }

            // File types current supported
            if (type != X00Format.X00_PRG)
            {
                throw new loadError("Not a PRG inside X00");
            }

            if (bufLen < 26 + 2)//sizeof(X00Header) + 2)
            {
                throw new loadError(ERR_TRUNCATED);
            }

            p00 tune = new p00();

            tune.load(Encoding.ASCII.GetBytes(format), pHeader);

            return(tune);
        }