summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/alpha_8921.h
blob: 88ecd850eb9f57258d9fead81f637dfb1369a19b (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
// license:BSD-3-Clause
// copyright-holders:cam900
/***************************************************************************

	Alpha denshi ALPHA-8921 emulation

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

#ifndef MAME_MACHINE_ALPHA_8921_H
#define MAME_MACHINE_ALPHA_8921_H

#pragma once


// ======================> alpha_8921_device

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

	// inputs
	DECLARE_WRITE_LINE_MEMBER(clk_w);
	DECLARE_WRITE_LINE_MEMBER(load_w);
	DECLARE_WRITE_LINE_MEMBER(even_w);
	DECLARE_WRITE_LINE_MEMBER(h_w);
	void c_w(u32 data);

	// outputs
	u8 gad_r();
	u8 gbd_r();
	DECLARE_READ_LINE_MEMBER(dota_r);
	DECLARE_READ_LINE_MEMBER(dotb_r);

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

private:
	// inputs
	bool m_clk = false; // CLK pin
	bool m_load = false; // LOAD pin
	bool m_even = false; // EVEN pin
	bool m_h = false; // H pin
	u32 m_c = 0; // C data (32 bit)

	// outputs
	u8 m_gad = 0; // GAD data (4 bit)
	u8 m_gbd = 0; // GBD data (4 bit)
	bool m_dota = false; // DOTA pin
	bool m_dotb = false; // DOTB pin

	// internal status
	u32 m_sr = 0;
	u32 m_old_sr = ~0;
	bool m_old_even = true;
	bool m_old_h = true;
	void update_output();
};


// device type definition
DECLARE_DEVICE_TYPE(ALPHA_8921, alpha_8921_device)

#endif // MAME_MACHINE_ALPHA_8921_H