Пример #1
0
 public static void WriteBytes(AMemory Memory, long Position, byte[] Data)
 {
     for (int Offs = 0; Offs < Data.Length; Offs++)
     {
         Memory.WriteByte(Position + Offs, Data[Offs]);
     }
 }
Пример #2
0
        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);
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
        }
Пример #5
0
        public static void WriteInt32Exclusive(AMemory Memory, long Position, int Value)
        {
            while (!Memory.AcquireAddress(Position))
            {
                Thread.Yield();
            }

            Memory.WriteInt32(Position, Value);

            Memory.ReleaseAddress(Position);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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));
        }
Пример #8
0
        public static int ReadInt32Exclusive(AMemory Memory, long Position)
        {
            while (!Memory.AcquireAddress(Position))
            {
                Thread.Yield();
            }

            int Value = Memory.ReadInt32(Position);

            Memory.ReleaseAddress(Position);

            return(Value);
        }
Пример #9
0
        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);
            }
        }
Пример #10
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()));
            }
        }