1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles
3 /*************************************************************************
4 
5     Atari GX2 hardware
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_ATARIGX2_H
9 #define MAME_INCLUDES_ATARIGX2_H
10 
11 #pragma once
12 
13 #include "audio/atarijsa.h"
14 #include "machine/adc0808.h"
15 #include "machine/atarigen.h"
16 #include "machine/atarixga.h"
17 #include "machine/timer.h"
18 #include "video/atarirle.h"
19 #include "tilemap.h"
20 
21 
22 class atarigx2_state : public atarigen_state
23 {
24 public:
atarigx2_state(const machine_config & mconfig,device_type type,const char * tag)25 	atarigx2_state(const machine_config &mconfig, device_type type, const char *tag)
26 		: atarigen_state(mconfig, type, tag)
27 		, m_jsa(*this, "jsa")
28 		, m_xga(*this, "xga")
29 		, m_mo_command(*this, "mo_command")
30 		, m_playfield_tilemap(*this, "playfield")
31 		, m_alpha_tilemap(*this, "alpha")
32 		, m_rle(*this, "rle")
33 		, m_adc(*this, "adc")
34 	{ }
35 
36 	void init_spclords();
37 	void init_rrreveng();
38 	void init_motofren();
39 	void atarigx2_0x200(machine_config &config);
40 	void atarigx2_0x400(machine_config &config);
41 
42 protected:
43 	virtual void video_start() override;
44 	void video_int_ack_w(uint32_t data = 0);
45 	TIMER_DEVICE_CALLBACK_MEMBER(scanline_update);
46 	uint32_t special_port2_r();
47 	uint32_t special_port3_r();
48 	uint8_t a2d_data_r(offs_t offset);
49 	void latch_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
50 	void mo_command_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
51 	void atarigx2_protection_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
52 	uint32_t atarigx2_protection_r(offs_t offset, uint32_t mem_mask = ~0);
53 	uint32_t rrreveng_prot_r();
54 	TILE_GET_INFO_MEMBER(get_alpha_tile_info);
55 	TILE_GET_INFO_MEMBER(get_playfield_tile_info);
56 	TILEMAP_MAPPER_MEMBER(atarigx2_playfield_scan);
57 	uint32_t screen_update_atarigx2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
58 	void atarigx2_mo_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
59 
60 	void atarigx2(machine_config &config);
61 	void main_map(address_map &map);
62 
63 private:
64 	uint16_t          m_playfield_base;
65 
66 	required_device<atari_jsa_iiis_device> m_jsa;
67 	optional_device<atari_xga_device> m_xga;
68 
69 	required_shared_ptr<uint32_t> m_mo_command;
70 
71 	required_device<tilemap_device> m_playfield_tilemap;
72 	required_device<tilemap_device> m_alpha_tilemap;
73 	required_device<atari_rle_objects_device> m_rle;
74 
75 	required_device<adc0808_device> m_adc;
76 
77 	uint16_t          m_current_control;
78 	uint8_t           m_playfield_tile_bank;
79 	uint8_t           m_playfield_color_bank;
80 	uint16_t          m_playfield_xscroll;
81 	uint16_t          m_playfield_yscroll;
82 
83 	// LEGACY PROTECTION
84 	uint16_t          m_last_write;
85 	uint16_t          m_last_write_offset;
86 	uint32_t          m_protection_ram[0x1000];
87 };
88 
89 #endif // MAME_INCLUDES_ATARIGX2_H
90