public static void WriteBytes(AMemory Memory, long Position, byte[] Data) { for (int Offs = 0; Offs < Data.Length; Offs++) { Memory.WriteByte(Position + Offs, Data[Offs]); } }
public unsafe static void Write <T>(AMemory Memory, long Position, T Value) where T : struct { long Size = Marshal.SizeOf <T>(); Memory.EnsureRangeIsValid(Position, Size); IntPtr Ptr = (IntPtr)Memory.TranslateWrite(Position); Marshal.StructureToPtr <T>(Value, Ptr, false); }
public unsafe static T Read <T>(AMemory Memory, long Position) where T : struct { long Size = Marshal.SizeOf <T>(); Memory.EnsureRangeIsValid(Position, Size); IntPtr Ptr = (IntPtr)Memory.Translate(Position); return(Marshal.PtrToStructure <T>(Ptr)); }
public static byte[] ReadBytes(AMemory Memory, long Position, int Size) { byte[] Data = new byte[Size]; for (int Offs = 0; Offs < Size; Offs++) { Data[Offs] = (byte)Memory.ReadByte(Position + Offs); } return(Data); }
public static void WriteInt32Exclusive(AMemory Memory, long Position, int Value) { while (!Memory.AcquireAddress(Position)) { Thread.Yield(); } Memory.WriteInt32(Position, Value); Memory.ReleaseAddress(Position); }
public unsafe static void Write <T>(AMemory Memory, long Position, T Value) where T : struct { long Size = Marshal.SizeOf <T>(); if ((ulong)(Position + Size) > AMemoryMgr.AddrSize) { throw new ArgumentOutOfRangeException(nameof(Position)); } IntPtr Ptr = new IntPtr((byte *)Memory.Ram + Position); Marshal.StructureToPtr <T>(Value, Ptr, false); }
public unsafe static T Read <T>(AMemory Memory, long Position) where T : struct { long Size = Marshal.SizeOf <T>(); if ((ulong)(Position + Size) > AMemoryMgr.AddrSize) { throw new ArgumentOutOfRangeException(nameof(Position)); } IntPtr Ptr = new IntPtr((byte *)Memory.Ram + Position); return(Marshal.PtrToStructure <T>(Ptr)); }
public static int ReadInt32Exclusive(AMemory Memory, long Position) { while (!Memory.AcquireAddress(Position)) { Thread.Yield(); } int Value = Memory.ReadInt32(Position); Memory.ReleaseAddress(Position); return(Value); }
public static void FillWithZeros(AMemory Memory, long Position, int Size) { int Size8 = Size & ~(8 - 1); for (int Offs = 0; Offs < Size8; Offs += 8) { Memory.WriteInt64(Position + Offs, 0); } for (int Offs = Size8; Offs < (Size - Size8); Offs++) { Memory.WriteByte(Position + Offs, 0); } }
public static string ReadAsciiString(AMemory Memory, long Position, long MaxSize = -1) { using (MemoryStream MS = new MemoryStream()) { for (long Offs = 0; Offs < MaxSize || MaxSize == -1; Offs++) { byte Value = (byte)Memory.ReadByte(Position + Offs); if (Value == 0) { break; } MS.WriteByte(Value); } return(Encoding.ASCII.GetString(MS.ToArray())); } }