110 lines
2.8 KiB
C#
110 lines
2.8 KiB
C#
//
|
|
// Copyright (c) 2010-2023 Antmicro
|
|
// Copyright (c) 2011-2015 Realtime Embedded
|
|
//
|
|
// This file is licensed under the MIT License.
|
|
// Full license text is available in 'licenses/MIT.txt'.
|
|
//
|
|
using System;
|
|
using Antmicro.Renode.Peripherals.Bus;
|
|
using Antmicro.Renode.Peripherals;
|
|
using Antmicro.Renode.Utilities;
|
|
using Antmicro.Renode.Logging;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Antmicro.Renode.Peripherals.Memory
|
|
{
|
|
public class ArrayMemory : IBytePeripheral, IWordPeripheral, IDoubleWordPeripheral, IKnownSize, IMemory, IMultibyteWritePeripheral, IQuadWordPeripheral
|
|
{
|
|
public ArrayMemory(byte[] source)
|
|
{
|
|
array = source;
|
|
}
|
|
|
|
public ArrayMemory(int size)
|
|
{
|
|
array = new byte[size];
|
|
}
|
|
|
|
public virtual ulong ReadQuadWord(long offset)
|
|
{
|
|
var intOffset = (int)offset;
|
|
var result = BitConverter.ToUInt64(array, intOffset);
|
|
return result;
|
|
}
|
|
|
|
public virtual void WriteQuadWord(long offset, ulong value)
|
|
{
|
|
var bytes = BitConverter.GetBytes(value);
|
|
bytes.CopyTo(array, offset);
|
|
}
|
|
|
|
public uint ReadDoubleWord(long offset)
|
|
{
|
|
var intOffset = (int)offset;
|
|
var result = BitConverter.ToUInt32(array, intOffset);
|
|
return result;
|
|
}
|
|
|
|
public virtual void WriteDoubleWord(long offset, uint value)
|
|
{
|
|
var bytes = BitConverter.GetBytes(value);
|
|
bytes.CopyTo(array, offset);
|
|
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
// nothing happens
|
|
}
|
|
|
|
public ushort ReadWord(long offset)
|
|
{
|
|
var intOffset = (int)offset;
|
|
var result = BitConverter.ToUInt16(array, intOffset);
|
|
return result;
|
|
}
|
|
|
|
public virtual void WriteWord(long offset, ushort value)
|
|
{
|
|
var bytes = BitConverter.GetBytes(value);
|
|
bytes.CopyTo(array, offset);
|
|
}
|
|
|
|
public byte ReadByte(long offset)
|
|
{
|
|
var intOffset = (int)offset;
|
|
var result = array[intOffset];
|
|
return result;
|
|
}
|
|
|
|
public virtual void WriteByte(long offset, byte value)
|
|
{
|
|
var intOffset = (int)offset;
|
|
array[intOffset] = value;
|
|
}
|
|
|
|
public byte[] ReadBytes(long offset, int count)
|
|
{
|
|
var result = new byte[count];
|
|
Array.Copy(array, offset, result, 0, count);
|
|
return result;
|
|
}
|
|
|
|
public void WriteBytes(long offset, byte[] bytes, int startingIndex, int count)
|
|
{
|
|
Array.Copy(bytes, startingIndex, array, offset, count);
|
|
}
|
|
|
|
public long Size
|
|
{
|
|
get
|
|
{
|
|
return array.Length;
|
|
}
|
|
}
|
|
|
|
protected readonly byte[] array;
|
|
}
|
|
}
|