1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 #ifndef MAME_MACHINE_NAMCOIO_H
4 #define MAME_MACHINE_NAMCOIO_H
5 
6 
7 /***************************************************************************
8     TYPE DEFINITIONS
9 ***************************************************************************/
10 
11 class namcoio_device : public device_t
12 {
13 public:
in_callback()14 	template <unsigned N> auto in_callback() { return m_in_cb[N].bind(); }
out_callback()15 	template <unsigned N> auto out_callback() { return m_out_cb[N].bind(); }
16 
17 	uint8_t read(offs_t offset);
18 	void write(offs_t offset, uint8_t data);
19 
20 	WRITE_LINE_MEMBER( set_reset_line );
21 	READ_LINE_MEMBER( read_reset_line );
22 
23 	virtual void customio_run() = 0;
24 
25 protected:
26 	namcoio_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int device_type);
27 
28 	// device-level overrides
29 	virtual void device_start() override;
30 	virtual void device_reset() override;
31 
32 	enum {
33 			TYPE_NAMCO56XX,
34 			TYPE_NAMCO58XX,
35 			TYPE_NAMCO59XX
36 	};
37 
38 	// internal state
39 	uint8_t          m_ram[16];
40 
41 	devcb_read8::array<4> m_in_cb;
42 	devcb_write8::array<2> m_out_cb;
43 
44 	int            m_reset;
45 	int32_t        m_lastcoins, m_lastbuttons;
46 	int32_t        m_credits;
47 	int32_t        m_coins[2];
48 	int32_t        m_coins_per_cred[2];
49 	int32_t        m_creds_per_coin[2];
50 	int32_t        m_in_count;
51 
52 	void handle_coins( int swap );
53 
54 private:
55 	//int m_device_type;
56 };
57 
58 class namco56xx_device : public namcoio_device
59 {
60 public:
61 	namco56xx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
62 
63 	virtual const tiny_rom_entry *device_rom_region() const override;
64 
65 	virtual void customio_run() override;
66 };
67 
68 class namco58xx_device : public namcoio_device
69 {
70 public:
71 	namco58xx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
72 
73 	virtual const tiny_rom_entry *device_rom_region() const override;
74 
75 	virtual void customio_run() override;
76 };
77 
78 class namco59xx_device : public namcoio_device
79 {
80 public:
81 	namco59xx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
82 
83 	virtual const tiny_rom_entry *device_rom_region() const override;
84 
85 	virtual void customio_run() override;
86 };
87 
88 DECLARE_DEVICE_TYPE(NAMCO_56XX, namco56xx_device)
89 DECLARE_DEVICE_TYPE(NAMCO_58XX, namco58xx_device)
90 DECLARE_DEVICE_TYPE(NAMCO_59XX, namco59xx_device)
91 
92 #endif // MAME_MACHINE_NAMCOIO_H
93