/*
 * RAM6116.cs
 *
 * Implements a 6116 RAM device found in the 7800.
 *
 * Copyright © 2004 Mike Murphy
 *
 */
using System;

namespace EMU7800.Core
{
    public sealed class RAM6116 : IDevice
    {
        readonly byte[] RAM;

        #region IDevice Members

        public void Reset() {}

        public byte this[ushort addr]
        {
            get { return RAM[addr & 0x07ff]; }
            set { RAM[addr & 0x07ff] = value; }
        }

        #endregion

        #region Constructors

        public RAM6116()
        {
            RAM = new byte[0x800];
        }

        public RAM6116(byte[] ram)
        {
            RAM = ram;
        }

        #endregion

        #region Serialization Members

        public RAM6116(DeserializationContext input)
        {
            if (input == null)
                throw new ArgumentNullException("input");

            input.CheckVersion(1);
            RAM = input.ReadExpectedBytes(0x800);
        }

        public void GetObjectData(SerializationContext output)
        {
            if (output == null)
                throw new ArgumentNullException("output");

            output.WriteVersion(1);
            output.Write(RAM);
        }

        #endregion
    }
}