summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/am2901b.h
blob: ac192c152a5adf88e6debb38b55f8ba06c8064ec (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/***************************************************************************

    am2901b.h
    AMD Am2901B / Am2901C
    Four-Bit Bipolar Microprocessor Slice

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

#ifndef MAME_MACHINE_AM2901B_H
#define MAME_MACHINE_AM2901B_H

#pragma once

//**************************************************************************
//  TYPE DEFINITIONS
//**************************************************************************

// ======================> am2901b_device

class am2901b_device : public device_t
{
public:
	// construction/destruction
	am2901b_device(const machine_config &mconfig, const char *tag, device_t *owner, const XTAL &clock = XTAL());

	auto y() { return m_y.bind(); }
	auto g() { return m_g.bind(); }
	auto p() { return m_p.bind(); }
	auto q0() { return m_q0.bind(); }
	auto q3() { return m_q3.bind(); }
	auto ram0() { return m_ram0.bind(); }
	auto ram3() { return m_ram3.bind(); }
	auto ovr() { return m_ovr.bind(); }
	auto f0() { return m_f0.bind(); }
	auto f3() { return m_f3.bind(); }

	void a_w(uint8_t data);
	void b_w(uint8_t data);
	void d_w(uint8_t data);
	void i_w(uint16_t data);

	DECLARE_WRITE_LINE_MEMBER(q0_w);
	DECLARE_WRITE_LINE_MEMBER(q3_w);
	DECLARE_WRITE_LINE_MEMBER(ram0_w);
	DECLARE_WRITE_LINE_MEMBER(ram3_w);
	DECLARE_WRITE_LINE_MEMBER(ci_w);
	DECLARE_WRITE_LINE_MEMBER(cp_w);

private:
	// device-level overrides
	virtual void device_start() override;
	virtual void device_reset() override;

	void execute();
	void disassemble();

	uint8_t m_a[16];
	uint8_t m_d;
	uint8_t m_q;
	uint16_t m_i;

	uint8_t m_a_addr;
	uint8_t m_b_addr;

	uint8_t m_a_latch;
	uint8_t m_b_latch;

	bool m_q0_in;
	bool m_q3_in;
	bool m_ram0_in;
	bool m_ram3_in;
	bool m_ci;
	bool m_cp;

	uint8_t m_y_out;
	bool m_g_out;
	bool m_p_out;
	bool m_q0_out;
	bool m_q3_out;
	bool m_ram0_out;
	bool m_ram3_out;
	bool m_ovr_out;
	bool m_f0_out;
	bool m_f3_out;
	bool m_co_out;

	devcb_write8 m_y;
	devcb_write_line m_g;
	devcb_write_line m_p;
	devcb_write_line m_q0;
	devcb_write_line m_q3;
	devcb_write_line m_ram0;
	devcb_write_line m_ram3;
	devcb_write_line m_ovr;
	devcb_write_line m_f0;
	devcb_write_line m_f3;
	devcb_write_line m_co;
};

// device type definition
DECLARE_DEVICE_TYPE(AM2901B, am2901b_device)

#endif // MAME_MACHINE_AM2901B_H