~ubuntu-branches/ubuntu/raring/mame/raring-proposed

« back to all changes in this revision

Viewing changes to mess/src/mame/drivers/konamigq.c

  • Committer: Package Import Robot
  • Author(s): Jordi Mallach, Jordi Mallach, Emmanuel Kasper
  • Date: 2011-12-19 22:56:27 UTC
  • mfrom: (0.1.2)
  • Revision ID: package-import@ubuntu.com-20111219225627-ub5oga1oys4ogqzm
Tags: 0.144-1
[ Jordi Mallach ]
* Fix syntax errors in DEP5 copyright file (lintian).
* Use a versioned copyright Format specification field.
* Update Vcs-* URLs.
* Move transitional packages to the new metapackages section, and make
  them priority extra.
* Remove references to GNU/Linux and MESS sources from copyright.
* Add build variables for s390x.
* Use .xz tarballs as it cuts 4MB for the upstream sources.
* Add nplayers.ini as a patch. Update copyright file to add CC-BY-SA-3.0.

[ Emmanuel Kasper ]
* New upstream release. Closes: #651538.
* Add Free Desktop compliant png icons of various sizes taken from
  the hydroxygen iconset
* Mess is now built from a new source package, to avoid possible source
  incompatibilities between mame and the mess overlay.
* Mame-tools are not built from the mame source package anymore, but
  from the mess source package

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/***************************************************************************
2
 
 
3
 
  Konami GQ System - Arcade PSX Hardware
4
 
  ======================================
5
 
  Driver by R. Belmont & smf
6
 
 
7
 
  Crypt Killer
8
 
  Konami, 1995
9
 
 
10
 
  PCB Layout
11
 
  ----------
12
 
 
13
 
  GQ420  PWB354905B
14
 
  |----------------------------------------------------------|
15
 
  |CN14     420A01.2G  420A02.3M           CN6  CN7   CN8    |
16
 
  |056602    6264                                            |
17
 
  |LA4705    6264         058141  424800                     |
18
 
  |          68000                                           |
19
 
  |  18.432MHz      PAL   056800  424800                     |
20
 
  |  32MHz    48MHz PAL           424800                     |
21
 
  |  RESET_SW             TMS57002                           |
22
 
  |                               M514256                    |
23
 
  |                               M514256                    |
24
 
  |J  000180                                                 |
25
 
  |A                              MACH110                    |
26
 
  |M         53.693175MHz         (000619A)                  |
27
 
  |M         KM4216V256                                      |
28
 
  |A         KM4216V256     CXD8538Q        PAL (000613)     |
29
 
  |          KM4216V256                     PAL (000612)     |
30
 
  | TEST_SW  KM4216V256                     PAL (000618)     |
31
 
  |   CXD2923AR   67.7376MHz                                 |
32
 
  | DIPSW(8)                   93C46       NCR 53CF96-2      |
33
 
  | KM48V514  KM48V514         420B03.27P    HD_LED          |
34
 
  | KM48V514  KM48V514                                       |
35
 
  | CN3                CXD8530BQ      TOSHIBA MK1924FBV      |
36
 
  | KM48V514  KM48V514                (U420UAA04)            |
37
 
  | KM48V514  KM48V514                                       |
38
 
  |----------------------------------------------------------|
39
 
 
40
 
  Notes:
41
 
        CN6, CN7, CN8: For connection of guns.
42
 
        CN3 : For connection of extra controls/buttons.
43
 
        CN14: For connection of additional speaker for stereo output.
44
 
        68000 clock: 8.000MHz
45
 
        Vsync: 60Hz
46
 
*/
47
 
 
48
 
#include "emu.h"
49
 
#include "cpu/m68000/m68000.h"
50
 
#include "cpu/psx/psx.h"
51
 
#include "video/psx.h"
52
 
#include "includes/psx.h"
53
 
#include "includes/konamigx.h"
54
 
#include "machine/eeprom.h"
55
 
#include "machine/am53cf96.h"
56
 
#include "harddisk.h"
57
 
#include "sound/k054539.h"
58
 
 
59
 
class konamigq_state : public psx_state
60
 
{
61
 
public:
62
 
        konamigq_state(const machine_config &mconfig, device_type type, const char *tag)
63
 
                : psx_state(mconfig, type, tag) { }
64
 
 
65
 
        UINT8 m_sndto000[ 16 ];
66
 
        UINT8 m_sndtor3k[ 16 ];
67
 
        UINT8 *m_p_n_pcmram;
68
 
        UINT8 m_sector_buffer[ 512 ];
69
 
};
70
 
 
71
 
/* Sound */
72
 
 
73
 
static WRITE32_HANDLER( soundr3k_w )
74
 
{
75
 
        konamigq_state *state = space->machine().driver_data<konamigq_state>();
76
 
 
77
 
        if( ACCESSING_BITS_16_31 )
78
 
        {
79
 
                state->m_sndto000[ ( offset << 1 ) + 1 ] = data >> 16;
80
 
                if( offset == 3 )
81
 
                {
82
 
                        cputag_set_input_line(space->machine(), "soundcpu", 1, HOLD_LINE );
83
 
                }
84
 
        }
85
 
        if( ACCESSING_BITS_0_15 )
86
 
        {
87
 
                state->m_sndto000[ offset << 1 ] = data;
88
 
        }
89
 
}
90
 
 
91
 
static READ32_HANDLER( soundr3k_r )
92
 
{
93
 
        konamigq_state *state = space->machine().driver_data<konamigq_state>();
94
 
        UINT32 data;
95
 
 
96
 
        data = ( state->m_sndtor3k[ ( offset << 1 ) + 1 ] << 16 ) | state->m_sndtor3k[ offset << 1 ];
97
 
 
98
 
        /* hack to help the main program start up */
99
 
        if( offset == 1 )
100
 
        {
101
 
                data = 0;
102
 
        }
103
 
 
104
 
        return data;
105
 
}
106
 
 
107
 
/* UART */
108
 
 
109
 
static WRITE32_HANDLER( mb89371_w )
110
 
{
111
 
}
112
 
 
113
 
static READ32_HANDLER( mb89371_r )
114
 
{
115
 
        return 0xffffffff;
116
 
}
117
 
 
118
 
/* EEPROM */
119
 
 
120
 
static const UINT16 konamigq_def_eeprom[64] =
121
 
{
122
 
        0x292b, 0x5256, 0x2094, 0x4155, 0x0041, 0x1414, 0x0003, 0x0101,
123
 
        0x0103, 0x0000, 0x0707, 0x0001, 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa,
124
 
        0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa,
125
 
        0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa,
126
 
        0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa,
127
 
        0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa,
128
 
        0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa,
129
 
        0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa,
130
 
};
131
 
 
132
 
static WRITE32_HANDLER( eeprom_w )
133
 
{
134
 
        input_port_write(space->machine(), "EEPROMOUT", data & 0x07, 0xff);
135
 
        cputag_set_input_line(space->machine(), "soundcpu", INPUT_LINE_RESET, ( data & 0x40 ) ? CLEAR_LINE : ASSERT_LINE );
136
 
}
137
 
 
138
 
 
139
 
/* PCM RAM */
140
 
 
141
 
static WRITE32_HANDLER( pcmram_w )
142
 
{
143
 
        konamigq_state *state = space->machine().driver_data<konamigq_state>();
144
 
 
145
 
        if( ACCESSING_BITS_0_7 )
146
 
        {
147
 
                state->m_p_n_pcmram[ offset << 1 ] = data;
148
 
        }
149
 
        if( ACCESSING_BITS_16_23 )
150
 
        {
151
 
                state->m_p_n_pcmram[ ( offset << 1 ) + 1 ] = data >> 16;
152
 
        }
153
 
}
154
 
 
155
 
static READ32_HANDLER( pcmram_r )
156
 
{
157
 
        konamigq_state *state = space->machine().driver_data<konamigq_state>();
158
 
 
159
 
        return ( state->m_p_n_pcmram[ ( offset << 1 ) + 1 ] << 16 ) | state->m_p_n_pcmram[ offset << 1 ];
160
 
}
161
 
 
162
 
/* Video */
163
 
 
164
 
static ADDRESS_MAP_START( konamigq_map, AS_PROGRAM, 32 )
165
 
        AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_SHARE("share1") /* ram */
166
 
        AM_RANGE(0x1f000000, 0x1f00001f) AM_READWRITE(am53cf96_r, am53cf96_w)
167
 
        AM_RANGE(0x1f100000, 0x1f10000f) AM_WRITE(soundr3k_w)
168
 
        AM_RANGE(0x1f100010, 0x1f10001f) AM_READ(soundr3k_r)
169
 
        AM_RANGE(0x1f180000, 0x1f180003) AM_WRITE(eeprom_w)
170
 
        AM_RANGE(0x1f198000, 0x1f198003) AM_WRITENOP                    /* cabinet lamps? */
171
 
        AM_RANGE(0x1f1a0000, 0x1f1a0003) AM_WRITENOP                    /* indicates gun trigger */
172
 
        AM_RANGE(0x1f200000, 0x1f200003) AM_READ_PORT("GUNX1")
173
 
        AM_RANGE(0x1f208000, 0x1f208003) AM_READ_PORT("GUNY1")
174
 
        AM_RANGE(0x1f210000, 0x1f210003) AM_READ_PORT("GUNX2")
175
 
        AM_RANGE(0x1f218000, 0x1f218003) AM_READ_PORT("GUNY2")
176
 
        AM_RANGE(0x1f220000, 0x1f220003) AM_READ_PORT("GUNX3")
177
 
        AM_RANGE(0x1f228000, 0x1f228003) AM_READ_PORT("GUNY3")
178
 
        AM_RANGE(0x1f230000, 0x1f230003) AM_READ_PORT("P1_P2")
179
 
        AM_RANGE(0x1f230004, 0x1f230007) AM_READ_PORT("P3_SERVICE")
180
 
        AM_RANGE(0x1f238000, 0x1f238003) AM_READ_PORT("DSW")
181
 
        AM_RANGE(0x1f300000, 0x1f5fffff) AM_READWRITE(pcmram_r, pcmram_w)
182
 
        AM_RANGE(0x1f680000, 0x1f68001f) AM_READWRITE(mb89371_r, mb89371_w)
183
 
        AM_RANGE(0x1f780000, 0x1f780003) AM_WRITENOP /* watchdog? */
184
 
        AM_RANGE(0x1fc00000, 0x1fc7ffff) AM_ROM AM_SHARE("share2") AM_REGION("user1", 0) /* bios */
185
 
        AM_RANGE(0x80000000, 0x803fffff) AM_RAM AM_SHARE("share1") /* ram mirror */
186
 
        AM_RANGE(0x9fc00000, 0x9fc7ffff) AM_ROM AM_SHARE("share2") /* bios mirror */
187
 
        AM_RANGE(0xa0000000, 0xa03fffff) AM_RAM AM_SHARE("share1") /* ram mirror */
188
 
        AM_RANGE(0xbfc00000, 0xbfc7ffff) AM_ROM AM_SHARE("share2") /* bios mirror */
189
 
        AM_RANGE(0xfffe0130, 0xfffe0133) AM_WRITENOP
190
 
ADDRESS_MAP_END
191
 
 
192
 
/* SOUND CPU */
193
 
 
194
 
static READ16_HANDLER( dual539_r )
195
 
{
196
 
        UINT16 data;
197
 
 
198
 
        data = 0;
199
 
        if( ACCESSING_BITS_0_7 )
200
 
        {
201
 
                data |= k054539_r( space->machine().device("konami2"), offset );
202
 
        }
203
 
        if( ACCESSING_BITS_8_15 )
204
 
        {
205
 
                data |= k054539_r( space->machine().device("konami1"), offset ) << 8;
206
 
        }
207
 
        return data;
208
 
}
209
 
 
210
 
static WRITE16_HANDLER( dual539_w )
211
 
{
212
 
        if( ACCESSING_BITS_0_7 )
213
 
        {
214
 
                k054539_w( space->machine().device("konami2"), offset, data );
215
 
        }
216
 
        if( ACCESSING_BITS_8_15 )
217
 
        {
218
 
                k054539_w( space->machine().device("konami1"), offset, data >> 8 );
219
 
        }
220
 
}
221
 
 
222
 
static READ16_HANDLER( sndcomm68k_r )
223
 
{
224
 
        konamigq_state *state = space->machine().driver_data<konamigq_state>();
225
 
 
226
 
        return state->m_sndto000[ offset ];
227
 
}
228
 
 
229
 
static WRITE16_HANDLER( sndcomm68k_w )
230
 
{
231
 
        konamigq_state *state = space->machine().driver_data<konamigq_state>();
232
 
 
233
 
        state->m_sndtor3k[ offset ] = data;
234
 
}
235
 
 
236
 
static READ16_HANDLER(tms57002_data_word_r)
237
 
{
238
 
        return 0;
239
 
}
240
 
 
241
 
static WRITE16_HANDLER(tms57002_data_word_w)
242
 
{
243
 
}
244
 
 
245
 
static READ16_HANDLER(tms57002_status_word_r)
246
 
{
247
 
        return 0;
248
 
}
249
 
 
250
 
static WRITE16_HANDLER(tms57002_control_word_w)
251
 
{
252
 
}
253
 
 
254
 
/* 68000 memory handling */
255
 
static ADDRESS_MAP_START( konamigq_sound_map, AS_PROGRAM, 16 )
256
 
        AM_RANGE(0x000000, 0x07ffff) AM_ROM
257
 
        AM_RANGE(0x100000, 0x10ffff) AM_RAM
258
 
        AM_RANGE(0x200000, 0x2004ff) AM_READWRITE(dual539_r,dual539_w)
259
 
        AM_RANGE(0x300000, 0x300001) AM_READWRITE(tms57002_data_word_r,tms57002_data_word_w)
260
 
        AM_RANGE(0x400000, 0x40000f) AM_WRITE(sndcomm68k_w)
261
 
        AM_RANGE(0x400010, 0x40001f) AM_READ(sndcomm68k_r)
262
 
        AM_RANGE(0x500000, 0x500001) AM_READWRITE(tms57002_status_word_r,tms57002_control_word_w)
263
 
        AM_RANGE(0x580000, 0x580001) AM_WRITENOP /* ?? */
264
 
ADDRESS_MAP_END
265
 
 
266
 
 
267
 
static const k054539_interface k054539_config =
268
 
{
269
 
        "shared"
270
 
};
271
 
 
272
 
/* SCSI */
273
 
 
274
 
static void scsi_dma_read( konamigq_state *state, UINT32 n_address, INT32 n_size )
275
 
{
276
 
        UINT32 *p_n_psxram = state->m_p_n_psxram;
277
 
        UINT8 *sector_buffer = state->m_sector_buffer;
278
 
        int i;
279
 
        int n_this;
280
 
 
281
 
        while( n_size > 0 )
282
 
        {
283
 
                if( n_size > sizeof( state->m_sector_buffer ) / 4 )
284
 
                {
285
 
                        n_this = sizeof( state->m_sector_buffer ) / 4;
286
 
                }
287
 
                else
288
 
                {
289
 
                        n_this = n_size;
290
 
                }
291
 
                am53cf96_read_data( n_this * 4, sector_buffer );
292
 
                n_size -= n_this;
293
 
 
294
 
                i = 0;
295
 
                while( n_this > 0 )
296
 
                {
297
 
                        p_n_psxram[ n_address / 4 ] =
298
 
                                ( sector_buffer[ i + 0 ] << 0 ) |
299
 
                                ( sector_buffer[ i + 1 ] << 8 ) |
300
 
                                ( sector_buffer[ i + 2 ] << 16 ) |
301
 
                                ( sector_buffer[ i + 3 ] << 24 );
302
 
                        n_address += 4;
303
 
                        i += 4;
304
 
                        n_this--;
305
 
                }
306
 
        }
307
 
}
308
 
 
309
 
static void scsi_dma_write( konamigq_state *state, UINT32 n_address, INT32 n_size )
310
 
{
311
 
}
312
 
 
313
 
static void scsi_irq(running_machine &machine)
314
 
{
315
 
        psx_irq_set(machine, 0x400);
316
 
}
317
 
 
318
 
static const SCSIConfigTable dev_table =
319
 
{
320
 
        1, /* 1 SCSI device */
321
 
        {
322
 
                { SCSI_ID_0, "disk", SCSI_DEVICE_HARDDISK } /* SCSI ID 0, using CHD 0, and it's a HDD */
323
 
        }
324
 
};
325
 
 
326
 
static const struct AM53CF96interface scsi_intf =
327
 
{
328
 
        &dev_table,             /* SCSI device table */
329
 
        &scsi_irq,              /* command completion IRQ */
330
 
};
331
 
 
332
 
static DRIVER_INIT( konamigq )
333
 
{
334
 
        konamigq_state *state = machine.driver_data<konamigq_state>();
335
 
 
336
 
        psx_driver_init(machine);
337
 
 
338
 
        state->m_p_n_pcmram = machine.region( "shared" )->base() + 0x80000;
339
 
}
340
 
 
341
 
static void konamigq_exit(running_machine &machine)
342
 
{
343
 
        am53cf96_exit(&scsi_intf);
344
 
}
345
 
 
346
 
static MACHINE_START( konamigq )
347
 
{
348
 
        konamigq_state *state = machine.driver_data<konamigq_state>();
349
 
 
350
 
        /* init the scsi controller and hook up it's DMA */
351
 
        am53cf96_init(machine, &scsi_intf);
352
 
        machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(konamigq_exit), &machine));
353
 
 
354
 
        state->save_pointer(NAME(state->m_p_n_pcmram), 0x380000);
355
 
        state->save_item(NAME(state->m_sndto000));
356
 
        state->save_item(NAME(state->m_sndtor3k));
357
 
        state->save_item(NAME(state->m_sector_buffer));
358
 
}
359
 
 
360
 
static MACHINE_RESET( konamigq )
361
 
{
362
 
}
363
 
 
364
 
static MACHINE_CONFIG_START( konamigq, konamigq_state )
365
 
        /* basic machine hardware */
366
 
        MCFG_CPU_ADD( "maincpu", CXD8530BQ, XTAL_67_7376MHz )
367
 
        MCFG_CPU_PROGRAM_MAP( konamigq_map )
368
 
        MCFG_CPU_VBLANK_INT("screen", psx_vblank)
369
 
 
370
 
        MCFG_PSX_DMA_CHANNEL_READ( "maincpu", 5, psx_dma_read_delegate( FUNC( scsi_dma_read ), (konamigq_state *) owner ) )
371
 
        MCFG_PSX_DMA_CHANNEL_WRITE( "maincpu", 5, psx_dma_write_delegate( FUNC( scsi_dma_write ), (konamigq_state *) owner ) )
372
 
 
373
 
        MCFG_CPU_ADD( "soundcpu", M68000, 8000000 )
374
 
        MCFG_CPU_PROGRAM_MAP( konamigq_sound_map)
375
 
        MCFG_CPU_PERIODIC_INT( irq2_line_hold, 480 )
376
 
 
377
 
        MCFG_MACHINE_START( konamigq )
378
 
        MCFG_MACHINE_RESET( konamigq )
379
 
        MCFG_EEPROM_93C46_ADD("eeprom")
380
 
        MCFG_EEPROM_DATA(konamigq_def_eeprom, 128)
381
 
 
382
 
        /* video hardware */
383
 
        MCFG_SCREEN_ADD("screen", RASTER)
384
 
        MCFG_SCREEN_REFRESH_RATE( 60 )
385
 
        MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC( 0 ))
386
 
        MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
387
 
        MCFG_SCREEN_SIZE( 1024, 1024 )
388
 
        MCFG_SCREEN_VISIBLE_AREA( 0, 639, 0, 479 )
389
 
        MCFG_SCREEN_UPDATE( psx )
390
 
 
391
 
        MCFG_PALETTE_LENGTH( 65536 )
392
 
 
393
 
        MCFG_PALETTE_INIT( psx )
394
 
        MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8538Q, 0 )
395
 
 
396
 
        /* sound hardware */
397
 
        MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
398
 
 
399
 
        MCFG_SOUND_ADD("konami1", K054539, 48000)
400
 
        MCFG_SOUND_CONFIG(k054539_config)
401
 
        MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
402
 
        MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
403
 
 
404
 
        MCFG_SOUND_ADD("konami2", K054539, 48000)
405
 
        MCFG_SOUND_CONFIG(k054539_config)
406
 
        MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
407
 
        MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
408
 
MACHINE_CONFIG_END
409
 
 
410
 
static INPUT_PORTS_START( konamigq )
411
 
        PORT_START("GUNX1")
412
 
        PORT_BIT( 0x01ff, 0x011d, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX( 0x007d, 0x01bc ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
413
 
 
414
 
        PORT_START("GUNY1")
415
 
        PORT_BIT( 0x00ff, 0x0078, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX( 0x0000, 0x00ef ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
416
 
 
417
 
        PORT_START("GUNX2")
418
 
        PORT_BIT( 0x01ff, 0x011d, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX( 0x007d, 0x01bc ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(2)
419
 
 
420
 
        PORT_START("GUNY2")
421
 
        PORT_BIT( 0x00ff, 0x0078, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX( 0x0000, 0x00ef ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(2)
422
 
 
423
 
        PORT_START("GUNX3")
424
 
        PORT_BIT( 0x01ff, 0x011d, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX( 0x007d, 0x01bc ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(3)
425
 
 
426
 
        PORT_START("GUNY3")
427
 
        PORT_BIT( 0x00ff, 0x0078, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX( 0x0000, 0x00ef ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(3)
428
 
 
429
 
        PORT_START("P1_P2")
430
 
        PORT_BIT( 0x000001, IP_ACTIVE_LOW, IPT_COIN1 )
431
 
        PORT_BIT( 0x000002, IP_ACTIVE_LOW, IPT_START1 )
432
 
        PORT_BIT( 0x000004, IP_ACTIVE_LOW, IPT_UNKNOWN )
433
 
        PORT_BIT( 0x000008, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* trigger */
434
 
        PORT_BIT( 0x000010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* reload */
435
 
        PORT_BIT( 0x000020, IP_ACTIVE_LOW, IPT_SERVICE1 )
436
 
        PORT_BIT( 0x000040, IP_ACTIVE_LOW, IPT_UNKNOWN )
437
 
        PORT_BIT( 0x000080, IP_ACTIVE_LOW, IPT_UNKNOWN )
438
 
        PORT_BIT( 0x010000, IP_ACTIVE_LOW, IPT_COIN2 )
439
 
        PORT_BIT( 0x020000, IP_ACTIVE_LOW, IPT_START2 )
440
 
        PORT_BIT( 0x040000, IP_ACTIVE_LOW, IPT_UNKNOWN )
441
 
        PORT_BIT( 0x080000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* trigger */
442
 
        PORT_BIT( 0x100000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* reload */
443
 
        PORT_BIT( 0x200000, IP_ACTIVE_LOW, IPT_SERVICE2 )
444
 
        PORT_BIT( 0x400000, IP_ACTIVE_LOW, IPT_UNKNOWN )
445
 
        PORT_BIT( 0x800000, IP_ACTIVE_LOW, IPT_UNKNOWN )
446
 
 
447
 
        PORT_START("P3_SERVICE")
448
 
        PORT_BIT( 0x000001, IP_ACTIVE_LOW, IPT_COIN3 )
449
 
        PORT_BIT( 0x000002, IP_ACTIVE_LOW, IPT_START3 )
450
 
        PORT_BIT( 0x000004, IP_ACTIVE_LOW, IPT_UNKNOWN )
451
 
        PORT_BIT( 0x000008, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) /* trigger */
452
 
        PORT_BIT( 0x000010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) /* reload */
453
 
        PORT_BIT( 0x000020, IP_ACTIVE_LOW, IPT_SERVICE3 )
454
 
        PORT_BIT( 0x000040, IP_ACTIVE_LOW, IPT_UNKNOWN )
455
 
        PORT_BIT( 0x000080, IP_ACTIVE_LOW, IPT_UNKNOWN )
456
 
        PORT_BIT( 0x010000, IP_ACTIVE_LOW, IPT_UNKNOWN )
457
 
        PORT_BIT( 0x020000, IP_ACTIVE_LOW, IPT_UNKNOWN )
458
 
        PORT_BIT( 0x040000, IP_ACTIVE_LOW, IPT_UNKNOWN )
459
 
        PORT_BIT( 0x080000, IP_ACTIVE_LOW, IPT_UNKNOWN )
460
 
        PORT_BIT( 0x100000, IP_ACTIVE_LOW, IPT_UNKNOWN )
461
 
        PORT_SERVICE_NO_TOGGLE( 0x200000, IP_ACTIVE_LOW )
462
 
        PORT_BIT( 0x400000, IP_ACTIVE_LOW, IPT_UNKNOWN )
463
 
        PORT_BIT( 0x800000, IP_ACTIVE_LOW, IPT_UNKNOWN )
464
 
 
465
 
        PORT_START("DSW")
466
 
        PORT_DIPNAME( 0x00000001, 0x01, DEF_STR( Stereo ) )
467
 
        PORT_DIPSETTING(    0x01, DEF_STR( Stereo ) )
468
 
        PORT_DIPSETTING(    0x00, DEF_STR( Mono ) )
469
 
        PORT_DIPNAME( 0x00000002, 0x00, "Stage Set" )
470
 
        PORT_DIPSETTING(    0x02, "Endless" )
471
 
        PORT_DIPSETTING(    0x00, "6st End" )
472
 
        PORT_DIPNAME( 0x00000004, 0x04, "Mirror" )
473
 
        PORT_DIPSETTING(    0x04, DEF_STR( No ) )
474
 
        PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
475
 
        PORT_DIPNAME( 0x00000008, 0x08, "Woofer" )
476
 
        PORT_DIPSETTING(    0x08, DEF_STR( No ) )
477
 
        PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
478
 
        PORT_DIPNAME( 0x00000010, 0x10, "Number of Players" )
479
 
        PORT_DIPSETTING(    0x00, "2" )
480
 
        PORT_DIPSETTING(    0x10, "3" )
481
 
        PORT_DIPNAME( 0x00000020, 0x20, "Coin Mechanism (2p only)" )
482
 
        PORT_DIPSETTING(    0x20, "Common" )
483
 
        PORT_DIPSETTING(    0x00, "Independent" )
484
 
        PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN )
485
 
        PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN )
486
 
        PORT_BIT( 0x00010000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_device, read_bit)
487
 
 
488
 
        PORT_START( "EEPROMOUT" )
489
 
        PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit)
490
 
        PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line)
491
 
        PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line)
492
 
INPUT_PORTS_END
493
 
 
494
 
ROM_START( cryptklr )
495
 
        ROM_REGION( 0x80000, "soundcpu", 0 ) /* 68000 sound program */
496
 
        ROM_LOAD16_WORD_SWAP( "420a01.2g", 0x000000, 0x080000, CRC(84fc2613) SHA1(e06f4284614d33c76529eb43b168d095200a9eac) )
497
 
 
498
 
        ROM_REGION( 0x400000, "shared", 0 )
499
 
        ROM_LOAD( "420a02.3m",    0x000000, 0x080000, CRC(2169c3c4) SHA1(6d525f10385791e19eb1897d18f0bab319640162) )
500
 
 
501
 
        ROM_REGION32_LE( 0x080000, "user1", 0 ) /* bios */
502
 
        ROM_LOAD( "420b03.27p",   0x0000000, 0x080000, CRC(aab391b1) SHA1(bf9dc7c0c8168c22a4be266fe6a66d3738df916b) )
503
 
 
504
 
        DISK_REGION( "disk" )
505
 
        DISK_IMAGE( "420uaa04", 0, SHA1(67cb1418fc0de2a89fc61847dc9efb9f1bebb347) )
506
 
ROM_END
507
 
 
508
 
GAME( 1995, cryptklr, 0, konamigq, konamigq, konamigq, ROT0, "Konami", "Crypt Killer (GQ420 UAA)", GAME_IMPERFECT_GRAPHICS )