Пример #1
0
 public virtual void TestDataRegs()
 {
     for (int r = 0; r < 7; r++)
     {
         cpu.SetDataRegisterByte(r, 0xaa);
         Assert.Equal(0xaa, cpu.GetDataRegisterByte(r));
         Assert.Equal(0xaa, cpu.GetDataRegisterWord(r));
         Assert.Equal(0xaa, cpu.GetDataRegisterLong(r));
         Assert.Equal(-86, cpu.GetDataRegisterByteSigned(r));
         Assert.Equal(170, cpu.GetDataRegisterWordSigned(r));
         cpu.SetDataRegisterWord(r, 0xa5a5);
         Assert.Equal(0xa5, cpu.GetDataRegisterByte(r));
         Assert.Equal(0xa5a5, cpu.GetDataRegisterWord(r));
         Assert.Equal(0xa5a5, cpu.GetDataRegisterLong(r));
         Assert.Equal(-91, cpu.GetDataRegisterByteSigned(r));
         Assert.Equal(-23131, cpu.GetDataRegisterWordSigned(r));
         cpu.SetDataRegisterLong(r, -2054847099);
         Assert.Equal(0x85, cpu.GetDataRegisterByte(r));
         Assert.Equal(0x8585, cpu.GetDataRegisterWord(r));
         Assert.Equal(-2054847099, cpu.GetDataRegisterLong(r));
         Assert.Equal(-123, cpu.GetDataRegisterByteSigned(r));
         Assert.Equal(-31355, cpu.GetDataRegisterWordSigned(r));
         cpu.SetDataRegisterLong(r, 305419896);
         Assert.Equal(0x78, cpu.GetDataRegisterByte(r));
         Assert.Equal(0x5678, cpu.GetDataRegisterWord(r));
         Assert.Equal(305419896, cpu.GetDataRegisterLong(r));
         Assert.Equal(0x78, cpu.GetDataRegisterByteSigned(r));
         Assert.Equal(0x5678, cpu.GetDataRegisterWordSigned(r));
     }
 }
Пример #2
0
        protected void DumpInfo()
        {
            writer.WriteLine();
            writer.WriteLine("D0: {0}   D4: {1}   A0: {2}   A4: {3}     PC: {4}",
                             cpu.GetDataRegisterLong(0).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetDataRegisterLong(4).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetAddrRegisterLong(0).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetAddrRegisterLong(4).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetPC().ToString("x8", CultureInfo.InvariantCulture));
            writer.WriteLine("D1: {0}   D5: {1}   A1: {2}   A5: {3}     SR:  {4} {5}",
                             cpu.GetDataRegisterLong(1).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetDataRegisterLong(5).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetAddrRegisterLong(1).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetAddrRegisterLong(5).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetSR().ToString("x4", CultureInfo.InvariantCulture),
                             MakeFlagView());
            writer.WriteLine("D2: {0}   D6: {1}   A2: {2}   A6: {3}     USP: {4}",
                             cpu.GetDataRegisterLong(2).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetDataRegisterLong(6).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetAddrRegisterLong(2).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetAddrRegisterLong(6).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetUSP());
            writer.WriteLine("D3: {0}   D7: {1}   A3: {2}   A7: {3}     SSP: {4}",
                             cpu.GetDataRegisterLong(3).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetDataRegisterLong(7).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetAddrRegisterLong(3).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetAddrRegisterLong(7).ToString("x8", CultureInfo.InvariantCulture),
                             cpu.GetSSP().ToString("x8", CultureInfo.InvariantCulture));
            buffer.Clear();
            int addr = cpu.GetPC();

            if (addr < 0 || addr >= memory.Size())
            {
                buffer.Append($"{addr.ToString("x8", CultureInfo.InvariantCulture)}   ????");
            }
            else
            {
                int                     opcode = cpu.ReadMemoryWord(addr);
                IInstruction            i      = cpu.GetInstructionFor(opcode);
                DisassembledInstruction di     = i.Disassemble(addr, opcode);
                if (showBytes)
                {
                    di.FormatInstruction(buffer);
                }
                else
                {
                    di.ShortFormat(buffer);
                }
            }

            writer.WriteLine($"==> {buffer}{Environment.NewLine}");
        }