323
317
/* Main Genesis 68k */
325
static ADDRESS_MAP_START( genesis_68000_readmem, ADDRESS_SPACE_PROGRAM, 16 )
326
AM_RANGE(0x000000, 0x3fffff) AM_READ(MRA16_ROM) /* cartridge area */
327
AM_RANGE(0xa00000, 0xa07fff) AM_READ(genesis_68000_z80_read) AM_MIRROR(0x8000) /* z80 area */
328
/* 0xa08000, 0xa0ffff mirrors above */
329
AM_RANGE(0xa10000, 0xa1001f) AM_READ(genesis_68000_io_r)
330
AM_RANGE(0xa11100, 0xa11101) AM_READ(genesis_68000_z80_busreq_r)
332
AM_RANGE(0xc00000, 0xdfffff) AM_READ(genesis_68000_vdp_r) /* 0x20 in size, masked in handler */
334
AM_RANGE(0xe00000, 0xe0ffff) AM_READ(MRA16_BANK2) AM_MIRROR(0x1f0000)
335
/* 0xe10000, 0xffffff mirrors above */
338
static ADDRESS_MAP_START( genesis_68000_writemem, ADDRESS_SPACE_PROGRAM, 16 )
339
AM_RANGE(0x000000, 0x3fffff) AM_WRITE(MWA16_ROM) AM_BASE(&genesis_cartridge) /* cartridge area */
340
AM_RANGE(0xa00000, 0xa07fff) AM_WRITE(genesis_68000_z80_write) AM_MIRROR(0x8000) /* z80 area */
341
/* 0xa08000, 0xa0ffff mirrors above */
343
AM_RANGE(0xa10000, 0xa1001f) AM_WRITE(genesis_68000_io_w)
345
AM_RANGE(0xa11100, 0xa11101) AM_WRITE(genesis_68000_z80_busreq_w)
319
static ADDRESS_MAP_START( genesis_68000_mem, ADDRESS_SPACE_PROGRAM, 16 )
320
AM_RANGE(0x000000, 0x3fffff) AM_ROM AM_BASE(&genesis_cartridge) /* cartridge area */
321
AM_RANGE(0xa00000, 0xa07fff) AM_READWRITE(genesis_68000_z80_read, genesis_68000_z80_write) AM_MIRROR(0x8000) /* z80 area */
322
/* 0xa08000, 0xa0ffff mirrors above */
323
AM_RANGE(0xa10000, 0xa1001f) AM_READWRITE(genesis_68000_io_r, genesis_68000_io_w)
324
AM_RANGE(0xa11100, 0xa11101) AM_READWRITE(genesis_68000_z80_busreq_r, genesis_68000_z80_busreq_w)
346
325
AM_RANGE(0xa11200, 0xa11201) AM_WRITE(genesis_68000_z80_reset_w)
348
AM_RANGE(0xc00000, 0xdfffff) AM_WRITE(genesis_68000_vdp_w) /* 0x20 in size, masked in handler */
327
AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(genesis_68000_vdp_r, genesis_68000_vdp_w) /* 0x20 in size, masked in handler */
350
AM_RANGE(0xe00000, 0xe0ffff) AM_WRITE(MWA16_BANK2) AM_MIRROR(0x1f0000)
329
AM_RANGE(0xe00000, 0xe0ffff) AM_RAMBANK(2) AM_MIRROR(0x1f0000)
351
330
/* 0xe10000, 0xffffff mirrors above */
356
static ADDRESS_MAP_START( genesis_z80_readmem, ADDRESS_SPACE_PROGRAM, 8 )
357
AM_RANGE(0x0000, 0x1fff) AM_READ(MRA8_RAM)/* AM_MIRROR(0x2000) */
335
static ADDRESS_MAP_START( genesis_z80_mem, ADDRESS_SPACE_PROGRAM, 8 )
336
AM_RANGE(0x0000, 0x1fff) AM_RAM /* AM_MIRROR(0x2000) */
358
337
/* 0x2000, 0x3fff mirrors above */
359
338
/* AM_RANGE(0x4000, 0x5fff) AM_READ(z80_ym2612_r) */
360
339
AM_RANGE(0x4000, 0x4000) AM_READ(YM2612_status_port_0_A_r)
362
/* AM_RANGE(0x7f00, 0x7fff) AM_READ(genesis_z80_vdp_r) */
364
AM_RANGE(0x8000, 0xffff) AM_READ(genesis_banked_68k_r)
366
/* AM_RANGE(0x8000, 0xffff) AM_READ(MRA8_RAM) */
371
static ADDRESS_MAP_START( genesis_z80_writemem, ADDRESS_SPACE_PROGRAM, 8 )
372
AM_RANGE(0x0000, 0x1fff) AM_WRITE(MWA8_RAM)/* AM_MIRROR(0x2000) */
373
/* 0x2000, 0x3fff mirrors above */
374
340
AM_RANGE(0x4000, 0x5fff) AM_WRITE(z80_ym2612_w)
375
341
/* AM_RANGE(0x4000, 0x4000) AM_WRITE(YM2612_control_port_0_A_w) */
376
342
/* AM_RANGE(0x4001, 0x4001) AM_WRITE(YM2612_data_port_0_A_w) */
380
346
AM_RANGE(0x6000, 0x60ff) AM_WRITE(genesis_z80_bank_sel_w)
382
348
AM_RANGE(0x7f00, 0x7fff) AM_WRITE(genesis_z80_vdp_w)
384
/* AM_RANGE(0x8000, 0xffff) AM_WRITE(MWA8_RAM) */
349
/* AM_RANGE(0x7f00, 0x7fff) AM_READ(genesis_z80_vdp_r) */
351
AM_RANGE(0x8000, 0xffff) AM_READ(genesis_banked_68k_r)
353
/* AM_RANGE(0x8000, 0xffff) AM_READ(MRA8_RAM) */
389
360
INPUT_PORTS_START( genesis )
390
361
PORT_START /* IN0 player 1 controller */
391
362
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(1)
413
384
static struct YM2612interface ym3438_interface =
416
7670000, /* 8 MHz ?? */
417
{ YM3012_VOL(40,MIXER_PAN_CENTER,40,MIXER_PAN_CENTER) }, /* Volume */
422
/* { ym3438_interrupt } */
425
static struct SN76496interface sn76489_intf =
427
2, /* Two chips, one in the Genesis VDP and one in the SMS VDP */
428
{ 3580000, 3580000 }, /* Clock: 3.58 MHz */
429
{ 50, 50 } /* Volume */
386
NULL /* ym3438_interrupt */
432
391
static MACHINE_DRIVER_START( gen_ntsc )
434
393
MDRV_CPU_ADD_TAG("main", M68000, 7670000)
435
MDRV_CPU_PROGRAM_MAP(genesis_68000_readmem,genesis_68000_writemem)
394
MDRV_CPU_PROGRAM_MAP(genesis_68000_mem, 0)
436
395
MDRV_CPU_VBLANK_INT(genesis_interrupt,262) /* use timers instead? */
438
397
MDRV_CPU_ADD(Z80, 3580000)
439
MDRV_CPU_PROGRAM_MAP(genesis_z80_readmem,genesis_z80_writemem)
398
MDRV_CPU_PROGRAM_MAP(genesis_z80_mem, 0)
441
400
MDRV_FRAMES_PER_SECOND(60)
442
401
MDRV_VBLANK_DURATION(0)
451
410
MDRV_INTERLEAVE(100)
454
MDRV_MACHINE_INIT(genesis)
413
MDRV_MACHINE_RESET(genesis)
456
415
MDRV_VIDEO_START(genesis)
457
416
MDRV_VIDEO_UPDATE(genesis)
459
418
/* sound hardware */
460
MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
461
MDRV_SOUND_ADD(YM2612, ym3438_interface)
462
MDRV_SOUND_ADD(SN76496, sn76489_intf)
419
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
420
MDRV_SOUND_ADD(YM2612, 7670000)
421
MDRV_SOUND_CONFIG(ym3438_interface) /* 8 MHz ?? */
422
MDRV_SOUND_ROUTE(0, "left", 0.50)
423
MDRV_SOUND_ROUTE(1, "right", 0.50)
424
MDRV_SOUND_ADD(SN76496, 3580000) /* 3.58 MHz */
425
MDRV_SOUND_ROUTE(0, "left", 0.50)
426
MDRV_SOUND_ADD(SN76496, 3580000) /* 3.58 MHz */
427
MDRV_SOUND_ROUTE(1, "right", 0.50)
464
429
MACHINE_DRIVER_END
496
461
ROM_REGION( 0x10000, REGION_CPU2, 0)
464
static void genesis_cartslot_getinfo(const device_class *devclass, UINT32 state, union devinfo *info)
469
/* --- the following bits of info are returned as 64-bit signed integers --- */
470
case DEVINFO_INT_COUNT: info->i = 1; break;
471
case DEVINFO_INT_MUST_BE_LOADED: info->i = 1; break;
473
/* --- the following bits of info are returned as pointers to data or functions --- */
474
case DEVINFO_PTR_LOAD: info->load = device_load_genesis_cart; break;
475
case DEVINFO_PTR_PARTIAL_HASH: info->partialhash = NULL; /*genesis_partialhash*/ break;
477
/* --- the following bits of info are returned as NULL-terminated strings --- */
478
case DEVINFO_STR_FILE_EXTENSIONS: strcpy(info->s = device_temp_str(), "smd,bin,md"); break;
480
default: cartslot_device_getinfo(devclass, state, info); break;
499
484
SYSTEM_CONFIG_START(genesis)
500
CONFIG_DEVICE_CARTSLOT_REQ( 1, "smd\0bin\0md\0", NULL, NULL, device_load_genesis_cart, NULL, NULL, NULL /*genesis_partialhash*/)
485
CONFIG_DEVICE(genesis_cartslot_getinfo)
501
486
SYSTEM_CONFIG_END
503
488
DRIVER_INIT(gen_usa)
538
523
***************************************************************************/
540
525
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT CONFIG COMPANY FULLNAME */
541
CONS( 1988, gen_usa, 0, 0, gen_ntsc, genesis, gen_usa, genesis, "Sega", "Genesis (USA, NTSC)" )
542
CONS( 1988, gen_eur, gen_usa, 0, gen_pal, genesis, gen_eur, genesis, "Sega", "Megadrive (Europe, PAL)" )
543
CONS( 1988, gen_jpn, gen_usa, 0, gen_ntsc, genesis, gen_jpn, genesis, "Sega", "Megadrive (Japan, NTSC)" )
526
CONS( 1988, gen_usa, 0, 0, gen_ntsc, genesis, gen_usa, genesis, "Sega", "Genesis (USA, NTSC)" , 0)
527
CONS( 1988, gen_eur, gen_usa, 0, gen_pal, genesis, gen_eur, genesis, "Sega", "Megadrive (Europe, PAL)" , 0)
528
CONS( 1988, gen_jpn, gen_usa, 0, gen_ntsc, genesis, gen_jpn, genesis, "Sega", "Megadrive (Japan, NTSC)" , 0)