1 // license:BSD-3-Clause
2 // copyright-holders:Stefan Jokisch
3 /*************************************************************************
4 
5     Atari Triple Hunt hardware
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_TRIPLHNT_H
9 #define MAME_INCLUDES_TRIPLHNT_H
10 
11 #pragma once
12 
13 #include "machine/74259.h"
14 #include "machine/watchdog.h"
15 #include "sound/discrete.h"
16 #include "sound/samples.h"
17 #include "emupal.h"
18 #include "screen.h"
19 #include "tilemap.h"
20 
21 
22 /* Discrete Sound Input Nodes */
23 #define TRIPLHNT_BEAR_ROAR_DATA NODE_01
24 #define TRIPLHNT_BEAR_EN        NODE_02
25 #define TRIPLHNT_SHOT_DATA      NODE_03
26 #define TRIPLHNT_SCREECH_EN     NODE_04
27 #define TRIPLHNT_LAMP_EN        NODE_05
28 
29 
30 class triplhnt_state : public driver_device
31 {
32 public:
triplhnt_state(const machine_config & mconfig,device_type type,const char * tag)33 	triplhnt_state(const machine_config &mconfig, device_type type, const char *tag) :
34 		driver_device(mconfig, type, tag),
35 		m_maincpu(*this, "maincpu"),
36 		m_latch(*this, "latch"),
37 		m_watchdog(*this, "watchdog"),
38 		m_discrete(*this, "discrete"),
39 		m_samples(*this, "samples"),
40 		m_gfxdecode(*this, "gfxdecode"),
41 		m_screen(*this, "screen"),
42 		m_palette(*this, "palette"),
43 		m_playfield_ram(*this, "playfield_ram"),
44 		m_vpos_ram(*this, "vpos_ram"),
45 		m_hpos_ram(*this, "hpos_ram"),
46 		m_orga_ram(*this, "orga_ram"),
47 		m_code_ram(*this, "code_ram"),
48 		m_lamp(*this, "lamp0")
49 	{ }
50 
51 	void triplhnt(machine_config &config);
52 
53 	void init_triplhnt();
54 
55 private:
56 	enum
57 	{
58 		TIMER_HIT
59 	};
60 
61 	DECLARE_WRITE_LINE_MEMBER(coin_lockout_w);
62 	DECLARE_WRITE_LINE_MEMBER(tape_control_w);
63 
64 	uint8_t cmos_r(offs_t offset);
65 	uint8_t input_port_4_r();
66 	uint8_t misc_r(offs_t offset);
67 	uint8_t da_latch_r(offs_t offset);
68 
69 	TILE_GET_INFO_MEMBER(get_tile_info);
70 	virtual void video_start() override;
71 	void triplhnt_palette(palette_device &palette) const;
72 
73 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
74 	void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
75 	void set_collision(int code);
76 
77 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
78 	virtual void machine_start() override;
79 	void triplhnt_map(address_map &map);
80 
81 	required_device<cpu_device> m_maincpu;
82 	required_device<f9334_device> m_latch;
83 	required_device<watchdog_timer_device> m_watchdog;
84 	required_device<discrete_sound_device> m_discrete;
85 	required_device<samples_device> m_samples;
86 	required_device<gfxdecode_device> m_gfxdecode;
87 	required_device<screen_device> m_screen;
88 	required_device<palette_device> m_palette;
89 
90 	required_shared_ptr<uint8_t> m_playfield_ram;
91 	required_shared_ptr<uint8_t> m_vpos_ram;
92 	required_shared_ptr<uint8_t> m_hpos_ram;
93 	required_shared_ptr<uint8_t> m_orga_ram;
94 	required_shared_ptr<uint8_t> m_code_ram;
95 	output_finder<> m_lamp;
96 
97 	uint8_t m_cmos[16];
98 	uint8_t m_da_latch;
99 	uint8_t m_cmos_latch;
100 	uint8_t m_hit_code;
101 	int m_sprite_zoom;
102 	int m_sprite_bank;
103 	bitmap_ind16 m_helper;
104 	emu_timer *m_hit_timer;
105 	tilemap_t* m_bg_tilemap;
106 };
107 
108 /*----------- defined in audio/triplhnt.cpp -----------*/
109 DISCRETE_SOUND_EXTERN( triplhnt_discrete );
110 extern const char *const triplhnt_sample_names[];
111 
112 #endif // MAME_INCLUDES_TRIPLHNT_H
113