summaryrefslogtreecommitdiff
path: root/Emulator/Make.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emulator/Make.cs')
-rw-r--r--Emulator/Make.cs58
1 files changed, 58 insertions, 0 deletions
diff --git a/Emulator/Make.cs b/Emulator/Make.cs
new file mode 100644
index 0000000..aad9644
--- /dev/null
+++ b/Emulator/Make.cs
@@ -0,0 +1,58 @@
+namespace Q1.Emulator;
+
+using System;
+using System.Buffers.Binary;
+
+public static class Make
+{
+ public static u16 u16(u8 high, u8 low)
+ {
+ return (u16) ((high << 8) | low);
+ }
+
+ public static u16 u16(ref8 data)
+ {
+ if (data.Length < 2)
+ throw new ArgumentException("Data must contain at least 2 bytes to form a u16.");
+
+ return Make.u16(data[0], data[1]);
+ }
+
+ public static u32 u32(u8 b1, u8 b2, u8 b3, u8 b4)
+ {
+ return (u32) ((b1 << 24) | (b2 << 16) | (b3 << 8) | b4);
+ }
+
+ public static u32 u32(ref8 data)
+ {
+ if (data.Length < 4)
+ throw new ArgumentException("Data must contain at least 4 bytes to form a u32.");
+
+ return Make.u32(data[0], data[1], data[2], data[3]);
+ }
+
+ public static ref8 ref8(u16 value)
+ {
+ u8 high = (u8) (value >> 8);
+ u8 low = (u8) (value & 0xFF);
+ return new ref8([high, low], 0, 2);
+ }
+
+ public static ref8 ref8(u32 value)
+ {
+ u8 b1 = (u8) (value >> 24);
+ u8 b2 = (u8) (value >> 16);
+ u8 b3 = (u8) (value >> 8);
+ u8 b4 = (u8) (value & 0xFF);
+ return new ref8([b1, b2, b3, b4], 0, 4);
+ }
+ public static i16 i16(ref8 value)
+ {
+ return BinaryPrimitives.ReadInt16BigEndian(value);
+ }
+
+ public static i16 i16(u8 high, u8 low)
+ {
+ return BinaryPrimitives.ReadInt16BigEndian(new ReadOnlySpan<u8>([high, low]));
+ }
+} \ No newline at end of file