1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood
3 #ifndef MAME_INCLUDES_MAYGAY1B_H
4 #define MAME_INCLUDES_MAYGAY1B_H
5 
6 #pragma once
7 
8 #include "cpu/m6809/m6809.h"
9 #include "machine/i8279.h"
10 
11 #include "video/awpvid.h"       //Fruit Machines Only
12 #include "machine/6821pia.h"
13 #include "machine/mc68681.h"
14 #include "machine/meters.h"
15 #include "machine/roc10937.h"   // vfd
16 #include "machine/steppers.h"   // stepper motor
17 #include "sound/ay8910.h"
18 #include "sound/ym2413.h"
19 #include "sound/okim6376.h"
20 #include "machine/nvram.h"
21 #include "machine/timer.h"
22 #include "sound/upd7759.h"
23 #include "cpu/mcs51/mcs51.h"
24 #include "sound/okim6295.h"
25 
26 
27 class maygay1b_state : public driver_device
28 {
29 public:
maygay1b_state(const machine_config & mconfig,device_type type,const char * tag)30 	maygay1b_state(const machine_config &mconfig, device_type type, const char *tag) :
31 		driver_device(mconfig, type, tag),
32 		m_maincpu(*this, "maincpu"),
33 		m_mcu(*this, "mcu"),
34 		m_vfd(*this, "vfd"),
35 		m_ay(*this, "aysnd"),
36 		m_msm6376(*this, "msm6376"),
37 		m_upd7759(*this, "upd"),
38 		m_okim6295(*this, "oki"),
39 		m_duart68681(*this, "duart68681"),
40 		m_sw1_port(*this, "SW1"),
41 		m_sw2_port(*this, "SW2"),
42 		m_kbd_ports(*this, { "SW1", "SW2", "STROBE2", "STROBE3", "STROBE4", "STROBE5", "STROBE6", "STROBE7", }),
43 		m_bank1(*this, "bank1"),
44 		m_reels(*this, "reel%u", 0U),
45 		m_meters(*this, "meters"),
46 		m_oki_region(*this, "msm6376"),
47 		m_lamps(*this, "lamp%u", 0U),
48 		m_triacs(*this, "triac%u", 0U)
49 	{
50 	}
51 
52 	void maygay_m1_no_oki(machine_config &config);
53 	void maygay_m1(machine_config &config);
54 	void maygay_m1_nec(machine_config &config);
55 	void maygay_m1_empire(machine_config &config);
56 
57 	void init_m1();
58 	void init_m1common();
59 	void init_m1nec();
60 
61 private:
62 	required_device<cpu_device> m_maincpu;
63 	required_device<i80c51_device> m_mcu;
64 	optional_device<s16lf01_device> m_vfd;
65 	required_device<ay8910_device> m_ay;
66 	optional_device<okim6376_device> m_msm6376;
67 	optional_device<upd7759_device> m_upd7759;
68 	optional_device<okim6295_device> m_okim6295;
69 	required_device<mc68681_device> m_duart68681;
70 	required_ioport m_sw1_port;
71 	required_ioport m_sw2_port;
72 	required_ioport_array<8> m_kbd_ports;
73 	required_memory_bank m_bank1;
74 	required_device_array<stepper_device, 6> m_reels;
75 	optional_device<meters_device> m_meters;
76 	optional_region_ptr<uint8_t> m_oki_region;
77 	output_finder<256> m_lamps;
78 	output_finder<8> m_triacs;
79 
80 	uint8_t m_lamppos;
81 	int m_lamp_strobe;
82 	int m_old_lamp_strobe;
83 	int m_lamp_strobe2;
84 	int m_old_lamp_strobe2;
85 	int m_RAMEN;
86 	int m_ALARMEN;
87 	int m_PSUrelay;
88 	bool m_Vmm;
89 	int m_WDOG;
90 	int m_NMIENABLE;
91 	int m_meter;
92 	TIMER_DEVICE_CALLBACK_MEMBER( maygay1b_nmitimer_callback );
93 	uint8_t m_Lamps[256];
94 	int m_optic_pattern;
DECLARE_WRITE_LINE_MEMBER(reel_optic_cb)95 	template <unsigned N> DECLARE_WRITE_LINE_MEMBER(reel_optic_cb) { if (state) m_optic_pattern |= (1 << N); else m_optic_pattern &= ~(1 << N); }
96 	void scanlines_w(uint8_t data);
97 	void scanlines_2_w(uint8_t data);
98 	void lamp_data_w(uint8_t data);
99 	void lamp_data_2_w(uint8_t data);
100 	uint8_t kbd_r();
101 	void reel12_w(uint8_t data);
102 	void reel34_w(uint8_t data);
103 	void reel56_w(uint8_t data);
104 	DECLARE_WRITE_LINE_MEMBER(ramen_w);
105 	DECLARE_WRITE_LINE_MEMBER(alarmen_w);
106 	DECLARE_WRITE_LINE_MEMBER(nmien_w);
107 	DECLARE_WRITE_LINE_MEMBER(rts_w);
108 	DECLARE_WRITE_LINE_MEMBER(psurelay_w);
109 	DECLARE_WRITE_LINE_MEMBER(wdog_w);
110 	DECLARE_WRITE_LINE_MEMBER(srsel_w);
111 	void latch_ch2_w(uint8_t data);
112 	uint8_t latch_st_hi();
113 	uint8_t latch_st_lo();
114 	void m1ab_no_oki_w(uint8_t data);
115 	void m1_pia_porta_w(uint8_t data);
116 	void m1_pia_portb_w(uint8_t data);
117 	void m1_lockout_w(uint8_t data);
118 	void m1_meter_w(uint8_t data);
119 	uint8_t m1_meter_r();
120 	uint8_t m1_firq_clr_r();
121 	uint8_t m1_firq_trg_r();
122 	uint8_t m1_firq_nec_r();
123 	uint8_t nec_reset_r();
124 	void nec_bank0_w(uint8_t data);
125 	void nec_bank1_w(uint8_t data);
126 	DECLARE_WRITE_LINE_MEMBER(duart_irq_handler);
127 	uint8_t m1_duart_r();
128 	void mcu_port0_w(uint8_t data);
129 	void mcu_port1_w(uint8_t data);
130 	void mcu_port2_w(uint8_t data);
131 	void mcu_port3_w(uint8_t data);
132 	uint8_t mcu_port0_r();
133 	uint8_t mcu_port2_r();
134 
135 	void main_to_mcu_0_w(uint8_t data);
136 	void main_to_mcu_1_w(uint8_t data);
137 
138 	uint8_t m_main_to_mcu;
139 
140 	virtual void machine_start() override;
141 	virtual void machine_reset() override;
142 	void cpu0_firq(int data);
143 	void cpu0_nmi();
144 	void m1_memmap(address_map &map);
145 	void m1_nec_memmap(address_map &map);
146 };
147 
148 INPUT_PORTS_EXTERN( maygay_m1 );
149 
150 #endif // MAME_INCLUDES_MAYGAY1B_H
151