Exemplo n.º 1
0
        public void _Fx1E_add_I_Vx()
        {
            var registers = new RegisterModule();

            registers.SetGeneralValue(0,
                                      0x12);

            registers.SetI(0x123);

            var emulator = CHIP8Factory.GetChip8(registers: registers);

            var instructions = new byte[]
            {
                0xF0,                    //Add v0 and I, store in I
                0x1E
            };

            emulator.LoadProgram(instructions);

            emulator.Tick += (e,
                              a) =>
            {
                emulator.Stop();
            };

            emulator.Start();

            Assert.Equal(0x123 + 0x12,
                         registers.GetI());
        }
Exemplo n.º 2
0
        public void _Fx33_LD_B_Vx()
        {
            /*
             * Stores the BCD of vx in I, I+1, and I+2 of memory
             * 125:
             * Hex: 0x7D
             * BCD: 0001 0010 0101
             */

            var registers = new RegisterModule();

            registers.SetGeneralValue(0,
                                      0x7D);

            registers.SetI(0x123);

            var memory = new MemoryModule(Enumerable.Repeat((byte)0x0,
                                                            4096));

            var emulator = CHIP8Factory.GetChip8(registers: registers,
                                                 mem: memory);

            var instructions = new byte[]
            {
                0xF0,                    //Store BCD of v0 in memory
                0x33
            };

            emulator.LoadProgram(instructions);

            emulator.Tick += (e,
                              a) =>
            {
                emulator.Stop();
            };

            emulator.Start();

            var startPoint = registers.GetI();

            var hundreds = memory[startPoint];

            startPoint++;

            var tens = memory[startPoint];

            startPoint++;

            var ones = memory[startPoint];

            Assert.Equal(0x1,
                         hundreds);

            Assert.Equal(0x2,
                         tens);

            Assert.Equal(0x5,
                         ones);
        }
Exemplo n.º 3
0
        public void _Annn_LD_I_addr()
        {
            var registers = new RegisterModule();

            var emulator = CHIP8Factory.GetChip8(registers: registers);

            var instructions = new byte[]
            {
                0xA1,
                0x23
            };

            emulator.LoadProgram(instructions);

            emulator.Start();

            Assert.Equal(0x123,
                         registers.GetI());
        }
Exemplo n.º 4
0
        public void _Fx65_LD_Vx_I()
        {
            /*
             * Set registers v0 through vx from memory starting at I
             */

            var registers = new RegisterModule();

            registers.SetI(0x278);

            var startPoint = registers.GetI();

            var memory = new MemoryModule(Enumerable.Repeat((byte)0x0,
                                                            4096));

            memory[startPoint] = 0x7D;

            startPoint++;

            memory[startPoint] = 0x55;

            startPoint++;

            memory[startPoint] = 0x18;

            startPoint++;

            memory[startPoint] = 0x90;

            var emulator = CHIP8Factory.GetChip8(registers: registers,
                                                 mem: memory);

            var instructions = new byte[]
            {
                0xF3,                    //Set v0 - v3 from memory
                0x65
            };

            emulator.LoadProgram(instructions);

            emulator.Tick += (e,
                              a) =>
            {
                emulator.Stop();
            };

            emulator.Start();

            var v0 = registers.GetGeneralValue(0);

            var v1 = registers.GetGeneralValue(1);

            var v2 = registers.GetGeneralValue(2);

            var v3 = registers.GetGeneralValue(3);

            Assert.Equal(0x7D,
                         v0);
            Assert.Equal(0x55,
                         v1);
            Assert.Equal(0x18,
                         v2);
            Assert.Equal(0x90,
                         v3);
        }