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); }
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; } }
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); }