aboutsummaryrefslogtreecommitdiff
path: root/ChocolArm64/Memory/AMemoryHelper.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ChocolArm64/Memory/AMemoryHelper.cs')
-rw-r--r--ChocolArm64/Memory/AMemoryHelper.cs73
1 files changed, 73 insertions, 0 deletions
diff --git a/ChocolArm64/Memory/AMemoryHelper.cs b/ChocolArm64/Memory/AMemoryHelper.cs
new file mode 100644
index 00000000..219aeebf
--- /dev/null
+++ b/ChocolArm64/Memory/AMemoryHelper.cs
@@ -0,0 +1,73 @@
+using System.IO;
+using System.Text;
+
+namespace ChocolArm64.Memory
+{
+ public static class AMemoryHelper
+ {
+ 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 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 WriteBytes(AMemory Memory, long Position, byte[] Data)
+ {
+ for (int Offs = 0; Offs < Data.Length; Offs++)
+ {
+ Memory.WriteByte(Position + Offs, Data[Offs]);
+ }
+ }
+
+ public static string ReadAsciiString(AMemory Memory, long Position, int MaxSize = -1)
+ {
+ using (MemoryStream MS = new MemoryStream())
+ {
+ for (int 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());
+ }
+ }
+
+ public static long PageRoundUp(long Value)
+ {
+ return (Value + AMemoryMgr.PageMask) & ~AMemoryMgr.PageMask;
+ }
+
+ public static long PageRoundDown(long Value)
+ {
+ return Value & ~AMemoryMgr.PageMask;
+ }
+ }
+} \ No newline at end of file