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 &params) 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