~ubuntu-branches/ubuntu/karmic/xmame/karmic

« back to all changes in this revision

Viewing changes to src/drivers/crimfght.c

  • Committer: Bazaar Package Importer
  • Author(s): Bruno Barrera C.
  • Date: 2007-02-16 10:06:54 UTC
  • mfrom: (2.1.5 edgy)
  • Revision ID: james.westby@ubuntu.com-20070216100654-iztas2cl47k5j039
Tags: 0.106-2
* Added Italian debconf templates translation. (closes: #382672)
* Added German debconf templates translation. (closes: #396610)
* Added Japanese debconf templates translation. (closes: #400011)
* Added Portuguese debconf templates translation. (closes: #409960)

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
Crime Fighters (Konami GX821) (c) 1989 Konami
4
4
 
5
5
Preliminary driver by:
6
 
        Manuel Abadia <manu@teleline.es>
 
6
    Manuel Abadia <manu@teleline.es>
7
7
 
8
8
***************************************************************************/
9
9
 
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"
14
15
 
15
16
 
16
17
/* prototypes */
17
 
static MACHINE_INIT( crimfght );
 
18
static MACHINE_RESET( crimfght );
18
19
static void crimfght_banking( int lines );
19
20
 
20
21
VIDEO_START( crimfght );
46
47
 
47
48
/********************************************/
48
49
 
49
 
static READ8_HANDLER( speedup_r )
50
 
{
51
 
        unsigned char *RAM = memory_region(REGION_CPU1);
52
 
 
53
 
        int data = ( RAM[0x0414] << 8 ) | RAM[0x0415];
54
 
 
55
 
        if ( data < memory_region_length(REGION_CPU1) )
56
 
        {
57
 
                data = ( RAM[data] << 8 ) | RAM[data + 1];
58
 
 
59
 
                if ( data == 0xffff )
60
 
                        cpu_spinuntil_int();
61
 
        }
62
 
 
63
 
        return RAM[0x0414];
64
 
}
65
 
 
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 */
109
92
 
110
93
/***************************************************************************
111
94
 
112
 
        Input Ports
 
95
    Input Ports
113
96
 
114
97
***************************************************************************/
115
98
 
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" ) */
152
135
 
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" ) */
278
261
 
279
262
        PORT_START      /* DSW #2 */
280
263
        PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
354
337
 
355
338
/***************************************************************************
356
339
 
357
 
        Machine Driver
 
340
    Machine Driver
358
341
 
359
342
***************************************************************************/
360
343
 
361
344
static struct YM2151interface ym2151_interface =
362
345
{
363
 
        1,                      /* 1 chip */
364
 
        4000000,        /* adjusted to be in sync with Z80 CPU */
365
 
        { YM3012_VOL(100,MIXER_PAN_LEFT,100,MIXER_PAN_RIGHT) }, /* music volume */
366
 
        { 0 },
367
 
        { crimfght_snd_bankswitch_w }
 
346
        0,
 
347
        crimfght_snd_bankswitch_w
368
348
};
369
349
 
370
350
static void volume_callback(int v)
375
355
 
376
356
static struct K007232_interface k007232_interface =
377
357
{
378
 
        1,              /* number of chips */
379
 
        3579545,        /* clock */
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 */
383
360
};
384
361
 
385
362
 
391
368
        MDRV_CPU_PROGRAM_MAP(crimfght_readmem,crimfght_writemem)
392
369
        MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
393
370
 
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 */
 
372
        /* audio CPU */
396
373
        MDRV_CPU_PROGRAM_MAP(crimfght_readmem_sound,crimfght_writemem_sound)
397
374
 
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)
400
377
 
401
 
        MDRV_MACHINE_INIT(crimfght)
 
378
        MDRV_MACHINE_RESET(crimfght)
402
379
 
403
380
        /* video hardware */
404
381
        MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS)
410
387
        MDRV_VIDEO_UPDATE(crimfght)
411
388
 
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")
 
391
 
 
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)
 
396
 
 
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
417
404
 
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 */
508
495
        }
509
496
        else{
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 */
512
499
        }
513
500
 
514
501
        /* bit 6 = enable char ROM reading through the video RAM */
515
502
        K052109_set_RMRD_line((lines & 0x40) ? ASSERT_LINE : CLEAR_LINE);
516
503
 
517
504
        offs = 0x10000 + ( ( lines & 0x0f ) * 0x2000 );
518
 
        cpu_setbank( 2, &RAM[offs] );
 
505
        memory_set_bankptr( 2, &RAM[offs] );
519
506
}
520
507
 
521
 
static MACHINE_INIT( crimfght )
 
508
static MACHINE_RESET( crimfght )
522
509
{
523
510
        unsigned char *RAM = memory_region(REGION_CPU1);
524
511
 
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);
526
513
 
527
514
        /* init the default bank */
528
 
        cpu_setbank( 2, &RAM[0x10000] );
 
515
        memory_set_bankptr( 2, &RAM[0x10000] );
529
516
}
530
517
 
531
518
static DRIVER_INIT( crimfght )
536
523
 
537
524
 
538
525
 
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 )