コード例 #1
0
ファイル: DisplayTests.cs プロジェクト: LesCol/Chip8
        public void CanShowFullTestDisplay()
        {
            var display = new TestDisplay();

            for (int y = 0; y < 32; y++)
            {
                for (int x = 0; x < 8; x++)
                {
                    display.Screen[y * 8 + x] = 0xff;
                }
            }

            display.Print();
        }
コード例 #2
0
ファイル: DisplayTests.cs プロジェクト: perfp/Chip8
        public void CanSetSpriteAtByteBorderBit()
        {
            var sprite = new byte[5];
            sprite[0] = 0xff;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);
            cpu.SetSprite(8, 0, sprite, 1);

            // 0      1       2       3
            // 0000000011111110000000000000000
            // 0x0    0xff   0x0     0x0
            Assert.AreEqual(0xff, display.Screen[1]);
        }
コード例 #3
0
ファイル: DisplayTests.cs プロジェクト: perfp/Chip8
        public void CanSetSprite1()
        {
            var sprite = new byte[5];
            sprite[0] = 0x20;
            sprite[1] = 0x60;
            sprite[2] = 0x20;
            sprite[3] = 0x20;
            sprite[4] = 0x70;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);
            cpu.SetSprite(4, 4, sprite, 5);

            display.Print();
        }
コード例 #4
0
ファイル: DisplayTests.cs プロジェクト: perfp/Chip8
        public void CanDetectCollisions()
        {
            var sprite = new byte[1];
            sprite[0] = 0x20; // 00100000 lsb = 00000100 msb
            var display = new TestDisplay();
            display.Screen[0] = 0x4; // 00100000 lsb
            var memory = new Memory();
            memory.LoadAt(sprite, 0x300);
            var cpu = new CPU(memory, display, new Keyboard());
            cpu.Register[0] = 0;
            cpu.Register[1] = 0;
            cpu.AddressRegister = 0x300;
            cpu.ProcessInstruction(0xd011);

            Assert.AreEqual(1, cpu.Register[0xf]);
        }
コード例 #5
0
ファイル: DisplayTests.cs プロジェクト: LesCol/Chip8
        public void CanWrapSpriteAtY()
        {
            var sprite = new byte[5];

            sprite[0] = 0xff;
            sprite[1] = 0xff;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);

            cpu.SetSprite(0, 31, sprite, 2);

            Assert.AreEqual(0xff, display.Screen[31 * 8]);
            Assert.AreEqual(0xff, display.Screen[0]);
        }
コード例 #6
0
ファイル: DisplayTests.cs プロジェクト: LesCol/Chip8
        public void CanSetSpriteAtByteBorderBit()
        {
            var sprite = new byte[5];

            sprite[0] = 0xff;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);

            cpu.SetSprite(8, 0, sprite, 1);

            // 0      1       2       3
            // 0000000011111110000000000000000
            // 0x0    0xff   0x0     0x0
            Assert.AreEqual(0xff, display.Screen[1]);
        }
コード例 #7
0
ファイル: DisplayTests.cs プロジェクト: LesCol/Chip8
        public void CanSetSprite1()
        {
            var sprite = new byte[5];

            sprite[0] = 0x20;
            sprite[1] = 0x60;
            sprite[2] = 0x20;
            sprite[3] = 0x20;
            sprite[4] = 0x70;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);

            cpu.SetSprite(4, 4, sprite, 5);

            display.Print();
        }
コード例 #8
0
ファイル: DisplayTests.cs プロジェクト: perfp/Chip8
        public void CanSetSprite0()
        {
            var sprite = new byte[5];
            sprite[0] = 0xf0;
            sprite[1] = 0x90;
            sprite[2] = 0x90;
            sprite[3] = 0x90;
            sprite[4] = 0xf0;

            var display = new TestDisplay();

            display.Screen[0*8] = sprite[0];
            display.Screen[1*8] = sprite[1];
            display.Screen[2*8] = sprite[2];
            display.Screen[3*8] = sprite[3];
            display.Screen[4*8] = sprite[4];

            display.Print();
        }
コード例 #9
0
ファイル: DisplayTests.cs プロジェクト: LesCol/Chip8
        public void CanWrapSpriteAtX()
        {
            var sprite = new byte[5];

            sprite[0] = 0xff;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);

            cpu.SetSprite(62, 0, sprite, 1);

            // 62        63      |64       65
            // 11111100 00000000 |00000000 00000011
            // 00111111 00000000 |00000000 11000000 lsb
            // 0xfc   0x0     0x0      0x3
            display.Print();
            Assert.AreEqual(0xc0, display.Screen[7]);
            Assert.AreEqual(0x3f, display.Screen[0]);
        }
コード例 #10
0
ファイル: DisplayTests.cs プロジェクト: LesCol/Chip8
        public void CanSetSpriteAtOddBit()
        {
            var sprite = new byte[5];

            sprite[0] = 0xff;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);

            cpu.SetSprite(10, 0, sprite, 1);
            display.Print();
            // 0      1       2       3
            // 0000000000111111100000000000000
            // 0000000011111110000000011000000 msb -> lsb
            // 0x0    0x3f   0xc0     0x0

            Assert.AreEqual(0xfc, display.Screen[1]);
            Assert.AreEqual(0x03, display.Screen[2]);
        }
コード例 #11
0
ファイル: DisplayTests.cs プロジェクト: LesCol/Chip8
        public void CanSetSprite0()
        {
            var sprite = new byte[5];

            sprite[0] = 0xf0;
            sprite[1] = 0x90;
            sprite[2] = 0x90;
            sprite[3] = 0x90;
            sprite[4] = 0xf0;

            var display = new TestDisplay();

            display.Screen[0 * 8] = sprite[0];
            display.Screen[1 * 8] = sprite[1];
            display.Screen[2 * 8] = sprite[2];
            display.Screen[3 * 8] = sprite[3];
            display.Screen[4 * 8] = sprite[4];

            display.Print();
        }
コード例 #12
0
ファイル: DisplayTests.cs プロジェクト: LesCol/Chip8
        public void CanDetectCollisions()
        {
            var sprite = new byte[1];

            sprite[0] = 0x20;             // 00100000 lsb = 00000100 msb
            var display = new TestDisplay();

            display.Screen[0] = 0x4;             // 00100000 lsb
            var memory = new Memory();

            memory.LoadAt(sprite, 0x300);
            var cpu = new CPU(memory, display, new Keyboard());

            cpu.Register[0]     = 0;
            cpu.Register[1]     = 0;
            cpu.AddressRegister = 0x300;
            cpu.ProcessInstruction(0xd011);

            Assert.AreEqual(1, cpu.Register[0xf]);
        }
コード例 #13
0
ファイル: DisplayTests.cs プロジェクト: perfp/Chip8
        public void CanWrapSpriteAtY()
        {
            var sprite = new byte[5];
            sprite[0] = 0xff;
            sprite[1] = 0xff;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);
            cpu.SetSprite(0, 31, sprite, 2);

            Assert.AreEqual(0xff, display.Screen[31*8]);
            Assert.AreEqual(0xff, display.Screen[0]);
        }
コード例 #14
0
ファイル: DisplayTests.cs プロジェクト: perfp/Chip8
        public void CanWrapSpriteAtX()
        {
            var sprite = new byte[5];
            sprite[0] = 0xff;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);
            cpu.SetSprite(62, 0, sprite, 1);

            // 62        63      |64       65
            // 11111100 00000000 |00000000 00000011
            // 00111111 00000000 |00000000 11000000 lsb
            // 0xfc   0x0     0x0      0x3
            display.Print();
            Assert.AreEqual(0xc0, display.Screen[7]);
            Assert.AreEqual(0x3f, display.Screen[0]);
        }
コード例 #15
0
ファイル: DisplayTests.cs プロジェクト: perfp/Chip8
        public void CanShowFullTestDisplay()
        {
            var display = new TestDisplay();

            for (int y=0;y<32;y++)
                for (int x=0;x<8;x++)
                    display.Screen[y*8+x] = 0xff;

            display.Print();
        }
コード例 #16
0
ファイル: DisplayTests.cs プロジェクト: perfp/Chip8
        public void CanShowBlankScreen()
        {
            var display = new TestDisplay();

            display.Print();
        }
コード例 #17
0
ファイル: DisplayTests.cs プロジェクト: perfp/Chip8
        public void CanSetSpriteAtOddBit()
        {
            var sprite = new byte[5];
            sprite[0] = 0xff;

            var display = new TestDisplay();

            var cpu = new CPU(new Memory(), display, null);
            cpu.SetSprite(10, 0, sprite, 1);
            display.Print();
            // 0      1       2       3
            // 0000000000111111100000000000000
            // 0000000011111110000000011000000 msb -> lsb
            // 0x0    0x3f   0xc0     0x0

            Assert.AreEqual(0xfc, display.Screen[1]);
            Assert.AreEqual(0x03, display.Screen[2]);
        }
コード例 #18
0
ファイル: DisplayTests.cs プロジェクト: LesCol/Chip8
        public void CanShowBlankScreen()
        {
            var display = new TestDisplay();

            display.Print();
        }