1 /***************************************************************************
2 
3 							  -= Afega Games =-
4 
5 					driver by	Luca Elia (l.elia@tin.it)
6 
7 
8 Main  CPU	:	M68000
9 Video Chips	:	AFEGA AFI-GFSK  (68 Pin PLCC)
10 				AFEGA AFI-GFLK (208 Pin PQFP)
11 
12 Sound CPU	:	Z80
13 Sound Chips	:	M6295 (AD-65)  +  YM2151 (BS901)  +  YM3014 (BS90?)
14 
15 ---------------------------------------------------------------------------
16 Year + Game						Notes
17 ---------------------------------------------------------------------------
18 97 Red Hawk                     US Version of Stagger 1
19 98 Sen Jin - Guardian Storm		Some text missing (protection, see service mode)
20 98 Stagger I
21 98 Bubble 2000                  By Tuning, but it seems to be the same HW
22 ---------------------------------------------------------------------------
23 
24 The Sen Jin protection supplies some 68k code seen in the 2760-29cf range
25 
26 ***************************************************************************/
27 
28 #include "driver.h"
29 #include "vidhrdw/generic.h"
30 
31 /* Variables defined in vidhrdw: */
32 
33 extern data16_t *afega_vram_0, *afega_scroll_0;
34 extern data16_t *afega_vram_1, *afega_scroll_1;
35 
36 /* Functions defined in vidhrdw: */
37 
38 WRITE16_HANDLER( afega_vram_0_w );
39 WRITE16_HANDLER( afega_vram_1_w );
40 WRITE16_HANDLER( afega_palette_w );
41 
42 PALETTE_INIT( grdnstrm );
43 
44 VIDEO_START( afega );
45 VIDEO_UPDATE( afega );
46 VIDEO_UPDATE( bubl2000 );
47 
48 
49 /***************************************************************************
50 
51 
52 							Memory Maps - Main CPU
53 
54 
55 ***************************************************************************/
56 
READ16_HANDLER(afega_unknown_r)57 READ16_HANDLER( afega_unknown_r )
58 {
59 	/* This fixes the text in Service Mode. */
60 	return 0x0100;
61 }
62 
WRITE16_HANDLER(afega_soundlatch_w)63 WRITE16_HANDLER( afega_soundlatch_w )
64 {
65 	if (ACCESSING_LSB && Machine->sample_rate)
66 		soundlatch_w(0,data&0xff);
67 }
68 
69 /*
70  Lines starting with an empty comment in the following MemoryReadAddress
71  arrays are there for debug (e.g. the game does not read from those ranges
72  AFAIK)
73 */
74 
MEMORY_READ16_START(afega_readmem)75 static MEMORY_READ16_START( afega_readmem )
76 	{ 0x000000, 0x07ffff, MRA16_ROM					},	/* ROM*/
77 	{ 0x080000, 0x080001, input_port_0_word_r		},	/* Buttons*/
78 	{ 0x080002, 0x080003, input_port_1_word_r		},	/* P1 + P2*/
79 	{ 0x080004, 0x080005, input_port_2_word_r		},	/* 2 x DSW*/
80 	{ 0x080012, 0x080013, afega_unknown_r           },
81 /**/{ 0x088000, 0x0885ff, MRA16_RAM					},	/* Palette*/
82 /**/{ 0x08c000, 0x08c003, MRA16_RAM					},	/* Scroll*/
83 /**/{ 0x08c004, 0x08c007, MRA16_RAM					},	/**/
84 /**/{ 0x090000, 0x091fff, MRA16_RAM					},	/* Layer 0*/
85 /**/{ 0x092000, 0x093fff, MRA16_RAM           		},	/* ?*/
86 /**/{ 0x09c000, 0x09c7ff, MRA16_RAM					},	/* Layer 1*/
87 	{ 0x3c0000, 0x3c7fff, MRA16_RAM					},	/* RAM*/
88 	{ 0x3c8000, 0x3c8fff, MRA16_RAM					},	/* Sprites*/
89 	{ 0x3c9000, 0x3cffff, MRA16_RAM					},	/* RAM*/
90 	{ 0xff8000, 0xff8fff, MRA16_BANK1				},	/* Sprites Mirror*/
91 MEMORY_END
92 
93 static MEMORY_WRITE16_START( afega_writemem )
94 	{ 0x000000, 0x07ffff, MWA16_ROM						},	/* ROM*/
95 	{ 0x080000, 0x08001d, MWA16_RAM						},	/**/
96 	{ 0x08001e, 0x08001f, afega_soundlatch_w			},	/* To Sound CPU*/
97 	{ 0x080020, 0x087fff, MWA16_RAM						},	/**/
98 	{ 0x088000, 0x0885ff, afega_palette_w, &paletteram16},	/* Palette*/
99 	{ 0x088600, 0x08bfff, MWA16_RAM						},	/**/
100 	{ 0x08c000, 0x08c003, MWA16_RAM, &afega_scroll_0	},	/* Scroll*/
101 	{ 0x08c004, 0x08c007, MWA16_RAM, &afega_scroll_1	},	/**/
102 	{ 0x08c008, 0x08ffff, MWA16_RAM						},	/**/
103 	{ 0x090000, 0x091fff, afega_vram_0_w, &afega_vram_0	},	/* Layer 0*/
104 	{ 0x092000, 0x093fff, MWA16_RAM						},	/* ?*/
105 	{ 0x09c000, 0x09c7ff, afega_vram_1_w, &afega_vram_1	},	/* Layer 1*/
106 	{ 0x3c0000, 0x3c7fff, MWA16_RAM						},	/* RAM*/
107 	{ 0x3c8000, 0x3c8fff, MWA16_RAM, &spriteram16, &spriteram_size	},	/* Sprites*/
108 	{ 0x3c9000, 0x3cffff, MWA16_RAM						},	/* RAM*/
109 	{ 0xff8000, 0xff8fff, MWA16_BANK1				},	/* Sprites Mirror*/
110 MEMORY_END
111 
112 /* redhawk has main ram / sprites in a different location */
113 
114 static MEMORY_READ16_START( redhawk_readmem )
115 	{ 0x000000, 0x07ffff, MRA16_ROM					},	/* ROM*/
116 	{ 0x080000, 0x080001, input_port_0_word_r		},	/* Buttons*/
117 	{ 0x080002, 0x080003, input_port_1_word_r		},	/* P1 + P2*/
118 	{ 0x080004, 0x080005, input_port_2_word_r		},	/* 2 x DSW*/
119 /**/{ 0x088000, 0x0885ff, MRA16_RAM					},	/* Palette*/
120 /**/{ 0x08c000, 0x08c003, MRA16_RAM					},	/* Scroll*/
121 /**/{ 0x08c004, 0x08c007, MRA16_RAM					},	/**/
122 /**/{ 0x090000, 0x091fff, MRA16_RAM					},	/* Layer 0*/
123 /**/{ 0x092000, 0x093fff, MRA16_RAM					},	/* ?*/
124 /**/{ 0x09c000, 0x09c7ff, MRA16_RAM					},	/* Layer 1*/
125 	{ 0x0c0000, 0x0c7fff, MRA16_RAM					},	/* RAM*/
126 	{ 0x0c8000, 0x0c8fff, MRA16_RAM					},	/* Sprites*/
127 	{ 0x0c9000, 0x0cffff, MRA16_RAM					},	/* RAM*/
128 	{ 0xff8000, 0xff8fff, MRA16_BANK1				},	/* Sprites Mirror*/
129 MEMORY_END
130 
131 static MEMORY_WRITE16_START( redhawk_writemem )
132 	{ 0x000000, 0x07ffff, MWA16_ROM						},	/* ROM*/
133 	{ 0x080000, 0x08001d, MWA16_RAM						},	/**/
134 	{ 0x08001e, 0x08001f, afega_soundlatch_w			},	/* To Sound CPU*/
135 	{ 0x080020, 0x087fff, MWA16_RAM						},	/**/
136 	{ 0x088000, 0x0885ff, afega_palette_w, &paletteram16},	/* Palette*/
137 	{ 0x088600, 0x08bfff, MWA16_RAM						},	/**/
138 	{ 0x08c000, 0x08c003, MWA16_RAM, &afega_scroll_0	},	/* Scroll*/
139 	{ 0x08c004, 0x08c007, MWA16_RAM, &afega_scroll_1	},	/**/
140 	{ 0x08c008, 0x08ffff, MWA16_RAM						},	/**/
141 	{ 0x090000, 0x091fff, afega_vram_0_w, &afega_vram_0	},	/* Layer 0*/
142 	{ 0x092000, 0x093fff, MWA16_RAM						},	/* ?*/
143 	{ 0x09c000, 0x09c7ff, afega_vram_1_w, &afega_vram_1	},	/* Layer 1*/
144 	{ 0x0c0000, 0x0c7fff, MWA16_RAM						},	/* RAM*/
145 	{ 0x0c8000, 0x0c8fff, MWA16_RAM, &spriteram16, &spriteram_size	},	/* Sprites*/
146 	{ 0x0c9000, 0x0cffff, MWA16_RAM						},	/* RAM*/
147 	{ 0xff8000, 0xff8fff, MWA16_BANK1				},	/* Sprites Mirror*/
148 MEMORY_END
149 
150 
151 /***************************************************************************
152 
153 
154 							Memory Maps - Sound CPU
155 
156 
157 ***************************************************************************/
158 
159 static MEMORY_READ_START( afega_sound_readmem )
160 	{ 0x0000, 0xefff, MRA_ROM					},	/* ROM*/
161 	{ 0xf000, 0xf7ff, MRA_RAM					},	/* RAM*/
162 	{ 0xf800, 0xf800, soundlatch_r				},	/* From Main CPU*/
163 	{ 0xf809, 0xf809, YM2151_status_port_0_r	},	/* YM2151*/
164 	{ 0xf80a, 0xf80a, OKIM6295_status_0_r		},	/* M6295*/
165 MEMORY_END
166 
167 static MEMORY_WRITE_START( afega_sound_writemem )
168 	{ 0x0000, 0xefff, MWA_ROM					},	/* ROM*/
169 	{ 0xf000, 0xf7ff, MWA_RAM					},	/* RAM*/
170 	{ 0xf808, 0xf808, YM2151_register_port_0_w	},	/* YM2151*/
171 	{ 0xf809, 0xf809, YM2151_data_port_0_w		},	/**/
172 	{ 0xf80a, 0xf80a, OKIM6295_data_0_w			},	/* M6295*/
173 MEMORY_END
174 
175 
176 /***************************************************************************
177 
178 
179 								Input Ports
180 
181 
182 ***************************************************************************/
183 
184 /***************************************************************************
185 								Stagger I
186 ***************************************************************************/
187 
188 INPUT_PORTS_START( stagger1 )
189 	PORT_START	/* IN0 - $080000.w*/
190 	PORT_BIT(  0x0001, IP_ACTIVE_LOW, IPT_COIN1    )
191 	PORT_BIT(  0x0002, IP_ACTIVE_LOW, IPT_COIN2    )
192 	PORT_BIT(  0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
193 	PORT_BIT(  0x0008, IP_ACTIVE_LOW, IPT_START1   )
194 	PORT_BIT(  0x0010, IP_ACTIVE_LOW, IPT_START2   )
195 	PORT_BIT(  0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN  )
196 	PORT_BIT(  0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN  )
197 	PORT_BIT(  0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN  )
198 	PORT_BIT(  0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN  )
199 
200 	PORT_START	/* IN1 - $080002.w*/
201 	PORT_BIT(  0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
202 	PORT_BIT(  0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER1 )
203 	PORT_BIT(  0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER1 )
204 	PORT_BIT(  0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER1 )
205 	PORT_BIT(  0x0010, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER1 )
206 	PORT_BIT(  0x0020, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER1 )
207 	PORT_BIT(  0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
208 	PORT_BIT(  0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
209 
210 	PORT_BIT(  0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
211 	PORT_BIT(  0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER2 )
212 	PORT_BIT(  0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER2 )
213 	PORT_BIT(  0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER2 )
214 	PORT_BIT(  0x1000, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER2 )
215 	PORT_BIT(  0x2000, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER2 )
216 	PORT_BIT(  0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
217 	PORT_BIT(  0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
218 
219 	PORT_START	/* IN2 - $080004.w*/
220 	PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
221 	PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) )
222 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
223 	PORT_DIPSETTING(      0x0002, DEF_STR( On ) )
224 	PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) )
225 	PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
226 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
227 	PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) )
228 	PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
229 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
230 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) )
231 	PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
232 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
233 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
234 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
235 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
236 	PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) )
237 	PORT_DIPSETTING(      0x0000, "1" )
238 	PORT_DIPSETTING(      0x0080, "2" )
239 	PORT_DIPSETTING(      0x00c0, "3" )
240 	PORT_DIPSETTING(      0x0040, "5" )
241 
242 	PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Flip_Screen ) )
243 	PORT_DIPSETTING(      0x0300, DEF_STR( Off ) )
244 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
245 	PORT_DIPSETTING(      0x0200, "Horizontally" )
246 	PORT_DIPSETTING(      0x0100, "Vertically" )
247 	PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unused ) )
248 	PORT_DIPSETTING(      0x0400, DEF_STR( Off ) )
249 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
250 	PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) )
251 	PORT_DIPSETTING(      0x0800, "Easy" )
252 	PORT_DIPSETTING(      0x1800, "Normal" )
253 	PORT_DIPSETTING(      0x1000, "Hard" )
254 	PORT_DIPSETTING(      0x0000, "Hardest" )
255 	PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) )
256 	PORT_DIPSETTING(      0x0000, DEF_STR( 4C_1C ) )
257 	PORT_DIPSETTING(      0x8000, DEF_STR( 3C_1C ) )
258 	PORT_DIPSETTING(      0x4000, DEF_STR( 2C_1C ) )
259 	PORT_DIPSETTING(      0xc000, DEF_STR( 3C_2C ) )
260 	PORT_DIPSETTING(      0xe000, DEF_STR( 1C_1C ) )
261 	PORT_DIPSETTING(      0x2000, DEF_STR( 2C_3C ) )
262 	PORT_DIPSETTING(      0x6000, DEF_STR( 1C_2C ) )
263 	PORT_DIPSETTING(      0xa000, DEF_STR( 1C_3C ) )
264 INPUT_PORTS_END
265 
266 
267 /***************************************************************************
268 							Sen Jin - Guardian Storm
269 ***************************************************************************/
270 
271 INPUT_PORTS_START( grdnstrm )
272 	PORT_START	/* IN0 - $080000.w*/
273 	PORT_BIT(  0x0001, IP_ACTIVE_LOW, IPT_COIN1    )
274 	PORT_BIT(  0x0002, IP_ACTIVE_LOW, IPT_COIN2    )
275 	PORT_BIT(  0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
276 	PORT_BIT(  0x0008, IP_ACTIVE_LOW, IPT_START1   )
277 	PORT_BIT(  0x0010, IP_ACTIVE_LOW, IPT_START2   )
278 	PORT_BIT(  0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN  )
279 	PORT_BIT(  0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN  )
280 	PORT_BIT(  0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN  )
281 	PORT_BIT(  0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN  )
282 
283 	PORT_START	/* IN1 - $080002.w*/
284 	PORT_BIT(  0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
285 	PORT_BIT(  0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER1 )
286 	PORT_BIT(  0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER1 )
287 	PORT_BIT(  0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER1 )
288 	PORT_BIT(  0x0010, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER1 )
289 	PORT_BIT(  0x0020, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER1 )
290 	PORT_BIT(  0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
291 	PORT_BIT(  0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
292 
293 	PORT_BIT(  0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
294 	PORT_BIT(  0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER2 )
295 	PORT_BIT(  0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER2 )
296 	PORT_BIT(  0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER2 )
297 	PORT_BIT(  0x1000, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER2 )
298 	PORT_BIT(  0x2000, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER2 )
299 	PORT_BIT(  0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
300 	PORT_BIT(  0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
301 
302 	PORT_START	/* IN2 - $080004.w*/
303 	PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
304 	PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) )
305 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
306 	PORT_DIPSETTING(      0x0002, DEF_STR( On ) )
307 	PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Free_Play ) )
308 	PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
309 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
310 	PORT_DIPNAME( 0x0008, 0x0008, "Bombs" )
311 	PORT_DIPSETTING(      0x0008, "2" )
312 	PORT_DIPSETTING(      0x0000, "3" )
313 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) )
314 	PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
315 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
316 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
317 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
318 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
319 	PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) )
320 	PORT_DIPSETTING(      0x0000, "1" )
321 	PORT_DIPSETTING(      0x0080, "2" )
322 	PORT_DIPSETTING(      0x00c0, "3" )
323 	PORT_DIPSETTING(      0x0040, "5" )
324 
325 	PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Flip_Screen ) )
326 	PORT_DIPSETTING(      0x0300, DEF_STR( Off ) )
327 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
328 	PORT_DIPSETTING(      0x0200, "Horizontally" )
329 	PORT_DIPSETTING(      0x0100, "Vertically" )
330 	PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unused ) )
331 	PORT_DIPSETTING(      0x0400, DEF_STR( Off ) )
332 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
333 	PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) )
334 	PORT_DIPSETTING(      0x0800, "Easy" )
335 	PORT_DIPSETTING(      0x1800, "Normal" )
336 	PORT_DIPSETTING(      0x1000, "Hard" )
337 	PORT_DIPSETTING(      0x0000, "Hardest" )
338 	PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) )
339 	PORT_DIPSETTING(      0x0000, DEF_STR( 4C_1C ) )
340 	PORT_DIPSETTING(      0x8000, DEF_STR( 3C_1C ) )
341 	PORT_DIPSETTING(      0x4000, DEF_STR( 2C_1C ) )
342 	PORT_DIPSETTING(      0xc000, DEF_STR( 3C_2C ) )
343 	PORT_DIPSETTING(      0xe000, DEF_STR( 1C_1C ) )
344 	PORT_DIPSETTING(      0x2000, DEF_STR( 2C_3C ) )
345 	PORT_DIPSETTING(      0x6000, DEF_STR( 1C_2C ) )
346 	PORT_DIPSETTING(      0xa000, DEF_STR( 1C_3C ) )
347 INPUT_PORTS_END
348 
349 
350 /***************************************************************************
351 								Stagger I
352 ***************************************************************************/
353 
354 INPUT_PORTS_START( bubl2000 )
355 	PORT_START	/* IN0 - $080000.w*/
356 	PORT_BIT(  0x0001, IP_ACTIVE_LOW, IPT_COIN1    )
357 	PORT_BIT(  0x0002, IP_ACTIVE_LOW, IPT_COIN2    )
358 	PORT_BIT(  0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
359 	PORT_BIT(  0x0008, IP_ACTIVE_LOW, IPT_START1   )
360 	PORT_BIT(  0x0010, IP_ACTIVE_LOW, IPT_START2   )
361 	PORT_BIT(  0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN  )
362 	PORT_BIT(  0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN  )
363 	PORT_BIT(  0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN  )
364 	PORT_BIT(  0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN  )
365 
366 	PORT_START	/* IN1 - $080002.w*/
367 	PORT_BIT(  0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
368 	PORT_BIT(  0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER1 )
369 	PORT_BIT(  0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER1 )
370 	PORT_BIT(  0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER1 )
371 	PORT_BIT(  0x0010, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER1 )
372 	PORT_BIT(  0x0020, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER1 )
373 	PORT_BIT(  0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
374 	PORT_BIT(  0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
375 
376 	PORT_BIT(  0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
377 	PORT_BIT(  0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER2 )
378 	PORT_BIT(  0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER2 )
379 	PORT_BIT(  0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER2 )
380 	PORT_BIT(  0x1000, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER2 )
381 	PORT_BIT(  0x2000, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER2 )
382 	PORT_BIT(  0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
383 	PORT_BIT(  0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
384 
385 	PORT_START	/* IN2 - $080004.w*/
386 	PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unused ) )
387 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
388 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
389 	PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unused ) )
390 	PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
391 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
392 	PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) )
393 	PORT_DIPSETTING(      0x0008, "Easy" )
394 	PORT_DIPSETTING(      0x000c, "Normal" )
395 	PORT_DIPSETTING(      0x0004, "Hard" )
396 	PORT_DIPSETTING(      0x0000, "Hardest" )
397 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) )
398 	PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
399 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
400 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
401 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
402 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
403 	PORT_DIPNAME( 0x00c0, 0x00c0, "Free Credit" )
404 	PORT_DIPSETTING(      0x0080, "500k" )
405 	PORT_DIPSETTING(      0x00c0, "800k" )
406 	PORT_DIPSETTING(      0x0040, "1000k" )
407 	PORT_DIPSETTING(      0x0000, "1500k" )
408 
409 	PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unused ) )
410 	PORT_DIPSETTING(      0x0100, DEF_STR( Off ) )
411 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
412 	PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Demo_Sounds ) )
413 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
414 	PORT_DIPSETTING(      0x0200, DEF_STR( On ) )
415 	PORT_DIPNAME( 0x1c00, 0x1c00, DEF_STR( Coin_B ) )
416 	PORT_DIPSETTING(      0x1000, DEF_STR( 4C_1C ) )
417 	PORT_DIPSETTING(      0x0800, DEF_STR( 3C_1C ) )
418 	PORT_DIPSETTING(      0x1800, DEF_STR( 2C_1C ) )
419 	PORT_DIPSETTING(      0x1c00, DEF_STR( 1C_1C ) )
420 	PORT_DIPSETTING(      0x0c00, DEF_STR( 1C_2C ) )
421 	PORT_DIPSETTING(      0x1400, DEF_STR( 1C_3C ) )
422 	PORT_DIPSETTING(      0x0400, DEF_STR( 1C_4C ) )
423 /*	PORT_DIPSETTING(      0x0000, "Disabled" )*/
424 	PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coin_A ) )
425 	PORT_DIPSETTING(      0x8000, DEF_STR( 4C_1C ) )
426 	PORT_DIPSETTING(      0x4000, DEF_STR( 3C_1C ) )
427 	PORT_DIPSETTING(      0xc000, DEF_STR( 2C_1C ) )
428 	PORT_DIPSETTING(      0xe000, DEF_STR( 1C_1C ) )
429 	PORT_DIPSETTING(      0x6000, DEF_STR( 1C_2C ) )
430 	PORT_DIPSETTING(      0xa000, DEF_STR( 1C_3C ) )
431 	PORT_DIPSETTING(      0x2000, DEF_STR( 1C_4C ) )
432 /*	PORT_DIPSETTING(      0x0000, "Disabled" )*/
433 INPUT_PORTS_END
434 
435 
436 /***************************************************************************
437 
438 
439 							Graphics Layouts
440 
441 
442 ***************************************************************************/
443 
444 static struct GfxLayout layout_8x8x4 =
445 {
446 	8,8,
447 	RGN_FRAC(1,1),
448 	4,
449 	{ STEP4(0,1)	},
450 	{ STEP8(0,4)	},
451 	{ STEP8(0,8*4)	},
452 	8*8*4
453 };
454 
455 static struct GfxLayout layout_16x16x4 =
456 {
457 	16,16,
458 	RGN_FRAC(1,1),
459 	4,
460 	{ STEP4(0,1)	},
461 	{ STEP8(0,4),   STEP8(8*8*4*2,4)	},
462 	{ STEP8(0,8*4), STEP8(8*8*4*1,8*4)	},
463 	16*16*4
464 };
465 
466 static struct GfxLayout layout_16x16x4_2 =
467 {
468 	16,16,
469 	RGN_FRAC(1,1),
470 	4,
471 	{ STEP4(0,1)	},
472 	{ STEP8(0,4),   STEP8(8*8*4*2,4)	},
473 	{ STEP8(0,8*4), STEP8(8*8*4*1,8*4)	},
474 	16*16*4
475 };
476 
477 static struct GfxLayout layout_16x16x8 =
478 {
479 	16,16,
480 	RGN_FRAC(1,2),
481 	8,
482 	{ STEP4(RGN_FRAC(0,2),1), STEP4(RGN_FRAC(1,2),1)	},
483 	{ STEP8(0,4),   STEP8(8*8*4*2,4)	},
484 	{ STEP8(0,8*4), STEP8(8*8*4*1,8*4)	},
485 	16*16*4
486 };
487 
488 
489 static struct GfxDecodeInfo grdnstrm_gfxdecodeinfo[] =
490 {
491 	{ REGION_GFX1, 0, &layout_16x16x4, 256*1, 16 }, /* [0] Sprites*/
492 	{ REGION_GFX2, 0, &layout_16x16x8, 256*3, 16 }, /* [1] Layer 0*/
493 	{ REGION_GFX3, 0, &layout_8x8x4,   256*2, 16 }, /* [2] Layer 1*/
494 	{ -1 }
495 };
496 
497 static struct GfxDecodeInfo stagger1_gfxdecodeinfo[] =
498 {
499 	{ REGION_GFX1, 0, &layout_16x16x4_2, 256*1, 16 }, /* [0] Sprites*/
500 	{ REGION_GFX2, 0, &layout_16x16x4,   256*0, 16 }, /* [1] Layer 0*/
501 	{ REGION_GFX3, 0, &layout_8x8x4,     256*2, 16 }, /* [2] Layer 1*/
502 	{ -1 }
503 };
504 
505 
506 /***************************************************************************
507 
508 
509 								Machine Drivers
510 
511 
512 ***************************************************************************/
513 
irq_handler(int irq)514 static void irq_handler(int irq)
515 {
516 	cpu_set_irq_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE);
517 }
518 
519 static struct YM2151interface afega_ym2151_intf =
520 {
521 	1,
522 	4000000,	/* ? */
523 	{ YM3012_VOL(30,MIXER_PAN_LEFT,30,MIXER_PAN_RIGHT) },
524 	{ irq_handler }
525 };
526 
527 static struct OKIM6295interface afega_m6295_intf =
528 {
529 	1,
530 	{ 8000 },	/* ? */
531 	{ REGION_SOUND1 },
532 	{ 70 }
533 };
534 
INTERRUPT_GEN(interrupt_afega)535 INTERRUPT_GEN( interrupt_afega )
536 {
537 	switch ( cpu_getiloops() )
538 	{
539 		case 0:		irq2_line_hold();	break;
540 		case 1:		irq4_line_hold();	break;
541 	}
542 }
543 
MACHINE_INIT(afega)544 MACHINE_INIT( afega )
545 {
546 	/* Sprites Mirror required due to bug in the game code ( movem.w instead of movem.l ) */
547 	cpu_setbank( 1, spriteram16 );
548 }
549 
550 static MACHINE_DRIVER_START( stagger1 )
551 
552 	/* basic machine hardware */
553 	MDRV_CPU_ADD_TAG("main",M68000,10000000)	/* 3.072 MHz */
MDRV_CPU_MEMORY(afega_readmem,afega_writemem)554 	MDRV_CPU_MEMORY(afega_readmem,afega_writemem)
555 	MDRV_CPU_VBLANK_INT(interrupt_afega,2)
556 
557 	MDRV_CPU_ADD(Z80, 3000000)
558 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)	/* ? */
559 	MDRV_CPU_MEMORY(afega_sound_readmem,afega_sound_writemem)
560 
561 	MDRV_FRAMES_PER_SECOND(60)
562 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
563 
564 	MDRV_MACHINE_INIT(afega)
565 
566 	/* video hardware */
567 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
568 	MDRV_SCREEN_SIZE(256, 256)
569 	MDRV_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1)
570 	MDRV_GFXDECODE(stagger1_gfxdecodeinfo)
571 	MDRV_PALETTE_LENGTH(768)
572 
573 	MDRV_VIDEO_START(afega)
574 	MDRV_VIDEO_UPDATE(afega)
575 
576 	/* sound hardware */
577 	MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
578 	MDRV_SOUND_ADD(YM2151, afega_ym2151_intf)
579 	MDRV_SOUND_ADD(OKIM6295, afega_m6295_intf)
580 MACHINE_DRIVER_END
581 
582 static MACHINE_DRIVER_START( redhawk )
583 
584 	/* basic machine hardware */
585 	MDRV_IMPORT_FROM(stagger1)
586 	MDRV_CPU_MODIFY("main")
587 	MDRV_CPU_MEMORY(redhawk_readmem,redhawk_writemem)
588 
589 MACHINE_DRIVER_END
590 
591 static MACHINE_DRIVER_START( grdnstrm )
592 
593 	/* basic machine hardware */
594 	MDRV_CPU_ADD(M68000, 10000000)
595 	MDRV_CPU_MEMORY(afega_readmem,afega_writemem)
596 	MDRV_CPU_VBLANK_INT(interrupt_afega,2)
597 
598 	MDRV_CPU_ADD(Z80, 3000000)
599 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)	/* ? */
600 	MDRV_CPU_MEMORY(afega_sound_readmem,afega_sound_writemem)
601 
602 	MDRV_FRAMES_PER_SECOND(60)
603 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
604 
605 	MDRV_MACHINE_INIT(afega)
606 
607 	/* video hardware */
608 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
609 	MDRV_SCREEN_SIZE(256, 256)
610 	MDRV_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1)
611 	MDRV_GFXDECODE(grdnstrm_gfxdecodeinfo)
612 	MDRV_PALETTE_LENGTH(768)
613 	MDRV_COLORTABLE_LENGTH(768 + 16*256)
614 
615 	MDRV_PALETTE_INIT(grdnstrm)
616 	MDRV_VIDEO_START(afega)
617 	MDRV_VIDEO_UPDATE(afega)
618 
619 	/* sound hardware */
620 	MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
621 	MDRV_SOUND_ADD(YM2151, afega_ym2151_intf)
622 	MDRV_SOUND_ADD(OKIM6295, afega_m6295_intf)
623 MACHINE_DRIVER_END
624 
625 static MACHINE_DRIVER_START( bubl2000 )
626 
627 	/* basic machine hardware */
628 	MDRV_IMPORT_FROM(grdnstrm)
629 
630 	/* video hardware */
631 	MDRV_VIDEO_UPDATE(bubl2000)
632 MACHINE_DRIVER_END
633 
634 /***************************************************************************
635 
636 
637 								ROMs Loading
638 
639 
640 ***************************************************************************/
641 
642 /* Address lines scrambling */
643 
644 static void decryptcode( int a23, int a22, int a21, int a20, int a19, int a18, int a17, int a16, int a15, int a14, int a13, int a12,
645 	int a11, int a10, int a9, int a8, int a7, int a6, int a5, int a4, int a3, int a2, int a1, int a0 )
646 {
647 	int i;
648 	data8_t *RAM = memory_region( REGION_CPU1 );
649 	size_t  size = memory_region_length( REGION_CPU1 );
650 	data8_t *buffer = malloc( size );
651 
652 	if( buffer )
653 	{
654 		memcpy( buffer, RAM, size );
655 		for( i = 0; i < size; i++ )
656 		{
657 			RAM[ i ] = buffer[ BITSWAP24( i, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12,
658 				a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0 ) ];
659 		}
660 		free( buffer );
661 	}
662 }
663 
664 /***************************************************************************
665 
666 									Stagger I
667 (AFEGA 1998)
668 
669 Parts:
670 
671 1 MC68HC000P10
672 1 Z80
673 2 Lattice ispLSI 1032E
674 
675 ***************************************************************************/
676 
677 ROM_START( stagger1 )
678 	ROM_REGION( 0x40000, REGION_CPU1, 0 )		/* 68000 Code */
679 	ROM_LOAD16_BYTE( "2.bin", 0x000000, 0x020000, CRC(8555929b) SHA1(b405d81c2a45191111b1a4458ac6b5c0a129b8f1) )
680 	ROM_LOAD16_BYTE( "3.bin", 0x000001, 0x020000, CRC(5b0b63ac) SHA1(239f793b6845a88d1630da790a2762da730a450d) )
681 
682 	ROM_REGION( 0x10000, REGION_CPU2, 0 )		/* Z80 Code */
683 	ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) )
684 
685 	ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE )	/* Sprites, 16x16x4 */
686 	ROM_LOAD16_BYTE( "7.bin", 0x00000, 0x80000, CRC(048f7683) SHA1(7235b7dcfbb72abf44e60b114e3f504f16d29ebf) )
687 	ROM_LOAD16_BYTE( "6.bin", 0x00001, 0x80000, CRC(051d4a77) SHA1(664182748e72b3e44202caa20f337d02e946ca62) )
688 
689 	ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )	/* Layer 0, 16x16x4 */
690 	ROM_LOAD( "4.bin", 0x00000, 0x80000, CRC(46463d36) SHA1(4265bc4d24ff64e39d9273965701c740d7e3fee0) )
691 
692 	ROM_REGION( 0x00100, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF )	/* Layer 1, 8x8x4 */
693 	/* Unused*/
694 
695 	ROM_REGION( 0x40000, REGION_SOUND1, ROMREGION_SOUNDONLY )	/* Samples */
CRC(e911ce33)696 	ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) )
697 ROM_END
698 
699 
700 /***************************************************************************
701 
702 							Red Hawk (c)1997 Afega
703 
704 
705 
706     6116         ym2145(?)  MSM6295   5    4MHz
707     1
708     Z80        pLSI1032    4
709                                       76C88
710        6116   76C256                  76C88
711        6116   76C256
712     2  76C256 76C256
713     3  76C256 76C256
714 
715     68000-10        6116
716                     6116
717    SW1                             6
718    SW21                pLSI1032    7
719     12MHz
720 
721 ***************************************************************************/
722 
723 ROM_START( redhawk )
724 	ROM_REGION( 0x40000, REGION_CPU1, 0 )		/* 68000 Code */
725 	ROM_LOAD16_BYTE( "2", 0x000000, 0x020000, CRC(3ef5f326) SHA1(e89c7c24a05886a14995d7c399958dc00ad35d63) )
726 	ROM_LOAD16_BYTE( "3", 0x000001, 0x020000, CRC(9b3a10ef) SHA1(d03480329b23474e5a9e42a75b09d2140eed4443) )
727 
728 	ROM_REGION( 0x10000, REGION_CPU2, 0 )		/* Z80 Code */
729 	ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) )
730 
731 	ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE )	/* Sprites, 16x16x4 */
732 	ROM_LOAD16_BYTE( "6", 0x000001, 0x080000, CRC(61560164) SHA1(d727ab2d037dab40745dec9c4389744534fdf07d) )
733 	ROM_LOAD16_BYTE( "7", 0x000000, 0x080000, CRC(66a8976d) SHA1(dd9b89cf29eb5557845599d55ef3a15f53c070a4) )
734 
735 	ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )	/* Layer 0, 16x16x8 */
736 	ROM_LOAD( "4", 0x000000, 0x080000, CRC(d6427b8a) SHA1(556de1b5ce29d1c3c54bb315dcaa4dd0848ca462) )
737 
738 	ROM_REGION( 0x00100, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF )	/* Layer 1, 8x8x4 */
739 	/* Unused*/
740 
741 	ROM_REGION( 0x40000, REGION_SOUND1, ROMREGION_SOUNDONLY )	/* Samples */
742 	ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) )
743 ROM_END
744 
745 static DRIVER_INIT( redhawk )
746 {
747 	decryptcode( 23, 22, 21, 20, 19, 18, 16, 15, 14, 17, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 );
748 }
749 
750 /***************************************************************************
751 
752 							Sen Jin - Guardian Storm
753 
754 (C) Afega 1998
755 
756 CPU: 68HC000FN10 (68000, 68 pin PLCC)
757 SND: Z84C000FEC (Z80, 44 pin PQFP), AD-65 (44 pin PQFP, Probably OKI M6295),
758      BS901 (Probably YM2151 or YM3812, 24 pin DIP), BS901 (possibly YM3014 or similar? 16 pin DIP)
759 OSC: 12.000MHz (near 68000), 4.000MHz (Near Z84000)
760 RAM: LH52B256 x 8, 6116 x 7
761 DIPS: 2 x 8 position
762 
763 Other Chips: AFEGA AFI-GFSK (68 pin PLCC, located next to 68000)
764              AFEGA AFI-GFLK (208 pin PQFP)
765 
766 ROMS:
767 GST-01.U92   27C512, \
768 GST-02.U95   27C2000  > Sound Related, all located near Z80
769 GST-03.U4    27C512  /
770 
771 GST-04.112   27C2000 \
772 GST-05.107   27C2000  /Main Program
773 
774 GST-06.C13   read as 27C160  label = AF1-SP (Sprites?)
775 GST-07.C08   read as 27C160  label = AF1=B2 (Backgrounds?)
776 GST-08.C03   read as 27C160  label = AF1=B1 (Backgrounds?)
777 
778 ***************************************************************************/
779 
780 ROM_START( grdnstrm )
781 	ROM_REGION( 0x80000, REGION_CPU1, 0 )		/* 68000 Code */
782 	ROM_LOAD16_BYTE( "gst-04.112", 0x000000, 0x040000, CRC(922c931a) SHA1(1d1511033c8c424535a73f5c5bf58560a8b1842e) )
CRC(d22ca2dc)783 	ROM_LOAD16_BYTE( "gst-05.107", 0x000001, 0x040000, CRC(d22ca2dc) SHA1(fa21c8ec804570d64f4b167b7f65fd5811435e46) )
784 
785 	ROM_REGION( 0x10000, REGION_CPU2, 0 )		/* Z80 Code */
786 	ROM_LOAD( "gst-01.u92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) )
787 
788 	ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE )	/* Sprites, 16x16x4 */
789 	ROM_LOAD( "gst-06.c13", 0x000000, 0x200000, CRC(7d4d4985) SHA1(15c6c1aecd3f12050c1db2376f929f1a26a1d1cf) )
790 
791 	ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE )	/* Layer 0, 16x16x8 */
792 	ROM_LOAD( "gst-07.c08", 0x000000, 0x200000, CRC(d68588c2) SHA1(c5f397d74a6ecfd2e375082f82e37c5a330fba62) )
793 	ROM_LOAD( "gst-08.c03", 0x200000, 0x200000, CRC(f8b200a8) SHA1(a6c43dd57b752d87138d7125b47dc0df83df8987) )
794 
795 	ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE )	/* Layer 1, 8x8x4 */
796 	ROM_LOAD( "gst-03.u4",  0x00000, 0x10000, CRC(a1347297) SHA1(583f4da991eeedeb523cf4fa3b6900d40e342063) )
797 
798 	ROM_REGION( 0x40000, REGION_SOUND1, ROMREGION_SOUNDONLY )	/* Samples */
799 	ROM_LOAD( "gst-02.u95", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) )
800 ROM_END
801 
802 static DRIVER_INIT( grdnstrm )
803 {
804 	decryptcode( 23, 22, 21, 20, 19, 18, 16, 17, 14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 );
805 }
806 
807 
808 /***************************************************************************
809 
810 							Bubble 2000 (c)1998 Tuning
811 
812 Bubble 2000
813 Tuning, 1998
814 
815 CPU   : TMP68HC000P-10 (68000)
816 SOUND : Z840006 (Z80, 44 pin QFP), YM2151, OKI M6295
817 OSC   : 4.000MHZ, 12.000MHz
818 DIPSW : 8 position (x2)
819 RAM   : 6116 (x5, gfx related?) 6116 (x1, sound program ram), 6116 (x1, near rom3)
820         64256 (x4, gfx related?), 62256 (x2, main program ram), 6264 (x2, gfx related?)
821 PALs/PROMs: None
822 Custom: Unknown 208 pin QFP labelled LTC2 (Graphics generator)
823         Unknown 68 pin PLCC labelled LTC1 (?, near rom 2 and rom 3)
824 ROMs  :
825 
826 Filename    Type        Possible Use
827 ----------------------------------------------
828 rom01.92    27C512      Sound Program
829 rom02.95    27C020      Oki Samples
830 rom03.4     27C512      ? (located near rom 1 and 2 and near LTC1)
831 rom04.1     27C040   \
832 rom05.3     27C040    |
833 rom06.6     27C040    |
834 rom07.9     27C040    | Gfx
835 rom08.11    27C040    |
836 rom09.14    27C040    |
837 rom12.2     27C040    |
838 rom13.7     27C040   /
839 
840 rom10.112   27C040   \  Main Program
841 rom11.107   27C040   /
842 
843 
844 
845 
846 ***************************************************************************/
847 
848 ROM_START( bubl2000 )
849 	ROM_REGION( 0x80000, REGION_CPU1, 0 )		/* 68000 Code */
850 	ROM_LOAD16_BYTE( "rom10.112", 0x00000, 0x20000, CRC(87f960d7) SHA1(d22fe1740217ac20963bd9003245850598ccecf2) )
CRC(b386041a)851 	ROM_LOAD16_BYTE( "rom11.107", 0x00001, 0x20000, CRC(b386041a) SHA1(cac36e22a39b5be0c5cd54dce5c912ff811edb28) )
852 
853 	ROM_REGION( 0x10000, REGION_CPU2, 0 )		/* Z80 Code */
854 	ROM_LOAD( "rom01.92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) /* same as the other games on this driver */
855 
856 	ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )	/* Sprites, 16x16x4 */
857 	ROM_LOAD16_BYTE( "rom08.11", 0x000000, 0x040000, CRC(519dfd82) SHA1(116b06f6e7b283a5417338f716bbaab6cfadb41d) )
858 	ROM_LOAD16_BYTE( "rom09.14", 0x000001, 0x040000, CRC(04fcb5c6) SHA1(7594fa6bf98fc01b8848473a222a621c7c9ff00d) )
859 
860 	ROM_REGION( 0x300000, REGION_GFX2, ROMREGION_DISPOSE )	/* Layer 0, 16x16x8 */
861 	ROM_LOAD( "rom06.6",  0x000000, 0x080000, CRC(ac1aabf5) SHA1(abce6ba381b189ab3ec703a8ef74bccbe10876e0) )
862 	ROM_LOAD( "rom07.9",  0x080000, 0x080000, CRC(69aff769) SHA1(89b98c1023710861e622c8a186b6ec48f5109d42) )
863 	ROM_LOAD( "rom13.7",  0x100000, 0x080000, CRC(3a5b7226) SHA1(1127740c5bc2f830d73a77c8831e1b0db6606375) )
864 	ROM_LOAD( "rom04.1",  0x180000, 0x080000, CRC(46acd054) SHA1(1bd7a1b6b2ce6a3daa8c92843c546beb377af8fb) )
865 	ROM_LOAD( "rom05.3",  0x200000, 0x080000, CRC(37deb6a1) SHA1(3a8a3d961800bb15fd389429b92fa1e5b5f416df) )
866 	ROM_LOAD( "rom12.2",  0x280000, 0x080000, CRC(1fdc59dd) SHA1(d38e21c878241b4315a36e0590397211ca63f2c4) )
867 
868 	ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE )	/* Layer 1, 8x8x4 */
869 	ROM_LOAD( "rom03.4",  0x00000, 0x10000, CRC(f4c15588) SHA1(a21ae71c0a8c7c1df63f9905fd86303bc2d3991c) )
870 
871 	ROM_REGION( 0x40000, REGION_SOUND1, ROMREGION_SOUNDONLY )	/* Samples */
872 	ROM_LOAD( "rom02.95", 0x00000, 0x40000, CRC(859a86e5) SHA1(7b51964227411a40aac54b9cd9ff64f091bdf2b0) )
873 ROM_END
874 
875 static DRIVER_INIT( bubl2000 )
876 {
877 	decryptcode( 23, 22, 21, 20, 19, 18, 13, 14, 15, 16, 17, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 );
878 }
879 
880 /***************************************************************************
881 
882 
883 								Game Drivers
884 
885 
886 ***************************************************************************/
887 
888 GAME ( 1998, stagger1, 0,        stagger1, stagger1, 0,        ROT270, "Afega", "Stagger I (Japan)" )
889 GAME ( 1997, redhawk,  stagger1, redhawk,  stagger1, redhawk,  ROT270, "Afega", "Red Hawk (US)" )
890 GAME ( 1998, grdnstrm, 0,        grdnstrm, grdnstrm, grdnstrm, ROT270, "Afega", "Sen Jin - Guardian Storm (Korea)" )
891 GAMEX( 1998, bubl2000, 0,        bubl2000, bubl2000, bubl2000, ROT0,   "Tuning", "Bubble 2000", GAME_IMPERFECT_GRAPHICS )
892