void AssertReferenceOutput(string testName, ComplianceCPUSimilator sim)
        {
            var dataSectionAddress = DataSectionAddress() >> 2;
            var referenceOutput    = ReferenceOutput(testName);

            AssertMemory(sim, dataSectionAddress, referenceOutput);
        }
        ComplianceCPUSimilator Run()
        {
            var dataMarkerAddress = DataMarkerAddress();
            var sim = new ComplianceCPUSimilator(dataMarkerAddress);

            sim.ClockCycle();
            sim.RunAll(Instructions());

            return(sim);
        }
        protected void AssertMemory(ComplianceCPUSimilator sim, int testAddress, uint[] expectedValues)
        {
            for (var i = 0; i < expectedValues.Length; i++)
            {
                var actualWordAddress = testAddress + i;
                var expected          = expectedValues[i];
                var actual            = sim.MemoryBlock[actualWordAddress];

                if (expected != actual)
                {
                    throw new AssertFailedException($"Expected:<0x{expected:X8}>. Actual:<0x{actual:X8}>. Failed for value at {i} (0x{(actualWordAddress * 4):X8})");
                }
            }
        }