65816 CPU disassembler for debugging and ROM hacking More...
#include <disassembler.h>

Public Types | |
| using | MemoryReader = std::function<uint8_t(uint32_t)> |
| using | SymbolResolver = std::function<std::string(uint32_t)> |
Public Member Functions | |
| Disassembler65816 () | |
| DisassembledInstruction | Disassemble (uint32_t address, MemoryReader read_byte, bool m_flag=true, bool x_flag=true) const |
| Disassemble a single instruction. | |
| std::vector< DisassembledInstruction > | DisassembleRange (uint32_t start_address, size_t count, MemoryReader read_byte, bool m_flag=true, bool x_flag=true) const |
| Disassemble multiple instructions. | |
| void | SetSymbolResolver (SymbolResolver resolver) |
| Set optional symbol resolver for address lookups. | |
| const InstructionInfo & | GetInstructionInfo (uint8_t opcode) const |
| Get instruction info for an opcode. | |
| uint8_t | GetInstructionSize (uint8_t opcode, bool m_flag, bool x_flag) const |
| Calculate actual instruction size based on flags. | |
Private Member Functions | |
| void | InitializeOpcodeTable () |
| std::string | FormatOperand (AddressingMode65816 mode, const std::vector< uint8_t > &operands, uint32_t address, bool m_flag, bool x_flag) const |
| uint32_t | CalculateBranchTarget (uint32_t address, const std::vector< uint8_t > &operands, AddressingMode65816 mode, uint8_t instruction_size) const |
Private Attributes | |
| InstructionInfo | opcode_table_ [256] |
| SymbolResolver | symbol_resolver_ |
65816 CPU disassembler for debugging and ROM hacking
This disassembler converts raw ROM/memory bytes into human-readable assembly instructions. It handles:
Usage: Disassembler65816 dis; auto result = dis.Disassemble(address, [](uint32_t addr) { return memory.ReadByte(addr); }); std::cout << result.full_text << std::endl;
Definition at line 101 of file disassembler.h.
| using yaze::emu::debug::Disassembler65816::MemoryReader = std::function<uint8_t(uint32_t)> |
Definition at line 103 of file disassembler.h.
| using yaze::emu::debug::Disassembler65816::SymbolResolver = std::function<std::string(uint32_t)> |
Definition at line 104 of file disassembler.h.
| yaze::emu::debug::Disassembler65816::Disassembler65816 | ( | ) |
Definition at line 11 of file disassembler.cc.
References InitializeOpcodeTable().

| DisassembledInstruction yaze::emu::debug::Disassembler65816::Disassemble | ( | uint32_t | address, |
| MemoryReader | read_byte, | ||
| bool | m_flag = true, | ||
| bool | x_flag = true ) const |
Disassemble a single instruction.
| address | Starting address (24-bit) |
| read_byte | Function to read bytes from memory |
| m_flag | Accumulator/memory size flag (true = 8-bit) |
| x_flag | Index register size flag (true = 8-bit) |
Definition at line 330 of file disassembler.cc.
References yaze::emu::debug::DisassembledInstruction::address, yaze::emu::debug::DisassembledInstruction::branch_target, CalculateBranchTarget(), FormatOperand(), yaze::emu::debug::DisassembledInstruction::full_text, GetInstructionSize(), yaze::emu::debug::DisassembledInstruction::is_branch, yaze::emu::debug::DisassembledInstruction::is_call, yaze::emu::debug::DisassembledInstruction::is_return, yaze::emu::debug::kAbsoluteIndexedIndirect, yaze::emu::debug::kAbsoluteIndirect, yaze::emu::debug::kAbsoluteIndirectLong, yaze::emu::debug::DisassembledInstruction::mnemonic, yaze::emu::debug::DisassembledInstruction::opcode, opcode_table_, yaze::emu::debug::DisassembledInstruction::operand_str, yaze::emu::debug::DisassembledInstruction::operands, yaze::emu::debug::DisassembledInstruction::size, and symbol_resolver_.
Referenced by DisassembleRange(), and yaze::agent::EmulatorServiceImpl::GetDisassembly().

| std::vector< DisassembledInstruction > yaze::emu::debug::Disassembler65816::DisassembleRange | ( | uint32_t | start_address, |
| size_t | count, | ||
| MemoryReader | read_byte, | ||
| bool | m_flag = true, | ||
| bool | x_flag = true ) const |
Disassemble multiple instructions.
| start_address | Starting address |
| count | Number of instructions to disassemble |
| read_byte | Function to read bytes from memory |
| m_flag | Accumulator/memory size flag |
| x_flag | Index register size flag |
Definition at line 402 of file disassembler.cc.
References Disassemble().

|
inline |
Set optional symbol resolver for address lookups.
Definition at line 140 of file disassembler.h.
References symbol_resolver_.
| const InstructionInfo & yaze::emu::debug::Disassembler65816::GetInstructionInfo | ( | uint8_t | opcode | ) | const |
Get instruction info for an opcode.
Definition at line 308 of file disassembler.cc.
References opcode_table_.
| uint8_t yaze::emu::debug::Disassembler65816::GetInstructionSize | ( | uint8_t | opcode, |
| bool | m_flag, | ||
| bool | x_flag ) const |
Calculate actual instruction size based on flags.
Definition at line 313 of file disassembler.cc.
References yaze::emu::debug::InstructionInfo::base_size, yaze::emu::debug::kImmediateM, yaze::emu::debug::kImmediateX, and opcode_table_.
Referenced by Disassemble().
|
private |
Definition at line 13 of file disassembler.cc.
References opcode_table_.
Referenced by Disassembler65816().
|
private |
Definition at line 418 of file disassembler.cc.
References symbol_resolver_.
Referenced by Disassemble().
|
private |
Definition at line 625 of file disassembler.cc.
Referenced by Disassemble().
|
private |
Definition at line 172 of file disassembler.h.
Referenced by Disassemble(), GetInstructionInfo(), GetInstructionSize(), and InitializeOpcodeTable().
|
private |
Definition at line 175 of file disassembler.h.
Referenced by Disassemble(), FormatOperand(), and SetSymbolResolver().