diff options
Diffstat (limited to 'Q1.core')
| -rw-r--r-- | Q1.core/Arch/Chip.cs | 2 | ||||
| -rw-r--r-- | Q1.core/Components/Bus.cs | 20 | ||||
| -rw-r--r-- | Q1.core/Components/IAddressable.cs | 6 | ||||
| -rw-r--r-- | Q1.core/Components/Memory.cs | 4 |
4 files changed, 18 insertions, 14 deletions
diff --git a/Q1.core/Arch/Chip.cs b/Q1.core/Arch/Chip.cs index 0beeb26..2c79a4d 100644 --- a/Q1.core/Arch/Chip.cs +++ b/Q1.core/Arch/Chip.cs @@ -7,7 +7,7 @@ using Lookups; // Big endian public class Chip { - public IAddressable Bus; + public Bus Bus; public u16 Pc, Sp; public u16 Ax, Dx, Lx; diff --git a/Q1.core/Components/Bus.cs b/Q1.core/Components/Bus.cs index 02b20a7..46c5847 100644 --- a/Q1.core/Components/Bus.cs +++ b/Q1.core/Components/Bus.cs @@ -5,7 +5,7 @@ using Q1.core.Arch; public class Bus : IAddressable { private Chip? _chip; - private readonly List<IAddressable> _devices; + private readonly List<IBusDevice> _devices; public u16 AddressableStart { get; } public u16 AddressableEnd { get; } @@ -34,7 +34,7 @@ public class Bus : IAddressable chip.Bus = this; } - public void MountDevice(IAddressable device) + public void MountDevice(IBusDevice device) { if (device.AddressableStart >= device.AddressableEnd) throw new ArgumentException("Addressable range is invalid.", nameof(device)); @@ -45,14 +45,14 @@ public class Bus : IAddressable if (index > 0) { - IAddressable prev = this._devices[index - 1]; + IBusDevice prev = this._devices[index - 1]; if (device.AddressableStart < prev.AddressableEnd) throw new InvalidOperationException("Address range overlaps with previous device."); } if (index < this._devices.Count) { - IAddressable next = this._devices[index]; + IBusDevice next = this._devices[index]; if (device.AddressableEnd > next.AddressableStart) throw new InvalidOperationException("Address range overlaps with next device."); } @@ -60,9 +60,9 @@ public class Bus : IAddressable this._devices.Insert(index, device); } - private IAddressable? GetDevice(u16 address) + private IBusDevice? GetDevice(u16 address) { - foreach (IAddressable device in this._devices) + foreach (IBusDevice device in this._devices) { if (address < device.AddressableStart) break; @@ -76,7 +76,7 @@ public class Bus : IAddressable public u8 Read(u16 address) { - IAddressable? device = this.GetDevice(address); + IBusDevice? device = this.GetDevice(address); if (device == null) return 0; @@ -85,7 +85,7 @@ public class Bus : IAddressable public void Write(u16 address, u8 value) { - IAddressable? device = this.GetDevice(address); + IBusDevice? device = this.GetDevice(address); if (device == null) return; @@ -94,7 +94,7 @@ public class Bus : IAddressable public void Clock() { - foreach (IAddressable addressable in this._devices) - addressable.Clock(); + foreach (IBusDevice addressable in this._devices) + addressable.Clock(this); } }
\ No newline at end of file diff --git a/Q1.core/Components/IAddressable.cs b/Q1.core/Components/IAddressable.cs index 54218d9..339f076 100644 --- a/Q1.core/Components/IAddressable.cs +++ b/Q1.core/Components/IAddressable.cs @@ -4,10 +4,14 @@ public interface IAddressable { public u8 Read(u16 address); public void Write(u16 address, u8 value); - public void Clock(); +} +public interface IBusDevice : IAddressable +{ public u16 AddressableStart { get; } public u16 AddressableEnd { get; } + + public void Clock(Bus bus); } public static class AddressableExtensions diff --git a/Q1.core/Components/Memory.cs b/Q1.core/Components/Memory.cs index 9d23c7a..38c33ee 100644 --- a/Q1.core/Components/Memory.cs +++ b/Q1.core/Components/Memory.cs @@ -1,6 +1,6 @@ namespace Q1.core.Components; -public class Memory : IAddressable +public class Memory : IBusDevice { private readonly u8[] _memory; @@ -17,5 +17,5 @@ public class Memory : IAddressable public u8 Read(u16 address) => this._memory[address]; public void Write(u16 address, u8 value) => this._memory[address] = value; - public void Clock() { /* No timing behavior for simple memory */ } + public void Clock(Bus bus) { /* No timing behavior for simple memory */ } }
\ No newline at end of file |
