diff options
Diffstat (limited to 'src/emu/debug/dvdisasm.cpp')
-rw-r--r-- | src/emu/debug/dvdisasm.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/emu/debug/dvdisasm.cpp b/src/emu/debug/dvdisasm.cpp index ee8cd356a32..0dcc0b98982 100644 --- a/src/emu/debug/dvdisasm.cpp +++ b/src/emu/debug/dvdisasm.cpp @@ -25,8 +25,12 @@ debug_view_disasm_source::debug_view_disasm_source(std::string &&name, device_t &device) : debug_view_source(std::move(name), &device), m_space(device.memory().space(AS_PROGRAM)), - m_decrypted_space(device.memory().has_space(AS_OPCODES) ? device.memory().space(AS_OPCODES) : device.memory().space(AS_PROGRAM)) + m_decrypted_space(device.memory().has_space(AS_OPCODES) ? device.memory().space(AS_OPCODES) : device.memory().space(AS_PROGRAM)), + m_pcbase(nullptr) { + const device_state_interface *state; + if (device.interface(state)) + m_pcbase = state->state_find_entry(STATE_GENPCBASE); } @@ -35,9 +39,6 @@ debug_view_disasm_source::debug_view_disasm_source(std::string &&name, device_t // DEBUG VIEW DISASM //************************************************************************** -const int debug_view_disasm::DEFAULT_DASM_LINES, debug_view_disasm::DEFAULT_DASM_WIDTH, debug_view_disasm::DASM_MAX_BYTES; - - //------------------------------------------------- // debug_view_disasm - constructor //------------------------------------------------- @@ -56,12 +57,12 @@ debug_view_disasm::debug_view_disasm(running_machine &machine, debug_view_osd_up throw std::bad_alloc(); // count the number of comments - int total_comments = 0; - for(auto &source : m_source_list) - { - const debug_view_disasm_source &dasmsource = downcast<const debug_view_disasm_source &>(*source); - total_comments += dasmsource.device()->debug()->comment_count(); - } + //int total_comments = 0; + //for(auto &source : m_source_list) + //{ + //const debug_view_disasm_source &dasmsource = downcast<const debug_view_disasm_source &>(*source); + //total_comments += dasmsource.device()->debug()->comment_count(); + //} // configure the view m_total.y = DEFAULT_DASM_LINES; @@ -89,7 +90,7 @@ void debug_view_disasm::enumerate_sources() m_source_list.clear(); // iterate over devices with disassembly interfaces - for (device_disasm_interface &dasm : disasm_interface_iterator(machine().root_device())) + for (device_disasm_interface &dasm : disasm_interface_enumerator(machine().root_device())) { if (dasm.device().memory().space_config(AS_PROGRAM)) { @@ -167,7 +168,7 @@ void debug_view_disasm::view_char(int chval) case DCH_HOME: // set the active column to the PC { const debug_view_disasm_source &source = downcast<const debug_view_disasm_source &>(*m_source); - offs_t pc = source.device()->state().pcbase() & source.m_space.logaddrmask(); + offs_t pc = source.pcbase(); // figure out which row the pc is on for(unsigned int curline = 0; curline < m_dasm.size(); curline++) @@ -233,6 +234,7 @@ void debug_view_disasm::generate_from_address(debug_disasm_buffer &buffer, offs_ m_dasm.emplace_back(address, size, dasm); address = next_address; } + m_recompute = false; } bool debug_view_disasm::generate_with_pc(debug_disasm_buffer &buffer, offs_t pc) @@ -250,6 +252,7 @@ bool debug_view_disasm::generate_with_pc(debug_disasm_buffer &buffer, offs_t pc) backwards_offset = 64 << shift; m_dasm.clear(); + m_recompute = false; offs_t address = (pc - m_backwards_steps*backwards_offset) & source.m_space.logaddrmask(); // Handle wrap at 0 if(address > pc) @@ -324,7 +327,7 @@ void debug_view_disasm::generate_dasm(debug_disasm_buffer &buffer, offs_t pc) return; } - if(address_position(pc) != -1) { + if(!m_recompute && address_position(pc) != -1) { generate_from_address(buffer, m_dasm[0].m_address); int pos = address_position(pc); if(pos != -1) { @@ -378,7 +381,7 @@ void debug_view_disasm::view_update() { const debug_view_disasm_source &source = downcast<const debug_view_disasm_source &>(*m_source); debug_disasm_buffer buffer(*source.device()); - offs_t pc = source.device()->state().pcbase() & source.m_space.logaddrmask(); + offs_t pc = source.pcbase(); generate_dasm(buffer, pc); @@ -513,7 +516,7 @@ void debug_view_disasm::set_right_column(disasm_right_column contents) { begin_update(); m_right_column = contents; - m_recompute = m_update_pending = true; + m_update_pending = true; end_update(); } @@ -570,7 +573,7 @@ void debug_view_disasm::set_selected_address(offs_t address) void debug_view_disasm::set_source(const debug_view_source &source) { if(&source != m_source) { + m_recompute = true; debug_view::set_source(source); - m_dasm.clear(); } } |