public void Test_POP(byte opcode)
        {
            ushort sp      = 0x4242;
            byte   lsbData = 0xFF;
            byte   msbData = 0x11;

            var expectedState = new CpuState();

            expectedState.StackPointer = (ushort)(sp + 2);

            switch (opcode)
            {
            case 0xC1:
                expectedState.Registers.BC = (ushort)((msbData << 8) | lsbData);
                break;

            case 0xD1:
                expectedState.Registers.DE = (ushort)((msbData << 8) | lsbData);
                break;

            case 0xE1:
                expectedState.Registers.HL = (ushort)((msbData << 8) | lsbData);
                break;

            case 0xF1:
                expectedState.Registers.F = lsbData;
                expectedState.Registers.A = msbData;
                break;
            }

            var actualState = new CpuState();

            actualState.StackPointer = sp;

            var memoryMock = new Mock <IRandomAccessMemory>();

            memoryMock.Setup(m => m.ReadByte(sp)).Returns(lsbData);
            memoryMock.Setup(m => m.ReadByte((ushort)(sp + 1))).Returns(msbData);

            var instruction = new POP();

            instruction.Initialize(opcode);

            //act
            while (!instruction.IsFetchNecessary())
            {
                instruction.ExecuteCycle(actualState, memoryMock.Object);
            }

            //assert
            TestHelper.AssertCpuState(expectedState, actualState);
            memoryMock.Verify(m => m.WriteByte(It.IsAny <ushort>(), It.IsAny <byte>()), Times.Never);
        }
Esempio n. 2
0
        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]);
        }
Esempio n. 3
0
 private bool Conn(string Server, string user, string pass)
 {
     try
     {
         pop3 = new POP(Server, user, pass, 110);
         ns   = pop3.Connect();
         if (pop3.GetNumberOfNewMessages() == "Unable")//如果登录错误
         {
             return(false);
         }
         else
         {
             return(true);
         }
     }
     catch { return(false); }
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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();
Esempio n. 6
0
        public void TestInvalidPOPCommand()
        {
            GeneralPurposeRegisters registersMock = new GeneralPurposeRegisters();
            LoggerMock        loggerMock          = new LoggerMock();
            RegistryCommander registryCommand     = new RegistryCommander(loggerMock);

            POP pop = new POP(registersMock);

            registryCommand.AddHandler(pop);

            registryCommand.InputCommand("pop");
            Assert.AreEqual("Popping to registry from stack requires two arguments.", loggerMock.outputResult);

            registryCommand.InputCommand("pop ak");
            Assert.AreEqual("AK is unsupported registry name.\r\n", loggerMock.outputResult);

            registryCommand.InputCommand("pop ax");
            Assert.AreEqual("Command interpreter couldn't find SP registry.\r\n", loggerMock.outputResult);

            registryCommand = new RegistryCommander(loggerMock);
            pop             = new POP(registersMock, new PointerRegisters());
            registryCommand.AddHandler(pop);

            registryCommand.InputCommand("pop ax");
            Assert.AreEqual("Command interpreter couldn't find SS registry.\r\n", loggerMock.outputResult);

            registryCommand = new RegistryCommander(loggerMock);
            pop             = new POP(registersMock, new PointerRegisters(), new SegmentRegisters());
            registryCommand.AddHandler(pop);

            registryCommand.InputCommand("pop al");
            Assert.AreEqual("Cannot use command POP for half registers.\r\n", loggerMock.outputResult);

            registryCommand.InputCommand("pop ax");
            Assert.AreEqual("The stack is empty, cannot perform operation.\r\n", loggerMock.outputResult);
        }
 void Start()
 {
     //popPlan = new string[5] {CLASSROOM, BATHROOM, CAFETERIA, TABLE, OUTSIDE};
     popPlan = POP.popAlgo(covidAware);
     initializeIA(popPlan);
 }
Esempio n. 8
0
    public void ddg()
    {
        POP pop = new POP("pop.126.com", "*****@*****.**", "xujinze", 110);

        pop.readMailInfo(2);
    }