| 2383 | } |
| 2384 | |
| 2385 | void MainWindow::disasmLine() { |
| 2386 | bool useLabel = false; |
| 2387 | map_t::iterator sit; |
| 2388 | std::pair<map_t::iterator, map_t::iterator> range; |
| 2389 | unsigned int numLines = 1; |
| 2390 | |
| 2391 | if (disasm.base != disasm.next) { |
| 2392 | disasm.base = disasm.next; |
| 2393 | if (disasm.map.count(static_cast<uint32_t>(disasm.next))) { |
| 2394 | range = disasm.map.equal_range(static_cast<uint32_t>(disasm.next)); |
| 2395 | |
| 2396 | numLines = 0; |
| 2397 | for (sit = range.first; sit != range.second; ++sit) { |
| 2398 | numLines++; |
| 2399 | } |
| 2400 | |
| 2401 | disasm.highlight.watchR = false; |
| 2402 | disasm.highlight.watchW = false; |
| 2403 | disasm.highlight.breakP = false; |
| 2404 | disasm.highlight.pc = false; |
| 2405 | |
| 2406 | disasm.instr.data.clear(); |
| 2407 | disasm.instr.opcode.clear(); |
| 2408 | disasm.instr.operands.clear(); |
| 2409 | disasm.instr.size = 0; |
| 2410 | |
| 2411 | useLabel = true; |
| 2412 | } else { |
| 2413 | disasmGet(); |
| 2414 | } |
| 2415 | } else { |
| 2416 | disasmGet(); |
| 2417 | } |
| 2418 | |
| 2419 | if (useLabel) { |
| 2420 | range = disasm.map.equal_range(static_cast<uint32_t>(disasm.next)); |
| 2421 | sit = range.first; |
| 2422 | } |
| 2423 | |
| 2424 | for (unsigned int j = 0; j < numLines; j++) { |
| 2425 | |
| 2426 | QString line; |
| 2427 | QString symbols; |
| 2428 | |
| 2429 | if (useLabel) { |
| 2430 | if (disasm.base > 511 || (disasm.base < 512 && sit->second[0] == '_')) { |
| 2431 | line = QStringLiteral("%1 %2:") |
| 2432 | .arg(disasm.addr ? int2hex(static_cast<uint32_t>(disasm.base), 6) : QString(), |
| 2433 | QString::fromStdString(sit->second)); |
| 2434 | |
| 2435 | m_disasm->appendPlainText(line); |
| 2436 | } |
| 2437 | |
| 2438 | if (numLines == j + 1) { |
| 2439 | useLabel = false; |
| 2440 | } |
| 2441 | sit++; |
| 2442 | } else { |
nothing calls this directly
no test coverage detected