1 // license:GPL-2.0+
2 // copyright-holders:Jarek Burczynski
3 #ifndef MAME_INCLUDES_TUBEP_H
4 #define MAME_INCLUDES_TUBEP_H
5 
6 #pragma once
7 
8 #include "cpu/m6800/m6800.h"
9 #include "machine/gen_latch.h"
10 #include "sound/msm5205.h"
11 #include "emupal.h"
12 #include "screen.h"
13 
14 class tubep_state : public driver_device
15 {
16 public:
tubep_state(const machine_config & mconfig,device_type type,const char * tag)17 	tubep_state(const machine_config &mconfig, device_type type, const char *tag) :
18 		driver_device(mconfig, type, tag),
19 		m_maincpu(*this, "maincpu"),
20 		m_soundcpu(*this, "soundcpu"),
21 		m_slave(*this, "slave"),
22 		m_mcu(*this, "mcu"),
23 		m_soundlatch(*this, "soundlatch"),
24 		m_msm(*this, "msm"),
25 		m_screen(*this, "screen"),
26 		m_textram(*this, "textram"),
27 		m_backgroundram(*this, "backgroundram"),
28 		m_sprite_colorsharedram(*this, "sprite_color"),
29 		m_rjammer_backgroundram(*this, "rjammer_bgram")
30 	{ }
31 
32 	void tubepb(machine_config &config);
33 	void tubep(machine_config &config);
34 	void rjammer(machine_config &config);
35 
36 private:
37 	enum
38 	{
39 		TIMER_TUBEP_SCANLINE,
40 		TIMER_RJAMMER_SCANLINE,
41 		TIMER_SPRITE
42 	};
43 
44 	required_device<cpu_device> m_maincpu;
45 	required_device<cpu_device> m_soundcpu;
46 	required_device<cpu_device> m_slave;
47 	required_device<m6802_cpu_device> m_mcu;
48 	required_device<generic_latch_8_device> m_soundlatch;
49 	optional_device<msm5205_device> m_msm;
50 	required_device<screen_device> m_screen;
51 	required_shared_ptr<uint8_t> m_textram;
52 	optional_shared_ptr<uint8_t> m_backgroundram;
53 	required_shared_ptr<uint8_t> m_sprite_colorsharedram;
54 	optional_shared_ptr<uint8_t> m_rjammer_backgroundram;
55 
56 	uint8_t m_ls74;
57 	uint8_t m_ls377;
58 	emu_timer *m_interrupt_timer;
59 	emu_timer *m_sprite_timer;
60 	int m_curr_scanline;
61 	std::unique_ptr<uint8_t[]> m_spritemap;
62 	uint8_t m_prom2[32];
63 	uint32_t m_romD_addr;
64 	uint32_t m_romEF_addr;
65 	uint32_t m_E16_add_b;
66 	uint32_t m_HINV;
67 	uint32_t m_VINV;
68 	uint32_t m_XSize;
69 	uint32_t m_YSize;
70 	uint32_t m_mark_1;
71 	uint32_t m_mark_2;
72 	uint32_t m_colorram_addr_hi;
73 	uint32_t m_ls273_g6;
74 	uint32_t m_ls273_j6;
75 	uint32_t m_romHI_addr_mid;
76 	uint32_t m_romHI_addr_msb;
77 	uint8_t m_DISP;
78 	uint8_t m_background_romsel;
79 	uint8_t m_color_A4;
80 	uint8_t m_ls175_b7;
81 	uint8_t m_ls175_e8;
82 	uint8_t m_ls377_data;
83 	uint32_t m_page;
84 	DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
85 	DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
86 	void main_cpu_irq_line_clear_w(uint8_t data);
87 	void second_cpu_irq_line_clear_w(uint8_t data);
88 	uint8_t tubep_soundlatch_r();
89 	uint8_t tubep_sound_irq_ack();
90 	void rjammer_voice_input_w(uint8_t data);
91 	void rjammer_voice_intensity_control_w(uint8_t data);
92 	void tubep_textram_w(offs_t offset, uint8_t data);
93 	DECLARE_WRITE_LINE_MEMBER(screen_flip_w);
94 	DECLARE_WRITE_LINE_MEMBER(background_romselect_w);
95 	DECLARE_WRITE_LINE_MEMBER(colorproms_A4_line_w);
96 	void tubep_background_a000_w(uint8_t data);
97 	void tubep_background_c000_w(uint8_t data);
98 	void tubep_sprite_control_w(offs_t offset, uint8_t data);
99 	void rjammer_background_LS377_w(uint8_t data);
100 	void rjammer_background_page_w(uint8_t data);
101 	void rjammer_voice_startstop_w(uint8_t data);
102 	void rjammer_voice_frequency_select_w(uint8_t data);
103 	void ay8910_portA_0_w(uint8_t data);
104 	void ay8910_portB_0_w(uint8_t data);
105 	void ay8910_portA_1_w(uint8_t data);
106 	void ay8910_portB_1_w(uint8_t data);
107 	void ay8910_portA_2_w(uint8_t data);
108 	void ay8910_portB_2_w(uint8_t data);
109 	DECLARE_MACHINE_START(tubep);
110 	DECLARE_MACHINE_RESET(tubep);
111 	virtual void video_start() override;
112 	virtual void video_reset() override;
113 	void tubep_palette(palette_device &palette);
114 	DECLARE_MACHINE_START(rjammer);
115 	DECLARE_MACHINE_RESET(rjammer);
116 	void rjammer_palette(palette_device &palette) const;
117 	uint32_t screen_update_tubep(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
118 	uint32_t screen_update_rjammer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
119 	TIMER_CALLBACK_MEMBER(tubep_scanline_callback);
120 	TIMER_CALLBACK_MEMBER(rjammer_scanline_callback);
121 	void draw_sprite();
122 	void tubep_vblank_end();
123 	void tubep_setup_save_state();
124 	DECLARE_WRITE_LINE_MEMBER(rjammer_adpcm_vck);
125 
126 	void nsc_map(address_map &map);
127 	void rjammer_main_map(address_map &map);
128 	void rjammer_main_portmap(address_map &map);
129 	void rjammer_second_map(address_map &map);
130 	void rjammer_second_portmap(address_map &map);
131 	void rjammer_sound_map(address_map &map);
132 	void rjammer_sound_portmap(address_map &map);
133 	void tubep_main_map(address_map &map);
134 	void tubep_main_portmap(address_map &map);
135 	void tubep_second_map(address_map &map);
136 	void tubep_second_portmap(address_map &map);
137 	void tubep_sound_map(address_map &map);
138 	void tubep_sound_portmap(address_map &map);
139 
140 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
141 };
142 
143 #endif // MAME_INCLUDES_TUBEP_H
144