public Byte exe_ins() { Byte opTime = 1; Opcodes.Opcode op = (Opcodes.Opcode)(Program.emulator.GetMemory().ReadFromMemory(reg_pc)); // Logger.AppendLog(Logger.LOG_LEVEL.LOG_LEVEL_DEBUG, "[" + String.Format("{0:X4}", get_reg_pc()) + "]: " + String.Format("{0:X2}", op) + "PRE Execute"); if (!Enum.IsDefined(typeof(Opcodes.Opcode), op)) { Logger.AppendLog(Logger.LOG_LEVEL.LOG_LEVEL_WARNING, "UNKNOWN OPCODE OCCURED: " + String.Format("{0:X2}", op) + " At Address: " + String.Format("{0:X4}", reg_pc)); set_reg_pc((UInt16)(get_reg_pc() + 1)); return(opTime); } // Special Execute for CB Opcodes if (op == Opcodes.Opcode.OPCODE_INTERNAL_CB) { // Increase Program Counter to next location set_reg_pc((UInt16)(get_reg_pc() + 1)); OpcodesCB.ExecuteOpcodeCB((OpcodesCB.OpcodeCB)(Program.emulator.GetMemory().ReadFromMemory(reg_pc))); // TODO: Implement Clocks for CB Opcodes return(opTime); } //Logger.AppendLog(Logger.LOG_LEVEL.LOG_LEVEL_DEBUG, "[" + String.Format("{0:X4}", get_reg_pc()) + "]: " + op.ToString() + " Executing"); Opcodes.ExecuteOpcode(op); opTime = Opcodes.opcodeTimings.ContainsKey(op) ? Opcodes.opcodeTimings[op] : (byte)1; return(opTime); }
private void lv_windowLoadData(UInt16 i_address) { lv_dissassembly.Clear(); lv_dissassembly.Columns.Add("Address", 70); lv_dissassembly.Columns.Add("Opcode", 70); lv_dissassembly.Columns.Add("Instruction", 200); UInt16 lo_val = (i_address < 0x00FF) ? (UInt16)(0) : (UInt16)(i_address - 0xFF); UInt16 hi_val = ((UInt32)(i_address + 0x00FF) > 0xFFFF) ? (UInt16)(0xFFFF) : (UInt16)(i_address + 0xFF); for (UInt16 i = lo_val; i < hi_val;) { Byte opcode = Program.emulator.GetMemory().ReadFromMemory(i); String address = String.Format("{0:X4}", i); String value = String.Format("{0:X2}", opcode); ListViewItem item = new ListViewItem(address); item.SubItems.Add(value); if ((Opcodes.Opcode)opcode == Opcodes.Opcode.OPCODE_INTERNAL_CB) { opcode = Program.emulator.GetMemory().ReadFromMemory(++i); item.SubItems.Add(OpcodesCB.GetOpcodeCB((OpcodesCB.OpcodeCB)opcode, ref i)); } else { item.SubItems.Add(Opcodes.GetOpcode((Opcodes.Opcode)opcode, ref i)); } lv_dissassembly.Items.Add(item); } if (lv_dissassembly.Items.Count == 0) { return; } int index = GetItemIndexWithAddress(String.Format("{0:X4}", i_address)); ListViewItem sel_item = lv_dissassembly.Items[index]; sel_item.Selected = true; sel_item.Focused = true; lv_dissassembly.Select(); lv_dissassembly.EnsureVisible(index); }