public void ResetWorksAsExpected() { // --- Arrange var dev = new SpectrumP3MemoryDevice(); dev.OnAttachedToVm(null); // --- Act dev.Reset(); // -- Assert dev.IsInAllRamMode.ShouldBeFalse(); dev.GetSelectedRomIndex().ShouldBe(0); dev.GetSelectedBankIndex(1).ShouldBe(5); dev.GetSelectedBankIndex(2).ShouldBe(2); dev.GetSelectedBankIndex(3).ShouldBe(0); for (var i = 0; i <= 0x3FFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0x00); } for (var i = 0x4000; i <= 0xFFFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0xFF); } for (var b = 0; b < 8; b++) { dev.PageIn(3, b); for (var i = 0xC000; i <= 0xFFFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0xFF); } } }
public void SelectRomResetsSpecialMode(int romIndex) { // --- Arrange var dev = new SpectrumP3MemoryDevice(); dev.OnAttachedToVm(null); dev.PageIn(2, 4); // --- Act var before = dev.IsInAllRamMode; dev.SelectRom(romIndex); var after = dev.IsInAllRamMode; // -- Assert before.ShouldBeTrue(); after.ShouldBeFalse(); }
public void CloneWorksAsExpectedWithChangedBanks() { // --- Arrange var dev = new SpectrumP3MemoryDevice(); dev.OnAttachedToVm(null); dev.Reset(); for (var i = 0; i < 0x4000; i++) { dev.CurrentRom[i] = 0xFC; for (var b = 0; b < 8; b++) { dev.RamBanks[b][i] = (byte)b; } } dev.PageIn(3, 4); // --- Act var cloned = dev.CloneMemory(); // -- Assert for (var i = 0; i <= 0x3FFF; i++) { cloned[i].ShouldBe((byte)0xFC); } for (var i = 0x4000; i <= 0x7FFF; i++) { cloned[i].ShouldBe((byte)0x05); } for (var i = 0x8000; i <= 0xBFFF; i++) { cloned[i].ShouldBe((byte)0x02); } for (var i = 0xC000; i <= 0xFFFF; i++) { cloned[i].ShouldBe((byte)0x04); } }
public void PageInWithSlot2GoesToSpecialMode(int bank) { // --- Arrange var dev = new SpectrumP3MemoryDevice(); dev.OnAttachedToVm(null); for (var i = 0; i < 0x4000; i++) { dev.CurrentRom[i] = 0xFF; for (var b = 0; b < 8; b++) { dev.RamBanks[b][i] = (byte)b; } } // --- Act dev.PageIn(2, bank); // --- Assert dev.IsInAllRamMode.ShouldBeTrue(); for (var i = 0; i <= 0x3FFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0x00); } for (var i = 0x4000; i <= 0x7FFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0x05); } for (var i = 0x8000; i <= 0xBFFF; i++) { dev.Read((ushort)i).ShouldBe((byte)bank); } for (var i = 0xC000; i <= 0xFFFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0x00); } }
public void PageInWithSlot3KeepsNormalMode() { // --- Arrange var dev = new SpectrumP3MemoryDevice(); dev.OnAttachedToVm(null); for (var i = 0; i < 0x4000; i++) { dev.CurrentRom[i] = 0xFF; for (var b = 0; b < 8; b++) { dev.RamBanks[b][i] = (byte)b; } } // --- Act dev.PageIn(3, 7); // --- Assert dev.SpecialMode.ShouldBeFalse(); for (var i = 0; i <= 0x3FFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0xFF); } for (var i = 0x4000; i <= 0x7FFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0x05); } for (var i = 0x8000; i <= 0xBFFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0x02); } for (var i = 0xC000; i <= 0xFFFF; i++) { dev.Read((ushort)i).ShouldBe((byte)0x07); } }