Example #1
0
        public void CheckA5PostIncMoveLongToReg()
        {
            // MOVEM <ea>,<ea>
            // 0100 1100 1101 1101  0x4CDD
            // 0001 1111 0000 0000  0x1F00
            // MOVEM (A5)+,0001111100000000

            byte[] data = new byte[]
            {
                0x4C, 0xDD, 0x1F, 0x00
            };

            MegadriveState state = new MegadriveState(new Data(data), 0x00000000, 0x00000000, 0x000000, 0x3FFFFF, 0x0FF0000, 0xFFFFFF);

            state.WriteAReg(0x5, 0xFF0000);
            for (int i = 0; i < 64; i++)
            {
                state.WriteByte((uint)(0xFF0000 + i), (byte)(0x00 + i));
            }
            state.FetchOpCode();

            var opcode = new MOVEM(state);

            Assert.That(opcode.Assembly, Is.EqualTo("MOVEM (A5)+,%0001111100000000"));
            Assert.That(opcode.Size, Is.EqualTo(Size.Long));

            Assert.That(state.ReadAReg(0x0), Is.EqualTo(0x00010203));
            Assert.That(state.ReadAReg(0x1), Is.EqualTo(0x04050607));
            Assert.That(state.ReadAReg(0x2), Is.EqualTo(0x08090A0B));
            Assert.That(state.ReadAReg(0x3), Is.EqualTo(0x0C0D0E0F));
            Assert.That(state.ReadAReg(0x4), Is.EqualTo(0x10111213));
            Assert.That(state.ReadAReg(0x5), Is.EqualTo(0x00FF0014));
            Assert.That(state.ReadAReg(0x6), Is.EqualTo(0x0000));
            Assert.That(state.ReadAReg(0x7), Is.EqualTo(0x0000));

            Assert.That(state.ReadDReg(0x0), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x1), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x2), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x3), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x4), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x5), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x6), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x7), Is.EqualTo(0x0000));

            Assert.That(state.PC, Is.EqualTo(0x00000004));
            Assert.That(state.ReadAReg(0x5), Is.EqualTo(0x00FF0014));
        }
Example #2
0
        public void CheckA5PostIncMoveWordToReg()
        {
            // MOVEM <ea>,<ea>
            // 0100 1100 1001 1101  0x4C9D
            // 0000 0000 1110 0000  0x00E0
            // MOVEM (A5)+,0000000011100000

            byte[] data = new byte[]
            {
                0x4C, 0x9D, 0x00, 0xE0
            };

            MegadriveState state = new MegadriveState(new Data(data), 0x00000000, 0x00000000, 0x000000, 0x3FFFFF, 0x0FF0000, 0xFFFFFF);

            state.WriteAReg(0x5, 0xFF0000);
            for (int i = 0; i < 16; i++)
            {
                state.WriteByte((uint)(0xFF0000 + i), (byte)(0x00 + i));
            }
            state.FetchOpCode();

            var opcode = new MOVEM(state);

            Assert.That(opcode.Assembly, Is.EqualTo("MOVEM (A5)+,%0000000011100000"));
            Assert.That(opcode.Size, Is.EqualTo(Size.Word));

            Assert.That(state.ReadAReg(0x0), Is.EqualTo(0x0000));
            Assert.That(state.ReadAReg(0x1), Is.EqualTo(0x0000));
            Assert.That(state.ReadAReg(0x2), Is.EqualTo(0x0000));
            Assert.That(state.ReadAReg(0x3), Is.EqualTo(0x0000));
            Assert.That(state.ReadAReg(0x4), Is.EqualTo(0x0000));
            Assert.That(state.ReadAReg(0x5), Is.EqualTo(0xFF0006));
            Assert.That(state.ReadAReg(0x6), Is.EqualTo(0x0000));
            Assert.That(state.ReadAReg(0x7), Is.EqualTo(0x0000));

            Assert.That(state.ReadDReg(0x0), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x1), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x2), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x3), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x4), Is.EqualTo(0x0000));
            Assert.That(state.ReadDReg(0x5), Is.EqualTo(0x0001));
            Assert.That(state.ReadDReg(0x6), Is.EqualTo(0x0203));
            Assert.That(state.ReadDReg(0x7), Is.EqualTo(0x0405));

            Assert.That(state.PC, Is.EqualTo(0x00000004));
            Assert.That(state.ReadAReg(0x5), Is.EqualTo(0x00FF0006));
        }