1 // license:BSD-3-Clause
2 // copyright-holders:Stefan Jokisch
3 #ifndef MAME_INCLUDES_SSPEEDR_H
4 #define MAME_INCLUDES_SSPEEDR_H
5 
6 #pragma once
7 
8 #include "emupal.h"
9 #include "machine/netlist.h"
10 
11 class sspeedr_state : public driver_device
12 {
13 public:
sspeedr_state(const machine_config & mconfig,device_type type,const char * tag)14 	sspeedr_state(const machine_config &mconfig, device_type type, const char *tag)
15 		: driver_device(mconfig, type, tag)
16 		, m_maincpu(*this, "maincpu")
17 		, m_gfxdecode(*this, "gfxdecode")
18 		, m_palette(*this, "palette")
19 		, m_digits(*this, "digit%u", 0U)
20 		, m_pedal_bit0(*this, "sound_nl:pedal_bit0")
21 		, m_pedal_bit1(*this, "sound_nl:pedal_bit1")
22 		, m_pedal_bit2(*this, "sound_nl:pedal_bit2")
23 		, m_pedal_bit3(*this, "sound_nl:pedal_bit3")
24 		, m_hi_shift(*this, "sound_nl:hi_shift")
25 		, m_lo_shift(*this, "sound_nl:lo_shift")
26 		, m_boom(*this, "sound_nl:boom")
27 		, m_engine_sound_off(*this, "sound_nl:engine_sound_off")
28 		, m_noise_cr_1(*this, "sound_nl:noise_cr_1")
29 		, m_noise_cr_2(*this, "sound_nl:noise_cr_2")
30 		, m_silence(*this, "sound_nl:silence")
31 		, m_track(*this, "track")
32 	{ }
33 
34 	void sspeedr(machine_config &config);
35 
36 protected:
37 	virtual void video_start() override;
machine_start()38 	virtual void machine_start() override { m_digits.resolve(); }
39 
40 private:
41 	void int_ack_w(uint8_t data);
42 	void lamp_w(uint8_t data);
43 	void time_w(offs_t offset, uint8_t data);
44 	void score_w(offs_t offset, uint8_t data);
45 	void sound1_w(uint8_t data);
46 	void sound2_w(uint8_t data);
47 	void driver_horz_w(uint8_t data);
48 	void driver_horz_2_w(uint8_t data);
49 	void driver_vert_w(uint8_t data);
50 	void driver_pic_w(uint8_t data);
51 	void drones_horz_w(uint8_t data);
52 	void drones_horz_2_w(uint8_t data);
53 	void drones_mask_w(uint8_t data);
54 	void drones_vert_w(offs_t offset, uint8_t data);
55 	void track_horz_w(uint8_t data);
56 	void track_horz_2_w(uint8_t data);
57 	void track_vert_w(offs_t offset, uint8_t data);
58 	void track_ice_w(uint8_t data);
59 	void palette(palette_device &palette) const;
60 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
61 	DECLARE_WRITE_LINE_MEMBER(screen_vblank);
62 	void io_map(address_map &map);
63 	void prg_map(address_map &map);
64 
65 	uint8_t m_led_time[2];
66 	uint8_t m_led_score[24];
67 	uint8_t m_toggle;
68 	uint16_t m_driver_horz;
69 	uint8_t m_driver_vert;
70 	uint8_t m_driver_pic;
71 	uint16_t m_drones_horz;
72 	uint8_t m_drones_vert[3];
73 	uint8_t m_drones_mask;
74 	uint16_t m_track_horz;
75 	uint8_t m_track_vert[2];
76 	uint8_t m_track_ice;
77 
78 	void draw_track(bitmap_ind16 &bitmap);
79 	void draw_drones(bitmap_ind16 &bitmap, const rectangle &cliprect);
80 	void draw_driver(bitmap_ind16 &bitmap, const rectangle &cliprect);
81 	required_device<cpu_device> m_maincpu;
82 	required_device<gfxdecode_device> m_gfxdecode;
83 	required_device<palette_device> m_palette;
84 	output_finder<26> m_digits;
85 	required_device<netlist_mame_logic_input_device> m_pedal_bit0;
86 	required_device<netlist_mame_logic_input_device> m_pedal_bit1;
87 	required_device<netlist_mame_logic_input_device> m_pedal_bit2;
88 	required_device<netlist_mame_logic_input_device> m_pedal_bit3;
89 	required_device<netlist_mame_logic_input_device> m_hi_shift;
90 	required_device<netlist_mame_logic_input_device> m_lo_shift;
91 	required_device<netlist_mame_logic_input_device> m_boom;
92 	required_device<netlist_mame_logic_input_device> m_engine_sound_off;
93 	required_device<netlist_mame_logic_input_device> m_noise_cr_1;
94 	required_device<netlist_mame_logic_input_device> m_noise_cr_2;
95 	required_device<netlist_mame_logic_input_device> m_silence;
96 	required_region_ptr<uint8_t> m_track;
97 };
98 
99 #endif // MAME_INCLUDES_SSPEEDR_H
100