3
3
Crime Fighters (Konami GX821) (c) 1989 Konami
5
5
Preliminary driver by:
6
Manuel Abadia <manu@teleline.es>
6
Manuel Abadia <manu@teleline.es>
8
8
***************************************************************************/
10
10
#include "driver.h"
11
#include "vidhrdw/generic.h"
12
11
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
13
12
#include "vidhrdw/konamiic.h"
13
#include "sound/2151intf.h"
14
#include "sound/k007232.h"
17
static MACHINE_INIT( crimfght );
18
static MACHINE_RESET( crimfght );
18
19
static void crimfght_banking( int lines );
20
21
VIDEO_START( crimfght );
47
48
/********************************************/
49
static READ8_HANDLER( speedup_r )
51
unsigned char *RAM = memory_region(REGION_CPU1);
53
int data = ( RAM[0x0414] << 8 ) | RAM[0x0415];
55
if ( data < memory_region_length(REGION_CPU1) )
57
data = ( RAM[data] << 8 ) | RAM[data + 1];
66
50
static ADDRESS_MAP_START( crimfght_readmem, ADDRESS_SPACE_PROGRAM, 8 )
67
51
AM_RANGE(0x0000, 0x03ff) AM_READ(MRA8_BANK1) /* banked RAM */
68
AM_RANGE(0x0414, 0x0414) AM_READ(speedup_r)
69
52
AM_RANGE(0x0400, 0x1fff) AM_READ(MRA8_RAM) /* RAM */
70
53
AM_RANGE(0x3f80, 0x3f80) AM_READ(input_port_7_r) /* Coinsw */
71
54
AM_RANGE(0x3f81, 0x3f81) AM_READ(input_port_3_r) /* 1P controls */
132
115
PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
133
116
PORT_DIPSETTING( 0x09, DEF_STR( 1C_7C ) )
134
117
PORT_DIPSETTING( 0x00, "1 Coin/99 Credits" )
135
/* PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
136
PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) )
137
PORT_DIPSETTING( 0x50, DEF_STR( 3C_1C ) )
138
PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
139
PORT_DIPSETTING( 0x40, DEF_STR( 3C_2C ) )
140
PORT_DIPSETTING( 0x10, DEF_STR( 4C_3C ) )
141
PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
142
PORT_DIPSETTING( 0x30, DEF_STR( 3C_4C ) )
143
PORT_DIPSETTING( 0x70, DEF_STR( 2C_3C ) )
144
PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
145
PORT_DIPSETTING( 0x60, DEF_STR( 2C_5C ) )
146
PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
147
PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
148
PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
149
PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
150
PORT_DIPSETTING( 0x90, DEF_STR( 1C_7C ) )
151
PORT_DIPSETTING( 0x00, "Invalid" ) */
118
/* PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
119
PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) )
120
PORT_DIPSETTING( 0x50, DEF_STR( 3C_1C ) )
121
PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
122
PORT_DIPSETTING( 0x40, DEF_STR( 3C_2C ) )
123
PORT_DIPSETTING( 0x10, DEF_STR( 4C_3C ) )
124
PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
125
PORT_DIPSETTING( 0x30, DEF_STR( 3C_4C ) )
126
PORT_DIPSETTING( 0x70, DEF_STR( 2C_3C ) )
127
PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
128
PORT_DIPSETTING( 0x60, DEF_STR( 2C_5C ) )
129
PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
130
PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
131
PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
132
PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
133
PORT_DIPSETTING( 0x90, DEF_STR( 1C_7C ) )
134
PORT_DIPSETTING( 0x00, "Invalid" ) */
153
136
PORT_START /* DSW #2 */
154
137
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
274
257
PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
275
258
PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
276
259
PORT_DIPSETTING( 0x90, DEF_STR( 1C_7C ) )
277
/* PORT_DIPSETTING( 0x00, "Invalid" ) */
260
/* PORT_DIPSETTING( 0x00, "Invalid" ) */
279
262
PORT_START /* DSW #2 */
280
263
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
355
338
/***************************************************************************
359
342
***************************************************************************/
361
344
static struct YM2151interface ym2151_interface =
364
4000000, /* adjusted to be in sync with Z80 CPU */
365
{ YM3012_VOL(100,MIXER_PAN_LEFT,100,MIXER_PAN_RIGHT) }, /* music volume */
367
{ crimfght_snd_bankswitch_w }
347
crimfght_snd_bankswitch_w
370
350
static void volume_callback(int v)
376
356
static struct K007232_interface k007232_interface =
378
1, /* number of chips */
380
{ REGION_SOUND1 }, /* memory regions */
381
{ K007232_VOL(20,MIXER_PAN_CENTER,20,MIXER_PAN_CENTER) }, /* volume */
382
{ volume_callback } /* external port callback */
358
REGION_SOUND1, /* memory regions */
359
volume_callback /* external port callback */
391
368
MDRV_CPU_PROGRAM_MAP(crimfght_readmem,crimfght_writemem)
392
369
MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
394
MDRV_CPU_ADD(Z80, 4000000) /* compared with a real PCB, guessed but accurate */
395
MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
371
MDRV_CPU_ADD(Z80, 3579545) /* verified with PCB */
396
373
MDRV_CPU_PROGRAM_MAP(crimfght_readmem_sound,crimfght_writemem_sound)
398
MDRV_FRAMES_PER_SECOND(60)
375
MDRV_FRAMES_PER_SECOND(54) /* adjusted - compared with PCB speed */
399
376
MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
401
MDRV_MACHINE_INIT(crimfght)
378
MDRV_MACHINE_RESET(crimfght)
403
380
/* video hardware */
404
381
MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS)
410
387
MDRV_VIDEO_UPDATE(crimfght)
412
389
/* sound hardware */
413
MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
414
MDRV_SOUND_ADD(YM2151, ym2151_interface)
415
MDRV_SOUND_ADD(K007232, k007232_interface)
390
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
392
MDRV_SOUND_ADD(YM2151, 3579545) /* verified with PCB */
393
MDRV_SOUND_CONFIG(ym2151_interface)
394
MDRV_SOUND_ROUTE(0, "left", 1.0)
395
MDRV_SOUND_ROUTE(1, "right", 1.0)
397
MDRV_SOUND_ADD(K007232, 3579545)
398
MDRV_SOUND_CONFIG(k007232_interface)
399
MDRV_SOUND_ROUTE(0, "left", 0.20)
400
MDRV_SOUND_ROUTE(0, "right", 0.20)
401
MDRV_SOUND_ROUTE(1, "left", 0.20)
402
MDRV_SOUND_ROUTE(1, "right", 0.20)
416
403
MACHINE_DRIVER_END
418
405
/***************************************************************************
504
491
/* bit 5 = select work RAM or palette */
505
492
if (lines & 0x20){
506
493
memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x03ff, 0, 0, paletteram_r); /* palette */
507
memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x03ff, 0, 0, paletteram_xBBBBBGGGGGRRRRR_swap_w); /* palette */
494
memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x03ff, 0, 0, paletteram_xBBBBBGGGGGRRRRR_be_w); /* palette */
510
memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x03ff, 0, 0, MRA8_RAM); /* RAM */
511
memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x03ff, 0, 0, MWA8_RAM); /* RAM */
497
memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x03ff, 0, 0, MRA8_BANK1); /* RAM */
498
memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x03ff, 0, 0, MWA8_BANK1); /* RAM */
514
501
/* bit 6 = enable char ROM reading through the video RAM */
515
502
K052109_set_RMRD_line((lines & 0x40) ? ASSERT_LINE : CLEAR_LINE);
517
504
offs = 0x10000 + ( ( lines & 0x0f ) * 0x2000 );
518
cpu_setbank( 2, &RAM[offs] );
505
memory_set_bankptr( 2, &RAM[offs] );
521
static MACHINE_INIT( crimfght )
508
static MACHINE_RESET( crimfght )
523
510
unsigned char *RAM = memory_region(REGION_CPU1);
525
cpunum_set_info_ptr(0, CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (void *)crimfght_banking);
512
cpunum_set_info_fct(0, CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)crimfght_banking);
527
514
/* init the default bank */
528
cpu_setbank( 2, &RAM[0x10000] );
515
memory_set_bankptr( 2, &RAM[0x10000] );
531
518
static DRIVER_INIT( crimfght )
539
GAME( 1989, crimfght, 0, crimfght, crimfght, crimfght, ROT0, "Konami", "Crime Fighters (US 4 players)" )
540
GAME( 1989, crimfgt2, crimfght, crimfght, crimfgtj, crimfght, ROT0, "Konami", "Crime Fighters (World 2 Players)" )
541
GAME( 1989, crimfgtj, crimfght, crimfght, crimfgtj, crimfght, ROT0, "Konami", "Crime Fighters (Japan 2 Players)" )
526
GAME( 1989, crimfght, 0, crimfght, crimfght, crimfght, ROT0, "Konami", "Crime Fighters (US 4 players)", 0 )
527
GAME( 1989, crimfgt2, crimfght, crimfght, crimfgtj, crimfght, ROT0, "Konami", "Crime Fighters (World 2 Players)", 0 )
528
GAME( 1989, crimfgtj, crimfght, crimfght, crimfgtj, crimfght, ROT0, "Konami", "Crime Fighters (Japan 2 Players)", 0 )