1 // license:BSD-3-Clause 2 // copyright-holders:smf 3 /* 4 * PSXCPU disassembler for the MAME project written by smf 5 * 6 */ 7 8 #ifndef MAME_CPU_PSX_PSXDASM_H 9 #define MAME_CPU_PSX_PSXDASM_H 10 11 #pragma once 12 13 class psxcpu_disassembler : public util::disasm_interface 14 { 15 public: 16 struct config { 17 virtual ~config() = default; 18 19 virtual uint32_t pc() = 0; 20 virtual uint32_t delayr() = 0; 21 virtual uint32_t delayv() = 0; 22 virtual uint32_t r(int i) = 0; 23 }; 24 25 psxcpu_disassembler(config *conf = nullptr); 26 virtual ~psxcpu_disassembler() = default; 27 28 virtual u32 opcode_alignment() const override; 29 virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; 30 31 private: 32 static const char *const s_cpugenreg[]; 33 static const char *const s_cp0genreg[]; 34 static const char *const s_cp0ctlreg[]; 35 static const char *const s_cp1genreg[]; 36 static const char *const s_cp1ctlreg[]; 37 static const char *const s_cp2genreg[]; 38 static const char *const s_cp2ctlreg[]; 39 static const char *const s_cp3genreg[]; 40 static const char *const s_cp3ctlreg[]; 41 static const char *const s_gtesf[]; 42 static const char *const s_gtemx[]; 43 static const char *const s_gtev[]; 44 static const char *const s_gtecv[]; 45 static const char *const s_gtelm[]; 46 47 std::string make_signed_hex_str_16( uint32_t value ); 48 std::string effective_address( uint32_t pc, uint32_t op ); 49 uint32_t relative_address( uint32_t pc, uint32_t op ); 50 uint32_t jump_address( uint32_t pc, uint32_t op ); 51 std::string upper_address( uint32_t op, offs_t pos, const data_buffer &opcodes ); 52 53 config *m_config; 54 }; 55 56 #endif 57