1 // license:GPL-2.0+
2 // copyright-holders:Peter Trauner
3 /*****************************************************************************
4  *
5  * includes/arcadia.h
6  *
7  ****************************************************************************/
8 #ifndef MAME_INCLUDES_ARCADIA_H
9 #define MAME_INCLUDES_ARCADIA_H
10 
11 #pragma once
12 
13 #include "cpu/s2650/s2650.h"
14 #include "audio/arcadia.h"
15 
16 #include "bus/arcadia/slot.h"
17 #include "bus/arcadia/rom.h"
18 
19 #include "emupal.h"
20 #include "screen.h"
21 
22 // space vultures sprites above
23 // combat below and invisible
24 #define YPOS 0
25 //#define YBOTTOM_SIZE 24
26 // grand slam sprites left and right
27 // space vultures left
28 // space attack left
29 #define XPOS 32
30 
31 
32 class arcadia_state : public driver_device
33 {
34 public:
arcadia_state(const machine_config & mconfig,device_type type,const char * tag)35 	arcadia_state(const machine_config &mconfig, device_type type, const char *tag) :
36 		driver_device(mconfig, type, tag),
37 		m_custom(*this, "custom"),
38 		m_panel(*this, "panel"),
39 		m_controller1_col1(*this, "controller1_col1"),
40 		m_controller1_col2(*this, "controller1_col2"),
41 		m_controller1_col3(*this, "controller1_col3"),
42 		m_controller1_extra(*this, "controller1_extra"),
43 		m_controller2_col1(*this, "controller2_col1"),
44 		m_controller2_col2(*this, "controller2_col2"),
45 		m_controller2_col3(*this, "controller2_col3"),
46 		m_controller2_extra(*this, "controller2_extra"),
47 		m_joysticks(*this, "joysticks") ,
48 		m_maincpu(*this, "maincpu"),
49 		m_cart(*this, "cartslot"),
50 		m_gfxdecode(*this, "gfxdecode"),
51 		m_palette(*this, "palette"),
52 		m_screen(*this, "screen")
53 	{ }
54 
55 	void init_arcadia();
56 	void arcadia(machine_config &config);
57 
58 protected:
59 	DECLARE_READ_LINE_MEMBER(vsync_r);
60 	uint8_t video_r(offs_t offset);
61 	void video_w(offs_t offset, uint8_t data);
62 
63 	virtual void machine_start() override;
64 	virtual void video_start() override;
65 	void palette_init(palette_device &palette) const;
66 	uint32_t screen_update_arcadia(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
67 	INTERRUPT_GEN_MEMBER(video_line);
68 	void arcadia_mem(address_map &map);
69 
70 	void draw_char(uint8_t *ch, int charcode, int y, int x);
71 	void vh_draw_line(int y, uint8_t chars1[16]);
72 	int sprite_collision(int n1, int n2);
73 	void draw_sprites();
74 
75 private:
76 	int m_line;
77 	int m_charline;
78 	int m_shift;
79 	int m_ad_delay;
80 	int m_ad_select;
81 	int m_ypos;
82 	int m_graphics;
83 	int m_doublescan;
84 	int m_lines26;
85 	int m_multicolor;
86 	struct { int x, y; } m_pos[4];
87 	uint8_t m_bg[262][16+2*XPOS/8];
88 	uint8_t m_rectangle[0x40][8];
89 	uint8_t m_chars[0x40][8];
90 	int m_breaker;
91 	union
92 	{
93 		uint8_t data[0x400];
94 		struct
95 		{
96 			// 0x1800
97 			uint8_t chars1[13][16];
98 			uint8_t ram1[2][16];
99 			struct  { uint8_t y,x; } pos[4];
100 			uint8_t ram2[4];
101 			uint8_t vpos;
102 			uint8_t sound1, sound2;
103 			uint8_t char_line;
104 			// 0x1900
105 			uint8_t pad1a, pad1b, pad1c, pad1d;
106 			uint8_t pad2a, pad2b, pad2c, pad2d;
107 			uint8_t keys, unmapped3[0x80-9];
108 			uint8_t chars[8][8];
109 			uint8_t unknown[0x38];
110 			uint8_t pal[4];
111 			uint8_t collision_bg,
112 			collision_sprite;
113 			uint8_t ad[2];
114 			// 0x1a00
115 			uint8_t chars2[13][16];
116 			uint8_t ram3[3][16];
117 		} d;
118 	} m_reg;
119 	std::unique_ptr<bitmap_ind16> m_bitmap;
120 
121 	required_device<arcadia_sound_device> m_custom;
122 	required_ioport m_panel;
123 	required_ioport m_controller1_col1;
124 	required_ioport m_controller1_col2;
125 	required_ioport m_controller1_col3;
126 	required_ioport m_controller1_extra;
127 	required_ioport m_controller2_col1;
128 	required_ioport m_controller2_col2;
129 	required_ioport m_controller2_col3;
130 	required_ioport m_controller2_extra;
131 	required_ioport m_joysticks;
132 
133 	required_device<s2650_device> m_maincpu;
134 	required_device<arcadia_cart_slot_device> m_cart;
135 	required_device<gfxdecode_device> m_gfxdecode;
136 	required_device<palette_device> m_palette;
137 	required_device<screen_device> m_screen;
138 };
139 
140 #endif // MAME_INCLUDES_ARCADIA_H
141