private void InitMedia() { switch (inputFileInfo.Extension.ToUpper()) { case @".CRT": Cart cart = Cart.Load(inputFileInfo.Data); if (cart != null) { board.cartPort.Connect(cart); } break; case @".TAP": CassettePort.Tape tape = CassettePort.Tape.Load(inputFileInfo.Data); if (tape != null) { board.cassPort.Connect(tape); } break; case @".PRG": if (inputFileInfo.Data.Length > 2) { loadPrg = true; } break; } }
internal void Connect(Tape tape) { this.tape = tape; }
// Try to construct a tape file from file data. Returns null if not a tape file, throws exceptions for bad tape files. // (Note that some error conditions aren't caught right here.) static public Tape Load(byte[] tapeFile) { Tape result = null; if (System.Text.Encoding.ASCII.GetString(tapeFile, 0, 12) == "C64-TAPE-RAW") { byte version = tapeFile[12]; if (version > 1) throw new Exception("This tape has an unsupported version"); uint size = BitConverter.ToUInt32(tapeFile, 16); if (size + 20 != tapeFile.Length) { throw new Exception("Tape file header specifies a length that doesn't match the file size"); } result = new Tape(version, tapeFile, 20, (uint)tapeFile.Length); } return result; }