// Copyright 2008 Dolphin Emulator Project // Copyright 2005 Duddie // Licensed under GPLv2+ // Refer to the license.txt file included. #pragma once #include #include #include #include "Common/CommonTypes.h" #include "Core/DSP/DSPTables.h" #include "Core/DSP/LabelMap.h" namespace DSP { struct AssemblerSettings { AssemblerSettings() : print_tabs(false), show_hex(false), show_pc(false), force(false), decode_names(true), decode_registers(true), ext_separator('\''), lower_case_ops(true), pc(0) { } bool print_tabs; bool show_hex; bool show_pc; bool force; bool decode_names; bool decode_registers; char ext_separator; bool lower_case_ops; u16 pc; }; class DSPDisassembler { public: DSPDisassembler(const AssemblerSettings& settings); ~DSPDisassembler(); bool Disassemble(int start_pc, const std::vector& code, int base_addr, std::string& text); // Warning - this one is trickier to use right. // Use pass == 2 if you're just using it by itself. bool DisassembleOpcode(const u16* binbuf, int base_addr, int pass, u16* pc, std::string& dest); private: // Moves PC forward and writes the result to dest. bool DisassembleFile(const std::string& name, int base_addr, int pass, std::string& output); std::string DisassembleParameters(const DSPOPCTemplate& opc, u16 op1, u16 op2); std::map unk_opcodes; const AssemblerSettings settings_; LabelMap labels; }; } // namespace DSP