1 /***************************************************************************
2 
3 Warp Warp memory map (preliminary)
4 
5   Memory Map figured out by Chris Hardy (chrish@kcbbs.gen.nz)
6   Initial Driver code by Mirko
7 
8 
9 0000-37FF ROM		Code
10 4800-4FFF ROM		Graphics rom which must be included in memory space
11 
12 memory mapped ports:
13 
14 read:
15 
16 All Read ports only use bit 0
17 
18 C000	  Coin slot 1
19 C001	  Fire (for player 2 in "cocktail mode")
20 C002	  Start P1
21 C003	  Start P2
22 C004	  Fire
23 C005	  Test Mode
24 C006	  Cabinet type
25 C007	  Coin Slot 2
26 C010	  Joystick (read like an analog one, but it's digital)
27 		  0->23 = DOWN
28 		  24->63 = UP
29 		  64->111 = LEFT
30 		  112->167 = RIGHT
31 		  168->255 = NEUTRAL
32 C020-C027 Dipswitch 1->8 in bit 0
33 
34 write:
35 C000-C001 bullet x/y pos
36 C002	  Sound
37 C003	  WatchDog reset
38 C010	  Music 1
39 C020	  Music 2
40 C030-C032 lamps
41 C034	  coin lock out
42 C035	  coin counter
43 C036	  IRQ enable _and_ bullet enable (both on bit 0) (currently ignored)
44 C037	  flip screen
45 
46 
47 Stephh's notes :
48 
49   - The only difference between 'warpwarr' and 'warpwar2' is the copyright
50     string on the first screen (when the scores are displayed) :
51 
52       * 'warpwarr' : "(c) 1981 ROCK-OLA MFG.CORP."  (text stored at 0x33ff to 0x3417)
53       * 'warpwar2' : "(c) 1981 ROCK-OLA MFG.CO."    (text stored at 0x33ff to 0x3415)
54 
55     Note that the checksum at 0x37ff (used for checking ROM at 0x3000 to 0x37ff)
56     is different of course.
57 
58 ***************************************************************************/
59 
60 #include "driver.h"
61 #include "vidhrdw/generic.h"
62 
63 
64 extern unsigned char *warpwarp_bulletsram;
65 PALETTE_INIT( warpwarp );
66 VIDEO_UPDATE( warpwarp );
67 WRITE_HANDLER( warpwarp_flip_screen_w );
68 
69 /* from sndhrdw/warpwarp.c */
70 WRITE_HANDLER( warpwarp_sound_w );
71 WRITE_HANDLER( warpwarp_music1_w );
72 WRITE_HANDLER( warpwarp_music2_w );
73 extern int warpwarp_sh_start(const struct MachineSound *msound);
74 extern void warpwarp_sh_stop(void);
75 extern void warpwarp_sh_update(void);
76 
77 /* Read System Inputs */
READ_HANDLER(bombbee_sys_r)78 static READ_HANDLER( bombbee_sys_r )
79 {
80 	if (offset == 4)	/* to return BUTTON1 status*/
81 	{
82 		return (readinputport(4) >> (flip_screen & 1)) & 1;
83 	}
84 	else
85 		return (readinputport(0) >> offset) & 1;
86 }
87 
READ_HANDLER(warpwarp_sys_r)88 static READ_HANDLER( warpwarp_sys_r )
89 {
90 	return (readinputport(0) >> offset) & 1;
91 }
92 
93 /* Read Dipswitches */
READ_HANDLER(warpwarp_dsw_r)94 static READ_HANDLER( warpwarp_dsw_r )
95 {
96 	return (readinputport(1) >> offset) & 1;
97 }
98 
99 /* Read mux Controller Inputs */
READ_HANDLER(bombbee_mux_r)100 static READ_HANDLER( bombbee_mux_r )
101 {
102 	return readinputport(2 + (flip_screen & 1));
103 }
104 
READ_HANDLER(warpwarp_mux_r)105 static READ_HANDLER( warpwarp_mux_r )
106 {
107 	int res;
108 
109 	res = readinputport(2 + (flip_screen & 1));
110 	if (res & 1) return 23;
111 	if (res & 2) return 63;
112 	if (res & 4) return 111;
113 	if (res & 8) return 167;
114 	return 255;
115 }
116 
WRITE_HANDLER(warpwarp_leds_w)117 static WRITE_HANDLER( warpwarp_leds_w )
118 {
119 	set_led_status(offset,data & 1);
120 }
121 
WRITE_HANDLER(warpwarp_coin_counter_w)122 static WRITE_HANDLER( warpwarp_coin_counter_w )
123 {
124 	coin_counter_w(offset,data);
125 }
126 
127 
128 
MEMORY_READ_START(bombbee_readmem)129 static MEMORY_READ_START( bombbee_readmem )
130 	{ 0x0000, 0x1fff, MRA_ROM },
131 	{ 0x2000, 0x23ff, MRA_RAM },
132 	{ 0x4000, 0x47ff, MRA_RAM },
133 	{ 0x4800, 0x4fff, MRA_ROM },
134 	{ 0x6000, 0x6007, bombbee_sys_r },
135 	{ 0x6010, 0x6010, bombbee_mux_r },
136 	{ 0x6020, 0x6027, warpwarp_dsw_r },
137 MEMORY_END
138 
139 static MEMORY_WRITE_START( bombbee_writemem )
140 	{ 0x0000, 0x1fff, MWA_ROM },
141 	{ 0x2000, 0x23ff, MWA_RAM },
142 	{ 0x4000, 0x43ff, videoram_w, &videoram, &videoram_size },
143 	{ 0x4400, 0x47ff, colorram_w, &colorram },
144 	{ 0x4800, 0x4fff, MWA_ROM },
145 	{ 0x6000, 0x6001, MWA_RAM, &warpwarp_bulletsram },
146 	{ 0x6002, 0x6002, warpwarp_sound_w },
147 	{ 0x6003, 0x6003, watchdog_reset_w },
148 	{ 0x6010, 0x6010, warpwarp_music1_w },
149 	{ 0x6020, 0x6020, warpwarp_music2_w },
150 	{ 0x6030, 0x6032, warpwarp_leds_w },
151 	{ 0x6035, 0x6035, warpwarp_coin_counter_w },
152 	{ 0x6037, 0x6037, warpwarp_flip_screen_w },
153 MEMORY_END
154 
155 static MEMORY_READ_START( warpwarp_readmem )
156 	{ 0x0000, 0x37ff, MRA_ROM },
157 	{ 0x4000, 0x47ff, MRA_RAM },
158 	{ 0x4800, 0x4fff, MRA_ROM },
159 	{ 0x8000, 0x83ff, MRA_RAM },
160 	{ 0xc000, 0xc007, warpwarp_sys_r },
161 	{ 0xc010, 0xc010, warpwarp_mux_r },
162 	{ 0xc020, 0xc027, warpwarp_dsw_r },
163 MEMORY_END
164 
165 static MEMORY_WRITE_START( warpwarp_writemem )
166 	{ 0x0000, 0x37ff, MWA_ROM },
167 	{ 0x4000, 0x43ff, videoram_w, &videoram, &videoram_size },
168 	{ 0x4400, 0x47ff, colorram_w, &colorram },
169 	{ 0x4800, 0x4fff, MWA_ROM },
170 	{ 0x8000, 0x83ff, MWA_RAM },
171 	{ 0xc000, 0xc001, MWA_RAM, &warpwarp_bulletsram },
172 	{ 0xc002, 0xc002, warpwarp_sound_w },
173 	{ 0xc003, 0xc003, watchdog_reset_w },
174 	{ 0xc010, 0xc010, warpwarp_music1_w },
175 	{ 0xc020, 0xc020, warpwarp_music2_w },
176 	{ 0xc030, 0xc032, warpwarp_leds_w },
177 	{ 0xc035, 0xc035, warpwarp_coin_counter_w },
178 	{ 0xc037, 0xc037, warpwarp_flip_screen_w },
179 MEMORY_END
180 
181 
182 
183 INPUT_PORTS_START( bombbee )
184 	PORT_START	/* IN0 */
185 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
186 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
187 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
188 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
189 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SPECIAL )	/* mux BUTTON1 - see Fake Input Port*/
190 	PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
191 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
192 	PORT_DIPSETTING(	0x40, DEF_STR( Upright ) )
193 	PORT_DIPSETTING(	0x00, DEF_STR( Cocktail ) )
194 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )	/* acts as COINn, but doesn't affect coin counter*/
195 
196 	PORT_START	/* DSW1 */
197 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
198 	PORT_DIPSETTING(	0x02, DEF_STR( 2C_1C ) )
199 	PORT_DIPSETTING(	0x03, DEF_STR( 1C_1C ) )
200 	PORT_DIPSETTING(	0x01, DEF_STR( 1C_2C ) )
201 	PORT_DIPSETTING(	0x00, DEF_STR( Free_Play ) )
202 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Lives ) )
203 	PORT_DIPSETTING(	0x00, "3" )
204 	PORT_DIPSETTING(	0x04, "4" )
205 /*	PORT_DIPSETTING(	0x08, "4" )				*/ /* duplicated setting*/
206 	PORT_DIPSETTING(	0x0c, "5" )
207 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unused ) )
208 	PORT_DIPSETTING(	0x10, DEF_STR( Off ) )
209 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
210 	PORT_DIPNAME( 0xe0, 0x00, "Replay" )		/* awards 1 credit*/
211 	PORT_DIPSETTING(	0x00, "50000" )
212 	PORT_DIPSETTING(	0x20, "60000" )
213 	PORT_DIPSETTING(	0x40, "70000" )
214 	PORT_DIPSETTING(	0x60, "80000" )
215 	PORT_DIPSETTING(	0x80, "100000" )
216 	PORT_DIPSETTING(	0xa0, "120000" )
217 	PORT_DIPSETTING(	0xc0, "150000" )
218 	PORT_DIPSETTING(	0xe0, "None" )
219 
220 	PORT_START	/* Mux input - player 1 controller - handled by bombbee_mux_r */
221 	PORT_ANALOG( 0xff, 0x80, IPT_PADDLE | IPF_REVERSE, 30, 10, 0x14, 0xac )
222 
223 	PORT_START	/* Mux input - player 2 controller - handled by bombbee_mux_r */
224 	PORT_ANALOG( 0xff, 0x80, IPT_PADDLE | IPF_REVERSE | IPF_COCKTAIL , 30, 10, 0x14, 0xac )
225 
226 	PORT_START	/* Fake input port to support mux buttons - handled by bombbee_sys_r */
227 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
228 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
229 INPUT_PORTS_END
230 
231 INPUT_PORTS_START( cutieq )
232 	PORT_START	/* IN0 */
233 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
234 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
235 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
236 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
237 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SPECIAL )	/* mux BUTTON1 - see Fake Input Port*/
238 	PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
239 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
240 	PORT_DIPSETTING(	0x40, DEF_STR( Upright ) )
241 	PORT_DIPSETTING(	0x00, DEF_STR( Cocktail ) )
242 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )	/* acts as COINn, but doesn't affect coin counter*/
243 
244 	PORT_START	/* DSW1 */
245 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
246 	PORT_DIPSETTING(	0x02, DEF_STR( 2C_1C ) )
247 	PORT_DIPSETTING(	0x03, DEF_STR( 1C_1C ) )
248 	PORT_DIPSETTING(	0x01, DEF_STR( 1C_2C ) )
249 	PORT_DIPSETTING(	0x00, DEF_STR( Free_Play ) )
250 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Lives ) )
251 	PORT_DIPSETTING(	0x00, "3" )
252 	PORT_DIPSETTING(	0x04, "4" )
253 /*	PORT_DIPSETTING(	0x08, "4" )				*/ /* duplicated setting*/
254 	PORT_DIPSETTING(	0x0c, "5" )
255 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unused ) )
256 	PORT_DIPSETTING(	0x10, DEF_STR( Off ) )
257 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
258 	PORT_DIPNAME( 0xe0, 0x00, DEF_STR( Bonus_Life ) )
259 	PORT_DIPSETTING(	0x00, "50000" )
260 	PORT_DIPSETTING(	0x20, "60000" )
261 	PORT_DIPSETTING(	0x40, "80000" )
262 	PORT_DIPSETTING(	0x60, "100000" )
263 	PORT_DIPSETTING(	0x80, "120000" )
264 	PORT_DIPSETTING(	0xa0, "150000" )
265 	PORT_DIPSETTING(	0xc0, "200000" )
266 	PORT_DIPSETTING(	0xe0, "None" )
267 
268 	PORT_START	/* Mux input - player 1 controller - handled by bombbee_mux_r */
269 	PORT_ANALOG( 0xff, 0x80, IPT_PADDLE | IPF_REVERSE, 30, 10, 0x14, 0xac )
270 
271 	PORT_START	/* Mux input - player 2 controller - handled by bombbee_mux_r */
272 	PORT_ANALOG( 0xff, 0x80, IPT_PADDLE | IPF_REVERSE | IPF_COCKTAIL , 30, 10, 0x14, 0xac )
273 
274 	PORT_START	/* Fake input port to support mux buttons - handled by bombbee_sys_r */
275 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
276 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
277 INPUT_PORTS_END
278 
279 INPUT_PORTS_START( warpwarp )
280 	PORT_START	/* IN0 */
281 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
282 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
283 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
284 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
285 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
286 	PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
287 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
288 	PORT_DIPSETTING(	0x40, DEF_STR( Upright ) )
289 	PORT_DIPSETTING(	0x00, DEF_STR( Cocktail ) )
290 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
291 
292 	PORT_START	/* DSW1 */
293 	PORT_DIPNAME( 0x03, 0x01, DEF_STR( Coinage ) )
294 	PORT_DIPSETTING(	0x03, DEF_STR( 2C_1C ) )
295 	PORT_DIPSETTING(	0x01, DEF_STR( 1C_1C ) )
296 	PORT_DIPSETTING(	0x02, DEF_STR( 1C_2C ) )
297 	PORT_DIPSETTING(	0x00, DEF_STR( Free_Play ) )
298 	PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Lives ) )
299 	PORT_DIPSETTING(	0x00, "2" )
300 	PORT_DIPSETTING(	0x04, "3" )
301 	PORT_DIPSETTING(	0x08, "4" )
302 	PORT_DIPSETTING(	0x0c, "5" )
303 	/* Bonus Lives when "Lives" Dip Switch is set to "2", "3" or "4" */
304 	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) )
305 	PORT_DIPSETTING(	0x00, "8000 30000" )
306 	PORT_DIPSETTING(	0x10, "10000 40000" )
307 	PORT_DIPSETTING(	0x20, "15000 60000" )
308 	PORT_DIPSETTING(	0x30, "None" )
309 	/* Bonus Lives when "Lives" Dip Switch is set to "5"
310 	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) )
311 	PORT_DIPSETTING(	0x00, "30000" )
312 	PORT_DIPSETTING(	0x10, "40000" )
313 	PORT_DIPSETTING(	0x20, "60000" )
314 	PORT_DIPSETTING(	0x30, "None" )
315 	*/
316 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
317 	PORT_DIPSETTING(	0x40, DEF_STR( Off ) )
318 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
319 	/* when level selection is On, press 1 to increase level */
320 	PORT_BITX(	  0x80, 0x80, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Level Selection", IP_KEY_NONE, IP_JOY_NONE )
321 	PORT_DIPSETTING(	0x80, DEF_STR( Off ) )
322 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
323 
324 	PORT_START	/* FAKE - input port to simulate an analog stick - handled by warpwarp_mux_r */
325 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY )
326 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY )
327 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY )
328 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
329 
330 	PORT_START	/* FAKE - input port to simulate an analog stick - handled by warpwarp_mux_r */
331 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_COCKTAIL )
332 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_COCKTAIL )
333 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_COCKTAIL )
334 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
335 INPUT_PORTS_END
336 
337 /* has High Score Initials dip switch instead of rack test */
338 INPUT_PORTS_START( warpwarr )
339 	PORT_START		/* IN0 */
340 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
341 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
342 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
343 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
344 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
345 	PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
346 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
347 	PORT_DIPSETTING(	0x40, DEF_STR( Upright ) )
348 	PORT_DIPSETTING(	0x00, DEF_STR( Cocktail ) )
349 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
350 
351 	PORT_START		/* DSW1 */
352 	PORT_DIPNAME( 0x03, 0x01, DEF_STR( Coinage ) )
353 	PORT_DIPSETTING(	0x03, DEF_STR( 2C_1C ) )
354 	PORT_DIPSETTING(	0x01, DEF_STR( 1C_1C ) )
355 	PORT_DIPSETTING(	0x02, DEF_STR( 1C_2C ) )
356 	PORT_DIPSETTING(	0x00, DEF_STR( Free_Play ) )
357 	PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Lives ) )
358 	PORT_DIPSETTING(	0x00, "2" )
359 	PORT_DIPSETTING(	0x04, "3" )
360 	PORT_DIPSETTING(	0x08, "4" )
361 	PORT_DIPSETTING(	0x0c, "5" )
362 	/* Bonus Lives when "Lives" Dip Switch is set to "2", "3" or "4" */
363 	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) )
364 	PORT_DIPSETTING(	0x00, "8000 30000" )
365 	PORT_DIPSETTING(	0x10, "10000 40000" )
366 	PORT_DIPSETTING(	0x20, "15000 60000" )
367 	PORT_DIPSETTING(	0x30, "None" )
368 	/* Bonus Lives when "Lives" Dip Switch is set to "5"
369 	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) )
370 	PORT_DIPSETTING(	0x00, "30000" )
371 	PORT_DIPSETTING(	0x10, "40000" )
372 	PORT_DIPSETTING(	0x20, "60000" )
373 	PORT_DIPSETTING(	0x30, "None" )
374 	*/
375 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
376 	PORT_DIPSETTING(	0x40, DEF_STR( Off ) )
377 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
378 	PORT_DIPNAME( 0x80, 0x00, "High Score Initials" )
379 	PORT_DIPSETTING(	0x80, DEF_STR( No ) )
380 	PORT_DIPSETTING(	0x00, DEF_STR( Yes ) )
381 
382 	PORT_START	/* FAKE - input port to simulate an analog stick - handled by warpwarp_mux_r */
383 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY )
384 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY )
385 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY )
386 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
387 
388 	PORT_START	/* FAKE - input port to simulate an analog stick - handled by warpwarp_mux_r */
389 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_COCKTAIL )
390 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_COCKTAIL )
391 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_COCKTAIL )
392 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
393 INPUT_PORTS_END
394 
395 
396 
397 
398 static struct GfxLayout charlayout =
399 {
400 	8,8,	/* 8*8 characters */
401 	256,	/* 256 characters */
402 	1,	/* 1 bit per pixel */
403 	{ 0 },
404 	{ 0, 1, 2, 3, 4, 5, 6, 7 },
405 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
406 	8*8 /* every char takes 8 bytes */
407 };
408 
409 static struct GfxLayout spritelayout =
410 {
411 	16,16,	/* 16*16 sprites */
412 	64, /* 64 sprites */
413 	1,	/* 1 bit per pixel */
414 	{ 0 },
415 	{  0, 1, 2, 3, 4, 5, 6, 7 ,
416 			8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 },
417 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
418 			16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
419 	32*8	/* every sprite takes 32 bytes */
420 };
421 
422 
423 
424 static struct GfxDecodeInfo gfxdecodeinfo[] =
425 {
426 	{ REGION_CPU1, 0x4800, &charlayout,   0, 256 },
427 	{ REGION_CPU1, 0x4800, &spritelayout, 0, 256 },
428 	{ -1 } /* end of array */
429 };
430 
431 static struct CustomSound_interface custom_interface =
432 {
433 	warpwarp_sh_start,
434 	warpwarp_sh_stop,
435 	warpwarp_sh_update
436 };
437 
438 
439 static MACHINE_DRIVER_START( bombbee )
440 
441 	/* basic machine hardware */
442 	MDRV_CPU_ADD_TAG("main", 8080, 2048000)	/* 3 MHz? */
443 	MDRV_CPU_MEMORY(bombbee_readmem,bombbee_writemem)
444 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
445 
446 	MDRV_FRAMES_PER_SECOND(60)
447 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)	/* frames per second, vblank duration */
448 
449 	/* video hardware */
450 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
451 	MDRV_SCREEN_SIZE(34*8, 32*8)
452 	MDRV_VISIBLE_AREA(0*8, 34*8-1, 2*8, 30*8-1)
453 	MDRV_GFXDECODE(gfxdecodeinfo)
454 	MDRV_PALETTE_LENGTH(256)
455 	MDRV_COLORTABLE_LENGTH(2*256)
456 
457 	MDRV_PALETTE_INIT(warpwarp)
458 	MDRV_VIDEO_START(generic)
459 	MDRV_VIDEO_UPDATE(warpwarp)
460 
461 	/* sound hardware */
462 	MDRV_SOUND_ADD(CUSTOM, custom_interface)
463 MACHINE_DRIVER_END
464 
465 
466 static MACHINE_DRIVER_START( warpwarp )
467 
468 	/* basic machine hardware */
469 	MDRV_IMPORT_FROM(bombbee)
470 	MDRV_CPU_MODIFY("main")
471 	MDRV_CPU_MEMORY(warpwarp_readmem,warpwarp_writemem)
472 MACHINE_DRIVER_END
473 
474 
475 /***************************************************************************
476 
477   Game driver(s)
478 
479 ***************************************************************************/
480 
481 ROM_START( bombbee )
482 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
483 	ROM_LOAD( "bombbee.1k",   0x0000, 0x2000, CRC(9f8cd7af) SHA1(0d6e1ee5519660d1498eb7a093872ed5034423f2) )
484 	ROM_LOAD( "bombbee.4c",   0x4800, 0x0800, CRC(5f37d569) SHA1(d5e3fb4c5a1612a6e568c8970161b0290b88993f) )
485 ROM_END
486 
487 ROM_START( cutieq )
488 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
489 	ROM_LOAD( "cutieq.1k",    0x0000, 0x2000, CRC(6486cdca) SHA1(914c36487fba2dd57c3fd1f011b2225d2baac2bf) )
490 	ROM_LOAD( "cutieq.4c",    0x4800, 0x0800, CRC(0e1618c9) SHA1(456e9b3d6bae8b4af7778a38e4f40bb6736b0690) )
491 ROM_END
492 
493 ROM_START( warpwarp )
494 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
495 	ROM_LOAD( "g-n9601n.2r",  0x0000, 0x1000, CRC(f5262f38) SHA1(1c64d0282b0a209390a548ceeaaf8b7b55e50896) )
496 	ROM_LOAD( "g-09602n.2m",  0x1000, 0x1000, CRC(de8355dd) SHA1(133d137711d79aaeb45cd3ee041c0be3b73e1b2f) )
497 	ROM_LOAD( "g-09603n.1p",  0x2000, 0x1000, CRC(bdd1dec5) SHA1(bb3d9d1500e31bb271a394facaec7adc3c987e5e) )
498 	ROM_LOAD( "g-09613n.1t",  0x3000, 0x0800, CRC(af3d77ef) SHA1(5b79aabbe14c2997e0b1a9276c483ae76814a63a) )
499 	ROM_LOAD( "g-9611n.4c",   0x4800, 0x0800, CRC(380994c8) SHA1(0cdf6a05db52c423365bff9c9df6d93ac885794e) )
500 ROM_END
501 
502 ROM_START( warpwarr )
503 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
504 	ROM_LOAD( "g-09601.2r",   0x0000, 0x1000, CRC(916ffa35) SHA1(bca2087f8b78a128cdffc55db9814854b72daab5) )
505 	ROM_LOAD( "g-09602.2m",   0x1000, 0x1000, CRC(398bb87b) SHA1(74373336288dc13d59e6f7e7c718aa51d857b087) )
506 	ROM_LOAD( "g-09603.1p",   0x2000, 0x1000, CRC(6b962fc4) SHA1(0291d0c574a1048e52121ca57e01098bff04da40) )
507 	ROM_LOAD( "g-09613.1t",   0x3000, 0x0800, CRC(60a67e76) SHA1(af65e7bf16a5e69fee05c0134e3b8d5bca142402) )
508 	ROM_LOAD( "g-9611.4c",    0x4800, 0x0800, CRC(00e6a326) SHA1(67b7ab5b7b2c9a97d4d690d88561da48b86bc66e) )
509 ROM_END
510 
511 ROM_START( warpwar2 )
512 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
513 	ROM_LOAD( "g-09601.2r",   0x0000, 0x1000, CRC(916ffa35) SHA1(bca2087f8b78a128cdffc55db9814854b72daab5) )
514 	ROM_LOAD( "g-09602.2m",   0x1000, 0x1000, CRC(398bb87b) SHA1(74373336288dc13d59e6f7e7c718aa51d857b087) )
515 	ROM_LOAD( "g-09603.1p",   0x2000, 0x1000, CRC(6b962fc4) SHA1(0291d0c574a1048e52121ca57e01098bff04da40) )
516 	ROM_LOAD( "g-09612.1t",   0x3000, 0x0800, CRC(b91e9e79) SHA1(378323d83c550b3acabc83dba946ab089b9195cb) )
517 	ROM_LOAD( "g-9611.4c",    0x4800, 0x0800, CRC(00e6a326) SHA1(67b7ab5b7b2c9a97d4d690d88561da48b86bc66e) )
518 ROM_END
519 
520 
521 
522 GAME( 1979, bombbee,  0,        bombbee,  bombbee,  0, ROT90, "Namco", "Bomb Bee" )
523 GAME( 1979, cutieq,   0,        bombbee,  cutieq,   0, ROT90, "Namco", "Cutie Q" )
524 GAME( 1981, warpwarp, 0,        warpwarp, warpwarp, 0, ROT90, "Namco", "Warp and Warp" )
525 GAME( 1981, warpwarr, warpwarp, warpwarp, warpwarr, 0, ROT90, "[Namco] (Rock-ola license)", "Warp Warp (Rock-ola set 1)" )
526 GAME( 1981, warpwar2, warpwarp, warpwarp, warpwarr, 0, ROT90, "[Namco] (Rock-ola license)", "Warp Warp (Rock-ola set 2)" )
527