public void RRCA_GeneratesCarry() { // --- Arrange var m = new Z80TestMachine(RunMode.UntilEnd); m.InitCode(new byte[] { 0x3E, 0x41, // LD A,01H 0x0F // RRCA }); // --- Act m.Run(); // --- Assert var regs = m.Cpu.Registers; m.ShouldKeepRegisters(except: "A, F"); m.ShouldKeepMemory(); m.ShouldKeepSFlag(); m.ShouldKeepZFlag(); m.ShouldKeepPVFlag(); regs.HFlag.ShouldBeFalse(); regs.NFlag.ShouldBeFalse(); regs.CFlag.ShouldBeTrue(); regs.A.ShouldBe((byte)0xA0); regs.PC.ShouldBe((ushort)0x0003); m.Cpu.Tacts.ShouldBe(11L); }
public void ADD_HL_BC_GeneratesHalfOverflow() { // --- Arrange var m = new Z80TestMachine(RunMode.UntilEnd); m.InitCode(new byte[] { 0x21, 0x34, 0x1F, // LD HL,1F34H 0x01, 0x02, 0x11, // LD BC,1102H 0x09 // ADD HL,BC }); // --- Act m.Run(); // --- Assert var regs = m.Cpu.Registers; m.ShouldKeepRegisters(except: "F, BC, HL"); m.ShouldKeepMemory(); m.ShouldKeepSFlag(); m.ShouldKeepZFlag(); m.ShouldKeepPVFlag(); regs.NFlag.ShouldBeFalse(); regs.CFlag.ShouldBeFalse(); regs.HFlag.ShouldBeTrue(); regs.HL.ShouldBe((ushort)0x3036); regs.PC.ShouldBe((ushort)0x0007); m.Cpu.Tacts.ShouldBe(31L); }
public void RRA_UsesCarry() { // --- Arrange var m = new Z80TestMachine(RunMode.UntilEnd); m.InitCode(new byte[] { 0x3E, 0x20, // LD A,20H 0x37, // SCF 0x1F // RRA }); // --- Act m.Run(); // --- Assert var regs = m.Cpu.Registers; m.ShouldKeepRegisters(except: "A, F"); m.ShouldKeepMemory(); m.ShouldKeepSFlag(); m.ShouldKeepZFlag(); m.ShouldKeepPVFlag(); regs.HFlag.ShouldBeFalse(); regs.NFlag.ShouldBeFalse(); regs.CFlag.ShouldBeFalse(); regs.A.ShouldBe((byte)0x90); regs.PC.ShouldBe((ushort)0x0004); m.Cpu.Tacts.ShouldBe(15L); }
public void RLCA_WorksAsExpected() { // --- Arrange var m = new Z80TestMachine(RunMode.UntilEnd); m.InitCode(new byte[] { 0x3E, 0x71, // LD A,71H 0x07 // RLCA }); // --- Act m.Run(); // --- Assert var regs = m.Cpu.Registers; m.ShouldKeepRegisters(except: "A, F"); m.ShouldKeepMemory(); m.ShouldKeepSFlag(); m.ShouldKeepZFlag(); m.ShouldKeepPVFlag(); regs.HFlag.ShouldBeFalse(); regs.NFlag.ShouldBeFalse(); regs.CFlag.ShouldBeFalse(); regs.A.ShouldBe((byte)0xE2); regs.PC.ShouldBe((ushort)0x0003); m.Cpu.Tacts.ShouldBe(11L); }
public void ADD_HL_BC_WorksAsExpected() { // --- Arrange var m = new Z80TestMachine(RunMode.UntilEnd); m.InitCode(new byte[] { 0x21, 0x34, 0x12, // LD HL,1234H 0x11, 0x02, 0x11, // LD DE,1102H 0x19 // ADD HL,DE }); // --- Act m.Run(); // --- Assert var regs = m.Cpu.Registers; m.ShouldKeepRegisters(except: "F, DE, HL"); m.ShouldKeepMemory(); m.ShouldKeepSFlag(); m.ShouldKeepZFlag(); m.ShouldKeepPVFlag(); regs.NFlag.ShouldBeFalse(); regs.CFlag.ShouldBeFalse(); regs.HFlag.ShouldBeFalse(); regs.HL.ShouldBe((ushort)0x2336); regs.PC.ShouldBe((ushort)0x0007); m.Cpu.Tacts.ShouldBe(31L); }