// license:BSD-3-Clause
// copyright-holders:Tony La Porta
/*

  Microchip PIC16C5x Emulator

  Copyright Tony La Porta
  Originally written for the MAME project.

*/

#ifndef MAME_CPU_PIC16C5X_16C5XDSM_H
#define MAME_CPU_PIC16C5X_16C5XDSM_H

#pragma once

class pic16c5x_disassembler : public util::disasm_interface
{
public:
	pic16c5x_disassembler();
	virtual ~pic16c5x_disassembler() = default;

	virtual u32 opcode_alignment() const override;
	virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params) override;

private:
	struct PIC16C5xOpcode  {
		u16 mask;          // instruction mask
		u16 bits;          // constant bits
		u16 extcode;       // value that gets extension code
		const char *parse; // how to parse bits
		const char *fmt;   // instruction format

		PIC16C5xOpcode(u16 m, u16 b, u16 e, const char *p, const char *f) : mask(m), bits(b), extcode(e), parse(p), fmt(f) {}
	};

	static const char *const regfile[32];
	static const char *const dest[2];
	static const char *const PIC16C5xFormats[];

	std::vector<PIC16C5xOpcode> Op;
};

#endif
