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

« back to all changes in this revision

Viewing changes to mess/systems/genesis.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:
39
39
In Memory Of Haruki Ikeda
40
40
 
41
41
***************************************************************************/
42
 
#ifndef FALSE
43
 
#define FALSE 0
44
 
#endif
45
 
#ifndef TRUE
46
 
#define TRUE 1
47
 
#endif
48
42
 
49
43
#include "driver.h"
50
44
#include "sound/2612intf.h"
221
215
        return retval;
222
216
}
223
217
 
224
 
DEVICE_LOAD(genesis_cart)
 
218
int device_load_genesis_cart(mess_image *image, mame_file *file)
225
219
{
226
220
        unsigned char *tmpROMnew, *tmpROM;
227
221
        unsigned char *secondhalf;
275
269
 
276
270
                if (!tmpROMnew)
277
271
                {
278
 
                        printf("Memory allocation failed reading roms!\n");
 
272
                        logerror("Memory allocation failed reading roms!\n");
279
273
                        goto bad;
280
274
                }
281
275
 
322
316
 
323
317
/* Main Genesis 68k */
324
318
 
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)
331
 
 
332
 
        AM_RANGE(0xc00000, 0xdfffff) AM_READ(genesis_68000_vdp_r) /* 0x20 in size, masked in handler */
333
 
 
334
 
        AM_RANGE(0xe00000, 0xe0ffff) AM_READ(MRA16_BANK2) AM_MIRROR(0x1f0000)
335
 
              /* 0xe10000, 0xffffff mirrors above */
336
 
ADDRESS_MAP_END
337
 
 
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 */
342
 
 
343
 
        AM_RANGE(0xa10000, 0xa1001f) AM_WRITE(genesis_68000_io_w)
344
 
 
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)
347
326
 
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 */
349
328
 
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 */
352
331
ADDRESS_MAP_END
353
332
 
354
333
 
355
334
 
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)
361
 
 
362
 
/*      AM_RANGE(0x7f00, 0x7fff) AM_READ(genesis_z80_vdp_r) */
363
 
 
364
 
        AM_RANGE(0x8000, 0xffff) AM_READ(genesis_banked_68k_r)
365
 
 
366
 
/*      AM_RANGE(0x8000, 0xffff) AM_READ(MRA8_RAM) */
367
 
 
368
 
 
369
 
ADDRESS_MAP_END
370
 
 
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)
381
347
 
382
348
        AM_RANGE(0x7f00, 0x7fff) AM_WRITE(genesis_z80_vdp_w)
383
 
 
384
 
/*      AM_RANGE(0x8000, 0xffff) AM_WRITE(MWA8_RAM) */
 
349
/*      AM_RANGE(0x7f00, 0x7fff) AM_READ(genesis_z80_vdp_r) */
 
350
 
 
351
        AM_RANGE(0x8000, 0xffff) AM_READ(genesis_banked_68k_r)
 
352
 
 
353
/*      AM_RANGE(0x8000, 0xffff) AM_READ(MRA8_RAM) */
 
354
 
385
355
 
386
356
ADDRESS_MAP_END
387
357
 
388
358
 
 
359
 
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)
412
383
 
413
384
static struct YM2612interface ym3438_interface =
414
385
{
415
 
        1,                      /* 1 chip */
416
 
        7670000,        /* 8 MHz ?? */
417
 
        { YM3012_VOL(40,MIXER_PAN_CENTER,40,MIXER_PAN_CENTER) },        /* Volume */
418
 
        { 0 },
419
 
        { 0 },
420
 
        { 0 },
421
 
        { 0 },
422
 
/*      { ym3438_interrupt } */
423
 
};
424
 
 
425
 
static struct SN76496interface sn76489_intf =
426
 
{
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 */
430
 
};
 
386
        NULL    /*      ym3438_interrupt */
 
387
};
 
388
 
 
389
 
431
390
 
432
391
static MACHINE_DRIVER_START( gen_ntsc )
433
392
 
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? */
437
396
 
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)
440
399
 
441
400
        MDRV_FRAMES_PER_SECOND(60)
442
401
        MDRV_VBLANK_DURATION(0)
451
410
        MDRV_INTERLEAVE(100)
452
411
 
453
412
 
454
 
        MDRV_MACHINE_INIT(genesis)
 
413
        MDRV_MACHINE_RESET(genesis)
455
414
 
456
415
        MDRV_VIDEO_START(genesis)
457
416
        MDRV_VIDEO_UPDATE(genesis)
458
417
 
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)
463
428
 
464
429
MACHINE_DRIVER_END
465
430
 
496
461
        ROM_REGION( 0x10000, REGION_CPU2, 0)
497
462
ROM_END
498
463
 
 
464
static void genesis_cartslot_getinfo(const device_class *devclass, UINT32 state, union devinfo *info)
 
465
{
 
466
        /* cartslot */
 
467
        switch(state)
 
468
        {
 
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;
 
472
 
 
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;
 
476
 
 
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;
 
479
 
 
480
                default:                                                                                cartslot_device_getinfo(devclass, state, info); break;
 
481
        }
 
482
}
 
483
 
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
502
487
 
503
488
DRIVER_INIT(gen_usa)
538
523
***************************************************************************/
539
524
 
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)