200
200
*************************************/
202
static READ8_HANDLER( dual_pokey_r )
202
READ8_MEMBER(mhavoc_state::dual_pokey_r)
204
204
int pokey_num = (offset >> 3) & 0x01;
205
205
int control = (offset & 0x10) >> 1;
206
206
int pokey_reg = (offset % 8) | control;
208
208
if (pokey_num == 0)
209
return pokey_r(space->machine().device("pokey1"), pokey_reg);
209
return machine().device<pokeyn_device>("pokey1")->read(pokey_reg);
211
return pokey_r(space->machine().device("pokey2"), pokey_reg);
211
return machine().device<pokeyn_device>("pokey2")->read(pokey_reg);
215
static WRITE8_HANDLER( dual_pokey_w )
215
WRITE8_MEMBER(mhavoc_state::dual_pokey_w)
217
217
int pokey_num = (offset >> 3) & 0x01;
218
218
int control = (offset & 0x10) >> 1;
219
219
int pokey_reg = (offset % 8) | control;
221
221
if (pokey_num == 0)
222
pokey_w(space->machine().device("pokey1"), pokey_reg, data);
222
machine().device<pokeyn_device>("pokey1")->write(pokey_reg, data);
224
pokey_w(space->machine().device("pokey2"), pokey_reg, data);
224
machine().device<pokeyn_device>("pokey2")->write(pokey_reg, data);
232
232
*************************************/
234
static ADDRESS_MAP_START( alpha_map, AS_PROGRAM, 8 )
234
static ADDRESS_MAP_START( alpha_map, AS_PROGRAM, 8, mhavoc_state )
235
235
AM_RANGE(0x0000, 0x01ff) AM_RAM
236
AM_RANGE(0x0200, 0x07ff) AM_RAMBANK("bank1") AM_BASE_MEMBER(mhavoc_state, m_zram0)
236
AM_RANGE(0x0200, 0x07ff) AM_RAMBANK("bank1") AM_SHARE("zram0")
237
237
AM_RANGE(0x0800, 0x09ff) AM_RAM
238
AM_RANGE(0x0a00, 0x0fff) AM_RAMBANK("bank1") AM_BASE_MEMBER(mhavoc_state, m_zram1)
238
AM_RANGE(0x0a00, 0x0fff) AM_RAMBANK("bank1") AM_SHARE("zram1")
239
239
AM_RANGE(0x1000, 0x1000) AM_READ(mhavoc_gamma_r) /* Gamma Read Port */
240
240
AM_RANGE(0x1200, 0x1200) AM_READ_PORT("IN0") AM_WRITENOP /* Alpha Input Port 0 */
241
AM_RANGE(0x1400, 0x141f) AM_RAM AM_BASE(&avgdvg_colorram) /* ColorRAM */
241
AM_RANGE(0x1400, 0x141f) AM_RAM AM_BASE_LEGACY(&avgdvg_colorram) /* ColorRAM */
242
242
AM_RANGE(0x1600, 0x1600) AM_WRITE(mhavoc_out_0_w) /* Control Signals */
243
AM_RANGE(0x1640, 0x1640) AM_WRITE(avgdvg_go_w) /* Vector Generator GO */
243
AM_RANGE(0x1640, 0x1640) AM_WRITE_LEGACY(avgdvg_go_w) /* Vector Generator GO */
244
244
AM_RANGE(0x1680, 0x1680) AM_WRITE(watchdog_reset_w) /* Watchdog Clear */
245
AM_RANGE(0x16c0, 0x16c0) AM_WRITE(avgdvg_reset_w) /* Vector Generator Reset */
245
AM_RANGE(0x16c0, 0x16c0) AM_WRITE_LEGACY(avgdvg_reset_w) /* Vector Generator Reset */
246
246
AM_RANGE(0x1700, 0x1700) AM_WRITE(mhavoc_alpha_irq_ack_w) /* IRQ ack */
247
247
AM_RANGE(0x1740, 0x1740) AM_WRITE(mhavoc_rom_banksel_w) /* Program ROM Page Select */
248
248
AM_RANGE(0x1780, 0x1780) AM_WRITE(mhavoc_ram_banksel_w) /* Program RAM Page Select */
249
249
AM_RANGE(0x17c0, 0x17c0) AM_WRITE(mhavoc_gamma_w) /* Gamma Communication Write Port */
250
250
AM_RANGE(0x1800, 0x1fff) AM_RAM /* Shared Beta Ram */
251
251
AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank2") /* Paged Program ROM (32K) */
252
AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE(&avgdvg_vectorram) AM_SIZE(&avgdvg_vectorram_size) AM_REGION("alpha", 0x4000) /* Vector Generator RAM */
252
AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE_LEGACY(&avgdvg_vectorram) AM_SIZE_LEGACY(&avgdvg_vectorram_size) AM_REGION("alpha", 0x4000) /* Vector Generator RAM */
253
253
AM_RANGE(0x5000, 0x7fff) AM_ROM /* Vector ROM */
254
254
AM_RANGE(0x8000, 0xffff) AM_ROM /* Program ROM (32K) */
263
263
*************************************/
265
static ADDRESS_MAP_START( gamma_map, AS_PROGRAM, 8 )
265
static ADDRESS_MAP_START( gamma_map, AS_PROGRAM, 8, mhavoc_state )
266
266
AM_RANGE(0x0000, 0x07ff) AM_RAM /* Program RAM (2K) */
267
267
AM_RANGE(0x0800, 0x0fff) AM_RAM AM_MIRROR (0x1800)
268
AM_RANGE(0x2000, 0x203f) AM_READWRITE(quad_pokey_r, quad_pokey_w) /* Quad Pokey read */
268
AM_RANGE(0x2000, 0x203f) AM_READWRITE_LEGACY(quad_pokeyn_r, quad_pokeyn_w) /* Quad Pokey read */
269
269
AM_RANGE(0x2800, 0x2800) AM_READ_PORT("IN1") /* Gamma Input Port */
270
270
AM_RANGE(0x3000, 0x3000) AM_READ(mhavoc_alpha_r) /* Alpha Comm. Read Port*/
271
271
AM_RANGE(0x3800, 0x3803) AM_READ_PORT("DIAL") /* Roller Controller Input*/
286
286
*************************************/
288
static ADDRESS_MAP_START( alphaone_map, AS_PROGRAM, 8 )
288
static ADDRESS_MAP_START( alphaone_map, AS_PROGRAM, 8, mhavoc_state )
289
289
AM_RANGE(0x0000, 0x01ff) AM_RAM
290
AM_RANGE(0x0200, 0x07ff) AM_RAMBANK("bank1") AM_BASE_MEMBER(mhavoc_state, m_zram0)
290
AM_RANGE(0x0200, 0x07ff) AM_RAMBANK("bank1") AM_SHARE("zram0")
291
291
AM_RANGE(0x0800, 0x09ff) AM_RAM
292
AM_RANGE(0x0a00, 0x0fff) AM_RAMBANK("bank1") AM_BASE_MEMBER(mhavoc_state, m_zram1)
292
AM_RANGE(0x0a00, 0x0fff) AM_RAMBANK("bank1") AM_SHARE("zram1")
293
293
AM_RANGE(0x1020, 0x103f) AM_READWRITE(dual_pokey_r, dual_pokey_w)
294
294
AM_RANGE(0x1040, 0x1040) AM_READ_PORT("IN0") AM_WRITENOP /* Alpha Input Port 0 */
295
295
AM_RANGE(0x1060, 0x1060) AM_READ_PORT("IN1") /* Gamma Input Port */
296
296
AM_RANGE(0x1080, 0x1080) AM_READ_PORT("DIAL") /* Roller Controller Input*/
297
297
AM_RANGE(0x10a0, 0x10a0) AM_WRITE(alphaone_out_0_w) /* Control Signals */
298
AM_RANGE(0x10a4, 0x10a4) AM_WRITE(avgdvg_go_w) /* Vector Generator GO */
298
AM_RANGE(0x10a4, 0x10a4) AM_WRITE_LEGACY(avgdvg_go_w) /* Vector Generator GO */
299
299
AM_RANGE(0x10a8, 0x10a8) AM_WRITE(watchdog_reset_w) /* Watchdog Clear */
300
AM_RANGE(0x10ac, 0x10ac) AM_WRITE(avgdvg_reset_w) /* Vector Generator Reset */
300
AM_RANGE(0x10ac, 0x10ac) AM_WRITE_LEGACY(avgdvg_reset_w) /* Vector Generator Reset */
301
301
AM_RANGE(0x10b0, 0x10b0) AM_WRITE(mhavoc_alpha_irq_ack_w) /* IRQ ack */
302
302
AM_RANGE(0x10b4, 0x10b4) AM_WRITE(mhavoc_rom_banksel_w)
303
303
AM_RANGE(0x10b8, 0x10b8) AM_WRITE(mhavoc_ram_banksel_w)
304
AM_RANGE(0x10e0, 0x10ff) AM_WRITEONLY AM_BASE(&avgdvg_colorram) /* ColorRAM */
304
AM_RANGE(0x10e0, 0x10ff) AM_WRITEONLY AM_BASE_LEGACY(&avgdvg_colorram) /* ColorRAM */
305
305
AM_RANGE(0x1800, 0x18ff) AM_RAM AM_SHARE("nvram") /* EEROM */
306
306
AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank2") /* Paged Program ROM (32K) */
307
AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE(&avgdvg_vectorram) AM_SIZE(&avgdvg_vectorram_size) AM_REGION("alpha", 0x4000) /* Vector Generator RAM */
307
AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE_LEGACY(&avgdvg_vectorram) AM_SIZE_LEGACY(&avgdvg_vectorram_size) AM_REGION("alpha", 0x4000) /* Vector Generator RAM */
308
308
AM_RANGE(0x5000, 0x7fff) AM_ROM /* Vector ROM */
309
309
AM_RANGE(0x8000, 0xffff) AM_ROM /* Program ROM (32K) */
337
337
/* Bit 1 = 2.4kHz (divide 2.5MHz by 1024) */
338
338
/* Bit 0 = Vector generator halt flag */
339
339
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(avgdvg_done_r, NULL)
340
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(clock_r, NULL)
341
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(gamma_xmtd_r, NULL)
342
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(gamma_rcvd_r, NULL)
340
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mhavoc_state,clock_r, NULL)
341
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mhavoc_state,gamma_xmtd_r, NULL)
342
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mhavoc_state,gamma_rcvd_r, NULL)
343
343
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
344
344
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Diag Step/Coin C") PORT_CODE(KEYCODE_F1)
345
PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(mhavoc_bit67_r, "COIN\0SERVICE")
345
PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mhavoc_state,mhavoc_bit67_r, "COIN\0SERVICE")
347
347
PORT_START("IN1") /* gamma */
348
348
/* Bits 7-2 = input switches */
349
349
/* Bit 1 = Alpha rcvd flag */
350
350
/* Bit 0 = Alpha xmtd flag */
351
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(alpha_xmtd_r, NULL)
352
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(alpha_rcvd_r, NULL)
351
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mhavoc_state,alpha_xmtd_r, NULL)
352
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mhavoc_state,alpha_rcvd_r, NULL)
353
353
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNKNOWN )
354
354
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
355
355
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
418
418
PORT_INCLUDE( mhavoc )
420
420
PORT_MODIFY("IN1")
421
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(tms5220_r, NULL)
421
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mhavoc_state,tms5220_r, NULL)
422
422
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
436
436
static INPUT_PORTS_START( alphaone )
437
437
PORT_START("IN0") /* alpha (player_1 = 0) */
438
438
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(avgdvg_done_r, NULL)
439
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(clock_r, NULL)
439
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mhavoc_state,clock_r, NULL)
440
440
PORT_BIT( 0x7c, IP_ACTIVE_LOW, IPT_UNKNOWN )
441
441
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
499
499
/* sound hardware */
500
500
MCFG_SPEAKER_STANDARD_MONO("mono")
502
MCFG_SOUND_ADD("pokey1", POKEY, MHAVOC_CLOCK_1_25M)
502
MCFG_SOUND_ADD("pokey1", POKEYN, MHAVOC_CLOCK_1_25M)
503
503
MCFG_SOUND_CONFIG(pokey_config)
504
504
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
506
MCFG_SOUND_ADD("pokey2", POKEY, MHAVOC_CLOCK_1_25M)
507
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
509
MCFG_SOUND_ADD("pokey3", POKEY, MHAVOC_CLOCK_1_25M)
510
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
512
MCFG_SOUND_ADD("pokey4", POKEY, MHAVOC_CLOCK_1_25M)
506
MCFG_SOUND_ADD("pokey2", POKEYN, MHAVOC_CLOCK_1_25M)
507
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
509
MCFG_SOUND_ADD("pokey3", POKEYN, MHAVOC_CLOCK_1_25M)
510
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
512
MCFG_SOUND_ADD("pokey4", POKEYN, MHAVOC_CLOCK_1_25M)
513
513
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
514
514
MACHINE_CONFIG_END
532
532
MCFG_SCREEN_VISIBLE_AREA(0, 580, 0, 500)
534
534
/* sound hardware */
535
MCFG_SOUND_REPLACE("pokey1", POKEY, MHAVOC_CLOCK_1_25M)
535
MCFG_SOUND_REPLACE("pokey1", POKEYN, MHAVOC_CLOCK_1_25M)
536
536
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
538
MCFG_SOUND_REPLACE("pokey2", POKEY, MHAVOC_CLOCK_1_25M)
538
MCFG_SOUND_REPLACE("pokey2", POKEYN, MHAVOC_CLOCK_1_25M)
539
539
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
541
541
MCFG_DEVICE_REMOVE("pokey3")