public int Add(PUSH item) { if (!Contains(item)) { return(this.List.Add(item)); } return(0); }
public PUSH[] InnerList() { PUSH[] list = new PUSH[this.Count]; for (int i = 0; i < this.Count; i++) { list[i] = this[i]; } return(list); }
public void TestPOP() { MemoryModel.SetAddressBusLength = 20; MemoryModel memory = MemoryModel.GetInstance(); GeneralPurposeRegisters generalRegistersMock = new GeneralPurposeRegisters(); SegmentRegisters segmentRegistersMock = new SegmentRegisters(); PointerRegisters pointerRegistersMock = new PointerRegisters(); LoggerMock loggerMock = new LoggerMock(); RegistryCommander registryCommand = new RegistryCommander(loggerMock); POP pop = new POP(generalRegistersMock, pointerRegistersMock, segmentRegistersMock); PUSH push = new PUSH(generalRegistersMock, pointerRegistersMock, segmentRegistersMock); XCHG xchg = new XCHG(generalRegistersMock, segmentRegistersMock); MOV mov = new MOV(generalRegistersMock, segmentRegistersMock); AssignToRegistry assignTo = new AssignToRegistry(generalRegistersMock, pointerRegistersMock, segmentRegistersMock); registryCommand.AddHandler(pop); registryCommand.AddHandler(push); registryCommand.AddHandler(xchg); registryCommand.AddHandler(mov); registryCommand.AddHandler(assignTo); byte[] word; registryCommand.InputCommand("ax 1122"); registryCommand.InputCommand("push ax"); registryCommand.InputCommand("pop cx"); word = generalRegistersMock.GetRegistry("CX"); Assert.AreEqual(34, word[0]); Assert.AreEqual(17, word[1]); Assert.AreEqual("Value 1122h from physical address 0h popped from stack to registry CX.\r\n", loggerMock.outputResult); word = pointerRegistersMock.GetRegistry("SP"); Assert.AreEqual(0, word[0]); registryCommand.InputCommand("ax FFEE"); registryCommand.InputCommand("bx AA99"); registryCommand.InputCommand("SS FF"); registryCommand.InputCommand("push ax"); registryCommand.InputCommand("push bx"); registryCommand.InputCommand("pop dx"); word = generalRegistersMock.GetRegistry("DX"); Assert.AreEqual(153, word[0]); Assert.AreEqual(170, word[1]); Assert.AreEqual("Value AA99h from physical address FF2h popped from stack to registry DX.\r\n", loggerMock.outputResult); word = pointerRegistersMock.GetRegistry("SP"); Assert.AreEqual(2, word[0]); }
public void TestPUSH() { MemoryModel.SetAddressBusLength = 20; MemoryModel memory = MemoryModel.GetInstance(); GeneralPurposeRegisters generalRegistersMock = new GeneralPurposeRegisters(); SegmentRegisters segmentRegistersMock = new SegmentRegisters(); PointerRegisters pointerRegistersMock = new PointerRegisters(); LoggerMock loggerMock = new LoggerMock(); RegistryCommander registryCommand = new RegistryCommander(loggerMock); PUSH push = new PUSH(generalRegistersMock, pointerRegistersMock, segmentRegistersMock); XCHG xchg = new XCHG(generalRegistersMock, segmentRegistersMock); MOV mov = new MOV(generalRegistersMock, segmentRegistersMock); AssignToRegistry assignTo = new AssignToRegistry(generalRegistersMock, pointerRegistersMock, segmentRegistersMock); registryCommand.AddHandler(push); registryCommand.AddHandler(xchg); registryCommand.AddHandler(mov); registryCommand.AddHandler(assignTo); byte[] word; registryCommand.InputCommand("ax 1122"); registryCommand.InputCommand("push ax"); word = memory.GetMemoryWord(0); Assert.AreEqual(word[0], 34); Assert.AreEqual(word[1], 17); Assert.AreEqual("Value 1122h from registry AX pushed on stack with physical address 0h.\r\n", loggerMock.outputResult); word = pointerRegistersMock.GetRegistry("SP"); Assert.AreEqual(word[0], 2); registryCommand.InputCommand("ax FFEE"); registryCommand.InputCommand("bx AA99"); registryCommand.InputCommand("SS FF"); registryCommand.InputCommand("push ax"); registryCommand.InputCommand("push bx"); word = memory.GetMemoryWord(4083); Assert.AreEqual(word[0], 255); Assert.AreEqual(word[1], 153); Assert.AreEqual("Value AA99h from registry BX pushed on stack with physical address FF4h.\r\n", loggerMock.outputResult); word = pointerRegistersMock.GetRegistry("SP"); Assert.AreEqual(word[0], 6); }
private CommandInterpreter InitDefaultRegistryCommander() { RegistryCommander commander = new RegistryCommander(this); POP pop = new POP(generalPurposeRegisters, pointerRegisters, segmentRegisters); PUSH push = new PUSH(generalPurposeRegisters, pointerRegisters, segmentRegisters); XCHG xchg = new XCHG(generalPurposeRegisters, indexRegisters, pointerRegisters, segmentRegisters); MOV mov = new MOV(generalPurposeRegisters, indexRegisters, pointerRegisters, segmentRegisters); AssignToRegistry assignTo = new AssignToRegistry(generalPurposeRegisters, indexRegisters, pointerRegisters, segmentRegisters); commander.AddHandler(pop); commander.AddHandler(push); commander.AddHandler(xchg); commander.AddHandler(mov); commander.AddHandler(assignTo); return(commander); }
public static void AssociateOpcodes() { instructions[0] = new NOP(); instructions[1] = new PRNT(); instructions[16] = new PUSH(); instructions[17] = new POP(); instructions[18] = new SAVE(); instructions[19] = new CPY(); instructions[20] = new RNDM(); instructions[21] = new EMPTY(); instructions[128] = new ADD(); instructions[129] = new SUB(); instructions[130] = new MUL(); instructions[131] = new DIV(); instructions[132] = new SUB2(); instructions[133] = new DIV2(); instructions[134] = new NEG(); instructions[135] = new ABS(); instructions[144] = new INC(); instructions[145] = new DEC(); instructions[64] = new JMP(); instructions[65] = new JGZ(); instructions[66] = new JLZ(); instructions[67] = new JEZ(); instructions[68] = new JNZ(); instructions[69] = new CALL(); instructions[70] = new RET(); instructions[71] = new LDLOC(); instructions[72] = new STLOC(); instructions[73] = new LDARG(); instructions[74] = new STARG(); instructions[0b10100100] = new CMP();
public void TestInvalidPUSHCommand() { MemoryModel.SetAddressBusLength = 20; GeneralPurposeRegisters registersMock = new GeneralPurposeRegisters(); LoggerMock loggerMock = new LoggerMock(); RegistryCommander registryCommand = new RegistryCommander(loggerMock); PUSH push = new PUSH(registersMock); registryCommand.AddHandler(push); registryCommand.InputCommand("push"); Assert.AreEqual(loggerMock.outputResult, "Pushing registry on stack requires two arguments."); registryCommand.InputCommand("push ak"); Assert.AreEqual(loggerMock.outputResult, "AK is unsupported registry name.\r\n"); registryCommand.InputCommand("push ax"); Assert.AreEqual(loggerMock.outputResult, "Command interpreter couldn't find SP registry.\r\n"); registryCommand = new RegistryCommander(loggerMock); push = new PUSH(registersMock, new PointerRegisters()); registryCommand.AddHandler(push); registryCommand.InputCommand("push ax"); Assert.AreEqual(loggerMock.outputResult, "Command interpreter couldn't find SS registry.\r\n"); registryCommand = new RegistryCommander(loggerMock); push = new PUSH(registersMock, new PointerRegisters(), new SegmentRegisters()); registryCommand.AddHandler(push); registryCommand.InputCommand("push ah"); Assert.AreEqual(loggerMock.outputResult, "Cannot use command PUSH for half registers.\r\n"); MemoryModel.SetAddressBusLength = 0; }
public NMIHandler(Z80Cpu cpu) { _pcPush = new PUSH(cpu, WideRegister.PC); _restartInstruction = new RST(cpu, 0x66); }
public void Test_PUSH(byte opcode) { ushort sp = 0x4242; var expectedState = new CpuState(); expectedState.StackPointer = (ushort)(sp - 2); var actualState = new CpuState(); actualState.StackPointer = sp; actualState.Registers.BC = 0x1111; expectedState.Registers.BC = 0x1111; actualState.Registers.DE = 0x2222; expectedState.Registers.DE = 0x2222; actualState.Registers.HL = 0x3333; expectedState.Registers.HL = 0x3333; expectedState.Registers.F = 0x44; expectedState.Registers.A = 0x55; actualState.Registers.F = 0x44; actualState.Registers.A = 0x55; var memoryMock = new Mock <IRandomAccessMemory>(); var instruction = new PUSH(); instruction.Initialize(opcode); //act while (!instruction.IsFetchNecessary()) { instruction.ExecuteCycle(actualState, memoryMock.Object); } //assert TestHelper.AssertCpuState(expectedState, actualState); switch (opcode) { case 0xC5: memoryMock.Verify(m => m.WriteByte((ushort)(sp - 1), actualState.Registers.B), Times.Once); memoryMock.Verify(m => m.WriteByte((ushort)(sp - 2), actualState.Registers.C), Times.Once); break; case 0xD5: memoryMock.Verify(m => m.WriteByte((ushort)(sp - 1), actualState.Registers.D), Times.Once); memoryMock.Verify(m => m.WriteByte((ushort)(sp - 2), actualState.Registers.E), Times.Once); break; case 0xE5: memoryMock.Verify(m => m.WriteByte((ushort)(sp - 1), actualState.Registers.H), Times.Once); memoryMock.Verify(m => m.WriteByte((ushort)(sp - 2), actualState.Registers.L), Times.Once); break; case 0xF5: memoryMock.Verify(m => m.WriteByte((ushort)(sp - 1), actualState.Registers.A), Times.Once); memoryMock.Verify(m => m.WriteByte((ushort)(sp - 2), actualState.Registers.F), Times.Once); break; } }
public bool Contains(PUSH item) { return(this.List.Contains(item)); }
public void Remove(PUSH push) { this.List.Remove(push); }