summaryrefslogtreecommitdiff
path: root/Q1.core/Components/IAddressable.cs
diff options
context:
space:
mode:
authorMelodi <62381002+Melodi17@users.noreply.github.com>2026-03-18 07:19:22 +1000
committerMelodi <62381002+Melodi17@users.noreply.github.com>2026-03-18 07:19:22 +1000
commit0bb62fc65526a0981cd328dea1b09aba8ce0a576 (patch)
treea601bb87ead0f58674ee18088e9e41e77512d3b8 /Q1.core/Components/IAddressable.cs
parent203331522e22c778ff830c3c6cf4f439778939fa (diff)
add: Add bus
Diffstat (limited to 'Q1.core/Components/IAddressable.cs')
-rw-r--r--Q1.core/Components/IAddressable.cs29
1 files changed, 29 insertions, 0 deletions
diff --git a/Q1.core/Components/IAddressable.cs b/Q1.core/Components/IAddressable.cs
new file mode 100644
index 0000000..54218d9
--- /dev/null
+++ b/Q1.core/Components/IAddressable.cs
@@ -0,0 +1,29 @@
+namespace Q1.core.Components;
+
+public interface IAddressable
+{
+ public u8 Read(u16 address);
+ public void Write(u16 address, u8 value);
+ public void Clock();
+
+ public u16 AddressableStart { get; }
+ public u16 AddressableEnd { get; }
+}
+
+public static class AddressableExtensions
+{
+ public static u16 ReadWord(this IAddressable bus, u16 address)
+ {
+ u8 high = bus.Read(address);
+ u8 low = bus.Read((u16) (address + 1));
+ return (u16) ((high << 8) | low);
+ }
+
+ public static void WriteWord(this IAddressable bus, u16 address, u16 value)
+ {
+ u8 high = (u8) (value & 0xFF);
+ u8 low = (u8) ((value >> 8) & 0xFF);
+ bus.Write(address, low);
+ bus.Write((u16) (address + 1), high);
+ }
+} \ No newline at end of file