Пример #1
0
        byte OpenFile(int channel, byte[] filename)
        {
            FileAccessMode filemode = FileAccessMode.FMODE_READ;
            FileType filetype = FileType.FTYPE_PRG;
            int track = -1;
            int sector = -1;

            C64InternalFileSpec fileSpec = new C64InternalFileSpec(filename);

            // Channel 0 is READ PRG, channel 1 is WRITE PRG
            if (channel == 0)
            {
                filemode = FileAccessMode.FMODE_READ;
                filetype = FileType.FTYPE_PRG;
            }
            if (channel == 1)
            {
                filemode = FileAccessMode.FMODE_WRITE;
                filetype = FileType.FTYPE_PRG;
            }

            // Allow only read accesses
            if (filemode != FileAccessMode.FMODE_READ)
            {
                set_error(ErrorCode1541.ERR_WRITEPROTECT);
                return (byte)C64StatusCode.ST_OK;
            }

            // Find file in directory and open it
            if (FindFile(fileSpec.Name, ref track, ref sector))
                return open_file_ts(channel, track, sector);
            else
                set_error(ErrorCode1541.ERR_FILENOTFOUND);

            return (byte)C64StatusCode.ST_OK;

            #if false
            //using (BytePtr plainname = new BytePtr(256))
            //{

            //    FileAccessMode filemode = FileAccessMode.FMODE_READ;
            //    FileType filetype = FileType.FTYPE_PRG;
            //    int track = -1, sector = -1;

            //    convert_filename(filename, plainname, ref filemode, ref filetype);

            //    // Channel 0 is READ PRG, channel 1 is WRITE PRG
            //    if (channel == 0)
            //    {
            //        filemode = FileAccessMode.FMODE_READ;
            //        filetype = FileType.FTYPE_PRG;
            //    }
            //    if (channel == 1)
            //    {
            //        filemode = FileAccessMode.FMODE_WRITE;
            //        filetype = FileType.FTYPE_PRG;
            //    }

            //    // Allow only read accesses
            //    if (filemode != FileAccessMode.FMODE_READ)
            //    {
            //        set_error(ErrorCode1541.ERR_WRITEPROTECT);
            //        return (byte)C64StatusCode.ST_OK;
            //    }

            //    // Find file in directory and open it
            //    if (find_file(plainname, ref track, ref sector))
            //        return open_file_ts(channel, track, sector);
            //    else
            //        set_error(ErrorCode1541.ERR_FILENOTFOUND);

                //return (byte)C64StatusCode.ST_OK;
            //}
            #endif
        }