1 // license:BSD-3-Clause
2 // copyright-holders:Mike Balfour, Patrick Lawrence, Brad Oliver
3 /*************************************************************************
4 
5     Atari Football hardware
6 
7 *************************************************************************/
8 
9 #ifndef MAME_INCLUDES_ATARIFB_H
10 #define MAME_INCLUDES_ATARIFB_H
11 
12 #pragma once
13 
14 #include "machine/timer.h"
15 #include "sound/discrete.h"
16 #include "video/pwm.h"
17 
18 #include "emupal.h"
19 #include "screen.h"
20 #include "tilemap.h"
21 
22 
23 /* Discrete Sound Input Nodes */
24 #define ATARIFB_WHISTLE_EN      NODE_01
25 #define ATARIFB_CROWD_DATA      NODE_02
26 #define ATARIFB_ATTRACT_EN      NODE_03
27 #define ATARIFB_NOISE_EN        NODE_04
28 #define ATARIFB_HIT_EN          NODE_05
29 
30 
31 class atarifb_state : public driver_device
32 {
33 public:
atarifb_state(const machine_config & mconfig,device_type type,const char * tag)34 	atarifb_state(const machine_config &mconfig, device_type type, const char *tag) :
35 		driver_device(mconfig, type, tag),
36 		m_maincpu(*this, "maincpu"),
37 		m_discrete(*this, "discrete"),
38 		m_gfxdecode(*this, "gfxdecode"),
39 		m_screen(*this, "screen"),
40 		m_palette(*this, "palette"),
41 		m_led_pwm(*this, "led_pwm"),
42 		m_leds(*this, "led%u", 0U),
43 		m_alphap1_videoram(*this, "p1_videoram"),
44 		m_alphap2_videoram(*this, "p2_videoram"),
45 		m_field_videoram(*this, "field_videoram"),
46 		m_spriteram(*this, "spriteram"),
47 		m_scroll_register(*this, "scroll_register")
48 	{ }
49 
50 	void intack_w(uint8_t data);
51 	void atarifb_out1_w(uint8_t data);
52 	void atarifb4_out1_w(uint8_t data);
53 	void abaseb_out1_w(uint8_t data);
54 	void soccer_out1_w(uint8_t data);
55 	void atarifb_out2_w(uint8_t data);
56 	void soccer_out2_w(uint8_t data);
57 	void atarifb_out3_w(uint8_t data);
58 	uint8_t atarifb_in0_r();
59 	uint8_t atarifb_in2_r();
60 	uint8_t atarifb4_in0_r();
61 	uint8_t atarifb4_in2_r();
62 	void atarifb_alpha1_videoram_w(offs_t offset, uint8_t data);
63 	void atarifb_alpha2_videoram_w(offs_t offset, uint8_t data);
64 	void atarifb_field_videoram_w(offs_t offset, uint8_t data);
65 	TILE_GET_INFO_MEMBER(alpha1_get_tile_info);
66 	TILE_GET_INFO_MEMBER(alpha2_get_tile_info);
67 	TILE_GET_INFO_MEMBER(field_get_tile_info);
68 	void atarifb_palette(palette_device &palette) const;
69 	uint32_t screen_update_atarifb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
70 	uint32_t screen_update_abaseb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
71 	uint32_t screen_update_soccer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
72 	void get_tile_info_common( tile_data &tileinfo, tilemap_memory_index tile_index, uint8_t *alpha_videoram );
73 	void draw_playfield_and_alpha( bitmap_ind16 &bitmap, const rectangle &cliprect, int playfield_x_offset, int playfield_y_offset );
74 	void draw_sprites_atarifb( bitmap_ind16 &bitmap, const rectangle &cliprect );
75 	void draw_sprites_soccer( bitmap_ind16 &bitmap, const rectangle &cliprect );
76 	void atarifb4(machine_config &config);
77 	void atarifb(machine_config &config);
78 	void soccer(machine_config &config);
79 	void abaseb(machine_config &config);
80 	void abaseb_map(address_map &map);
81 	void atarifb4_map(address_map &map);
82 	void atarifb_map(address_map &map);
83 	void soccer_map(address_map &map);
84 
85 protected:
86 	virtual void machine_start() override;
87 	virtual void machine_reset() override;
88 	virtual void video_start() override;
89 
90 	/* devices */
91 	required_device<cpu_device> m_maincpu;
92 	required_device<discrete_device> m_discrete;
93 	required_device<gfxdecode_device> m_gfxdecode;
94 	required_device<screen_device> m_screen;
95 	required_device<palette_device> m_palette;
96 	required_device<pwm_display_device> m_led_pwm;
97 
98 	output_finder<2> m_leds;
99 
100 	TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
101 
102 	/* video-related */
103 	required_shared_ptr<uint8_t> m_alphap1_videoram;
104 	required_shared_ptr<uint8_t> m_alphap2_videoram;
105 	required_shared_ptr<uint8_t> m_field_videoram;
106 	required_shared_ptr<uint8_t> m_spriteram;
107 	required_shared_ptr<uint8_t> m_scroll_register;
108 
109 	tilemap_t  *m_alpha1_tilemap;
110 	tilemap_t  *m_alpha2_tilemap;
111 	tilemap_t  *m_field_tilemap;
112 
113 	/* sound-related */
114 	int m_ctrld;
115 	int m_sign_x_1;
116 	int m_sign_y_1;
117 	int m_sign_x_2;
118 	int m_sign_y_2;
119 	int m_sign_x_3;
120 	int m_sign_y_3;
121 	int m_sign_x_4;
122 	int m_sign_y_4;
123 	int m_counter_x_in0;
124 	int m_counter_y_in0;
125 	int m_counter_x_in0b;
126 	int m_counter_y_in0b;
127 	int m_counter_x_in2;
128 	int m_counter_y_in2;
129 	int m_counter_x_in2b;
130 	int m_counter_y_in2b;
131 };
132 
133 //----------- defined in audio/atarifb.cpp -----------
134 DISCRETE_SOUND_EXTERN( atarifb_discrete );
135 DISCRETE_SOUND_EXTERN( abaseb_discrete );
136 
137 #endif // MAME_INCLUDES_ATARIFB_H
138