/*
 * NullDevice.cs
 *
 * Default memory mappable device.
 *
 * Copyright © 2003, 2004 Mike Murphy
 *
 */
using System;

namespace EMU7800.Core
{
    public sealed class NullDevice : IDevice
    {
        MachineBase M { get; set; }

        #region IDevice Members

        public void Reset()
        {
            Log("{0} reset", this);
        }

        public byte this[ushort addr]
        {
            get
            {
                LogDebug("NullDevice: Peek at ${0:x4}, PC=${1:x4}", addr, M.CPU.PC);
                return 0;
            }
            set
            {
                LogDebug("NullDevice: Poke at ${0:x4},${1:x2}, PC=${2:x4}", addr, value, M.CPU.PC);
            }
        }

        #endregion

        public override String ToString()
        {
            return "NullDevice";
        }

        #region Constructors

        private NullDevice()
        {
        }

        public NullDevice(MachineBase m)
        {
            if (m == null)
                throw new ArgumentNullException("m");
            M = m;
        }

        #endregion

        #region Helpers

        void Log(string format, params object[] args)
        {
            if (M == null || M.Logger == null)
                return;
            M.Logger.WriteLine(format, args);
        }

        [System.Diagnostics.Conditional("DEBUG")]
        void LogDebug(string format, params object[] args)
        {
            if (M == null || M.Logger == null)
                return;
            M.Logger.WriteLine(format, args);
        }

        #endregion
    }
}