/* * HSC7800.cs * * The 7800 High Score cartridge--courtesy of Matthias . * */ using System; namespace EMU7800.Core { public sealed class HSC7800 : IDevice { readonly byte[] ROM; readonly ushort Mask; public static ushort Size { get; private set; } #region IDevice Members public void Reset() { } public byte this[ushort addr] { get { return ROM[addr & Mask]; } set { } } #endregion public RAM6116 SRAM { get; private set; } #region Constructors private HSC7800() { } public HSC7800(byte[] hscRom, byte[] ram) { if (hscRom == null) throw new ArgumentNullException("hscRom"); if (ram == null) throw new ArgumentNullException("ram"); if (hscRom.Length != 4096) throw new ArgumentException("ROM size not 4096", "hscRom"); ROM = hscRom; SRAM = new RAM6116(ram); Size = Mask = (ushort)ROM.Length; Mask--; } #endregion #region Serialization Members public HSC7800(DeserializationContext input) { if (input == null) throw new ArgumentNullException("input"); input.CheckVersion(1); ROM = input.ReadExpectedBytes(4096); SRAM = input.ReadRAM6116(); Size = Mask = (ushort)ROM.Length; Mask--; } public void GetObjectData(SerializationContext output) { if (output == null) throw new ArgumentNullException("output"); output.WriteVersion(1); output.Write(ROM); output.Write(SRAM); } #endregion } }