1 // license:BSD-3-Clause
2 // copyright-holders:Zsolt Vasvari
3 #ifndef MAME_INCLUDES_ROUTE16_H
4 #define MAME_INCLUDES_ROUTE16_H
5 
6 #pragma once
7 
8 #include "sound/sn76477.h"
9 #include "emupal.h"
10 #include "screen.h"
11 
12 class route16_state : public driver_device
13 {
14 public:
route16_state(const machine_config & mconfig,device_type type,const char * tag)15 	route16_state(const machine_config &mconfig, device_type type, const char *tag)
16 		: driver_device(mconfig, type, tag)
17 		, m_cpu1(*this, "cpu1")
18 		, m_cpu2(*this, "cpu2")
19 		, m_sn(*this, "snsnd")
20 		, m_sharedram(*this, "sharedram")
21 		, m_videoram1(*this, "videoram1")
22 		, m_videoram2(*this, "videoram2")
23 		, m_decrypted_opcodes(*this, "decrypted_opcodes")
24 		, m_palette(*this, "palette")
25 		, m_screen(*this, "screen")
26 		, m_key(*this, "KEY%u", 0U)
27 		, m_protection_data(0)
28 	{}
29 
30 	void routex(machine_config &config);
31 	void jongpute(machine_config &config);
32 	void spacecho(machine_config &config);
33 	void speakres(machine_config &config);
34 	void stratvox(machine_config &config);
35 	void route16(machine_config &config);
36 	void vscompmj(machine_config &config);
37 
38 	void init_route16();
39 	void init_route16a();
40 	void init_route16c();
41 	void init_vscompmj();
42 
43 protected:
44 	virtual void video_start() override;
45 
46 private:
47 	void out0_w(uint8_t data);
48 	void out1_w(uint8_t data);
49 	template<bool cpu1> void route16_sharedram_w(offs_t offset, uint8_t data);
50 	uint8_t route16_prot_read();
51 	uint8_t routex_prot_read();
52 	void jongpute_input_port_matrix_w(uint8_t data);
53 	uint8_t jongpute_p1_matrix_r();
54 	uint8_t jongpute_p2_matrix_r();
55 	uint8_t speakres_in3_r();
56 	void speakres_out2_w(uint8_t data);
57 	void stratvox_sn76477_w(uint8_t data);
58 	DECLARE_MACHINE_START(speakres);
59 	DECLARE_MACHINE_START(jongpute);
60 
61 	uint32_t screen_update_route16(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
62 	uint32_t screen_update_jongpute(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
63 
64 	void cpu1_io_map(address_map &map);
65 	void route16_cpu1_map(address_map &map);
66 	void route16_cpu2_map(address_map &map);
67 	void routex_cpu1_map(address_map &map);
68 	void speakres_cpu1_map(address_map &map);
69 	void stratvox_cpu1_map(address_map &map);
70 	void stratvox_cpu2_map(address_map &map);
71 	void jongpute_cpu1_map(address_map &map);
72 	void vscompmj_cpu1_map(address_map &map);
73 	void vscompmj_decrypted_opcodes(address_map &map);
74 
75 	required_device<cpu_device> m_cpu1;
76 	required_device<cpu_device> m_cpu2;
77 	optional_device<sn76477_device> m_sn;
78 
79 	required_shared_ptr<uint8_t> m_sharedram;
80 	required_shared_ptr<uint8_t> m_videoram1;
81 	required_shared_ptr<uint8_t> m_videoram2;
82 	optional_shared_ptr<uint8_t> m_decrypted_opcodes;
83 	required_device<palette_device> m_palette;
84 	required_device<screen_device> m_screen;
85 	optional_ioport_array<8> m_key;
86 	uint8_t m_protection_data;
87 
88 	uint8_t m_jongpute_port_select;
89 	int m_speakres_vrx;
90 	uint8_t m_flipscreen;
91 	uint8_t m_palette_1;
92 	uint8_t m_palette_2;
93 };
94 
95 #endif // MAME_INCLUDES_ROUTE16_H
96