diff --git a/EightBit.Benchmark/BenchmarkBus.cs b/EightBit.Benchmark/BenchmarkBus.cs
new file mode 100644
index 0000000..59e4ce5
--- /dev/null
+++ b/EightBit.Benchmark/BenchmarkBus.cs
@@ -0,0 +1,34 @@
+namespace EightBit.Benchmark
+{
+ using BenchmarkDotNet.Attributes;
+
+ public class BenchmarkBus
+ {
+ private readonly SealedBus _contents = new();
+
+ [GlobalSetup]
+ public void GlobalSetup()
+ {
+ for (ushort i = 0; i < ushort.MaxValue; ++i)
+ {
+ this._contents.Poke(i, (byte)(i % 256));
+ }
+ this._contents.Address.Joined = 0;
+ this._contents.Data = 123;
+ }
+
+ [Benchmark]
+ public long Reading()
+ {
+ this._contents.Read();
+ return this._contents.Data;
+ }
+
+ [Benchmark]
+ public long Writing()
+ {
+ this._contents.Write();
+ return this._contents.Data;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EightBit.Benchmark/BenchmarkClockedChip.cs b/EightBit.Benchmark/BenchmarkClockedChip.cs
new file mode 100644
index 0000000..6525bdd
--- /dev/null
+++ b/EightBit.Benchmark/BenchmarkClockedChip.cs
@@ -0,0 +1,75 @@
+namespace EightBit.Benchmark
+{
+ using BenchmarkDotNet.Attributes;
+
+ class ClockingChip : ClockedChip
+ {
+ public void Reset() => this.ResetCycles();
+
+ public void Bump() => this.Cycles++;
+ }
+
+ public class BenchmarkClockedChip
+ {
+ private readonly ClockingChip _contents = new();
+
+ ////////////////////////////////////////////
+
+ [IterationSetup]
+ public void IterationSetup() => this._contents.Reset();
+
+ [IterationCleanup]
+ public void IterationCleanup() => this._contents.Reset();
+
+ ////////////////////////////////////////////
+
+ [GlobalSetup(Target = nameof(TickWithSubscribers))]
+ public void GlobalSetupSingle() => this._contents.Ticked += this.Contents_Ticked;
+
+ [GlobalCleanup(Target = nameof(TickWithSubscribers))]
+ public void GlobalCleanupSingle() => this._contents.Ticked -= this.Contents_Ticked;
+
+ [Benchmark]
+ public int TickWithSubscribers()
+ {
+ this._contents.Tick();
+ return this._contents.Cycles;
+ }
+
+ ////////////////////////////////////////////
+
+ [GlobalSetup(Target = nameof(TickMultipleWithSubscribers))]
+ public void GlobalSetupMultiple() => this._contents.Ticked += this.Contents_Ticked;
+
+ [GlobalCleanup(Target = nameof(TickMultipleWithSubscribers))]
+ public void GlobalCleanupMultiple() => this._contents.Ticked -= this.Contents_Ticked;
+
+ [Benchmark]
+ public int TickMultipleWithSubscribers()
+ {
+ this._contents.Tick(4);
+ return this._contents.Cycles;
+ }
+
+ ////////////////////////////////////////////
+
+ [Benchmark]
+ public int TickWithoutSubscribers()
+ {
+ this._contents.Tick();
+ return this._contents.Cycles;
+ }
+
+ [Benchmark]
+ public int TickMultipleWithoutSubscribers()
+ {
+ this._contents.Tick(4);
+ return this._contents.Cycles;
+ }
+
+ private void Contents_Ticked(object? sender, EventArgs e)
+ {
+ this._contents.Bump();
+ }
+ }
+}
\ No newline at end of file
diff --git a/EightBit.Benchmark/BenchmarkLittleEndianProcessor.cs b/EightBit.Benchmark/BenchmarkLittleEndianProcessor.cs
new file mode 100644
index 0000000..11dc39f
--- /dev/null
+++ b/EightBit.Benchmark/BenchmarkLittleEndianProcessor.cs
@@ -0,0 +1,168 @@
+namespace EightBit.Benchmark
+{
+ using BenchmarkDotNet.Attributes;
+
+ internal class SealedLittleEndianProcessor : LittleEndianProcessor
+ {
+ private readonly Bus _contents;
+
+ public SealedLittleEndianProcessor(Bus contents)
+ : base(contents)
+ {
+ _contents = contents;
+ }
+
+ public override void PoweredStep()
+ {
+ this.Execute(this.FetchInstruction());
+ }
+
+ public override void Execute()
+ {
+ this.Tick();
+ this.MemoryWrite(this.PC, 1);
+ }
+
+ protected override void Push(byte value)
+ {
+ }
+
+ protected override void Pop()
+ {
+ }
+
+ protected override void MemoryRead()
+ {
+ this.OnReadingMemory();
+ base.MemoryRead();
+ this.OnReadMemory();
+ }
+
+ protected override void MemoryWrite()
+ {
+ this.OnWritingMemory();
+ base.MemoryWrite();
+ this.OnWrittenMemory();
+ }
+ }
+
+ public class BenchmarkLittleEndianProcessor
+ {
+ private readonly SealedBus _bus = new();
+ private readonly SealedLittleEndianProcessor _processor;
+
+ public BenchmarkLittleEndianProcessor()
+ {
+ this._processor = new(this._bus);
+ }
+
+ ////////////////////////////////////////////
+
+ [Benchmark]
+ public long Step()
+ {
+ this._processor.Step();
+ return this._processor.Cycles;
+ }
+
+ ////////////////////////////////////////////
+
+ [GlobalSetup(Target = nameof(StepWithMemoryEvents))]
+ public void GlobalSetupStepWithMemoryEvents() => this.AddMemoryEvents();
+
+ [GlobalCleanup(Target = nameof(StepWithMemoryEvents))]
+ public void GlobalCleanupStepWithMemoryEvents() => this.RemoveMemoryEvents();
+
+ [Benchmark]
+ public long StepWithMemoryEvents() => this.Step();
+
+ ////////////////////////////////////////////
+
+ [GlobalSetup(Target = nameof(StepWithExecutionEvents))]
+ public void GlobalSetupStepWithExecutionEvents() => this.AddExecutionEvents();
+
+ [GlobalCleanup(Target = nameof(StepWithExecutionEvents))]
+ public void GlobalCleanupStepWithExecutionEvents() => this.RemoveExecutionEvents();
+
+ [Benchmark]
+ public long StepWithExecutionEvents() => this.Step();
+
+ ////////////////////////////////////////////
+
+ [GlobalSetup(Target = nameof(StepWithEvents))]
+ public void GlobalSetupStepWithEvents() => this.AddEvents();
+
+ [GlobalCleanup(Target = nameof(StepWithEvents))]
+ public void GlobalCleanupStepWithEvents() => this.RemoveEvents();
+
+ [Benchmark]
+ public long StepWithEvents() => this.Step();
+
+ ///////////////////////////////////////////////////
+
+ private void AddEvents()
+ {
+ this.AddMemoryEvents();
+ this.AddExecutionEvents();
+ }
+
+ private void RemoveEvents()
+ {
+ this.RemoveMemoryEvents();
+ this.RemoveExecutionEvents();
+ }
+
+ ///////////////////////////////////////////////////
+
+ private int _preExecute = 0;
+ private int _postExecute = 0;
+
+ private void RemoveExecutionEvents()
+ {
+ this._processor.ExecutingInstruction -= Processor_ExecutingInstruction;
+ this._processor.ExecutedInstruction -= Processor_ExecutedInstruction;
+ }
+
+ private void AddExecutionEvents()
+ {
+ this._processor.ExecutingInstruction += Processor_ExecutingInstruction;
+ this._processor.ExecutedInstruction += Processor_ExecutedInstruction;
+ }
+
+ private void Processor_ExecutedInstruction(object? sender, EventArgs e) =>this._postExecute++;
+
+ private void Processor_ExecutingInstruction(object? sender, EventArgs e) => this._preExecute++;
+
+ ///////////////////////////////////////////////////
+
+ private int _preReads = 0;
+ private int _postReads = 0;
+
+ private int _preWrites = 0;
+ private int _postWrites = 0;
+
+ private void RemoveMemoryEvents()
+ {
+ this._processor.ReadingMemory -= Processor_ReadingMemory;
+ this._processor.ReadMemory -= Processor_ReadMemory;
+ this._processor.WritingMemory -= Processor_WritingMemory;
+ this._processor.WrittenMemory -= Processor_WrittenMemory;
+ }
+
+ private void AddMemoryEvents()
+ {
+ this._processor.ReadingMemory += Processor_ReadingMemory;
+ this._processor.ReadMemory += Processor_ReadMemory;
+ this._processor.WritingMemory += Processor_WritingMemory;
+ this._processor.WrittenMemory += Processor_WrittenMemory;
+ }
+
+ private void Processor_ReadingMemory(object? sender, EventArgs e) => this._preReads++;
+
+ private void Processor_ReadMemory(object? sender, EventArgs e) => this._postReads++;
+
+ private void Processor_WrittenMemory(object? sender, EventArgs e) =>this._postWrites++;
+
+ private void Processor_WritingMemory(object? sender, EventArgs e) =>this._preWrites++;
+ }
+}
\ No newline at end of file
diff --git a/EightBit.Benchmark/BenchmarkRegister16.cs b/EightBit.Benchmark/BenchmarkRegister16.cs
new file mode 100644
index 0000000..3498e3c
--- /dev/null
+++ b/EightBit.Benchmark/BenchmarkRegister16.cs
@@ -0,0 +1,32 @@
+using BenchmarkDotNet.Attributes;
+
+namespace EightBit.Benchmark
+{
+ public class BenchmarkRegister16
+ {
+ private readonly Register16 _contents = new(0xde, 0xad);
+ private readonly Register16 _source = new(0xbe, 0xef);
+
+ [Benchmark]
+ public ushort Increment()
+ {
+ this._contents.Increment();
+ return this._contents.Joined;
+ }
+
+ [Benchmark]
+ public ushort AssignViaRegister()
+ {
+ this._source.Increment();
+ this._contents.Assign(this._source);
+ return this._contents.Joined;
+ }
+
+ [Benchmark]
+ public ushort AssignViaValues()
+ {
+ this._contents.Assign(0x01, 0x02);
+ return this._contents.Joined;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EightBit.Benchmark/EightBit.Benchmark.csproj b/EightBit.Benchmark/EightBit.Benchmark.csproj
new file mode 100644
index 0000000..1d66880
--- /dev/null
+++ b/EightBit.Benchmark/EightBit.Benchmark.csproj
@@ -0,0 +1,18 @@
+
+
+
+ Exe
+ net10.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/EightBit.Benchmark/Program.cs b/EightBit.Benchmark/Program.cs
new file mode 100644
index 0000000..989d570
--- /dev/null
+++ b/EightBit.Benchmark/Program.cs
@@ -0,0 +1,3 @@
+using BenchmarkDotNet.Running;
+
+var summary = BenchmarkRunner.Run(typeof(Program).Assembly);
diff --git a/EightBit.Benchmark/SealedBus.cs b/EightBit.Benchmark/SealedBus.cs
new file mode 100644
index 0000000..fb38b93
--- /dev/null
+++ b/EightBit.Benchmark/SealedBus.cs
@@ -0,0 +1,24 @@
+using BenchmarkDotNet.Attributes;
+
+namespace EightBit.Benchmark
+{
+ class SealedBus : Bus
+ {
+ private readonly Ram _ram = new(0x10000);
+ private readonly MemoryMapping _mapping;
+
+ public SealedBus()
+ {
+ this._mapping = new(this._ram, 0, Mask.Fifteen, AccessLevel.ReadWrite);
+ }
+
+ public override MemoryMapping Mapping(ushort absolute)
+ {
+ return this._mapping;
+ }
+
+ public override void Initialize()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/EightBit/EightBit.UnitTest/EightBit.UnitTest.csproj b/EightBit/EightBit.UnitTest/EightBit.UnitTest.csproj
index 18b2ce6..689bf0e 100644
--- a/EightBit/EightBit.UnitTest/EightBit.UnitTest.csproj
+++ b/EightBit/EightBit.UnitTest/EightBit.UnitTest.csproj
@@ -26,10 +26,10 @@
-
-
-
-
+
+
+
+
diff --git a/EightBitNet.sln b/EightBitNet.sln
index 95b3a80..eb8215d 100644
--- a/EightBitNet.sln
+++ b/EightBitNet.sln
@@ -29,11 +29,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MC6809.Test", "MC6809\MC680
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MC6850", "MC6850\MC6850.csproj", "{1609FDDB-123C-4F4C-ABF2-8B9467D21679}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Z80", "Z80\Z80.csproj", "{BFA64991-7EDE-4871-93B2-F6B3704C3889}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Zilog", "Z80\Zilog.csproj", "{BFA64991-7EDE-4871-93B2-F6B3704C3889}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Z80.FuseTest", "Z80\Z80.FuseTest\Z80.FuseTest.csproj", "{7124884D-0D57-4C8D-848F-A75AC73BA595}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Zilog.Z80.FuseTest", "Z80\Z80.FuseTest\Zilog.Z80.FuseTest.csproj", "{7124884D-0D57-4C8D-848F-A75AC73BA595}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Z80.Test", "Z80\Z80.Test\Z80.Test.csproj", "{E6AE640E-4A42-4D8F-8ECE-2FBEBC29741B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Zilog.Z80.Test", "Z80\Z80.Test\Zilog.Z80.Test.csproj", "{E6AE640E-4A42-4D8F-8ECE-2FBEBC29741B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "M6502.HarteTest", "M6502\M6502.HarteTest\M6502.HarteTest.csproj", "{8686B0DC-A431-4239-836E-ABC90BD69920}"
EndProject
@@ -43,12 +43,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SM83.HarteTest", "LR35902\S
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EightBit.UnitTest", "EightBit\EightBit.UnitTest\EightBit.UnitTest.csproj", "{A8B3D819-0E84-4586-ADB1-D57AB1A8165B}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Z80.UnitTests", "Z80\Z80.UnitTests\Z80.UnitTests.csproj", "{DB313D5B-9DC3-4844-9916-925678967112}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zilog.Z80.UnitTests", "Z80\Z80.UnitTests\Zilog.Z80.UnitTests.csproj", "{DB313D5B-9DC3-4844-9916-925678967112}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Z80.HarteTest", "Z80\Z80.HarteTest\Z80.HarteTest.csproj", "{63132DC1-94BC-4B00-9AE3-B95A9C9BC663}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zilog.Z80.HarteTest", "Z80\Z80.HarteTest\Zilog.Z80.HarteTest.csproj", "{63132DC1-94BC-4B00-9AE3-B95A9C9BC663}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gaming", "Gaming\Gaming.csproj", "{C659EDDC-5DC6-4BFB-839F-7B810F924B55}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EightBit.Benchmark", "EightBit.Benchmark\EightBit.Benchmark.csproj", "{670DCC51-9820-436D-9977-EC5FD7FD646D}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -147,6 +149,10 @@ Global
{C659EDDC-5DC6-4BFB-839F-7B810F924B55}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C659EDDC-5DC6-4BFB-839F-7B810F924B55}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C659EDDC-5DC6-4BFB-839F-7B810F924B55}.Release|Any CPU.Build.0 = Release|Any CPU
+ {670DCC51-9820-436D-9977-EC5FD7FD646D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {670DCC51-9820-436D-9977-EC5FD7FD646D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {670DCC51-9820-436D-9977-EC5FD7FD646D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {670DCC51-9820-436D-9977-EC5FD7FD646D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Gaming/Gaming.csproj b/Gaming/Gaming.csproj
index ecb55e0..8eacf4f 100644
--- a/Gaming/Gaming.csproj
+++ b/Gaming/Gaming.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/LR35902/SM83.HarteTest/SM83.HarteTest.csproj b/LR35902/SM83.HarteTest/SM83.HarteTest.csproj
index d8d0428..790ad69 100644
--- a/LR35902/SM83.HarteTest/SM83.HarteTest.csproj
+++ b/LR35902/SM83.HarteTest/SM83.HarteTest.csproj
@@ -24,10 +24,10 @@
-
-
-
-
+
+
+
+
diff --git a/M6502/M6502.HarteTest/M6502.HarteTest.csproj b/M6502/M6502.HarteTest/M6502.HarteTest.csproj
index 663cd3e..8e8325a 100644
--- a/M6502/M6502.HarteTest/M6502.HarteTest.csproj
+++ b/M6502/M6502.HarteTest/M6502.HarteTest.csproj
@@ -24,10 +24,10 @@
-
-
-
-
+
+
+
+
diff --git a/MC6809/MC6809.UnitTest/MC6809.UnitTest.csproj b/MC6809/MC6809.UnitTest/MC6809.UnitTest.csproj
index c9d9c55..2cada99 100644
--- a/MC6809/MC6809.UnitTest/MC6809.UnitTest.csproj
+++ b/MC6809/MC6809.UnitTest/MC6809.UnitTest.csproj
@@ -28,10 +28,10 @@
-
-
-
-
+
+
+
+
diff --git a/Z80/Disassembler.cs b/Z80/Disassembler.cs
index 51737db..23dac4d 100644
--- a/Z80/Disassembler.cs
+++ b/Z80/Disassembler.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80
+namespace Zilog
{
using EightBit;
using System.Globalization;
diff --git a/Z80/Labels.cs b/Z80/Labels.cs
index 99c0786..b2f0ce1 100644
--- a/Z80/Labels.cs
+++ b/Z80/Labels.cs
@@ -1,4 +1,4 @@
-namespace Z80
+namespace Zilog
{
using System.Diagnostics;
using System.Globalization;
diff --git a/Z80/RefreshRegister.cs b/Z80/RefreshRegister.cs
index 59b3ff4..0ef7dca 100644
--- a/Z80/RefreshRegister.cs
+++ b/Z80/RefreshRegister.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80
+namespace Zilog
{
using EightBit;
diff --git a/Z80/RegisterIndex.cs b/Z80/RegisterIndex.cs
index 7e61d3a..b25573d 100644
--- a/Z80/RegisterIndex.cs
+++ b/Z80/RegisterIndex.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80
+namespace Zilog
{
public enum RegisterIndex
{
diff --git a/Z80/StatusBits.cs b/Z80/StatusBits.cs
index f0412b8..2c6882a 100644
--- a/Z80/StatusBits.cs
+++ b/Z80/StatusBits.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80
+namespace Zilog
{
using EightBit;
diff --git a/Z80/Z80.FuseTest/Program.cs b/Z80/Z80.FuseTest/Program.cs
index 0a6c806..c4e71d8 100644
--- a/Z80/Z80.FuseTest/Program.cs
+++ b/Z80/Z80.FuseTest/Program.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-using Z80.FuseTest;
+using Zilog.FuseTest;
var suite = new TestSuite("fuse-tests\\tests");
suite.Read();
diff --git a/Z80/Z80.FuseTest/RegisterState.cs b/Z80/Z80.FuseTest/RegisterState.cs
index 1b38255..40d5c3e 100644
--- a/Z80/Z80.FuseTest/RegisterState.cs
+++ b/Z80/Z80.FuseTest/RegisterState.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.FuseTest
+namespace Zilog.FuseTest
{
using Fuse;
using System.Globalization;
diff --git a/Z80/Z80.FuseTest/TestRunner.cs b/Z80/Z80.FuseTest/TestRunner.cs
index 62cac83..faa34bb 100644
--- a/Z80/Z80.FuseTest/TestRunner.cs
+++ b/Z80/Z80.FuseTest/TestRunner.cs
@@ -2,11 +2,12 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.FuseTest
+namespace Zilog.FuseTest
{
using Fuse;
using System.Collections.Generic;
using System.Diagnostics;
+ using Zilog;
internal enum Register
{
diff --git a/Z80/Z80.FuseTest/TestSuite.cs b/Z80/Z80.FuseTest/TestSuite.cs
index db3d00e..940aad4 100644
--- a/Z80/Z80.FuseTest/TestSuite.cs
+++ b/Z80/Z80.FuseTest/TestSuite.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.FuseTest
+namespace Zilog.FuseTest
{
using Fuse;
diff --git a/Z80/Z80.FuseTest/Z80.FuseTest.csproj b/Z80/Z80.FuseTest/Zilog.Z80.FuseTest.csproj
similarity index 94%
rename from Z80/Z80.FuseTest/Z80.FuseTest.csproj
rename to Z80/Z80.FuseTest/Zilog.Z80.FuseTest.csproj
index 490eefd..d477ed4 100644
--- a/Z80/Z80.FuseTest/Z80.FuseTest.csproj
+++ b/Z80/Z80.FuseTest/Zilog.Z80.FuseTest.csproj
@@ -21,7 +21,7 @@
-
+
diff --git a/Z80/Z80.HarteTest/Checker.cs b/Z80/Z80.HarteTest/Checker.cs
index 3541bdd..15cce37 100644
--- a/Z80/Z80.HarteTest/Checker.cs
+++ b/Z80/Z80.HarteTest/Checker.cs
@@ -1,4 +1,4 @@
-namespace Z80.HarteTest
+namespace Zilog.HarteTest
{
using EightBit;
using System.Collections.Generic;
diff --git a/Z80/Z80.HarteTest/Cycle.cs b/Z80/Z80.HarteTest/Cycle.cs
index 0c316be..dbf15ab 100644
--- a/Z80/Z80.HarteTest/Cycle.cs
+++ b/Z80/Z80.HarteTest/Cycle.cs
@@ -1,4 +1,4 @@
-namespace Z80.HarteTest
+namespace Zilog.HarteTest
{
using System.Diagnostics;
diff --git a/Z80/Z80.HarteTest/OpcodeTestSuite.cs b/Z80/Z80.HarteTest/OpcodeTestSuite.cs
index b742108..d9cdc14 100644
--- a/Z80/Z80.HarteTest/OpcodeTestSuite.cs
+++ b/Z80/Z80.HarteTest/OpcodeTestSuite.cs
@@ -1,4 +1,4 @@
-namespace Z80.HarteTest
+namespace Zilog.HarteTest
{
using System.Runtime.CompilerServices;
using System.Text.Json;
diff --git a/Z80/Z80.HarteTest/Port.cs b/Z80/Z80.HarteTest/Port.cs
index 1e89b87..c073266 100644
--- a/Z80/Z80.HarteTest/Port.cs
+++ b/Z80/Z80.HarteTest/Port.cs
@@ -1,6 +1,6 @@
using System.Diagnostics;
-namespace Z80.HarteTest
+namespace Zilog.HarteTest
{
// Cycle-by-cycle breakdown of bus activity
internal sealed class Port
diff --git a/Z80/Z80.HarteTest/SingleStepTests.cs b/Z80/Z80.HarteTest/SingleStepTests.cs
index 41f8fbe..ca4ec57 100644
--- a/Z80/Z80.HarteTest/SingleStepTests.cs
+++ b/Z80/Z80.HarteTest/SingleStepTests.cs
@@ -1,7 +1,7 @@
//
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.HarteTest
+namespace Zilog.HarteTest
{
using System.Reflection;
diff --git a/Z80/Z80.HarteTest/State.cs b/Z80/Z80.HarteTest/State.cs
index efdef05..ce033d7 100644
--- a/Z80/Z80.HarteTest/State.cs
+++ b/Z80/Z80.HarteTest/State.cs
@@ -1,4 +1,4 @@
-namespace Z80.HarteTest
+namespace Zilog.HarteTest
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1812:Avoid uninstantiated internal classes", Justification = "Instantiated by JSON deserializer")]
internal sealed class State
diff --git a/Z80/Z80.HarteTest/Test.cs b/Z80/Z80.HarteTest/Test.cs
index 58f6577..27f25df 100644
--- a/Z80/Z80.HarteTest/Test.cs
+++ b/Z80/Z80.HarteTest/Test.cs
@@ -1,4 +1,4 @@
-namespace Z80.HarteTest
+namespace Zilog.HarteTest
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1812:Avoid uninstantiated internal classes", Justification = "Instantiated by JSON deserializer")]
internal sealed class Test
diff --git a/Z80/Z80.HarteTest/TestRunner.cs b/Z80/Z80.HarteTest/TestRunner.cs
index 952a07a..ff48980 100644
--- a/Z80/Z80.HarteTest/TestRunner.cs
+++ b/Z80/Z80.HarteTest/TestRunner.cs
@@ -1,6 +1,7 @@
-namespace Z80.HarteTest
+namespace Zilog.HarteTest
{
using EightBit;
+ using Zilog;
internal sealed class TestRunner : Bus
{
diff --git a/Z80/Z80.UnitTests/Z80.UnitTests.csproj b/Z80/Z80.HarteTest/Zilog.Z80.HarteTest.csproj
similarity index 86%
rename from Z80/Z80.UnitTests/Z80.UnitTests.csproj
rename to Z80/Z80.HarteTest/Zilog.Z80.HarteTest.csproj
index 130b909..5629e81 100644
--- a/Z80/Z80.UnitTests/Z80.UnitTests.csproj
+++ b/Z80/Z80.HarteTest/Zilog.Z80.HarteTest.csproj
@@ -1,4 +1,4 @@
-
+
net10.0
@@ -24,15 +24,15 @@
-
-
-
-
+
+
+
+
-
+
diff --git a/Z80/Z80.Test/Board.cs b/Z80/Z80.Test/Board.cs
index 14eca16..a9c11f6 100644
--- a/Z80/Z80.Test/Board.cs
+++ b/Z80/Z80.Test/Board.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.Test
+namespace Zilog.Test
{
using EightBit;
using System.Globalization;
diff --git a/Z80/Z80.Test/Configuration.cs b/Z80/Z80.Test/Configuration.cs
index 74288f7..736fb79 100644
--- a/Z80/Z80.Test/Configuration.cs
+++ b/Z80/Z80.Test/Configuration.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.Test
+namespace Zilog.Test
{
using EightBit;
diff --git a/Z80/Z80.Test/Program.cs b/Z80/Z80.Test/Program.cs
index bb1e017..57aceec 100644
--- a/Z80/Z80.Test/Program.cs
+++ b/Z80/Z80.Test/Program.cs
@@ -2,7 +2,7 @@
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.Test
+namespace Zilog.Test
{
using EightBit;
diff --git a/Z80/Z80.Test/Z80.Test.csproj b/Z80/Z80.Test/Zilog.Z80.Test.csproj
similarity index 93%
rename from Z80/Z80.Test/Z80.Test.csproj
rename to Z80/Z80.Test/Zilog.Z80.Test.csproj
index 77c418c..caa1e4b 100644
--- a/Z80/Z80.Test/Z80.Test.csproj
+++ b/Z80/Z80.Test/Zilog.Z80.Test.csproj
@@ -20,7 +20,7 @@
-
+
diff --git a/Z80/Z80.UnitTests/Board.cs b/Z80/Z80.UnitTests/Board.cs
index 4c267c8..8ea0965 100644
--- a/Z80/Z80.UnitTests/Board.cs
+++ b/Z80/Z80.UnitTests/Board.cs
@@ -1,9 +1,10 @@
//
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.UnitTests
+namespace Zilog.Z80.UnitTests
{
using EightBit;
+ using Zilog;
public sealed class Board : Bus
{
diff --git a/Z80/Z80.UnitTests/HaltTests.cs b/Z80/Z80.UnitTests/HaltTests.cs
index c1aa15e..d833198 100644
--- a/Z80/Z80.UnitTests/HaltTests.cs
+++ b/Z80/Z80.UnitTests/HaltTests.cs
@@ -1,9 +1,10 @@
//
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.UnitTests
+namespace Zilog.Z80.UnitTests
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using Zilog;
[TestClass]
public class HaltTests
diff --git a/Z80/Z80.UnitTests/IffTests.cs b/Z80/Z80.UnitTests/IffTests.cs
index 7006e25..a4ef024 100644
--- a/Z80/Z80.UnitTests/IffTests.cs
+++ b/Z80/Z80.UnitTests/IffTests.cs
@@ -1,9 +1,10 @@
//
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.UnitTests
+namespace Zilog.Z80.UnitTests
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using Zilog;
[TestClass]
public class IffTests
diff --git a/Z80/Z80.UnitTests/IntTests.cs b/Z80/Z80.UnitTests/IntTests.cs
index 1178252..e2f5895 100644
--- a/Z80/Z80.UnitTests/IntTests.cs
+++ b/Z80/Z80.UnitTests/IntTests.cs
@@ -1,9 +1,10 @@
//
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.UnitTests
+namespace Zilog.Z80.UnitTests
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using Zilog;
[TestClass]
public class IntTests
diff --git a/Z80/Z80.UnitTests/NmiTests.cs b/Z80/Z80.UnitTests/NmiTests.cs
index ab42205..63b45c9 100644
--- a/Z80/Z80.UnitTests/NmiTests.cs
+++ b/Z80/Z80.UnitTests/NmiTests.cs
@@ -1,9 +1,10 @@
//
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.UnitTests
+namespace Zilog.Z80.UnitTests
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using Zilog;
[TestClass]
public class NmiTests
diff --git a/Z80/Z80.UnitTests/ResetTests.cs b/Z80/Z80.UnitTests/ResetTests.cs
index 7583292..1636b45 100644
--- a/Z80/Z80.UnitTests/ResetTests.cs
+++ b/Z80/Z80.UnitTests/ResetTests.cs
@@ -1,9 +1,10 @@
//
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80.UnitTests
+namespace Zilog.Z80.UnitTests
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
+ using Zilog;
[TestClass]
public class ResetTests
diff --git a/Z80/Z80.HarteTest/Z80.HarteTest.csproj b/Z80/Z80.UnitTests/Zilog.Z80.UnitTests.csproj
similarity index 88%
rename from Z80/Z80.HarteTest/Z80.HarteTest.csproj
rename to Z80/Z80.UnitTests/Zilog.Z80.UnitTests.csproj
index 130b909..08b58b3 100644
--- a/Z80/Z80.HarteTest/Z80.HarteTest.csproj
+++ b/Z80/Z80.UnitTests/Zilog.Z80.UnitTests.csproj
@@ -24,15 +24,15 @@
-
-
-
-
+
+
+
+
-
+
diff --git a/Z80/Z80.cs b/Z80/Z80.cs
index ff5023f..3fe982b 100644
--- a/Z80/Z80.cs
+++ b/Z80/Z80.cs
@@ -1,8 +1,8 @@
-//
+//
// Copyright (c) Adrian Conlon. All rights reserved.
//
-namespace Z80
+namespace Zilog
{
using EightBit;
using System.Diagnostics;
diff --git a/Z80/Z80.csproj b/Z80/Zilog.csproj
similarity index 100%
rename from Z80/Z80.csproj
rename to Z80/Zilog.csproj