Esempio n. 1
0
        private uint DisassemblePhysical(uint addr)
        {
            CPU.Instruction inst = new CPU.Instruction(_system.Memory, addr);

            if (inst.Length == 2)
            {
                Console.WriteLine("0x{0:x8}: 0x{1:x4}              {2}",
                                  addr,
                                  _system.Memory.ReadHalfWord(addr),
                                  Ridge.CPU.Disassembler.Disassemble(inst));
            }
            else if (inst.Length == 4)
            {
                Console.WriteLine("0x{0:x8}: 0x{1:x8}          {2}",
                                  addr,
                                  _system.Memory.ReadWord(addr),
                                  Ridge.CPU.Disassembler.Disassemble(inst));
            }
            else if (inst.Length == 6)
            {
                Console.WriteLine("0x{0:x8}: 0x{1:x8},0x{2:x4}   {3}",
                                  addr,
                                  _system.Memory.ReadWord(addr),
                                  _system.Memory.ReadHalfWord(addr + 4),
                                  Ridge.CPU.Disassembler.Disassemble(inst));
            }

            return(inst.Length);
        }
Esempio n. 2
0
        public void AddToList(int addr, byte value, Memory MEM, bool active = false)
        {
            ListViewItem item = new ListViewItem("0x" + Convert.ToString(addr, 16).PadLeft(4, '0').ToUpper());

            CPU.Instruction ins = CPU.GetInstruction(MEM, addr);

            string val = "";

            val += Text = "" + Convert.ToString(value, 16).PadLeft(2, '0').ToUpper();
            for (int i = 0; i < ins.Length; i++)
            {
                val += Text = " " + Convert.ToString(MEM[addr + 1 + i], 16).PadLeft(2, '0').ToUpper();
            }
            item.SubItems.Add(new ListViewItem.ListViewSubItem()
            {
                Text = val
            });


            string decomp = "";

            decomp += ins.Name;
            if (decomp.Contains("%2"))
            {
                decomp = decomp.Replace("%2", Convert.ToString(MEM[addr + 2], 16).ToUpper() + Convert.ToString(MEM[addr + 1], 16).ToUpper());
            }
            if (decomp.Contains("%1"))
            {
                decomp = decomp.Replace("%1", Convert.ToString(MEM[addr + 1], 16).ToUpper());
            }
            item.SubItems.Add(new ListViewItem.ListViewSubItem()
            {
                Text = decomp
            });
            listView1.Items.Add(item);
            if (active)
            {
                item.BackColor = Color.Black;
                item.ForeColor = Color.White;
            }
        }
Esempio n. 3
0
        private uint DisassembleVirtual(uint addr)
        {
            // TODO: disassembling virtual addresses here ends up modifying the Referenced bits!
            bool pageFault = false;

            CPU.Instruction inst = new CPU.Instruction(_system.Memory, addr, out pageFault);

            if (pageFault)
            {
                Console.WriteLine("<page fault>");
            }
            else if (inst.Length == 2)
            {
                Console.WriteLine("0x{0:x8}: 0x{1:x4}              {2}",
                                  addr,
                                  _system.Memory.ReadHalfWordV(addr, Memory.SegmentType.Code, out pageFault),
                                  Ridge.CPU.Disassembler.Disassemble(inst));
            }
            else if (inst.Length == 4)
            {
                Console.WriteLine("0x{0:x8}: 0x{1:x8}          {2}",
                                  addr,
                                  _system.Memory.ReadWordV(addr, Memory.SegmentType.Code, out pageFault),
                                  Ridge.CPU.Disassembler.Disassemble(inst));
            }
            else if (inst.Length == 6)
            {
                Console.WriteLine("0x{0:x8}: 0x{1:x8},0x{2:x4}   {3}",
                                  addr,
                                  _system.Memory.ReadWordV(addr, Memory.SegmentType.Code, out pageFault),
                                  _system.Memory.ReadHalfWordV(addr + 4, Memory.SegmentType.Code, out pageFault),
                                  Ridge.CPU.Disassembler.Disassemble(inst));
            }

            return(inst.Length);
        }