1 /*
2 Dynamic Ski
3 (c)1984 Taiyo
4
5 Dynamic Ski runs on a single Z80. It has the same graphics format as the
6 newer Taiyo games.
7
8 The game has some minor priority glitches.
9
10 ---------------------------------------------------------------------------
11
12 Chinese Hero (developed by Taiyo)
13 (c)1984 Taiyo
14
15 Chinese Hero hardware differs only slightly from Shanghai Kid:
16 - sprites have 3 bitplanes instead of 2
17 - videoram attributes for the tilemap don't include xflip
18 - no protection
19
20 ---------------------------------------------------------------------------
21
22 Shanghai Kid / (Hokuha Syourin) Hiryu no Ken
23 (c)1985 Nihon Game (distributed by Taito)
24
25 3 Z-80A CPU
26 1 AY-3-8910
27 1 XTAL 18.432MHz
28
29 Also distributed with Data East and Memetron license.
30
31 Two board set CPU/sound & video.
32
33 There is a 1.5" by 2" by 4" black epoxy block that has an external battery.
34 The block is connected to the PCB by a 40 pin DIP socket labeled IC30.
35 There is a small smt IC on the video board with the numbers ground off.
36
37 ---------------------------------------------------------------------------
38
39 Some company history:
40
41 Nihon Game changed their name to Culture Brain.
42
43 Games by Nihon Game/Culture Brain:
44 1982 Monster Zero
45 1983 Space Hunter
46 1984 Chinese Hero
47 1985 Hokuha Syourin Hiryuu no Ken / Shanghai Kid
48 1986 Super Chinese (Nintendo Vs. System)
49 */
50
51 #include "driver.h"
52 #include "vidhrdw/generic.h"
53 #include "cpu/z80/z80.h"
54
55 /* from vidhrdw/shangkid.c */
56 extern UINT8 *shangkid_videoreg;
57 extern int shangkid_gfx_type;
58
59 VIDEO_START( shangkid );
60 VIDEO_UPDATE( shangkid );
61 WRITE_HANDLER( shangkid_videoram_w );
62
63 PALETTE_INIT( dynamski );
64 VIDEO_UPDATE( dynamski );
65
66 /***************************************************************************************/
67
68 static data8_t bbx_sound_enable;
69 static data8_t bbx_AY8910_control;
70 static data8_t sound_latch;
71 static data8_t *shareram;
72
73 /***************************************************************************************/
74
75 static struct DACinterface dac_interface = {
76 1,
77 { MIXER(50,50) }
78 };
79
80 static struct AY8910interface ay8910_interface = {
81 1, /* number of chips */
82 2000000, /* 2 MHz? */
83 { 10 }, /* volume */
84 { 0 },
85 { 0 },
86 { 0 },
87 { 0 }
88 };
89
90 /***************************************************************************************/
91
DRIVER_INIT(chinhero)92 static DRIVER_INIT( chinhero )
93 {
94 shangkid_gfx_type = 0;
95 }
96
DRIVER_INIT(shangkid)97 static DRIVER_INIT( shangkid )
98 {
99 shangkid_gfx_type = 1;
100 }
101
102 /***************************************************************************************/
103
WRITE_HANDLER(shangkid_maincpu_bank_w)104 static WRITE_HANDLER( shangkid_maincpu_bank_w )
105 {
106 cpu_setbank( 1,&memory_region(REGION_CPU1)[(data&1)?0x10000:0x8000] );
107 }
108
WRITE_HANDLER(shangkid_bbx_enable_w)109 static WRITE_HANDLER( shangkid_bbx_enable_w )
110 {
111 cpu_set_halt_line( 1, data?0:1 );
112 }
113
WRITE_HANDLER(shangkid_cpu_reset_w)114 static WRITE_HANDLER( shangkid_cpu_reset_w )
115 {
116 if( data == 0 )
117 {
118 cpu_set_reset_line(1,PULSE_LINE);
119 }
120 else if( data == 1 )
121 {
122 cpu_set_reset_line(0,PULSE_LINE);
123 }
124 }
125
WRITE_HANDLER(shangkid_sound_enable_w)126 static WRITE_HANDLER( shangkid_sound_enable_w )
127 {
128 bbx_sound_enable = data;
129 }
130
WRITE_HANDLER(shangkid_bbx_AY8910_control_w)131 WRITE_HANDLER( shangkid_bbx_AY8910_control_w )
132 {
133 bbx_AY8910_control = data;
134 AY8910_control_port_0_w( offset, data );
135 }
136
WRITE_HANDLER(shangkid_bbx_AY8910_write_w)137 WRITE_HANDLER( shangkid_bbx_AY8910_write_w )
138 {
139 switch( bbx_AY8910_control )
140 {
141 case 0x0e:
142 if( bbx_sound_enable )
143 {
144 if( data == 0x01 )
145 {
146 /* 0->1 transition triggers interrupt on Sound CPU */
147 cpu_set_irq_line( 2, 0, HOLD_LINE );
148 }
149 }
150 else
151 {
152 cpu_setbank( 2,&memory_region( REGION_CPU3 )[data?0x0000:0x10000] );
153 }
154 break;
155
156 case 0x0f:
157 sound_latch = data;
158 break;
159
160 default:
161 AY8910_write_port_0_w( offset, data );
162 break;
163 }
164 }
165
166 /***************************************************************************************/
167
READ_HANDLER(shangkid_soundlatch_r)168 READ_HANDLER( shangkid_soundlatch_r )
169 {
170 return sound_latch;
171 }
172
173 /***************************************************************************************/
174
WRITE_HANDLER(shareram_w)175 static WRITE_HANDLER( shareram_w )
176 {
177 shareram[offset] = data;
178 }
179
READ_HANDLER(shareram_r)180 static READ_HANDLER( shareram_r )
181 {
182 return shareram[offset];
183 }
184
185 /***************************************************************************************/
186
187 static struct GfxLayout shangkid_char_layout = {
188 8,8,
189 RGN_FRAC(1,1),
190 2,
191 { 0,4 },
192 { 0,1,2,3,8,9,10,11 },
193 { 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16 },
194 8*16
195 };
196
197 static struct GfxLayout shangkid_sprite_layout = {
198 16,16,
199 RGN_FRAC(1,1),
200 2,
201 { 0,4 },
202 {
203 0,1,2,3,8,9,10,11,
204 128+0,128+1,128+2,128+3,128+8,128+9,128+10,128+11
205 },
206 {
207 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16,
208 256+0*16,256+1*16,256+2*16,256+3*16,256+4*16,256+5*16,256+6*16,256+7*16
209 },
210 8*0x40
211 };
212
213 static struct GfxLayout chinhero_sprite_layout1 = {
214 16,16,
215 0x80,
216 3,
217 { 0x4000*8+4,0,4 },
218 {
219 0,1,2,3,8,9,10,11,
220 128+0,128+1,128+2,128+3,128+8,128+9,128+10,128+11
221 },
222 {
223 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16,
224 256+0*16,256+1*16,256+2*16,256+3*16,256+4*16,256+5*16,256+6*16,256+7*16
225 },
226 8*0x40
227 };
228
229 static struct GfxLayout chinhero_sprite_layout2 = {
230 16,16,
231 0x80,
232 3,
233 { 0x4000*8,0x2000*8+0,0x2000*8+4 },
234 {
235 0,1,2,3,8,9,10,11,
236 128+0,128+1,128+2,128+3,128+8,128+9,128+10,128+11
237 },
238 {
239 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16,
240 256+0*16,256+1*16,256+2*16,256+3*16,256+4*16,256+5*16,256+6*16,256+7*16
241 },
242 8*0x40
243 };
244
245 static struct GfxDecodeInfo chinhero_gfxdecodeinfo[] = {
246 { REGION_GFX1, 0, &shangkid_char_layout, 0, 0x40 },
247 { REGION_GFX2, 0, &chinhero_sprite_layout1, 0, 0x20 },
248 { REGION_GFX2, 0, &chinhero_sprite_layout2, 0, 0x20 },
249 { REGION_GFX3, 0, &chinhero_sprite_layout1, 0, 0x20 },
250 { REGION_GFX3, 0, &chinhero_sprite_layout2, 0, 0x20 },
251 { -1 }
252 };
253
254 static struct GfxDecodeInfo shangkid_gfxdecodeinfo[] = {
255 { REGION_GFX1, 0, &shangkid_char_layout, 0, 0x40 },
256 { REGION_GFX2, 0, &shangkid_sprite_layout, 0, 0x40 },
257 { -1 }
258 };
259
260 static struct GfxDecodeInfo dynamski_gfxdecodeinfo[] = {
261 { REGION_GFX1, 0, &shangkid_char_layout, 0, 0x10 },
262 { REGION_GFX2, 0, &shangkid_sprite_layout, 0x40, 0x10 },
263 { -1 }
264 };
265
266 /***************************************************************************************/
267
MEMORY_READ_START(main_readmem)268 static MEMORY_READ_START( main_readmem )
269 { 0x0000, 0x7fff, MRA_ROM },
270 { 0x8000, 0x9fff, MRA_BANK1 },
271 { 0xb800, 0xb800, input_port_0_r }, /* SW1 */
272 { 0xb801, 0xb801, input_port_1_r }, /* coin/start */
273 { 0xb802, 0xb802, input_port_2_r }, /* player#2 */
274 { 0xb803, 0xb803, input_port_3_r }, /* player#1 */
275 { 0xd000, 0xffff, MRA_RAM },
276 MEMORY_END
277
278 static MEMORY_WRITE_START( main_writemem )
279 { 0x0000, 0x9fff, MWA_ROM },
280 { 0xa000, 0xa000, MWA_NOP }, /* ? */
281 { 0xb000, 0xb000, shangkid_bbx_enable_w },
282 { 0xb001, 0xb001, shangkid_sound_enable_w },
283 { 0xb002, 0xb002, MWA_NOP }, /* main CPU interrupt-related */
284 { 0xb003, 0xb003, MWA_NOP }, /* BBX interrupt-related */
285 { 0xb004, 0xb004, shangkid_cpu_reset_w },
286 { 0xb006, 0xb006, MWA_NOP }, /* coin counter */
287 { 0xb007, 0xb007, shangkid_maincpu_bank_w },
288 { 0xc000, 0xc002, MWA_RAM, &shangkid_videoreg },
289 { 0xd000, 0xdfff, shangkid_videoram_w, &videoram },
290 { 0xe000, 0xfdff, MWA_RAM, &shareram },
291 { 0xfe00, 0xffff, MWA_RAM, &spriteram },
292 MEMORY_END
293
294 /***************************************************************************************/
295
296 static MEMORY_READ_START( bbx_readmem )
297 { 0x0000, 0x9fff, MRA_ROM },
298 { 0xb800, 0xb800, input_port_0_r }, /* SW1 */
299 { 0xb801, 0xb801, input_port_1_r }, /* coin/start */
300 { 0xb802, 0xb802, input_port_2_r }, /* player#2 */
301 { 0xb803, 0xb803, input_port_3_r }, /* player#1 */
302 { 0xd000, 0xdfff, videoram_r },
303 { 0xe000, 0xffff, shareram_r },
304 MEMORY_END
305
306 static MEMORY_WRITE_START( bbx_writemem )
307 { 0x0000, 0x9fff, MWA_ROM },
308 { 0xa000, 0xa000, MWA_NOP }, /* ? */
309 { 0xb000, 0xb000, shangkid_bbx_enable_w },
310 { 0xb001, 0xb001, shangkid_sound_enable_w },
311 { 0xb002, 0xb002, MWA_NOP }, /* main CPU interrupt-related */
312 { 0xb003, 0xb003, MWA_NOP }, /* BBX interrupt-related */
313 { 0xb004, 0xb004, shangkid_cpu_reset_w },
314 { 0xb006, 0xb006, MWA_NOP }, /* coin counter */
315 { 0xb007, 0xb007, shangkid_maincpu_bank_w },
316 { 0xd000, 0xdfff, shangkid_videoram_w },
317 { 0xe000, 0xffff, shareram_w },
318 MEMORY_END
319
320 static PORT_WRITE_START( bbx_writeport )
321 { 0x00, 0x00, shangkid_bbx_AY8910_control_w },
322 { 0x01, 0x01, shangkid_bbx_AY8910_write_w },
323 PORT_END
324
325 /***************************************************************************************/
326
327 static MEMORY_READ_START( sound_readmem )
328 { 0x0000, 0xdfff, MRA_BANK2 },
329 { 0xe000, 0xefff, MRA_RAM },
330 MEMORY_END
331
332 static MEMORY_WRITE_START( sound_writemem )
333 { 0x0000, 0xdfff, MWA_NOP }, /* sample player writes to ROM area */
334 { 0xe000, 0xefff, MWA_RAM },
335 MEMORY_END
336
337 static PORT_READ_START( readport_sound )
338 { 0x00, 0x00, shangkid_soundlatch_r },
339 PORT_END
340
341 static PORT_WRITE_START( writeport_sound )
342 { 0x00, 0x00, DAC_0_data_w },
343 PORT_END
344
345 /***************************************************************************************/
346
347 static MACHINE_DRIVER_START( chinhero )
348
349 /* basic machine hardware */
350 MDRV_CPU_ADD(Z80, 3000000) /* ? */
351 MDRV_CPU_MEMORY(main_readmem,main_writemem)
352 MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
353
354 MDRV_CPU_ADD(Z80, 3000000) /* ? */
355 MDRV_CPU_MEMORY(bbx_readmem,bbx_writemem)
356 MDRV_CPU_PORTS(0,bbx_writeport)
357 MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
358
359 MDRV_CPU_ADD(Z80, 3000000) /* ? */
360 MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
361 MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
362 MDRV_CPU_PORTS(readport_sound,writeport_sound)
363
364 MDRV_FRAMES_PER_SECOND(60)
365 MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
366 MDRV_INTERLEAVE(10)
367
368 /* video hardware */
369 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
370 MDRV_SCREEN_SIZE(40*8, 28*8)
371 MDRV_VISIBLE_AREA(16, 319-16, 0, 223)
372 MDRV_GFXDECODE(chinhero_gfxdecodeinfo)
373 MDRV_PALETTE_LENGTH(256)
374
375 MDRV_PALETTE_INIT(RRRR_GGGG_BBBB)
376 MDRV_VIDEO_START(shangkid)
377 MDRV_VIDEO_UPDATE(shangkid)
378
379 /* sound hardware */
380 MDRV_SOUND_ADD(DAC, dac_interface)
381 MDRV_SOUND_ADD(AY8910, ay8910_interface)
382 MACHINE_DRIVER_END
383
384
385 static MACHINE_DRIVER_START( shangkid )
386
387 /* basic machine hardware */
388 MDRV_IMPORT_FROM(chinhero)
389
390 /* video hardware */
391 MDRV_GFXDECODE(shangkid_gfxdecodeinfo)
392 MACHINE_DRIVER_END
393
394
395
396 static MEMORY_READ_START( dynamski_readmem )
397 { 0x0000, 0x7fff, MRA_ROM },
398 { 0xc000, 0xc7ff, MRA_RAM },
399 { 0xc800, 0xcbff, MRA_RAM },
400 { 0xd000, 0xd3ff, MRA_RAM },
401 { 0xd800, 0xdbff, MRA_RAM },
402 { 0xe000, 0xe002, MRA_RAM },
403 { 0xe800, 0xe800, input_port_0_r },
404 { 0xe801, 0xe801, input_port_1_r },
405 { 0xe802, 0xe802, input_port_2_r },
406 { 0xe803, 0xe803, input_port_3_r },
407 { 0xf000, 0xf7ff, MRA_RAM }, /* work ram */
408 MEMORY_END
409
410 static MEMORY_WRITE_START( dynamski_writemem )
411 { 0x0000, 0x7fff, MWA_ROM },
412 { 0xc000, 0xc7ff, MWA_RAM, &videoram }, /* tilemap */
413 { 0xc800, 0xcbff, MWA_RAM },
414 { 0xd000, 0xd3ff, MWA_RAM },
415 { 0xd800, 0xdbff, MWA_RAM },
416 { 0xe000, 0xe000, MWA_NOP }, /* IRQ disable */
417 { 0xe001, 0xe002, MWA_RAM }, /* screen flip */
418 { 0xf000, 0xf7ff, MWA_RAM },
419 MEMORY_END
420
421 static PORT_WRITE_START( dynamski_writeport )
422 /* ports are reversed */
423 { 0x00, 0x00, AY8910_write_port_0_w },
424 { 0x01, 0x01, AY8910_control_port_0_w },
425 PORT_END
426
427 static MACHINE_DRIVER_START( dynamski )
428
429 /* basic machine hardware */
430 MDRV_CPU_ADD(Z80, 3000000) /* ? */
431 MDRV_CPU_MEMORY(dynamski_readmem,dynamski_writemem)
432 MDRV_CPU_PORTS(0,dynamski_writeport)
433 MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
434
435 MDRV_FRAMES_PER_SECOND(60)
436 MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
437
438 /* video hardware */
439 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
440 MDRV_SCREEN_SIZE(256+32, 256)
441 MDRV_VISIBLE_AREA(0, 255+32, 16, 255-16)
442 MDRV_GFXDECODE(dynamski_gfxdecodeinfo)
443 MDRV_PALETTE_LENGTH(32)
444 MDRV_COLORTABLE_LENGTH(16*4+16*4)
445
446 MDRV_PALETTE_INIT(dynamski)
447 MDRV_VIDEO_UPDATE(dynamski)
448
449 /* sound hardware */
450 MDRV_SOUND_ADD(AY8910, ay8910_interface)
451 MACHINE_DRIVER_END
452
453 /***************************************************************************************/
454
455 INPUT_PORTS_START( dynamski )
456 PORT_START
457 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
458 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
459 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* service */
460 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 )
461 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 )
462 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
463 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
464 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
465
466 PORT_START
467 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
468 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
469 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
470 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
471 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
472 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 )
473 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
474 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
475
476 PORT_START
477 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_PLAYER2 )
478 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_PLAYER2 )
479 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
480 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
481 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
482 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 )
483 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
484 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
485
486 PORT_START
487 PORT_DIPNAME( 0x03, 0x01, DEF_STR( Unknown ) )
488 /* what's 00 ? */
489 PORT_DIPSETTING( 0x01, "A" )
490 PORT_DIPSETTING( 0x02, "B" )
491 PORT_DIPSETTING( 0x03, "C" )
492 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Cabinet ) )
493 PORT_DIPSETTING( 0x04, DEF_STR( Upright ) )
494 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
495 PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coinage ) )
496 PORT_DIPSETTING( 0x18, DEF_STR( 3C_1C ) )
497 PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
498 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
499 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
500 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
501 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
502 PORT_DIPSETTING( 0x20, DEF_STR( On ) )
503 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) /* unused? */
504 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
505 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
506 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) /* unused? */
507 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
508 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
509 INPUT_PORTS_END
510
511 INPUT_PORTS_START( chinhero )
512 PORT_START
513 PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) )
514 PORT_DIPSETTING( 0x01, "3" )
515 PORT_DIPSETTING( 0x02, "4" )
516 PORT_DIPSETTING( 0x03, "5" )
517 PORT_BITX( 0,0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Infinite",0,0 )
518 PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
519 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
520 PORT_DIPSETTING( 0x04, DEF_STR( On ) )
521 PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coinage ) )
522 PORT_DIPSETTING( 0x18, DEF_STR( 3C_1C ) )
523 PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
524 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
525 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
526 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
527 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
528 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
529 PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Difficulty ) ) /* not verified */
530 PORT_DIPSETTING( 0x00, "Easy" )
531 PORT_DIPSETTING( 0x40, "Medium" )
532 PORT_DIPSETTING( 0x80, "Hard" )
533 PORT_DIPSETTING( 0xc0, "Hardest" )
534
535 PORT_START
536 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
537 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
538 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* service */
539 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 )
540 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 )
541 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
542 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
543 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
544
545 PORT_START
546 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_PLAYER2 )
547 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER2 )
548 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_4WAY | IPF_PLAYER2 )
549 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_PLAYER2 )
550 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
551 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 )
552 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 | IPF_PLAYER2 )
553 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON4 | IPF_PLAYER2 )
554
555 PORT_START
556 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_4WAY )
557 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
558 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_4WAY )
559 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_4WAY )
560 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
561 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 )
562 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 )
563 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON4 )
564 INPUT_PORTS_END
565
566 INPUT_PORTS_START( shangkid )
567 PORT_START
568 /* There are also two potentiometers on the PCB for volume:
569 ** RV1 - Music
570 ** RV2 - Sound Effects
571 */
572 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
573 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
574 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
575 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) )
576 PORT_DIPSETTING( 0x02, DEF_STR( Upright ) )
577 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
578 PORT_DIPNAME( 0x1c, 0x04, DEF_STR( Coinage ) )
579 PORT_DIPSETTING( 0x10, DEF_STR( 4C_1C ) )
580 PORT_DIPSETTING( 0x0c, DEF_STR( 3C_1C ) )
581 PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
582 PORT_DIPSETTING( 0x00, DEF_STR( Unknown ) ) /* 1C_1C; no coin counter */
583 PORT_DIPSETTING( 0x04, DEF_STR( 1C_1C ) )
584 PORT_DIPSETTING( 0x14, DEF_STR( 1C_2C ) )
585 PORT_DIPSETTING( 0x18, DEF_STR( 1C_3C ) )
586 PORT_DIPSETTING( 0x1c, DEF_STR( 1C_5C ) )
587 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
588 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
589 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
590 PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Difficulty ) )
591 PORT_DIPSETTING( 0x00, "Easy" )
592 PORT_DIPSETTING( 0x40, "Medium" )
593 PORT_DIPSETTING( 0x80, "Hard" )
594 PORT_DIPSETTING( 0xc0, "Hardest" )
595
596 PORT_START
597 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
598 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
599 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* service */
600 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 )
601 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 )
602 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
603 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
604 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* busy flag? */
605
606 PORT_START
607 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 ) /* kick */
608 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 ) /* punch */
609 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
610 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
611 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_PLAYER2 )
612 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
613 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_PLAYER2 )
614 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_PLAYER2 )
615
616 PORT_START
617 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) /* kick */
618 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) /* punch */
619 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
620 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
621 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
622 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
623 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
624 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
625 INPUT_PORTS_END
626
627 /***************************************************************************************/
628
629 ROM_START( chinhero )
630 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* Z80 code (main) */
631 ROM_LOAD( "ic2.1", 0x0000, 0x2000, CRC(8974bac4) SHA1(932a677d0928f4146201f206b71ac2bcc0f6735c) )
632 ROM_LOAD( "ic3.2", 0x2000, 0x2000, CRC(9b7a02fe) SHA1(b17593262ec24b999d66634b84eee95c1088f7eb) )
633 ROM_LOAD( "ic4.3", 0x4000, 0x2000, CRC(e86d4195) SHA1(5081500e0a6d4fd19690134efd6f35b6047e6727) )
634 ROM_LOAD( "ic5.4", 0x6000, 0x2000, CRC(2b629d2c) SHA1(7e92e2c2d09d3501ddbf79a14228cf273f4a17df) )
635 ROM_LOAD( "ic6.5", 0x8000, 0x2000, CRC(35bf4a4f) SHA1(2600c57d40355775847eed8a9592c67f5d11f1f1) )
636
637 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 code (coprocessor) */
638 ROM_LOAD( "ic31.6", 0x0000, 0x2000, CRC(7c56927b) SHA1(565a10b39f2d5d38cb5415aadd7fbdb90dcf13cb) )
639 ROM_LOAD( "ic32.7", 0x2000, 0x2000, CRC(d67b8045) SHA1(0374cafb8d4828e195791784ac187772c49c18f9) )
640
641 ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Z80 code (sound) */
642 ROM_LOAD( "ic47.8", 0x0000, 0x2000, CRC(3c396062) SHA1(2c1540eb123b3124e1679ba09e063e80f2423022) )
643 ROM_LOAD( "ic48.9", 0x2000, 0x2000, CRC(b14f2bab) SHA1(3643b430e3b464b0bc9aca81122b07fb8eb0fb9f) )
644 ROM_LOAD( "ic49.10", 0x4000, 0x2000, CRC(8c0e43d1) SHA1(acaead801b4782875c8b6092e987b73f9973f8b0) )
645
646 ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* tiles */
647 ROM_LOAD( "ic21.11", 0x0000, 0x2000, CRC(3a37fb45) SHA1(4c631cf924f1e1dfea6db3f014ab7d9cb9f4b0c4) )
648 ROM_LOAD( "ic22.12", 0x2000, 0x2000, CRC(bc21c002) SHA1(4fc5e4dfe8331a3feb1c370a8aca9c8303eb7b4e) )
649
650 ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* sprites */
651 ROM_LOAD( "ic114.18", 0x0000, 0x2000, CRC(fc4183a8) SHA1(4bc891a9e16cd84ce353180705cc8fcadf414a49) )
652 ROM_LOAD( "ic113.17", 0x2000, 0x2000, CRC(d713d7fe) SHA1(8dd97f96a1190c5be5e19721227dd80adf060b4d) )
653 ROM_LOAD( "ic99.13", 0x4000, 0x2000, CRC(a8e2a3f4) SHA1(db9f954d4b46660f5f1cb4122838e6418f92d0a3) )
654
655 ROM_REGION( 0x6000, REGION_GFX3, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* sprites */
656 ROM_LOAD( "ic112.16", 0x0000, 0x2000, CRC(dd5170ca) SHA1(e0a9d1dbc021a8ad84dd7d1bd7e390e51e6328b7) )
657 ROM_LOAD( "ic111.15", 0x2000, 0x2000, CRC(20f6052e) SHA1(e22ddb3fb90ff8df5ce7fda6a26c1b9fce2f59ab) )
658 ROM_LOAD( "ic110.14", 0x4000, 0x2000, CRC(9bc2d568) SHA1(a4ee8822709645b0dc088635c0a9c263fb5a2245) )
659
660 ROM_REGION( 0xa80, REGION_PROMS, 0 )
661 ROM_LOAD( "v_ic36_r", 0x000, 0x100, CRC(16ae1692) SHA1(e287b96890da4815350af72e9f2189d0c72313b6) ) /* red */
662 ROM_LOAD( "v_ic35_g", 0x100, 0x100, CRC(b3d0a074) SHA1(e955fda8cb8df389507e17b7b4609e845e5ef0c4) ) /* green */
663 ROM_LOAD( "v_ic27_b", 0x200, 0x100, CRC(353a2d11) SHA1(76f21e3e092024592d9ccd33ae69c438254c5755) ) /* blue */
664
665 ROM_LOAD( "v_ic28_m", 0x300, 0x100, CRC(7ca273c1) SHA1(20d85547d96bea8b310c943c45e4978a7e5b5585) ) /* unknown */
666 ROM_LOAD( "v_ic69", 0x400, 0x200, CRC(410d6f86) SHA1(3cfaef3702dbda3e7c7eb84a93561e36778aec3e) ) /* zoom */
667 ROM_LOAD( "v_ic108", 0x600, 0x200, CRC(d33c02ae) SHA1(1a2146ae404a5e8a701e1d547a8409a376d4bee4) ) /* zoom */
668
669 ROM_LOAD( "v_ic12", 0x800, 0x100, CRC(0de07e89) SHA1(5655bce6ff3abad63f5b31add402cdbb51c323f0) ) /* tile pen priority */
670 ROM_LOAD( "v_ic15_p", 0x900, 0x100, CRC(7e0a0581) SHA1(e355a6ef21a65a1e828d7bd5b0f2224b06438b4a) ) /* sprite pen transparency */
671 ROM_LOAD( "v_ic8", 0xa00, 0x020, CRC(4c62974d) SHA1(fd5970b5ba1d9e986515ae06c2e83f8bf20b3cdc) )
672
673 ROM_LOAD( "ic8", 0xa20, 0x020, CRC(84bcd9af) SHA1(5a5afeb6aedb8ac6ac49fb8da62df57fbd8b1780) ) /* main CPU banking */
674 ROM_LOAD( "ic22", 0xa40, 0x020, CRC(84bcd9af) SHA1(5a5afeb6aedb8ac6ac49fb8da62df57fbd8b1780) ) /* coprocessor banking */
675 ROM_LOAD( "ic42", 0xa60, 0x020, CRC(2ccfe10a) SHA1(d89ea91e5da436805fca9ded9b33609f4a862724) ) /* sound cpu banking */
676 ROM_END
677
678 ROM_START( chinher2 )
679 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* Z80 code (main) */
680 ROM_LOAD( "1.128", 0x0000, 0x4000, CRC(68e247aa) SHA1(27c2b864e482ba10c81337ed7c03a58b395e52bb) )
681 ROM_LOAD( "2.128", 0x4000, 0x4000, CRC(0346d8c9) SHA1(458b9a37b0ad0cafecdb0348f7d93508531bc310) )
682 ROM_LOAD( "3.128", 0x8000, 0x4000, CRC(a78b8d78) SHA1(c2b7b2d56e2fdb7a2a11bb8b1aab35a841331b96) )
683
684 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 code (coprocessor) */
685 ROM_LOAD( "4.128", 0x0000, 0x4000, CRC(6ab2e836) SHA1(61c84c0b685e29bac8020a0051586267ecd20166) )
686
687 ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Z80 code (sound) */
688 ROM_LOAD( "5.128", 0x0000, 0x4000, CRC(4e4f3f92) SHA1(57d0485f8a0110f5448b554d2fab1caba52551fd) )
689 ROM_LOAD( "ic49.10", 0x4000, 0x2000, CRC(8c0e43d1) SHA1(acaead801b4782875c8b6092e987b73f9973f8b0) )
690
691 ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* tiles */
692 ROM_LOAD( "ic21.11", 0x0000, 0x2000, CRC(3a37fb45) SHA1(4c631cf924f1e1dfea6db3f014ab7d9cb9f4b0c4) )
693 ROM_LOAD( "ic22.12", 0x2000, 0x2000, CRC(bc21c002) SHA1(4fc5e4dfe8331a3feb1c370a8aca9c8303eb7b4e) )
694
695 ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* sprites */
696 ROM_LOAD( "ic114.18", 0x0000, 0x2000, CRC(fc4183a8) SHA1(4bc891a9e16cd84ce353180705cc8fcadf414a49) )
697 ROM_LOAD( "ic113.17", 0x2000, 0x2000, CRC(d713d7fe) SHA1(8dd97f96a1190c5be5e19721227dd80adf060b4d) )
698 ROM_LOAD( "ic99.13", 0x4000, 0x2000, CRC(a8e2a3f4) SHA1(db9f954d4b46660f5f1cb4122838e6418f92d0a3) )
699
700 ROM_REGION( 0x6000, REGION_GFX3, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* sprites */
701 ROM_LOAD( "ic112.16", 0x0000, 0x2000, CRC(dd5170ca) SHA1(e0a9d1dbc021a8ad84dd7d1bd7e390e51e6328b7) )
702 ROM_LOAD( "ic111.15", 0x2000, 0x2000, CRC(20f6052e) SHA1(e22ddb3fb90ff8df5ce7fda6a26c1b9fce2f59ab) )
703 ROM_LOAD( "ic110.14", 0x4000, 0x2000, CRC(9bc2d568) SHA1(a4ee8822709645b0dc088635c0a9c263fb5a2245) )
704
705 ROM_REGION( 0xa80, REGION_PROMS, 0 )
706 ROM_LOAD( "v_ic36_r", 0x000, 0x100, CRC(16ae1692) SHA1(e287b96890da4815350af72e9f2189d0c72313b6) ) /* red */
707 ROM_LOAD( "v_ic35_g", 0x100, 0x100, CRC(b3d0a074) SHA1(e955fda8cb8df389507e17b7b4609e845e5ef0c4) ) /* green */
708 ROM_LOAD( "v_ic27_b", 0x200, 0x100, CRC(353a2d11) SHA1(76f21e3e092024592d9ccd33ae69c438254c5755) ) /* blue */
709
710 ROM_LOAD( "v_ic28_m", 0x300, 0x100, CRC(7ca273c1) SHA1(20d85547d96bea8b310c943c45e4978a7e5b5585) ) /* unknown */
711 ROM_LOAD( "v_ic69", 0x400, 0x200, CRC(410d6f86) SHA1(3cfaef3702dbda3e7c7eb84a93561e36778aec3e) ) /* zoom */
712 ROM_LOAD( "v_ic108", 0x600, 0x200, CRC(d33c02ae) SHA1(1a2146ae404a5e8a701e1d547a8409a376d4bee4) ) /* zoom */
713
714 ROM_LOAD( "v_ic12", 0x800, 0x100, CRC(0de07e89) SHA1(5655bce6ff3abad63f5b31add402cdbb51c323f0) ) /* tile pen priority */
715 ROM_LOAD( "v_ic15_p", 0x900, 0x100, CRC(7e0a0581) SHA1(e355a6ef21a65a1e828d7bd5b0f2224b06438b4a) ) /* sprite pen transparency */
716 ROM_LOAD( "v_ic8", 0xa00, 0x020, CRC(4c62974d) SHA1(fd5970b5ba1d9e986515ae06c2e83f8bf20b3cdc) )
717
718 ROM_LOAD( "ic8", 0xa20, 0x020, CRC(84bcd9af) SHA1(5a5afeb6aedb8ac6ac49fb8da62df57fbd8b1780) ) /* main CPU banking */
719 ROM_LOAD( "ic22", 0xa40, 0x020, CRC(84bcd9af) SHA1(5a5afeb6aedb8ac6ac49fb8da62df57fbd8b1780) ) /* coprocessor banking */
720 ROM_LOAD( "ic42", 0xa60, 0x020, CRC(2ccfe10a) SHA1(d89ea91e5da436805fca9ded9b33609f4a862724) ) /* sound cpu banking */
721 ROM_END
722
723 ROM_START( shangkid )
724 /* Main CPU - handles game logic */
725 ROM_REGION( 0x12000, REGION_CPU1, 0 ) /* Z80 (NEC D780C-1) code */
726 ROM_LOAD( "cr00ic02.bin", 0x00000, 0x4000, CRC(2e420377) SHA1(73eb916b1693ffab8049ea0d8d3503629fa27948) )
727 ROM_LOAD( "cr01ic03.bin", 0x04000, 0x4000, CRC(161cd358) SHA1(2cc1c30b3d3215ddc7c7f96a3358ed50e0f850e3) )
728 ROM_LOAD( "cr02ic04.bin", 0x08000, 0x2000, CRC(85b6e455) SHA1(3b2cd1e55355d24c014c5afe0212c6c9f0899a28) ) /* banked at 0x8000 */
729 ROM_LOAD( "cr03ic05.bin", 0x10000, 0x2000, CRC(3b383863) SHA1(3fb10a7f89cf2387d70b0337916063fd4ec5f754) ) /* banked at 0x8000 */
730
731 /* The BBX coprocessor is burried in an epoxy block. It contains:
732 ** - a surface-mounted Z80 (TMPZ84C00P)
733 ** - LS245 logic IC
734 ** - battery backed ram chip Fujitsu MB8464
735 **
736 ** The BBX coprocessor receives graphics and sound-related commands from
737 ** the main CPU via shared RAM. It directly manages an AY8910, is
738 ** responsible for populating spriteram, and forwards appropriate sound
739 ** commands to the sample-playing CPU.
740 */
741 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80: bbx module */
742 ROM_LOAD( "bbx.bin", 0x0000, 0x2000, CRC(560c0abd) SHA1(165beadd55bc29195cc680825f71f3f7f60fa0f6) ) /* battery-backed RAM */
743 ROM_LOAD( "cr04ic31.bin", 0x2000, 0x2000, CRC(cb207885) SHA1(b73458c959a4ebceb4c88931f8e3d1aff01dbaff) )
744 ROM_LOAD( "cr05ic32.bin", 0x4000, 0x4000, CRC(cf3b8d55) SHA1(c2e196e2762dd7884f461fc2be37698b9ed1deef) )
745 ROM_LOAD( "cr06ic33.bin", 0x8000, 0x2000, CRC(0f3bdbd8) SHA1(2e0e81425e4e5592d3e2c8395075720c2ad3f79a) )
746
747 /* The Sound CPU is a dedicated Sample Player */
748 ROM_REGION( 0x1e000, REGION_CPU3, 0 ) /* Z80 (NEC D780C-1) */
749 ROM_LOAD( "cr11ic51.bin", 0x00000, 0x4000, CRC(2e2d6afe) SHA1(1414a06b6cf14dfd69ca6cf35e4eb7d75af3f219) )
750 ROM_LOAD( "cr12ic43.bin", 0x04000, 0x4000, CRC(dd29a0c8) SHA1(8411c31fefdce8c9233fe531b5bf3b6c43c03cba) )
751 ROM_LOAD( "cr13ic44.bin", 0x08000, 0x4000, CRC(879d0de0) SHA1(b1422cf239381ac949867c42ca8101fa8dcac9d6) )
752 ROM_LOAD( "cr07ic47.bin", 0x10000, 0x4000, CRC(20540f7c) SHA1(85c0b913948a67a34b25f0974fdd22e1dbb63166) )
753 ROM_LOAD( "cr08ic48.bin", 0x14000, 0x2000, CRC(392f24db) SHA1(5bd68a4105717e18e79afba4c00733ad74b39875) )
754 ROM_LOAD( "cr09ic49.bin", 0x18000, 0x4000, CRC(d50c96a8) SHA1(7fcf798b49b0827349366475dbbca1554df25cc4) )
755 ROM_LOAD( "cr10ic50.bin", 0x1c000, 0x2000, CRC(873a5f2d) SHA1(32f806da319807bef68b5e810815ef2aba6ea0a7) )
756
757 ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* 8x8 tiles */
758 ROM_LOAD( "cr20ic21.bin", 0x0000, 0x2000, CRC(eb3cbb11) SHA1(8d36d6f328263eb0b956c0bd752d2cac84795c1a) )
759 ROM_LOAD( "cr21ic22.bin", 0x2000, 0x2000, CRC(7c6e75f4) SHA1(2a4a7971777136a476b8ca0b888e65a31a032a9e) )
760
761 ROM_REGION( 0x18000, REGION_GFX2, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* 16x16 sprites */
762 ROM_LOAD( "cr14i114.bin", 0x00000, 0x4000, CRC(ee1f348f) SHA1(7bfcdf645a2f406130444bb7b641a91351761c83) )
763 ROM_LOAD( "cr15i113.bin", 0x04000, 0x4000, CRC(a46398bd) SHA1(2f968eb95f3406110b4b503fe4da735bb64b548b) )
764 ROM_LOAD( "cr16i112.bin", 0x08000, 0x4000, CRC(cbed446c) SHA1(cc36ab32b42f6ec8ce574f040f7fb034b1351467) )
765 ROM_LOAD( "cr17i111.bin", 0x0c000, 0x4000, CRC(b0a44330) SHA1(9d52856243e21ab906ee1701b6485411f2933707) )
766 ROM_LOAD( "cr18ic99.bin", 0x10000, 0x4000, CRC(ff7efd7c) SHA1(95f83a9aa2f0845efe2c9c72d29e7a08c78d9b1f) )
767 ROM_LOAD( "cr19i100.bin", 0x14000, 0x4000, CRC(f948f829) SHA1(c4305d4a04213af39413e1575eaee3905344c788) )
768
769 ROM_REGION( 0xa80, REGION_PROMS, 0 )
770 ROM_LOAD( "cr31ic36.bin", 0x000, 0x100, CRC(9439590b) SHA1(cd07526d6373358bae6bfce8dbcab7d44472041f) ) /* 82S129 - red */
771 ROM_LOAD( "cr30ic35.bin", 0x100, 0x100, CRC(324e295e) SHA1(9076e3da2edc8889bd635191e7687676b6fb4cec) ) /* 82S129 - green */
772 ROM_LOAD( "cr28ic27.bin", 0x200, 0x100, CRC(375cba96) SHA1(fd3ba36588147a3252b800f1f86b2897e9605b8d) ) /* 82S129 - blue */
773
774 ROM_LOAD( "cr29ic28.bin", 0x300, 0x100, CRC(7ca273c1) SHA1(20d85547d96bea8b310c943c45e4978a7e5b5585) ) /* 82S129 - unknown */
775 ROM_LOAD( "cr32ic69.bin", 0x400, 0x200, CRC(410d6f86) SHA1(3cfaef3702dbda3e7c7eb84a93561e36778aec3e) ) /* 82S147 - sprite-related (zoom?) */
776 ROM_LOAD( "cr33-108.bin", 0x600, 0x200, CRC(d33c02ae) SHA1(1a2146ae404a5e8a701e1d547a8409a376d4bee4) ) /* 82S147 - sprite-related (zoom?) */
777
778 ROM_LOAD( "cr26ic12.bin", 0x800, 0x100, CRC(85b5e958) SHA1(f211b5122fccf84e4aa1556c0290b5cb83935386) ) /* 82S129 - tile pen priority? */
779 ROM_LOAD( "cr27ic15.bin", 0x900, 0x100, CRC(f7a19fe2) SHA1(d88e0743aa858b132f636fcd5d493ccb1af82224) ) /* 82S129 - sprite pen transparency */
780
781 ROM_LOAD( "cr25ic8.bin", 0xa00, 0x020, CRC(c85e09ad) SHA1(f42e3840ec0e4720067eda7c536b6dcc540e63ff) ) /* 82S123 */
782 ROM_LOAD( "cr22ic8.bin", 0xa20, 0x020, CRC(1a7e0b06) SHA1(648d58a4ad14f4b242e492cf302d6678d899cf4f) ) /* 82S123 - main CPU banking */
783 ROM_LOAD( "cr23ic22.bin", 0xa40, 0x020, CRC(efb5f265) SHA1(3de15e03cb12956d34074abb48236537f2b47dba) ) /* 82S123 - coprocessor banking */
784 ROM_LOAD( "cr24ic42.bin", 0xa60, 0x020, CRC(823878aa) SHA1(eb5026270890e5af9193e354b7e814f32238a9bf) ) /* 82S123 - sample player banking */
785 ROM_END
786
787 ROM_START( hiryuken )
788 /* Main CPU - handles game logic */
789 ROM_REGION( 0x12000, REGION_CPU1, 0 ) /* Z80 (NEC D780C-1) code */
790 ROM_LOAD( "1.2", 0x00000, 0x4000, CRC(c7af7f2e) SHA1(b035a4230e10bcf0891e41423a51fb6169087b8e) )
791 ROM_LOAD( "2.3", 0x04000, 0x4000, CRC(639afdb3) SHA1(50bd1deffb66049f101faceb108ee95eb3fe8ae6) )
792 ROM_LOAD( "3.4", 0x08000, 0x2000, CRC(ad210482) SHA1(9a32bbaf601d3b00f0a79ce90bb9a32e8e608977) ) /* banked at 0x8000 */
793 ROM_LOAD( "4.5", 0x10000, 0x2000, CRC(6518943a) SHA1(b5e78267d5a58c466c9ae20ba4f9c5e14e252287) ) /* banked at 0x8000 */
794
795 /* The BBX coprocessor is burried in an epoxy block. It contains:
796 ** - a surface-mounted Z80 (TMPZ84C00P)
797 ** - LS245 logic IC
798 ** - battery backed ram chip Fujitsu MB8464
799 **
800 ** The BBX coprocessor receives graphics and sound-related commands from
801 ** the main CPU via shared RAM. It directly manages an AY8910, is
802 ** responsible for populating spriteram, and forwards appropriate sound
803 ** commands to the sample-playing CPU.
804 */
805 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80: bbx module */
806 ROM_LOAD( "bbxj.bin", 0x0000, 0x2000, CRC(8def4aaf) SHA1(bfb9b2874294499c1026f2a4cd20f9cd0efd30f9) ) /* battery-backed RAM */
807 ROM_LOAD( "5.31", 0x2000, 0x2000, CRC(8ae37ce7) SHA1(6299b0cd4e7348d4599126d61192924f19ae5401) )
808 ROM_LOAD( "6.32", 0x4000, 0x4000, CRC(e835bb7f) SHA1(4ed8033994fe6ca268e20e30382dbe61eb8d2cf6) )
809 ROM_LOAD( "7.33", 0x8000, 0x2000, CRC(3745ed36) SHA1(29a462a7d6e994cd2a917ce0b79fe342cfcc2417) )
810
811 /* The Sound CPU is a dedicated Sample Player */
812 ROM_REGION( 0x1e000, REGION_CPU3, 0 ) /* Z80 (NEC D780C-1) */
813 ROM_LOAD( "cr11ic51.bin", 0x00000, 0x4000, CRC(2e2d6afe) SHA1(1414a06b6cf14dfd69ca6cf35e4eb7d75af3f219) ) /* 12.51*/
814 /* ROM_LOAD( "cr12ic43.bin", 0x04000, 0x4000, CRC(dd29a0c8) SHA1(8411c31fefdce8c9233fe531b5bf3b6c43c03cba) ) */ /* not present in this set*/
815 /* ROM_LOAD( "cr13ic44.bin", 0x08000, 0x4000, CRC(879d0de0) SHA1(b1422cf239381ac949867c42ca8101fa8dcac9d6) ) */ /* not present in this set*/
816 ROM_LOAD( "cr07ic47.bin", 0x10000, 0x4000, CRC(20540f7c) SHA1(85c0b913948a67a34b25f0974fdd22e1dbb63166) ) /* 8.47*/
817 ROM_LOAD( "9.48", 0x14000, 0x4000, CRC(8da23cad) SHA1(051459d7b5395336d698b03f1cc8566f33b62c8b) )
818 ROM_LOAD( "10.49", 0x18000, 0x4000, CRC(52b82fee) SHA1(99a2952af6493586745463c33b11ab69251af063) )
819 ROM_LOAD( "cr10ic50.bin", 0x1c000, 0x2000, CRC(873a5f2d) SHA1(32f806da319807bef68b5e810815ef2aba6ea0a7) ) /* 11.50*/
820
821 ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* 8x8 tiles */
822 ROM_LOAD( "21.21", 0x0000, 0x2000, CRC(ce20a1d4) SHA1(4d5708a1b8b3ac81afeebd82eb6a3d9763ef3d39) )
823 ROM_LOAD( "22.22", 0x2000, 0x2000, CRC(26fc88bf) SHA1(663c88510b4df8153b10d1b0cc20b332aab5ca2e) )
824
825 ROM_REGION( 0x18000, REGION_GFX2, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* 16x16 sprites */
826 ROM_LOAD( "15.114", 0x00000, 0x4000, CRC(ed07854e) SHA1(caebd227c458717a5fc58daa6e774b1a09e68d34) )
827 ROM_LOAD( "16.113", 0x04000, 0x4000, CRC(85cf1939) SHA1(8bf410a91aba40b0336e3c6c5b2c2b353aeea420) )
828 ROM_LOAD( "cr16i112.bin", 0x08000, 0x4000, CRC(cbed446c) SHA1(cc36ab32b42f6ec8ce574f040f7fb034b1351467) ) /* 17.112*/
829 ROM_LOAD( "cr17i111.bin", 0x0c000, 0x4000, CRC(b0a44330) SHA1(9d52856243e21ab906ee1701b6485411f2933707) ) /* 18.111*/
830 ROM_LOAD( "cr18ic99.bin", 0x10000, 0x4000, CRC(ff7efd7c) SHA1(95f83a9aa2f0845efe2c9c72d29e7a08c78d9b1f) ) /* 19.99*/
831 ROM_LOAD( "20.100", 0x14000, 0x4000, CRC(4bc77ca0) SHA1(22a057c3c29ff9feb0afab0cb76b37c4a1363cb1) )
832
833 ROM_REGION( 0xa80, REGION_PROMS, 0 )
834 ROM_LOAD( "r.36", 0x000, 0x100, CRC(65dec63d) SHA1(b481151687311f8d732f8c313f8af183a53dbc2f) ) /* 82S129 - red */
835 ROM_LOAD( "g.35", 0x100, 0x100, CRC(e79de8cf) SHA1(65cc626c91830eafbf5a7e4ce7571cbb0ada91c1) ) /* 82S129 - green */
836 ROM_LOAD( "b.27", 0x200, 0x100, CRC(d6ab3448) SHA1(efb879e7c5dd50ea70fb5ed5e4d3b87ab2c1b8b9) ) /* 82S129 - blue */
837
838 ROM_LOAD( "cr29ic28.bin", 0x300, 0x100, CRC(7ca273c1) SHA1(20d85547d96bea8b310c943c45e4978a7e5b5585) ) /* 82S129 - unknown */ /* m.28*/
839 ROM_LOAD( "cr32ic69.bin", 0x400, 0x200, CRC(410d6f86) SHA1(3cfaef3702dbda3e7c7eb84a93561e36778aec3e) ) /* 82S147 - sprite-related (zoom?) */ /* ic69*/
840 ROM_LOAD( "cr33-108.bin", 0x600, 0x200, CRC(d33c02ae) SHA1(1a2146ae404a5e8a701e1d547a8409a376d4bee4) ) /* 82S147 - sprite-related (zoom?) */ /* ic108*/
841
842 ROM_LOAD( "cr26ic12.bin", 0x800, 0x100, CRC(85b5e958) SHA1(f211b5122fccf84e4aa1556c0290b5cb83935386) ) /* 82S129 - tile pen priority? */ /* sc.12*/
843 ROM_LOAD( "cr27ic15.bin", 0x900, 0x100, CRC(f7a19fe2) SHA1(d88e0743aa858b132f636fcd5d493ccb1af82224) ) /* 82S129 - sprite pen transparency */ /* sp.15*/
844
845 ROM_LOAD( "cr25ic8.bin", 0xa00, 0x020, CRC(c85e09ad) SHA1(f42e3840ec0e4720067eda7c536b6dcc540e63ff) ) /* 82S123 */ /* a.8*/
846 ROM_LOAD( "cr22ic8.bin", 0xa20, 0x020, CRC(1a7e0b06) SHA1(648d58a4ad14f4b242e492cf302d6678d899cf4f) ) /* 82S123 - main CPU banking */ /* 1.8*/
847 ROM_LOAD( "cr23ic22.bin", 0xa40, 0x020, CRC(efb5f265) SHA1(3de15e03cb12956d34074abb48236537f2b47dba) ) /* 82S123 - coprocessor banking */ /* 2.22*/
848 ROM_LOAD( "cr24ic42.bin", 0xa60, 0x020, CRC(823878aa) SHA1(eb5026270890e5af9193e354b7e814f32238a9bf) ) /* 82S123 - sample player banking */ /* 3.42*/
849 ROM_END
850
851 ROM_START( dynamski )
852 ROM_REGION( 0x12000, REGION_CPU1, 0 ) /* Z80 code */
853 ROM_LOAD( "dynski.1", 0x00000, 0x1000, CRC(30191160) SHA1(5ffa3355f53e4be65bd96101088d2d7b66490141) ) /* code */
854 ROM_LOAD( "dynski.2", 0x01000, 0x1000, CRC(5e08a0b0) SHA1(89398752e8ea1ffd8ec8392f5c8e20f25cf8fdfb) )
855 ROM_LOAD( "dynski.3", 0x02000, 0x1000, CRC(29cfd740) SHA1(a5d6b7b59e631f387788f29e8f029eaf00d1ea3f) )
856 ROM_LOAD( "dynski.4", 0x03000, 0x1000, CRC(e1d47776) SHA1(d08985a5b523706bc2b3e090373a72b781116a80) )
857 ROM_LOAD( "dynski.5", 0x04000, 0x1000, CRC(e39aba1b) SHA1(133d6280abccdca248b553e80dedcc4682ae8d70) )
858 ROM_LOAD( "dynski.6", 0x05000, 0x1000, CRC(95780608) SHA1(16b28e014ec5602df48e382e2b63d14acb60b9ba) )
859 ROM_LOAD( "dynski.7", 0x06000, 0x1000, CRC(b88d328b) SHA1(5229fcb0ed1067770fcd47bec674a6fd7b999484) )
860 ROM_LOAD( "dynski.8", 0x07000, 0x1000, CRC(8db5e691) SHA1(ccacfb7cd30f03de95690bbd32ab46e39d084244) )
861
862 ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* 8x8 tiles */
863 ROM_LOAD( "dynski8.3e", 0x0000, 0x2000, CRC(32c354dc) SHA1(6f73c9fc3802ec5f349a6088d7eaee5876c901de) )
864 ROM_LOAD( "dynski9.2e", 0x2000, 0x2000, CRC(80a6290c) SHA1(3a1581451802bf2e822fba1084800e6de9bd0f7a) )
865
866 ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE|ROMREGION_INVERT ) /* 16x16 sprites */
867 ROM_LOAD( "dynski5.14b", 0x0000, 0x2000, CRC(aa4ac6e2) SHA1(b6f7cb7310be2a12ca17dfd0ee3526e0522eb85b) )
868 ROM_LOAD( "dynski6.15b", 0x2000, 0x2000, CRC(47e76886) SHA1(c42bd3d973cf17ec265852527085085bcc674b18) )
869 ROM_LOAD( "dynski7.14d", 0x4000, 0x2000, CRC(a153dfa9) SHA1(c81dbdce2e11e9d6d8465f400a048d7688745232) )
870
871 ROM_REGION( 0x240, REGION_PROMS, 0 )
872 ROM_LOAD( "dynskic.15g", 0x000, 0x020, CRC(9333a5e4) SHA1(11025f53c98c2ae21e9d4f95da86bba4703a52bc) ) /* palette */
873 ROM_LOAD( "dynskic.15f", 0x020, 0x020, CRC(3869514b) SHA1(1ef062284e52777ec6e269368a16b9b357a2647a) ) /* palette */
874 ROM_LOAD( "dynski.11e", 0x040, 0x100, CRC(e625aa09) SHA1(c10371f1adf7245815c0bdcb24458c7b04edd5b9) ) /* lookup table */
875 ROM_LOAD( "dynski.4g", 0x140, 0x100, CRC(761fe465) SHA1(87741a6e4d14440073aaed3a8a15bc5e30b8fcfc) ) /* lookup table */
876 ROM_END
877
878
879 GAMEX( 1984, dynamski, 0, dynamski, dynamski, 0, ROT90, "Taiyo", "Dynamic Ski", GAME_NO_COCKTAIL )
880 GAME ( 1984, chinhero, 0, chinhero, chinhero, chinhero, ROT90, "Taiyo", "Chinese Hero" )
881 GAME ( 1984, chinher2, chinhero, chinhero, chinhero, chinhero, ROT90, "Taiyo", "Chinese Hero (older)" )
882 GAMEX( 1985, shangkid, 0, shangkid, shangkid, shangkid, ROT0, "Taiyo (Data East license)", "Shanghai Kid", GAME_NO_COCKTAIL )
883 GAMEX( 1985, hiryuken, shangkid, shangkid, shangkid, shangkid, ROT0, "[Nihon Game] (Taito license)", "Hokuha Syourin Hiryu no Ken", GAME_NO_COCKTAIL )
884