1 // license:BSD-3-Clause
2 // copyright-holders:Zsolt Vasvari
3 #ifndef MAME_INCLUDES_SPCFORCE_H
4 #define MAME_INCLUDES_SPCFORCE_H
5 
6 #pragma once
7 
8 #include "cpu/mcs48/mcs48.h"
9 #include "machine/74259.h"
10 #include "sound/sn76496.h"
11 #include "emupal.h"
12 
13 class spcforce_state : public driver_device
14 {
15 public:
spcforce_state(const machine_config & mconfig,device_type type,const char * tag)16 	spcforce_state(const machine_config &mconfig, device_type type, const char *tag) :
17 		driver_device(mconfig, type, tag),
18 		m_maincpu(*this, "maincpu"),
19 		m_mainlatch(*this, "mainlatch"),
20 		m_audiocpu(*this, "audiocpu"),
21 		m_gfxdecode(*this, "gfxdecode"),
22 		m_palette(*this, "palette"),
23 		m_sn(*this, "sn%u", 1U),
24 		m_scrollram(*this, "scrollram"),
25 		m_videoram(*this, "videoram"),
26 		m_colorram(*this, "colorram"),
27 		m_lamps(*this, "lamp%u", 0U)
28 	{ }
29 
30 	void meteors(machine_config &config);
31 	void spcforce(machine_config &config);
32 
33 protected:
34 	virtual void machine_start() override;
35 
36 private:
37 	void sn76496_latch_w(uint8_t data);
38 	uint8_t sn76496_select_r();
39 	void sn76496_select_w(uint8_t data);
40 	DECLARE_WRITE_LINE_MEMBER(write_sn1_ready);
41 	DECLARE_WRITE_LINE_MEMBER(write_sn2_ready);
42 	DECLARE_WRITE_LINE_MEMBER(write_sn3_ready);
43 	DECLARE_READ_LINE_MEMBER(t0_r);
44 	void soundtrigger_w(uint8_t data);
45 	void misc_outputs_w(uint8_t data);
46 	DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
47 	DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
48 	DECLARE_WRITE_LINE_MEMBER(unknown_w);
49 
50 	void spcforce_palette(palette_device &palette) const;
51 
52 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
53 
54 	INTERRUPT_GEN_MEMBER(vblank_irq);
55 
56 	void spcforce_map(address_map &map);
57 	void spcforce_sound_map(address_map &map);
58 
59 	required_device<cpu_device> m_maincpu;
60 	required_device<ls259_device> m_mainlatch;
61 	required_device<i8035_device> m_audiocpu;
62 	required_device<gfxdecode_device> m_gfxdecode;
63 	required_device<palette_device> m_palette;
64 	required_device_array<sn76496_device, 3> m_sn;
65 
66 	required_shared_ptr<uint8_t> m_scrollram;
67 	required_shared_ptr<uint8_t> m_videoram;
68 	required_shared_ptr<uint8_t> m_colorram;
69 	output_finder<2> m_lamps;
70 
71 	int m_sn76496_latch;
72 	int m_sn76496_select;
73 	int m_sn1_ready;
74 	int m_sn2_ready;
75 	int m_sn3_ready;
76 	uint8_t m_irq_mask;
77 };
78 
79 #endif // MAME_INCLUDES_SPCFORCE_H
80