/// <summary> /// Constructs a configurable memory map of the given size /// </summary> /// <param name="size">Size in bytes of the memory map (min: 0x0001, max: 0x10000</param> public ConfigurableMemoryMap(uint size) { if (size <= 0 || size > ushort.MaxValue + 1) { throw new ArgumentOutOfRangeException("size"); } Size = size; readMemoryHandlers = new ReadMemoryHandler[Size]; writeMemoryHandlers = new WriteMemoryHandler[Size]; memory = new byte[Size]; ResetConfiguration(); }
/// <summary> /// Configure a memory write handler for a given memory address range /// </summary> /// <param name="startAddress">starting address to configure</param> /// <param name="length">length of the address range to configure</param> /// <param name="writeMemoryHandler">delegate to handle memory writes at the given address range</param> public void ConfigureMemoryWriteRange(ushort startAddress, ushort length, WriteMemoryHandler writeMemoryHandler) { int endAddressExclusive = startAddress + length; if (endAddressExclusive > Size) { throw new ArgumentOutOfRangeException("length"); } for (ushort address = startAddress; address < endAddressExclusive; address++) { writeMemoryHandlers[address] = writeMemoryHandler; } }
/// <summary> /// Configure a memory write handler for a given memory address /// </summary> /// <param name="address">Memory address to associate to the write handler</param> /// <param name="writeMemoryHandler">delegate to handle memory writes at the given address</param> public void ConfigureMemoryWrite(ushort address, WriteMemoryHandler writeMemoryHandler) { writeMemoryHandlers[address] = writeMemoryHandler; }
/// <summary> /// Configure memory read and write handlers for a given memory address /// </summary> /// <param name="address">Memory address to associate to the handlers</param> /// <param name="readMemoryHandler">delegate to handle memory reads at the given address</param> /// <param name="writeMemoryHandler">delegate to handle memory writes at the given address</param> public void ConfigureMemoryAccess(ushort address, ReadMemoryHandler readMemoryHandler, WriteMemoryHandler writeMemoryHandler) { readMemoryHandlers[address] = readMemoryHandler; writeMemoryHandlers[address] = writeMemoryHandler; }