diff options
Diffstat (limited to 'src/devices/cpu/g65816/g65816ds.h')
-rw-r--r-- | src/devices/cpu/g65816/g65816ds.h | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/src/devices/cpu/g65816/g65816ds.h b/src/devices/cpu/g65816/g65816ds.h index 892dd065a10..832754de4cd 100644 --- a/src/devices/cpu/g65816/g65816ds.h +++ b/src/devices/cpu/g65816/g65816ds.h @@ -16,7 +16,68 @@ All rights reserved. */ -unsigned g65816_disassemble(std::ostream &stream, unsigned int pc, unsigned int pb, const uint8_t *oprom, int m_flag, int x_flag); +class g65816_disassembler : public util::disasm_interface +{ +public: + class config { + public: + virtual ~config() = default; + virtual bool get_m_flag() const = 0; + virtual bool get_x_flag() const = 0; + }; + g65816_disassembler(config *conf); + + virtual u32 opcode_alignment() const override; + virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; + +private: + enum class op : unsigned + { + ADC , AND , ASL , BCC , BCS , BEQ , BIT , BMI , BNE , BPL , BRA , + BRK , BRL , BVC , BVS , CLC , CLD , CLI , CLV , CMP , COP , CPX , + CPY , DEA , DEC , DEX , DEY , EOR , INA , INC , INX , INY , JML , + JMP , JSL , JSR , LDA , LDX , LDY , LSR , MVN , MVP , NOP , ORA , + PEA , PEI , PER , PHA , PHB , PHD , PHK , PHP , PHX , PHY , PLA , + PLB , PLD , PLP , PLX , PLY , REP , ROL , ROR , RTI , RTL , RTS , + SBC , SEC , SED , SEI , SEP , STA , STP , STX , STY , STZ , TAX , + TAY , TCS , TCD , TDC , TRB , TSB , TSC , TSX , TXA , TXS , TXY , + TYA , TYX , WAI , WDM , XBA , XCE + }; + + enum + { + IMP , ACC , RELB, RELW, IMM , A , AI , AL , ALX , AX , AXI , + AY , D , DI , DIY , DLI , DLIY, DX , DXI , DY , S , SIY , + SIG , MVN , MVP , PEA , PEI , PER + }; + + enum + { + I, /* ignore */ + M, /* check m bit */ + X /* check x bit */ + }; + + class opcode_struct { + public: + op m_name; + u8 flag; + u8 ea; + + opcode_struct(op n, u8 f, u8 e); + const char *name() const; + bool is_call() const; + bool is_return() const; + }; + + static const char *const s_opnames[]; + static const opcode_struct s_opcodes[256]; + + config *m_config; + + std::string int_8_str(u8 val); + std::string int_16_str(u16 val); +}; #endif /* __G65816DS_H__ */ |