| 171 | } |
| 172 | |
| 173 | void disasmGet(bool useCpuMode) { |
| 174 | disasm.ctx.zdis_lowercase = !disasm.uppercase; |
| 175 | disasm.ctx.zdis_implicit = !disasm.implicit; |
| 176 | disasm.ctx.zdis_end_addr = static_cast<uint32_t>(disasm.base); |
| 177 | disasm.ctx.zdis_adl = useCpuMode ? cpu.ADL : disasm.adl; |
| 178 | disasm.cur = &disasm.instr.opcode; |
| 179 | |
| 180 | disasm.highlight.watchR = false; |
| 181 | disasm.highlight.watchW = false; |
| 182 | disasm.highlight.breakP = false; |
| 183 | disasm.highlight.pc = false; |
| 184 | disasm.highlight.addr = -1; |
| 185 | |
| 186 | disasm.instr.data.clear(); |
| 187 | disasm.instr.opcode.clear(); |
| 188 | disasm.instr.operands.clear(); |
| 189 | |
| 190 | zdis_put_inst(&disasm.ctx); |
| 191 | |
| 192 | if (disasm.highlight.pc && cpu.registers.PC != static_cast<uint32_t>(disasm.base)) { |
| 193 | static char tmpbuf[20]; |
| 194 | size_t size = cpu.registers.PC - static_cast<uint32_t>(disasm.base); |
| 195 | disasm.instr.data = disasm.instr.data.substr(0, size * 2); |
| 196 | disasm.instr.operands = disasm.tab ? '\t' : ' '; |
| 197 | int precision; |
| 198 | if (size % 3 == 0) { |
| 199 | size /= 3; |
| 200 | precision = 6; |
| 201 | disasm.instr.opcode = "dl"; |
| 202 | } else if (size % 2 == 0) { |
| 203 | size /= 2; |
| 204 | precision = 4; |
| 205 | disasm.instr.opcode = "dw"; |
| 206 | } else { |
| 207 | precision = 2; |
| 208 | disasm.instr.opcode = "db"; |
| 209 | } |
| 210 | do { |
| 211 | snprintf(tmpbuf, sizeof(tmpbuf) - 1, "$%0*X", precision, mem_peek_long(static_cast<uint32_t>(disasm.base)) & ((1 << 4*precision) - 1)); |
| 212 | disasm.instr.operands += tmpbuf; |
| 213 | if (--size) { |
| 214 | disasm.instr.operands += ','; |
| 215 | } |
| 216 | } while (size); |
| 217 | disasm.base = static_cast<int32_t>(disasm.ctx.zdis_start_addr); |
| 218 | disasm.next = static_cast<int32_t>(cpu.registers.PC); |
| 219 | disasm.highlight.pc = false; |
| 220 | } else { |
| 221 | disasm.base = static_cast<int32_t>(disasm.ctx.zdis_start_addr); |
| 222 | disasm.next = static_cast<int32_t>(disasm.ctx.zdis_end_addr); |
| 223 | } |
| 224 | |
| 225 | disasm.instr.size = static_cast<unsigned int>(disasm.next) - static_cast<unsigned int>(disasm.base); |
| 226 | } |
| 227 | |
| 228 | #include <iostream> |
| 229 | void debugInstruction(void) { |
no test coverage detected