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

« back to all changes in this revision

Viewing changes to mess/src/mame/drivers/cidelsa.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
 
#include "includes/cidelsa.h"
2
 
 
3
 
/* CDP1802 Interface */
4
 
 
5
 
READ_LINE_MEMBER( cidelsa_state::clear_r )
6
 
{
7
 
        return m_reset;
8
 
}
9
 
 
10
 
WRITE_LINE_MEMBER( cidelsa_state::q_w )
11
 
{
12
 
        m_cdp1802_q = state;
13
 
}
14
 
 
15
 
static COSMAC_INTERFACE( cidelsa_cdp1802_config )
16
 
{
17
 
        DEVCB_LINE_VCC,
18
 
        DEVCB_DRIVER_LINE_MEMBER(cidelsa_state, clear_r),
19
 
        DEVCB_NULL,
20
 
        DEVCB_NULL,
21
 
        DEVCB_NULL,
22
 
        DEVCB_NULL,
23
 
        DEVCB_DRIVER_LINE_MEMBER(cidelsa_state, q_w),
24
 
        DEVCB_NULL,
25
 
        DEVCB_NULL,
26
 
        NULL,
27
 
        DEVCB_NULL,
28
 
        DEVCB_NULL
29
 
};
30
 
 
31
 
/* Sound Interface */
32
 
 
33
 
WRITE8_MEMBER( draco_state::sound_bankswitch_w )
34
 
{
35
 
        /*
36
 
 
37
 
        pin     description
38
 
 
39
 
        D0      not connected
40
 
        D1      not connected
41
 
        D2      not connected
42
 
        D3      2716 A10
43
 
 
44
 
    */
45
 
 
46
 
        int bank = BIT(data, 3);
47
 
 
48
 
        memory_set_bank(machine(), "bank1", bank);
49
 
}
50
 
 
51
 
WRITE8_MEMBER( draco_state::sound_g_w )
52
 
{
53
 
        /*
54
 
 
55
 
     G1 G0  description
56
 
 
57
 
      0  0  IAB     inactive
58
 
      0  1  DWS     write to PSG
59
 
      1  0  DTB     read from PSG
60
 
      1  1  INTAK   latch address
61
 
 
62
 
    */
63
 
 
64
 
        switch (data)
65
 
        {
66
 
        case 0x01:
67
 
                ay8910_data_w(m_psg, 0, m_psg_latch);
68
 
                break;
69
 
 
70
 
        case 0x02:
71
 
                m_psg_latch = ay8910_r(m_psg, 0);
72
 
                break;
73
 
 
74
 
        case 0x03:
75
 
                ay8910_address_w(m_psg, 0, m_psg_latch);
76
 
                break;
77
 
        }
78
 
}
79
 
 
80
 
READ8_MEMBER( draco_state::sound_in_r )
81
 
{
82
 
        return ~(m_sound) & 0x07;
83
 
}
84
 
 
85
 
READ8_MEMBER( draco_state::psg_r )
86
 
{
87
 
        return m_psg_latch;
88
 
}
89
 
 
90
 
WRITE8_MEMBER( draco_state::psg_w )
91
 
{
92
 
        m_psg_latch = data;
93
 
}
94
 
 
95
 
/* Read/Write Handlers */
96
 
 
97
 
WRITE8_MEMBER( cidelsa_state::destryer_out1_w )
98
 
{
99
 
        /*
100
 
      bit   description
101
 
 
102
 
        0
103
 
        1
104
 
        2
105
 
        3
106
 
        4
107
 
        5
108
 
        6
109
 
        7
110
 
    */
111
 
}
112
 
 
113
 
/* CDP1852 Interfaces */
114
 
 
115
 
WRITE8_MEMBER( cidelsa_state::altair_out1_w )
116
 
{
117
 
        /*
118
 
      bit   description
119
 
 
120
 
        0   S1 (CARTUCHO)
121
 
        1   S2 (CARTUCHO)
122
 
        2   S3 (CARTUCHO)
123
 
        3   LG1
124
 
        4   LG2
125
 
        5   LGF
126
 
        6   CONT. M2
127
 
        7   CONT. M1
128
 
    */
129
 
 
130
 
        set_led_status(machine(), 0, data & 0x08); // 1P
131
 
        set_led_status(machine(), 1, data & 0x10); // 2P
132
 
        set_led_status(machine(), 2, data & 0x20); // FIRE
133
 
}
134
 
 
135
 
WRITE8_MEMBER( draco_state::out1_w )
136
 
{
137
 
        /*
138
 
      bit   description
139
 
 
140
 
        0   3K9 -> Green signal
141
 
        1   820R -> Blue signal
142
 
        2   510R -> Red signal
143
 
        3   1K -> not connected
144
 
        4   not connected
145
 
        5   SONIDO A -> COP402 IN0
146
 
        6   SONIDO B -> COP402 IN1
147
 
        7   SONIDO C -> COP402 IN2
148
 
    */
149
 
 
150
 
        m_sound = (data & 0xe0) >> 5;
151
 
}
152
 
 
153
 
static CDP1852_INTERFACE( cidelsa_cdp1852_in0_intf )
154
 
{
155
 
        CDP1852_MODE_INPUT,
156
 
        DEVCB_INPUT_PORT("IN0"),
157
 
        DEVCB_NULL,
158
 
        DEVCB_NULL
159
 
};
160
 
 
161
 
static CDP1852_INTERFACE( cidelsa_cdp1852_in1_intf )
162
 
{
163
 
        CDP1852_MODE_INPUT,
164
 
        DEVCB_INPUT_PORT("IN1"),
165
 
        DEVCB_NULL,
166
 
        DEVCB_NULL
167
 
};
168
 
 
169
 
static CDP1852_INTERFACE( cidelsa_cdp1852_in2_intf )
170
 
{
171
 
        CDP1852_MODE_INPUT,
172
 
        DEVCB_INPUT_PORT("IN2"),
173
 
        DEVCB_NULL,
174
 
        DEVCB_NULL
175
 
};
176
 
 
177
 
static CDP1852_INTERFACE( altair_cdp1852_out1_intf )
178
 
{
179
 
        CDP1852_MODE_OUTPUT,
180
 
        DEVCB_NULL,
181
 
        DEVCB_DRIVER_MEMBER(cidelsa_state, altair_out1_w),
182
 
        DEVCB_NULL
183
 
};
184
 
 
185
 
static CDP1852_INTERFACE( draco_cdp1852_out1_intf )
186
 
{
187
 
        CDP1852_MODE_OUTPUT,
188
 
        DEVCB_NULL,
189
 
        DEVCB_DRIVER_MEMBER(draco_state, out1_w),
190
 
        DEVCB_NULL
191
 
};
192
 
 
193
 
/* COP400 Interface */
194
 
 
195
 
static COP400_INTERFACE( draco_cop_intf )
196
 
{
197
 
        COP400_CKI_DIVISOR_16, // ???
198
 
        COP400_CKO_OSCILLATOR_OUTPUT, // ???
199
 
        COP400_MICROBUS_DISABLED
200
 
};
201
 
 
202
 
/* Memory Maps */
203
 
 
204
 
// Destroyer
205
 
 
206
 
static ADDRESS_MAP_START( destryer_map, AS_PROGRAM, 8, cidelsa_state )
207
 
        AM_RANGE(0x0000, 0x1fff) AM_ROM
208
 
        AM_RANGE(0x2000, 0x20ff) AM_RAM AM_SHARE("nvram")
209
 
        AM_RANGE(0xf400, 0xf7ff) AM_DEVREADWRITE(CDP1869_TAG, cdp1869_device, char_ram_r, char_ram_w)
210
 
        AM_RANGE(0xf800, 0xffff) AM_DEVREADWRITE(CDP1869_TAG, cdp1869_device, page_ram_r, page_ram_w)
211
 
ADDRESS_MAP_END
212
 
 
213
 
static ADDRESS_MAP_START( destryera_map, AS_PROGRAM, 8, cidelsa_state )
214
 
        AM_RANGE(0x0000, 0x1fff) AM_ROM
215
 
        AM_RANGE(0x3000, 0x30ff) AM_RAM AM_SHARE("nvram")
216
 
        AM_RANGE(0xf400, 0xf7ff) AM_DEVREADWRITE(CDP1869_TAG, cdp1869_device, char_ram_r, char_ram_w)
217
 
        AM_RANGE(0xf800, 0xffff) AM_DEVREADWRITE(CDP1869_TAG, cdp1869_device, page_ram_r, page_ram_w)
218
 
ADDRESS_MAP_END
219
 
 
220
 
static ADDRESS_MAP_START( destryer_io_map, AS_IO, 8, cidelsa_state )
221
 
        AM_RANGE(0x01, 0x01) AM_READ_PORT("IN0") AM_WRITE(destryer_out1_w)
222
 
        AM_RANGE(0x02, 0x02) AM_READ_PORT("IN1")
223
 
        AM_RANGE(0x03, 0x07) AM_WRITE(cdp1869_w)
224
 
ADDRESS_MAP_END
225
 
 
226
 
// Altair
227
 
 
228
 
static ADDRESS_MAP_START( altair_map, AS_PROGRAM, 8, cidelsa_state )
229
 
        AM_RANGE(0x0000, 0x2fff) AM_ROM
230
 
        AM_RANGE(0x3000, 0x30ff) AM_RAM AM_SHARE("nvram")
231
 
        AM_RANGE(0xf400, 0xf7ff) AM_DEVREADWRITE(CDP1869_TAG, cdp1869_device, char_ram_r, char_ram_w)
232
 
        AM_RANGE(0xf800, 0xffff) AM_DEVREADWRITE(CDP1869_TAG, cdp1869_device, page_ram_r, page_ram_w)
233
 
ADDRESS_MAP_END
234
 
 
235
 
static ADDRESS_MAP_START( altair_io_map, AS_IO, 8, cidelsa_state )
236
 
        AM_RANGE(0x01, 0x01) AM_DEVREAD("ic23", cdp1852_device, read) AM_DEVWRITE("ic26", cdp1852_device, write)
237
 
        AM_RANGE(0x02, 0x02) AM_DEVREAD("ic24", cdp1852_device, read)
238
 
        AM_RANGE(0x04, 0x04) AM_DEVREAD("ic25", cdp1852_device, read)
239
 
        AM_RANGE(0x03, 0x07) AM_WRITE(cdp1869_w)
240
 
ADDRESS_MAP_END
241
 
 
242
 
// Draco
243
 
 
244
 
static ADDRESS_MAP_START( draco_map, AS_PROGRAM, 8, draco_state )
245
 
        AM_RANGE(0x0000, 0x3fff) AM_ROM
246
 
        AM_RANGE(0x8000, 0x83ff) AM_RAM AM_SHARE("nvram")
247
 
        AM_RANGE(0xf400, 0xf7ff) AM_DEVREADWRITE(CDP1869_TAG, cdp1869_device, char_ram_r, char_ram_w)
248
 
        AM_RANGE(0xf800, 0xffff) AM_DEVREADWRITE(CDP1869_TAG, cdp1869_device, page_ram_r, page_ram_w)
249
 
ADDRESS_MAP_END
250
 
 
251
 
static ADDRESS_MAP_START( draco_io_map, AS_IO, 8, draco_state )
252
 
        AM_RANGE(0x01, 0x01) AM_DEVREAD("ic29", cdp1852_device, read) AM_DEVWRITE("ic32", cdp1852_device, write)
253
 
        AM_RANGE(0x02, 0x02) AM_DEVREAD("ic30", cdp1852_device, read)
254
 
        AM_RANGE(0x04, 0x04) AM_DEVREAD("ic31", cdp1852_device, read)
255
 
        AM_RANGE(0x03, 0x07) AM_WRITE_BASE(cidelsa_state, cdp1869_w)
256
 
ADDRESS_MAP_END
257
 
 
258
 
static ADDRESS_MAP_START( draco_sound_map, AS_PROGRAM, 8, draco_state )
259
 
        AM_RANGE(0x000, 0x3ff) AM_ROMBANK("bank1")
260
 
ADDRESS_MAP_END
261
 
 
262
 
static ADDRESS_MAP_START( draco_sound_io_map, AS_IO, 8, draco_state )
263
 
        AM_RANGE(COP400_PORT_D, COP400_PORT_D) AM_WRITE(sound_bankswitch_w)
264
 
        AM_RANGE(COP400_PORT_G, COP400_PORT_G) AM_WRITE(sound_g_w)
265
 
        AM_RANGE(COP400_PORT_L, COP400_PORT_L) AM_READWRITE(psg_r, psg_w)
266
 
        AM_RANGE(COP400_PORT_IN, COP400_PORT_IN) AM_READ(sound_in_r)
267
 
        AM_RANGE(COP400_PORT_SIO, COP400_PORT_SIO) AM_NOP
268
 
        AM_RANGE(COP400_PORT_SK, COP400_PORT_SK) AM_WRITENOP
269
 
ADDRESS_MAP_END
270
 
 
271
 
/* Input Ports */
272
 
 
273
 
static CUSTOM_INPUT( cdp1869_pcb_r )
274
 
{
275
 
        cidelsa_state *state = field.machine().driver_data<cidelsa_state>();
276
 
 
277
 
        return state->m_cdp1869_pcb;
278
 
}
279
 
 
280
 
static INPUT_CHANGED( ef_w )
281
 
{
282
 
        cputag_set_input_line(field.machine(), CDP1802_TAG, (int)(FPTR)param, newval);
283
 
}
284
 
 
285
 
static INPUT_PORTS_START( destryer )
286
 
        PORT_START("IN0")
287
 
        PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) // CARTUCHO
288
 
        PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) // 1P
289
 
        PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) // 2P
290
 
        PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // RG
291
 
        PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // LF
292
 
        PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) // FR
293
 
        PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
294
 
        PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(cdp1869_pcb_r, NULL)
295
 
 
296
 
        PORT_START("IN1")
297
 
        PORT_DIPNAME( 0x03, 0x02, DEF_STR( Difficulty ) )
298
 
        PORT_DIPSETTING(    0x00, "Very Conserv" )
299
 
        PORT_DIPSETTING(    0x01, "Conserv" )
300
 
        PORT_DIPSETTING(    0x02, "Liberal" )
301
 
        PORT_DIPSETTING(    0x03, "Very Liberal" )
302
 
        PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Bonus_Life ) )
303
 
        PORT_DIPSETTING(    0x0c, "5000" )
304
 
        PORT_DIPSETTING(    0x08, "7000" )
305
 
        PORT_DIPSETTING(    0x04, "10000" )
306
 
        PORT_DIPSETTING(    0x00, "14000" )
307
 
        PORT_DIPNAME( 0x30, 0x10, DEF_STR( Lives ) )
308
 
        PORT_DIPSETTING(    0x30, "1" )
309
 
        PORT_DIPSETTING(    0x20, "2" )
310
 
        PORT_DIPSETTING(    0x10, "3" )
311
 
        PORT_DIPSETTING(    0x00, "4" )
312
 
        PORT_DIPNAME( 0xc0, 0xc0, DEF_STR(Coinage) )
313
 
        PORT_DIPSETTING(    0xc0, "Slot A: 1  Slot B: 2" )
314
 
        PORT_DIPSETTING(    0x80, "Slot A: 1.5  Slot B: 3" )
315
 
        PORT_DIPSETTING(    0x40, "Slot A: 2  Slot B: 4" )
316
 
        PORT_DIPSETTING(    0x00, "Slot A: 2.5  Slot B: 5" )
317
 
 
318
 
        PORT_START("EF")
319
 
        PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) // inverted CDP1869 PRD, pushed
320
 
        PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_CHANGED(ef_w, (void*)COSMAC_INPUT_LINE_EF2)
321
 
        PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_CHANGED(ef_w, (void*)COSMAC_INPUT_LINE_EF3)
322
 
        PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED(ef_w, (void*)COSMAC_INPUT_LINE_EF4)
323
 
INPUT_PORTS_END
324
 
 
325
 
static INPUT_PORTS_START( altair )
326
 
        PORT_START("IN0")
327
 
        PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) // CARTUCHO
328
 
        PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) // 1P
329
 
        PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) // 2P
330
 
        PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // RG
331
 
        PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // LF
332
 
        PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) // FR
333
 
        PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
334
 
        PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(cdp1869_pcb_r, NULL)
335
 
 
336
 
        PORT_START("IN1")
337
 
        PORT_DIPNAME( 0x03, 0x02, DEF_STR( Difficulty ) )
338
 
        PORT_DIPSETTING(    0x00, "Very Conserv" )
339
 
        PORT_DIPSETTING(    0x01, "Conserv" )
340
 
        PORT_DIPSETTING(    0x02, "Liberal" )
341
 
        PORT_DIPSETTING(    0x03, "Very Liberal" )
342
 
        PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Bonus_Life ) )
343
 
        PORT_DIPSETTING(    0x0c, "5000" )
344
 
        PORT_DIPSETTING(    0x08, "7000" )
345
 
        PORT_DIPSETTING(    0x04, "10000" )
346
 
        PORT_DIPSETTING(    0x00, "14000" )
347
 
        PORT_DIPNAME( 0x30, 0x10, DEF_STR( Lives ) )
348
 
        PORT_DIPSETTING(    0x30, "1" )
349
 
        PORT_DIPSETTING(    0x20, "2" )
350
 
        PORT_DIPSETTING(    0x10, "3" )
351
 
        PORT_DIPSETTING(    0x00, "4" )
352
 
        PORT_DIPNAME( 0xc0, 0xc0, DEF_STR(Coinage) )
353
 
        PORT_DIPSETTING(    0xc0, "Slot A: 1  Slot B: 2" )
354
 
        PORT_DIPSETTING(    0x80, "Slot A: 1.5  Slot B: 3" )
355
 
        PORT_DIPSETTING(    0x40, "Slot A: 2  Slot B: 4" )
356
 
        PORT_DIPSETTING(    0x00, "Slot A: 2.5  Slot B: 5" )
357
 
 
358
 
        PORT_START("IN2")
359
 
        PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) // UP
360
 
        PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) // DN
361
 
        PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) // IN
362
 
        PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
363
 
        PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
364
 
        PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
365
 
        PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
366
 
        PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
367
 
 
368
 
        PORT_START("EF")
369
 
        PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) // inverted CDP1869 PRD, pushed
370
 
        PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_CHANGED(ef_w, (void*)COSMAC_INPUT_LINE_EF2)
371
 
        PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_CHANGED(ef_w, (void*)COSMAC_INPUT_LINE_EF3)
372
 
        PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED(ef_w, (void*)COSMAC_INPUT_LINE_EF4)
373
 
INPUT_PORTS_END
374
 
 
375
 
static INPUT_PORTS_START( draco )
376
 
        PORT_START("IN0")
377
 
        PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
378
 
        PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
379
 
        PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )
380
 
        PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
381
 
        PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
382
 
        PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
383
 
        PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
384
 
        PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(cdp1869_pcb_r, NULL)
385
 
 
386
 
        PORT_START("IN1")
387
 
        PORT_DIPNAME( 0x03, 0x02, DEF_STR( Difficulty ) )
388
 
        PORT_DIPSETTING(    0x00, "Very Conserv" )
389
 
        PORT_DIPSETTING(    0x01, "Conserv" )
390
 
        PORT_DIPSETTING(    0x02, "Liberal" )
391
 
        PORT_DIPSETTING(    0x03, "Very Liberal" )
392
 
        PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Bonus_Life ) )
393
 
        PORT_DIPSETTING(    0x0c, "5000" )
394
 
        PORT_DIPSETTING(    0x08, "7000" )
395
 
        PORT_DIPSETTING(    0x04, "10000" )
396
 
        PORT_DIPSETTING(    0x00, "14000" )
397
 
        PORT_DIPNAME( 0x10, 0x10, DEF_STR( Lives ) )
398
 
        PORT_DIPSETTING(    0x10, "3" )
399
 
        PORT_DIPSETTING(    0x00, "5" )
400
 
        PORT_DIPNAME( 0xe0, 0xc0, DEF_STR( Coinage ) )
401
 
        PORT_DIPSETTING(    0x40, "Slot A: 0.5  Slot B: 0.5" )
402
 
        PORT_DIPSETTING(    0xe0, "Slot A: 0.6  Slot B: 3" )
403
 
        PORT_DIPSETTING(    0xc0, "Slot A: 1  Slot B: 2" )
404
 
        PORT_DIPSETTING(    0xa0, "Slot A: 1.2  Slot B: 6" )
405
 
        PORT_DIPSETTING(    0x80, "Slot A: 1.5  Slot B: 3" )
406
 
        PORT_DIPSETTING(    0x60, "Slot A: 1.5  Slot B: 7.5" )
407
 
        PORT_DIPSETTING(    0x20, "Slot A: 2.5  Slot B: 3" )
408
 
        PORT_DIPSETTING(    0x00, "Slot A: 3  Slot B: 6" )
409
 
 
410
 
        PORT_START("IN2")
411
 
        PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP )
412
 
        PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN )
413
 
        PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT )
414
 
        PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT )
415
 
        PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP )
416
 
        PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN )
417
 
        PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT )
418
 
        PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT )
419
 
 
420
 
        PORT_START("EF")
421
 
        PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) // CDP1869 PRD, pushed
422
 
        PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_CHANGED(ef_w, (void*)COSMAC_INPUT_LINE_EF2)
423
 
        PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_CHANGED(ef_w, (void*)COSMAC_INPUT_LINE_EF3)
424
 
        PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED(ef_w, (void*)COSMAC_INPUT_LINE_EF4)
425
 
INPUT_PORTS_END
426
 
 
427
 
/* Machine Start */
428
 
 
429
 
static TIMER_CALLBACK( set_cpu_mode )
430
 
{
431
 
        cidelsa_state *state = machine.driver_data<cidelsa_state>();
432
 
 
433
 
        state->m_reset = 1;
434
 
}
435
 
 
436
 
void cidelsa_state::machine_start()
437
 
{
438
 
        /* register for state saving */
439
 
        save_item(NAME(m_reset));
440
 
}
441
 
 
442
 
void draco_state::machine_start()
443
 
{
444
 
        /* setup COP402 memory banking */
445
 
        memory_configure_bank(machine(), "bank1", 0, 2, machine().region(COP402N_TAG)->base(), 0x400);
446
 
        memory_set_bank(machine(), "bank1", 0);
447
 
 
448
 
        /* register for state saving */
449
 
        save_item(NAME(m_reset));
450
 
        save_item(NAME(m_sound));
451
 
        save_item(NAME(m_psg_latch));
452
 
}
453
 
 
454
 
/* Machine Reset */
455
 
 
456
 
void cidelsa_state::machine_reset()
457
 
{
458
 
        /* reset the CPU */
459
 
        m_reset = 0;
460
 
        machine().scheduler().timer_set(attotime::from_msec(200), FUNC(set_cpu_mode));
461
 
}
462
 
 
463
 
/* Machine Drivers */
464
 
 
465
 
static MACHINE_CONFIG_START( destryer, cidelsa_state )
466
 
        /* basic system hardware */
467
 
        MCFG_CPU_ADD(CDP1802_TAG, COSMAC, DESTRYER_CHR1)
468
 
        MCFG_CPU_PROGRAM_MAP(destryer_map)
469
 
        MCFG_CPU_IO_MAP(destryer_io_map)
470
 
        MCFG_CPU_CONFIG(cidelsa_cdp1802_config)
471
 
        MCFG_NVRAM_ADD_0FILL("nvram")
472
 
 
473
 
        /* sound and video hardware */
474
 
        MCFG_FRAGMENT_ADD(destryer_video)
475
 
MACHINE_CONFIG_END
476
 
 
477
 
static MACHINE_CONFIG_START( destryera, cidelsa_state )
478
 
        /* basic system hardware */
479
 
        MCFG_CPU_ADD(CDP1802_TAG, COSMAC, DESTRYER_CHR1)
480
 
        MCFG_CPU_PROGRAM_MAP(destryera_map)
481
 
        MCFG_CPU_IO_MAP(destryer_io_map)
482
 
        MCFG_CPU_CONFIG(cidelsa_cdp1802_config)
483
 
        MCFG_NVRAM_ADD_0FILL("nvram")
484
 
 
485
 
        /* sound and video hardware */
486
 
        MCFG_FRAGMENT_ADD(destryer_video)
487
 
MACHINE_CONFIG_END
488
 
 
489
 
static MACHINE_CONFIG_START( altair, cidelsa_state )
490
 
        /* basic system hardware */
491
 
        MCFG_CPU_ADD(CDP1802_TAG, COSMAC, ALTAIR_CHR1)
492
 
        MCFG_CPU_PROGRAM_MAP(altair_map)
493
 
        MCFG_CPU_IO_MAP(altair_io_map)
494
 
        MCFG_CPU_CONFIG(cidelsa_cdp1802_config)
495
 
        MCFG_NVRAM_ADD_0FILL("nvram")
496
 
 
497
 
        /* input/output hardware */
498
 
        MCFG_CDP1852_ADD("ic23", CDP1852_CLOCK_HIGH, cidelsa_cdp1852_in0_intf)  /* clock is really tied to CDP1869 CMSEL (pin 37) */
499
 
        MCFG_CDP1852_ADD("ic24", CDP1852_CLOCK_HIGH, cidelsa_cdp1852_in1_intf)
500
 
        MCFG_CDP1852_ADD("ic25", CDP1852_CLOCK_HIGH, cidelsa_cdp1852_in2_intf)
501
 
        MCFG_CDP1852_ADD("ic26", ALTAIR_CHR1 / 8, altair_cdp1852_out1_intf)             /* clock is CDP1802 TPB */
502
 
 
503
 
        /* sound and video hardware */
504
 
        MCFG_FRAGMENT_ADD(altair_video)
505
 
MACHINE_CONFIG_END
506
 
 
507
 
static MACHINE_CONFIG_START( draco, draco_state )
508
 
        /* basic system hardware */
509
 
        MCFG_CPU_ADD(CDP1802_TAG, COSMAC, DRACO_CHR1)
510
 
        MCFG_CPU_PROGRAM_MAP(draco_map)
511
 
        MCFG_CPU_IO_MAP(draco_io_map)
512
 
        MCFG_CPU_CONFIG(cidelsa_cdp1802_config)
513
 
        MCFG_NVRAM_ADD_0FILL("nvram")
514
 
 
515
 
        MCFG_CPU_ADD(COP402N_TAG, COP402, DRACO_SND_CHR1)
516
 
        MCFG_CPU_PROGRAM_MAP(draco_sound_map)
517
 
        MCFG_CPU_IO_MAP(draco_sound_io_map)
518
 
        MCFG_CPU_CONFIG(draco_cop_intf)
519
 
 
520
 
        /* input/output hardware */
521
 
        MCFG_CDP1852_ADD("ic29", CDP1852_CLOCK_HIGH, cidelsa_cdp1852_in0_intf)  /* clock is really tied to CDP1876 CMSEL (pin 32) */
522
 
        MCFG_CDP1852_ADD("ic30", CDP1852_CLOCK_HIGH, cidelsa_cdp1852_in1_intf)
523
 
        MCFG_CDP1852_ADD("ic31", CDP1852_CLOCK_HIGH, cidelsa_cdp1852_in2_intf)
524
 
        MCFG_CDP1852_ADD("ic32", DRACO_CHR1 / 8, draco_cdp1852_out1_intf)               /* clock is CDP1802 TPB */
525
 
 
526
 
        /* sound and video hardware */
527
 
        MCFG_FRAGMENT_ADD(draco_video)
528
 
MACHINE_CONFIG_END
529
 
 
530
 
/* ROMs */
531
 
 
532
 
ROM_START( destryer )
533
 
        ROM_REGION( 0x2000, CDP1802_TAG, 0 )
534
 
        ROM_LOAD( "des a 2.ic4", 0x0000, 0x0800, CRC(63749870) SHA1(a8eee4509d7a52dcf33049de221d928da3632174) )
535
 
        ROM_LOAD( "des b 2.ic5", 0x0800, 0x0800, CRC(60604f40) SHA1(32ca95c5b38b0f4992e04d77123d217f143ae084) )
536
 
        ROM_LOAD( "des c 2.ic6", 0x1000, 0x0800, CRC(a7cdeb7b) SHA1(a5a7748967d4ca89fb09632e1f0130ef050dbd68) )
537
 
        ROM_LOAD( "des d 2.ic7", 0x1800, 0x0800, CRC(dbec0aea) SHA1(1d9d49009a45612ee79763781a004499313b823b) )
538
 
ROM_END
539
 
 
540
 
// this was destroyer2.rom in standalone emu..
541
 
ROM_START( destryera )
542
 
        ROM_REGION( 0x2000, CDP1802_TAG, 0 )
543
 
        ROM_LOAD( "destryera_1", 0x0000, 0x0800, CRC(421428e9) SHA1(0ac3a1e7f61125a1cd82145fa28cbc4b93505dc9) )
544
 
        ROM_LOAD( "destryera_2", 0x0800, 0x0800, CRC(55dc8145) SHA1(a0066d3f3ac0ae56273485b74af90eeffea5e64e) )
545
 
        ROM_LOAD( "destryera_3", 0x1000, 0x0800, CRC(5557bdf8) SHA1(37a9cbc5d25051d3bed7535c58aac937cd7c64e1) )
546
 
        ROM_LOAD( "destryera_4", 0x1800, 0x0800, CRC(608b779c) SHA1(8fd6cc376c507680777553090329cc66be42a934) )
547
 
ROM_END
548
 
 
549
 
ROM_START( altair )
550
 
        ROM_REGION( 0x3000, CDP1802_TAG, 0 )
551
 
        ROM_LOAD( "alt a 1.ic7",  0x0000, 0x0800, CRC(37c26c4e) SHA1(30df7efcf5bd12dafc1cb6e894fc18e7b76d3e61) )
552
 
        ROM_LOAD( "alt b 1.ic8",  0x0800, 0x0800, CRC(76b814a4) SHA1(e8ab1d1cbcef974d929ef8edd10008f60052a607) )
553
 
        ROM_LOAD( "alt c 1.ic9",  0x1000, 0x0800, CRC(2569ce44) SHA1(a09597d2f8f50fab9a09ed9a59c50a2bdcba47bb) )
554
 
        ROM_LOAD( "alt d 1.ic10", 0x1800, 0x0800, CRC(a25e6d11) SHA1(c197ff91bb9bdd04e88908259e4cde11b990e31d) )
555
 
        ROM_LOAD( "alt e 1.ic11", 0x2000, 0x0800, CRC(e497f23b) SHA1(6094e9873df7bd88c521ddc3fd63961024687243) )
556
 
        ROM_LOAD( "alt f 1.ic12", 0x2800, 0x0800, CRC(a06dd905) SHA1(c24ad9ff6d4e3b4e57fd75f946e8832fa00c2ea0) )
557
 
ROM_END
558
 
 
559
 
ROM_START( draco )
560
 
        ROM_REGION( 0x4000, CDP1802_TAG, 0 )
561
 
        ROM_LOAD( "dra a 1.ic10", 0x0000, 0x0800, CRC(ca127984) SHA1(46721cf42b1c891f7c88bc063a2149dd3cefea74) )
562
 
        ROM_LOAD( "dra b 1.ic11", 0x0800, 0x0800, CRC(e4936e28) SHA1(ddbbf769994d32a6bce75312306468a89033f0aa) )
563
 
        ROM_LOAD( "dra c 1.ic12", 0x1000, 0x0800, CRC(94480f5d) SHA1(8f49ce0f086259371e999d097a502482c83c6e9e) )
564
 
        ROM_LOAD( "dra d 1.ic13", 0x1800, 0x0800, CRC(32075277) SHA1(2afaa92c91f554e3bdcfec6d94ef82df63032afb) )
565
 
        ROM_LOAD( "dra e 1.ic14", 0x2000, 0x0800, CRC(cce7872e) SHA1(c956eb994452bd8a27bbc6d0e6d103e87a4a3e6e) )
566
 
        ROM_LOAD( "dra f 1.ic15", 0x2800, 0x0800, CRC(e5927ec7) SHA1(42e0aabb6187bbb189648859fd5dddda43814526) )
567
 
        ROM_LOAD( "dra g 1.ic16", 0x3000, 0x0800, CRC(f28546c0) SHA1(daedf1d64f94358b15580d697dd77d3c977aa22c) )
568
 
        ROM_LOAD( "dra h 1.ic17", 0x3800, 0x0800, CRC(dce782ea) SHA1(f558096f43fb30337bc4a527169718326c265c2c) )
569
 
 
570
 
        ROM_REGION( 0x800, COP402N_TAG, 0 )
571
 
        ROM_LOAD( "dra s 1.ic4",  0x0000, 0x0800, CRC(292a57f8) SHA1(b34a189394746d77c3ee669db24109ee945c3be7) )
572
 
ROM_END
573
 
 
574
 
/* Game Drivers */
575
 
 
576
 
GAME( 1980, destryer, 0,        destryer, destryer, 0, ROT90, "Cidelsa", "Destroyer (Cidelsa) (set 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
577
 
GAME( 1980, destryera,destryer, destryera,destryer, 0, ROT90, "Cidelsa", "Destroyer (Cidelsa) (set 2)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
578
 
GAME( 1981, altair,   0,        altair,   altair,   0, ROT90, "Cidelsa", "Altair", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
579
 
GAME( 1981, draco,    0,        draco,    draco,    0, ROT90, "Cidelsa", "Draco", GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )