1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles
3 /*************************************************************************
4 
5     Atari G1 hardware
6 
7 *************************************************************************/
8 
9 #include "audio/atarijsa.h"
10 #include "machine/adc0808.h"
11 #include "machine/atarigen.h"
12 #include "machine/slapstic.h"
13 #include "machine/timer.h"
14 #include "video/atarirle.h"
15 #include "cpu/m68000/m68000.h"
16 #include "tilemap.h"
17 
18 class atarig1_state : public atarigen_state
19 {
20 public:
atarig1_state(const machine_config & mconfig,device_type type,const char * tag)21 	atarig1_state(const machine_config &mconfig, device_type type, const char *tag)
22 		: atarigen_state(mconfig, type, tag),
23 			m_slapstic(*this, "slapstic"),
24 			m_jsa(*this, "jsa"),
25 			m_playfield_tilemap(*this, "playfield"),
26 			m_alpha_tilemap(*this, "alpha"),
27 			m_rle(*this, "rle"),
28 			m_adc(*this, "adc"),
29 			m_in1(*this, "IN1"),
30 			m_mo_command(*this, "mo_command") { }
31 
32 	optional_device<atari_slapstic_device> m_slapstic;
33 	required_device<atari_jsa_ii_device> m_jsa;
34 	required_device<tilemap_device> m_playfield_tilemap;
35 	required_device<tilemap_device> m_alpha_tilemap;
36 	required_device<atari_rle_objects_device> m_rle;
37 
38 	optional_device<adc0808_device> m_adc;
39 	optional_ioport m_in1;
40 
41 	bool            m_is_pitfight;
42 
43 	required_shared_ptr<uint16_t> m_mo_command;
44 
45 	uint16_t *        m_bslapstic_base;
46 	std::unique_ptr<uint8_t[]>          m_bslapstic_bank0;
47 	uint8_t           m_bslapstic_bank;
48 	bool            m_bslapstic_primed;
49 
50 	int             m_pfscroll_xoffset;
51 	uint16_t          m_current_control;
52 	uint8_t           m_playfield_tile_bank;
53 	uint16_t          m_playfield_xscroll;
54 	uint16_t          m_playfield_yscroll;
55 
56 	virtual void device_post_load() override;
57 	void video_int_ack_w(uint16_t data = 0);
58 	TIMER_DEVICE_CALLBACK_MEMBER(scanline_update);
59 	void mo_command_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
60 	void a2d_select_w(offs_t offset, uint16_t data);
61 	uint16_t a2d_data_r();
62 	uint16_t pitfightb_cheap_slapstic_r(offs_t offset);
63 	void update_bank(int bank);
64 	void init_hydrap();
65 	void init_hydra();
66 	void init_pitfight();
67 	void init_pitfightb();
68 	TILE_GET_INFO_MEMBER(get_alpha_tile_info);
69 	TILE_GET_INFO_MEMBER(get_playfield_tile_info);
70 	DECLARE_VIDEO_START(atarig1);
71 	uint32_t screen_update_atarig1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
72 	void atarig1(machine_config &config);
73 	void pfslap111(machine_config &config);
74 	void pfslap112(machine_config &config);
75 	void pfslap113(machine_config &config);
76 	void pfslap114(machine_config &config);
77 	void pitfightb(machine_config &config);
78 	void hydrap(machine_config &config);
79 	void hydra(machine_config &config);
80 	void main_map(address_map &map);
81 private:
82 	void pitfightb_cheap_slapstic_init();
83 };
84