1 // license:BSD-3-Clause
2 // copyright-holders:Mark McDougall
3 #ifndef MAME_INCLUDES_STFIGHT_H
4 #define MAME_INCLUDES_STFIGHT_H
5 
6 #pragma once
7 
8 #include "cpu/m6805/m68705.h"
9 #include "sound/msm5205.h"
10 #include "video/stfight_dev.h"
11 #include "video/airraid_dev.h"
12 
13 class stfight_state : public driver_device
14 {
15 public:
stfight_state(const machine_config & mconfig,device_type type,const char * tag)16 	stfight_state(const machine_config &mconfig, device_type type, const char *tag)
17 		: driver_device(mconfig, type, tag)
18 		, m_coin_mech(*this, "COIN")
19 		, m_maincpu(*this, "maincpu")
20 		, m_audiocpu(*this, "audiocpu")
21 		, m_mcu(*this, "mcu")
22 		, m_msm(*this, "msm")
23 		, m_main_bank(*this, "mainbank")
24 		, m_samples(*this, "adpcm")
25 		, m_decrypted_opcodes(*this, "decrypted_opcodes")
26 		, m_coin_state(0)
27 		, m_fm_data(0)
28 		, m_cpu_to_mcu_empty(true)
29 		, m_cpu_to_mcu_data(0x0f)
30 		, m_port_a_out(0xff)
31 		, m_port_c_out(0xff)
32 		, m_vck2(false)
33 		, m_adpcm_reset(true)
34 		, m_adpcm_data_offs(0x0000)
35 	{
36 	}
37 
38 	void stfight_base(machine_config &config);
39 	void stfight(machine_config &config);
40 	void cshooter(machine_config &config);
41 
42 	void init_stfight();
43 	void init_empcity();
44 	void init_cshooter();
45 
46 protected:
47 	enum
48 	{
49 		TIMER_STFIGHT_INTERRUPT_1
50 	};
51 
52 	virtual void machine_start() override;
53 	virtual void machine_reset() override;
54 
55 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
56 
57 private:
58 	DECLARE_WRITE_LINE_MEMBER(stfight_adpcm_int);
59 
60 	void stfight_io_w(uint8_t data);
61 	uint8_t stfight_coin_r();
62 	void stfight_coin_w(uint8_t data);
63 	void stfight_fm_w(uint8_t data);
64 	void stfight_mcu_w(uint8_t data);
65 
66 	void stfight_bank_w(uint8_t data);
67 
68 	uint8_t stfight_fm_r();
69 
70 	INTERRUPT_GEN_MEMBER(stfight_vb_interrupt);
71 
72 	// MCU specifics
73 	uint8_t stfight_68705_port_b_r();
74 	void stfight_68705_port_a_w(uint8_t data);
75 	void stfight_68705_port_b_w(uint8_t data);
76 	void stfight_68705_port_c_w(uint8_t data);
77 
78 	void cpu1_map(address_map &map);
79 	void cpu2_map(address_map &map);
80 	void cshooter_cpu1_map(address_map &map);
81 	void decrypted_opcodes_map(address_map &map);
82 	void stfight_cpu1_map(address_map &map);
83 
84 	required_ioport                  m_coin_mech;
85 
86 	required_device<cpu_device>      m_maincpu;
87 	required_device<cpu_device>      m_audiocpu;
88 	required_device<m68705p5_device> m_mcu;
89 	required_device<msm5205_device>  m_msm;
90 
91 	required_memory_bank             m_main_bank;
92 
93 	required_region_ptr<uint8_t>     m_samples;
94 	optional_shared_ptr<uint8_t>     m_decrypted_opcodes;
95 
96 	uint8_t     m_coin_state;
97 
98 	uint8_t     m_fm_data;
99 
100 	bool        m_cpu_to_mcu_empty;
101 	uint8_t     m_cpu_to_mcu_data;
102 	uint8_t     m_port_a_out;
103 	uint8_t     m_port_c_out;
104 
105 	bool        m_vck2;
106 	bool        m_adpcm_reset;
107 	uint16_t    m_adpcm_data_offs;
108 
109 	emu_timer   *m_int1_timer;
110 };
111 
112 #endif // MAME_INCLUDES_STFIGHT_H
113