Exemplo n.º 1
0
        public void TestDCX(RegisterPair pair)
        {
            var rom = AssembleSource($@"
                org 00h
                DCX {pair.GetUpperRegister()}
                DCX {pair.GetUpperRegister()}
                DCX {pair.GetUpperRegister()}
                HLT
            ");

            var registers = new CPURegisters()
            {
                [pair] = 0x3902,
            };

            var initialState = new CPUConfig()
            {
                Registers = registers,
            };

            var state = Execute(rom, initialState);

            Assert.Equal(0x38FF, state.Registers[pair]);

            AssertFlagsFalse(state);

            Assert.Equal(4, state.Iterations);
            Assert.Equal(7 + (5 * 3), state.Cycles);
            Assert.Equal(0x03, state.ProgramCounter);
        }
Exemplo n.º 2
0
        public void TestPUSH(RegisterPair pair)
        {
            var rom = AssembleSource($@"
                org 00h
                PUSH {pair.GetUpperRegister()}
                HLT
            ");

            var registers = new CPURegisters()
            {
                [pair] = 0x2477,
            };

            var initialState = new CPUConfig()
            {
                Registers    = registers,
                StackPointer = 0x3000,
            };

            var state = Execute(rom, initialState);

            Assert.Equal(0x2477, state.Registers[pair]);
            Assert.Equal(0x00, state.Memory[0x3000]);
            Assert.Equal(0x24, state.Memory[0x2FFF]);
            Assert.Equal(0x77, state.Memory[0x2FFE]);
            Assert.Equal(0x2FFE, state.StackPointer);

            AssertFlagsFalse(state);

            Assert.Equal(2, state.Iterations);
            Assert.Equal(7 + 11, state.Cycles);
            Assert.Equal(0x01, state.ProgramCounter);
        }
        public void TestDAD_Carry(RegisterPair pair)
        {
            var rom = AssembleSource($@"
                org 00h
                DAD {pair.GetUpperRegister()}
                HLT
            ");

            var registers = new CPURegisters()
            {
                HL     = 0xFFFE,
                [pair] = 0x0005,
            };

            var initialState = new CPUConfig()
            {
                Registers = registers,
            };

            var state = Execute(rom, initialState);

            Assert.Equal(0x0005, state.Registers[pair]);
            Assert.Equal(0x0003, state.Registers.HL);

            Assert.False(state.Flags.Zero);
            Assert.False(state.Flags.Sign);
            Assert.False(state.Flags.Parity);
            Assert.True(state.Flags.Carry);

            Assert.Equal(2, state.Iterations);
            Assert.Equal(7 + 10, state.Cycles);
            Assert.Equal(0x01, state.ProgramCounter);
        }
        public void TestPop(RegisterPair pair)
        {
            var rom = AssembleSource($@"
                org 00h
                POP {pair.GetUpperRegister()}
                HLT
            ");

            var memory = new byte[16384];

            memory[0x2FFE] = 0x77;
            memory[0x2FFF] = 0x24;

            var initialState = new CPUConfig()
            {
                StackPointer = 0x2FFE,
                MemorySize   = memory.Length,
            };

            var state = Execute(rom, memory, initialState);

            Assert.Equal(0x2477, state.Registers[pair]);
            Assert.Equal(0x00, state.Memory[0x3000]);
            Assert.Equal(0x24, state.Memory[0x2FFF]);
            Assert.Equal(0x77, state.Memory[0x2FFE]);
            Assert.Equal(0x3000, state.StackPointer);

            AssertFlagsFalse(state);

            Assert.Equal(2, state.Iterations);
            Assert.Equal(7 + 10, state.Cycles);
            Assert.Equal(0x01, state.ProgramCounter);
        }
        public void TestDAD_NoCarry(RegisterPair pair)
        {
            var rom = AssembleSource($@"
                org 00h
                DAD {pair.GetUpperRegister()}
                HLT
            ");

            var registers = new CPURegisters()
            {
                HL     = 0x1212,
                [pair] = 0x3434,
            };

            var flags = new ConditionFlags()
            {
                Zero   = true,
                Sign   = true,
                Parity = true,
                Carry  = false,
            };

            var initialState = new CPUConfig()
            {
                Registers = registers,
                Flags     = flags,
            };

            var state = Execute(rom, initialState);

            Assert.Equal(0x3434, state.Registers[pair]);
            Assert.Equal(0x4646, state.Registers.HL);

            // Ensure these flags remain unchanged.
            Assert.True(state.Flags.Zero);
            Assert.True(state.Flags.Sign);
            Assert.True(state.Flags.Parity);

            // No carry in this case.
            Assert.False(state.Flags.Carry);

            Assert.Equal(2, state.Iterations);
            Assert.Equal(7 + 10, state.Cycles);
            Assert.Equal(0x01, state.ProgramCounter);
        }
        public void TestLXI(RegisterPair pair)
        {
            var rom = AssembleSource($@"
                org 00h
                LXI {pair.GetUpperRegister()}, 4277h
                HLT
            ");

            var state = Execute(rom);

            Assert.Equal(0x4277, state.Registers[pair]);

            AssertFlagsFalse(state);

            Assert.Equal(2, state.Iterations);
            Assert.Equal(10 + 7, state.Cycles);
            Assert.Equal(0x03, state.ProgramCounter);
        }