summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6502/deco16.h
blob: 0d170f43df043e226cdb5a902b7c12219f3b0652 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
/***************************************************************************

    deco16.h

    6502, reverse-engineered DECO variant

***************************************************************************/

#ifndef MAME_CPU_M6502_DECO16_H
#define MAME_CPU_M6502_DECO16_H

#include "m6502.h"
#include "deco16d.h"

class deco16_device : public m6502_device {
public:
	deco16_device(const machine_config &mconfig, const char *tag, device_t *owner, const XTAL &clock);

	virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;

	virtual void do_exec_full() override;
	virtual void do_exec_partial() override;

protected:
	address_space *io;
	address_space_config io_config;

	virtual space_config_vector memory_space_config() const override;
	virtual void device_start() override;

#define O(o) void o ## _full(); void o ## _partial()

	O(brk_16_imp);
	O(ill_non);
	O(u0B_zpg);
	O(u13_zpg);
	O(u23_zpg);
	O(u3F_zpg);
	O(u4B_zpg);
	O(u87_zpg);
	O(u8F_zpg);
	O(uA3_zpg);
	O(uAB_zpg);
	O(uBB_zpg);
	O(vbl_zpg);

	O(reset_16);

#undef O
};

enum {
	DECO16_IRQ_LINE = m6502_device::IRQ_LINE,
	DECO16_NMI_LINE = m6502_device::NMI_LINE,
	DECO16_SET_OVERFLOW = m6502_device::V_LINE
};

DECLARE_DEVICE_TYPE(DECO16, deco16_device)

#endif // MAME_CPU_M6502_DECO16_H