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