trunk/src/mame/drivers/namcos2.c
| r22047 | r22048 | |
| 1 | 1 | /*************************************************************************** |
| 2 | | |
| 2 | |
| 3 | 3 | Namco System II driver by K.Wilkins (Jun1998, Oct1999) |
| 4 | 4 | Email: kwns2@dysfunction.demon.co.uk |
| 5 | 5 | |
| r22047 | r22048 | |
| 462 | 462 | #define M68K_CPU_CLOCK (MAIN_OSC_CLOCK / 4) /* 12.288MHz clock for 68000 (Master & Slave) */ |
| 463 | 463 | #define M68B09_CPU_CLOCK (MAIN_OSC_CLOCK / 24) /* 2.048MHz clock for 68B09 sound CPU */ |
| 464 | 464 | #define C65_CPU_CLOCK (MAIN_OSC_CLOCK / 24) /* 2.048MHz clock for 63705 (or 63B05) I/O CPU */ |
| 465 | #define C68_CPU_CLOCK (MAIN_OSC_CLOCK / 6) /* 8.192MHz clock for 37450 I/O CPU */ |
| 465 | 466 | #define YM2151_SOUND_CLOCK XTAL_3_579545MHz /* 3.579545MHz FM clock */ |
| 466 | 467 | #define C140_SOUND_CLOCK (MAIN_OSC_CLOCK / 384 / 6) /* 21.333kHz C140 clock (was 8000000/374 or 21.390kHz) */ |
| 467 | 468 | |
| r22047 | r22048 | |
| 573 | 574 | m_dpram[offset] = data; |
| 574 | 575 | } |
| 575 | 576 | |
| 577 | READ8_MEMBER(namcos2_state::ack_mcu_vbl_r) |
| 578 | { |
| 579 | m_c68->set_input_line(m37450_device::M3745X_INT1_LINE, CLEAR_LINE); |
| 580 | return 0; |
| 581 | } |
| 582 | |
| 576 | 583 | /*************************************************************/ |
| 577 | 584 | /* SHARED 68000 CPU Memory declarations */ |
| 578 | 585 | /*************************************************************/ |
| r22047 | r22048 | |
| 779 | 786 | |
| 780 | 787 | |
| 781 | 788 | /*************************************************************/ |
| 789 | /* 37450 (C68) IO CPU Memory declarations */ |
| 790 | /*************************************************************/ |
| 791 | READ8_MEMBER(namcos2_state::c68_p5_r) |
| 792 | { |
| 793 | UINT8 rv; |
| 794 | |
| 795 | if (m_player_mux) |
| 796 | { |
| 797 | rv = space.machine().root_device().ioport("MCUB2")->read(); |
| 798 | } |
| 799 | else |
| 800 | { |
| 801 | rv = space.machine().root_device().ioport("MCUB")->read(); |
| 802 | } |
| 803 | |
| 804 | return rv; |
| 805 | } |
| 806 | |
| 807 | WRITE8_MEMBER(namcos2_state::c68_p3_w) |
| 808 | { |
| 809 | m_player_mux = (data & 0x80) ? 1 : 0; |
| 810 | } |
| 811 | |
| 812 | static ADDRESS_MAP_START( c68_default_am, AS_PROGRAM, 8, namcos2_state ) |
| 813 | /* input ports and dips are mapped here */ |
| 814 | AM_RANGE(0x2000, 0x2000) AM_READ_PORT("DSW") |
| 815 | AM_RANGE(0x3000, 0x3000) AM_READ_PORT("MCUDI0") |
| 816 | AM_RANGE(0x3001, 0x3001) AM_READ_PORT("MCUDI1") |
| 817 | AM_RANGE(0x3002, 0x3002) AM_READ_PORT("MCUDI2") |
| 818 | AM_RANGE(0x3003, 0x3003) AM_READ_PORT("MCUDI3") |
| 819 | AM_RANGE(0x5000, 0x57ff) AM_READWRITE(dpram_byte_r,dpram_byte_w) AM_SHARE("dpram") |
| 820 | AM_RANGE(0x6000, 0x6fff) AM_READ(ack_mcu_vbl_r) // VBL ack |
| 821 | AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("c68", 0) |
| 822 | ADDRESS_MAP_END |
| 823 | |
| 824 | /*************************************************************/ |
| 782 | 825 | /* */ |
| 783 | 826 | /* NAMCO SYSTEM 2 PORT MACROS */ |
| 784 | 827 | /* */ |
| r22047 | r22048 | |
| 1382 | 1425 | NAMCOS2_MCU_DIAL_DEFAULT |
| 1383 | 1426 | INPUT_PORTS_END |
| 1384 | 1427 | |
| 1428 | static INPUT_PORTS_START( sgunner2 ) |
| 1429 | PORT_START("MCUB") /* M37450 - PORT 5 (multiplexed) */ |
| 1430 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) |
| 1431 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) |
| 1432 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) |
| 1433 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) |
| 1434 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) |
| 1435 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) |
| 1436 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) |
| 1437 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) |
| 1438 | |
| 1439 | PORT_START("MCUB2") |
| 1440 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) |
| 1441 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) |
| 1442 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) |
| 1443 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) |
| 1444 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 1445 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) |
| 1446 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) |
| 1447 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_PLAYER(2) |
| 1448 | |
| 1449 | PORT_START("MCUC") /* M37450 - PORT 6 */ |
| 1450 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1451 | |
| 1452 | PORT_START("AN0") /* M37450 - 8 CHANNEL ANALOG - CHANNEL 0 */ |
| 1453 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1454 | PORT_START("AN1") |
| 1455 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1456 | PORT_START("AN2") |
| 1457 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1458 | PORT_START("AN3") |
| 1459 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1460 | PORT_START("AN4") |
| 1461 | PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(8) |
| 1462 | PORT_START("AN5") |
| 1463 | PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(8) PORT_PLAYER(2) |
| 1464 | PORT_START("AN6") |
| 1465 | PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(8) |
| 1466 | PORT_START("AN7") |
| 1467 | PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(8) PORT_PLAYER(2) |
| 1468 | |
| 1469 | PORT_START("MCUH") /* M37450 - PORT 3 */ |
| 1470 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 1471 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 1472 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_0) /* Make it accessible by default*/ \ |
| 1473 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 1474 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 1475 | |
| 1476 | NAMCOS2_MCU_DIPSW_DEFAULT |
| 1477 | NAMCOS2_MCU_DIAL_DEFAULT |
| 1478 | INPUT_PORTS_END |
| 1479 | |
| 1385 | 1480 | static INPUT_PORTS_START( dirtfox ) |
| 1386 | 1481 | PORT_START("MCUB") /* 63B05Z0 - PORT B */ |
| 1387 | 1482 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Gear Shift Up") /* Gear shift up */ |
| r22047 | r22048 | |
| 1826 | 1921 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.80) |
| 1827 | 1922 | MACHINE_CONFIG_END |
| 1828 | 1923 | |
| 1924 | static MACHINE_CONFIG_START( sgunner2, namcos2_state ) |
| 1925 | MCFG_CPU_ADD("maincpu", M68000, M68K_CPU_CLOCK) /* 12.288MHz (49.152MHz OSC/4) */ |
| 1926 | MCFG_CPU_PROGRAM_MAP(master_sgunner_am) |
| 1927 | MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos2_shared_state, namcos2_68k_master_vblank) |
| 1928 | |
| 1929 | MCFG_CPU_ADD("slave", M68000, M68K_CPU_CLOCK) /* 12.288MHz (49.152MHz OSC/4) */ |
| 1930 | MCFG_CPU_PROGRAM_MAP(slave_sgunner_am) |
| 1931 | MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos2_shared_state, namcos2_68k_slave_vblank) |
| 1932 | |
| 1933 | MCFG_CPU_ADD("audiocpu", M6809, M68B09_CPU_CLOCK) /* 2.048MHz (49.152MHz OSC/24) - Sound handling */ |
| 1934 | MCFG_CPU_PROGRAM_MAP(sound_default_am) |
| 1935 | MCFG_CPU_PERIODIC_INT_DRIVER(namcos2_shared_state, irq0_line_hold, 2*60) |
| 1936 | MCFG_CPU_PERIODIC_INT_DRIVER(namcos2_shared_state, irq1_line_hold, 120) |
| 1937 | |
| 1938 | MCFG_CPU_ADD("c68", M37450, C68_CPU_CLOCK) /* C68 @ 8.192MHz (49.152MHz OSC/6) - I/O handling */ |
| 1939 | MCFG_M3745X_ADC14_CALLBACKS(IOPORT("AN0"), IOPORT("AN1"), IOPORT("AN2"), IOPORT("AN3")) |
| 1940 | MCFG_M3745X_ADC58_CALLBACKS(IOPORT("AN4"), IOPORT("AN5"), IOPORT("AN6"), IOPORT("AN7")) |
| 1941 | MCFG_M3745X_PORT3_CALLBACKS(IOPORT("MCUH"), WRITE8(namcos2_state, c68_p3_w)) // coins/test/service |
| 1942 | MCFG_M3745X_PORT5_CALLBACKS(READ8(namcos2_state, c68_p5_r), NULL) // muxed player 1/2 |
| 1943 | MCFG_M3745X_PORT6_CALLBACKS(IOPORT("MCUC"), NULL) // unused in sgunner2 |
| 1944 | MCFG_CPU_PROGRAM_MAP(c68_default_am) |
| 1945 | MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos2_shared_state, irq0_line_assert) // 37450 maps INT1 to irq0 as it's the first external interrupt on that chip |
| 1946 | |
| 1947 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* CPU slices per frame */ |
| 1948 | |
| 1949 | MCFG_MACHINE_START_OVERRIDE(namcos2_state,namcos2) |
| 1950 | MCFG_MACHINE_RESET_OVERRIDE(namcos2_state,namcos2) |
| 1951 | MCFG_NVRAM_ADD_1FILL("nvram") |
| 1952 | |
| 1953 | MCFG_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) |
| 1954 | |
| 1955 | MCFG_SCREEN_ADD("screen", RASTER) |
| 1956 | MCFG_SCREEN_REFRESH_RATE( (49152000.0 / 8) / (384 * 264) ) |
| 1957 | MCFG_SCREEN_SIZE(384, 264) |
| 1958 | MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1) |
| 1959 | MCFG_SCREEN_UPDATE_DRIVER(namcos2_state, screen_update_sgunner) |
| 1960 | |
| 1961 | MCFG_GFXDECODE(sgunner) |
| 1962 | MCFG_PALETTE_LENGTH(0x2000) |
| 1963 | |
| 1964 | MCFG_VIDEO_START_OVERRIDE(namcos2_state, sgunner) |
| 1965 | |
| 1966 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1967 | |
| 1968 | MCFG_C140_ADD("c140", C140_SOUND_CLOCK) /* 21.333kHz */ |
| 1969 | MCFG_SOUND_CONFIG(c140_config) |
| 1970 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.75) |
| 1971 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.75) |
| 1972 | |
| 1973 | MCFG_YM2151_ADD("ymsnd", YM2151_SOUND_CLOCK) /* 3.579545MHz */ |
| 1974 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.80) |
| 1975 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.80) |
| 1976 | MACHINE_CONFIG_END |
| 1977 | |
| 1829 | 1978 | static MACHINE_CONFIG_START( luckywld, namcos2_state ) |
| 1830 | 1979 | MCFG_CPU_ADD("maincpu", M68000, M68K_CPU_CLOCK) /* 12.288MHz (49.152MHz OSC/4) */ |
| 1831 | 1980 | MCFG_CPU_PROGRAM_MAP(master_luckywld_am) |
| r22047 | r22048 | |
| 4125 | 4274 | ROM_CONTINUE( 0x010000, 0x01c000 ) |
| 4126 | 4275 | ROM_RELOAD( 0x010000, 0x020000 ) |
| 4127 | 4276 | |
| 4128 | | ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */ |
| 4129 | | ROM_LOAD( "sys2mcpu.bin", 0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) ) |
| 4130 | | ROM_LOAD( "sys2c65c.bin", 0x008000, 0x008000, CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) ) |
| 4131 | | |
| 4132 | 4277 | ROM_REGION( 0x8000, "c68", 0 ) /* C68 (M37450) I/O MCU program */ |
| 4133 | 4278 | ROM_LOAD( "sys2_c68.3f", 0x000000, 0x008000, CRC(ca64550a) SHA1(38d1ad1b1287cadef0c999aff9357927315f8e6b) ) |
| 4134 | 4279 | |
| r22047 | r22048 | |
| 5327 | 5472 | /* from sys2c65b to sys2c65c sometime between 1988 and 1990 as mirai ninja */ |
| 5328 | 5473 | /* and metal hawk have the B version and dragon saber has the C version */ |
| 5329 | 5474 | |
| 5330 | | /* YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR, COMPANY, FULLNAME */ |
| 5475 | /* YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR, COMPANY, FULLNAME */ |
| 5331 | 5476 | GAMEL(1987, finallap, 0, finallap, finallap, namcos2_state, finallap, ROT0, "Namco", "Final Lap (Rev E)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap ) |
| 5332 | 5477 | GAMEL(1987, finallapd, finallap, finallap, finallap, namcos2_state, finallap, ROT0, "Namco", "Final Lap (Rev D)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap ) |
| 5333 | 5478 | GAMEL(1987, finallapc, finallap, finallap, finallap, namcos2_state, finallap, ROT0, "Namco", "Final Lap (Rev C)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap ) |
| r22047 | r22048 | |
| 5379 | 5524 | GAME( 1990, sgunner, 0, sgunner, sgunner, namcos2_state, sgunner2, ROT0, "Namco", "Steel Gunner", 0 ) |
| 5380 | 5525 | GAME( 1990, sgunnerj, sgunner, sgunner, sgunner, namcos2_state, sgunner2, ROT0, "Namco", "Steel Gunner (Japan)", 0 ) |
| 5381 | 5526 | |
| 5382 | | GAME( 1991, sgunner2, 0, sgunner, sgunner, namcos2_state, sgunner2, ROT0, "Namco", "Steel Gunner 2 (US)", 0 ) |
| 5383 | | GAME( 1991, sgunner2j, sgunner2, sgunner, sgunner, namcos2_state, sgunner2, ROT0, "Namco", "Steel Gunner 2 (Japan)", 0 ) |
| 5527 | GAME( 1991, sgunner2, 0, sgunner2, sgunner2,namcos2_state, sgunner2, ROT0, "Namco", "Steel Gunner 2 (US)", 0 ) |
| 5528 | GAME( 1991, sgunner2j, sgunner2, sgunner2, sgunner2,namcos2_state, sgunner2, ROT0, "Namco", "Steel Gunner 2 (Japan)", 0 ) |
| 5384 | 5529 | |
| 5385 | 5530 | GAME( 1991, cosmogng, 0, default, default, namcos2_state, cosmogng, ROT90, "Namco", "Cosmo Gang the Video (US)", 0 ) |
| 5386 | 5531 | GAME( 1991, cosmogngj, cosmogng, default, default, namcos2_state, cosmogng, ROT90, "Namco", "Cosmo Gang the Video (Japan)", 0 ) |