1 // license:BSD-3-Clause
2 // copyright-holders:Mike Balfour
3 /*************************************************************************
4 
5     Atari Night Driver hardware
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_NITEDRVR_H
9 #define MAME_INCLUDES_NITEDRVR_H
10 
11 #pragma once
12 
13 #include "machine/timer.h"
14 #include "sound/discrete.h"
15 #include "emupal.h"
16 
17 /* Discrete Sound Input Nodes */
18 #define NITEDRVR_BANG_DATA  NODE_01
19 #define NITEDRVR_SKID1_EN   NODE_02
20 #define NITEDRVR_SKID2_EN   NODE_03
21 #define NITEDRVR_MOTOR_DATA NODE_04
22 #define NITEDRVR_CRASH_EN   NODE_05
23 #define NITEDRVR_ATTRACT_EN NODE_06
24 
25 
26 class nitedrvr_state : public driver_device
27 {
28 public:
nitedrvr_state(const machine_config & mconfig,device_type type,const char * tag)29 	nitedrvr_state(const machine_config &mconfig, device_type type, const char *tag) :
30 		driver_device(mconfig, type, tag),
31 		m_videoram(*this, "videoram"),
32 		m_hvc(*this, "hvc"),
33 		m_maincpu(*this, "maincpu"),
34 		m_discrete(*this, "discrete"),
35 		m_gfxdecode(*this, "gfxdecode"),
36 		m_palette(*this, "palette"),
37 		m_led(*this, "led")
38 	{ }
39 
40 	void nitedrvr(machine_config &config);
41 
42 private:
43 	uint8_t nitedrvr_steering_reset_r();
44 	void nitedrvr_steering_reset_w(uint8_t data);
45 	uint8_t nitedrvr_in0_r(offs_t offset);
46 	uint8_t nitedrvr_in1_r(offs_t offset);
47 	void nitedrvr_out0_w(uint8_t data);
48 	void nitedrvr_out1_w(uint8_t data);
49 	virtual void machine_start() override;
50 	virtual void machine_reset() override;
51 	uint32_t screen_update_nitedrvr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
52 	TIMER_DEVICE_CALLBACK_MEMBER(nitedrvr_crash_toggle_callback);
53 	void draw_box(bitmap_ind16 &bitmap, const rectangle &cliprect, int bx, int by, int ex, int ey);
54 	void draw_roadway(bitmap_ind16 &bitmap, const rectangle &cliprect);
55 	void draw_tiles(bitmap_ind16 &bitmap, const rectangle &cliprect);
56 	int nitedrvr_steering();
57 	void nitedrvr_map(address_map &map);
58 
59 	/* memory pointers */
60 	required_shared_ptr<uint8_t> m_videoram;
61 	required_shared_ptr<uint8_t> m_hvc;
62 
63 	/* input */
64 	uint8_t m_gear;
65 	uint8_t m_track;
66 	int32_t m_steering_buf;
67 	int32_t m_steering_val;
68 	uint8_t m_crash_en;
69 	uint8_t m_crash_data;
70 	uint8_t m_crash_data_en;  // IC D8
71 	uint8_t m_ac_line;
72 	int32_t m_last_steering_val;
73 
74 	/* devices */
75 	required_device<cpu_device> m_maincpu;
76 	required_device<discrete_device> m_discrete;
77 	required_device<gfxdecode_device> m_gfxdecode;
78 	required_device<palette_device> m_palette;
79 	output_finder<> m_led;
80 };
81 
82 /*----------- defined in audio/nitedrvr.c -----------*/
83 DISCRETE_SOUND_EXTERN( nitedrvr_discrete );
84 
85 #endif // MAME_INCLUDES_NITEDRVR_H
86