yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
yaze::emu::debug::Disassembler65816 Class Reference

65816 CPU disassembler for debugging and ROM hacking More...

#include <disassembler.h>

Collaboration diagram for yaze::emu::debug::Disassembler65816:

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< DisassembledInstructionDisassembleRange (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 InstructionInfoGetInstructionInfo (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_
 

Detailed Description

65816 CPU disassembler for debugging and ROM hacking

This disassembler converts raw ROM/memory bytes into human-readable assembly instructions. It handles:

  • All 256 opcodes
  • All addressing modes including 65816-specific ones
  • Variable-size immediate operands based on M/X flags
  • Branch target calculation
  • Symbol resolution (optional)

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.

Member Typedef Documentation

◆ MemoryReader

using yaze::emu::debug::Disassembler65816::MemoryReader = std::function<uint8_t(uint32_t)>

Definition at line 103 of file disassembler.h.

◆ SymbolResolver

using yaze::emu::debug::Disassembler65816::SymbolResolver = std::function<std::string(uint32_t)>

Definition at line 104 of file disassembler.h.

Constructor & Destructor Documentation

◆ Disassembler65816()

yaze::emu::debug::Disassembler65816::Disassembler65816 ( )

Definition at line 11 of file disassembler.cc.

References InitializeOpcodeTable().

Here is the call graph for this function:

Member Function Documentation

◆ Disassemble()

◆ DisassembleRange()

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.

Parameters
start_addressStarting address
countNumber of instructions to disassemble
read_byteFunction to read bytes from memory
m_flagAccumulator/memory size flag
x_flagIndex register size flag
Returns
Vector of disassembled instructions

Definition at line 402 of file disassembler.cc.

References Disassemble().

Here is the call graph for this function:

◆ SetSymbolResolver()

void yaze::emu::debug::Disassembler65816::SetSymbolResolver ( SymbolResolver resolver)
inline

Set optional symbol resolver for address lookups.

Definition at line 140 of file disassembler.h.

References symbol_resolver_.

◆ GetInstructionInfo()

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_.

◆ GetInstructionSize()

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().

◆ InitializeOpcodeTable()

void yaze::emu::debug::Disassembler65816::InitializeOpcodeTable ( )
private

Definition at line 13 of file disassembler.cc.

References opcode_table_.

Referenced by Disassembler65816().

◆ FormatOperand()

std::string yaze::emu::debug::Disassembler65816::FormatOperand ( AddressingMode65816 mode,
const std::vector< uint8_t > & operands,
uint32_t address,
bool m_flag,
bool x_flag ) const
private

Definition at line 418 of file disassembler.cc.

References symbol_resolver_.

Referenced by Disassemble().

◆ CalculateBranchTarget()

uint32_t yaze::emu::debug::Disassembler65816::CalculateBranchTarget ( uint32_t address,
const std::vector< uint8_t > & operands,
AddressingMode65816 mode,
uint8_t instruction_size ) const
private

Definition at line 625 of file disassembler.cc.

Referenced by Disassemble().

Member Data Documentation

◆ opcode_table_

InstructionInfo yaze::emu::debug::Disassembler65816::opcode_table_[256]
private

◆ symbol_resolver_

SymbolResolver yaze::emu::debug::Disassembler65816::symbol_resolver_
private

Definition at line 175 of file disassembler.h.

Referenced by Disassemble(), FormatOperand(), and SetSymbolResolver().


The documentation for this class was generated from the following files: