Previous 199869 Revisions Next

r22048 Saturday 23rd March, 2013 at 18:57:34 UTC by R. Belmont
namcos2: Use the correct C68 (M37450) I/O MCU for Steel Gunner 2. [R. Belmont, Guru, Charles MacDonald]
[src/mame]mame.mak
[src/mame/drivers]namcos2.c
[src/mame/includes]namcos2.h
[src/mame/machine]namcos2.c

trunk/src/mame/drivers/namcos2.c
r22047r22048
11/***************************************************************************
2
2
33Namco System II driver by K.Wilkins  (Jun1998, Oct1999)
44Email: kwns2@dysfunction.demon.co.uk
55
r22047r22048
462462#define M68K_CPU_CLOCK      (MAIN_OSC_CLOCK / 4)        /* 12.288MHz clock for 68000 (Master & Slave) */
463463#define M68B09_CPU_CLOCK    (MAIN_OSC_CLOCK / 24)       /* 2.048MHz clock for 68B09 sound CPU */
464464#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 */
465466#define YM2151_SOUND_CLOCK  XTAL_3_579545MHz        /* 3.579545MHz FM clock */
466467#define C140_SOUND_CLOCK    (MAIN_OSC_CLOCK / 384 / 6)  /* 21.333kHz C140 clock (was 8000000/374 or 21.390kHz) */
467468
r22047r22048
573574   m_dpram[offset] = data;
574575}
575576
577READ8_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
576583/*************************************************************/
577584/* SHARED 68000 CPU Memory declarations                      */
578585/*************************************************************/
r22047r22048
779786
780787
781788/*************************************************************/
789/* 37450 (C68) IO CPU Memory declarations                    */
790/*************************************************************/
791READ8_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
807WRITE8_MEMBER(namcos2_state::c68_p3_w)
808{
809   m_player_mux = (data & 0x80) ? 1 : 0;
810}
811
812static 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)
822ADDRESS_MAP_END
823
824/*************************************************************/
782825/*                                                           */
783826/*  NAMCO SYSTEM 2 PORT MACROS                               */
784827/*                                                           */
r22047r22048
13821425   NAMCOS2_MCU_DIAL_DEFAULT
13831426INPUT_PORTS_END
13841427
1428static 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
1478INPUT_PORTS_END
1479
13851480static INPUT_PORTS_START( dirtfox )
13861481   PORT_START("MCUB")      /* 63B05Z0 - PORT B */
13871482   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Gear Shift Up") /* Gear shift up */
r22047r22048
18261921   MCFG_SOUND_ROUTE(1, "rspeaker", 0.80)
18271922MACHINE_CONFIG_END
18281923
1924static 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)
1976MACHINE_CONFIG_END
1977
18291978static MACHINE_CONFIG_START( luckywld, namcos2_state )
18301979   MCFG_CPU_ADD("maincpu", M68000, M68K_CPU_CLOCK) /* 12.288MHz (49.152MHz OSC/4) */
18311980   MCFG_CPU_PROGRAM_MAP(master_luckywld_am)
r22047r22048
41254274   ROM_CONTINUE( 0x010000, 0x01c000 )
41264275   ROM_RELOAD(  0x010000, 0x020000 )
41274276
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
41324277   ROM_REGION( 0x8000, "c68", 0 ) /* C68 (M37450) I/O MCU program */
41334278   ROM_LOAD( "sys2_c68.3f",  0x000000, 0x008000, CRC(ca64550a) SHA1(38d1ad1b1287cadef0c999aff9357927315f8e6b) )
41344279
r22047r22048
53275472/* from sys2c65b to sys2c65c sometime between 1988 and 1990 as mirai ninja    */
53285473/* and metal hawk have the B version and dragon saber has the C version       */
53295474
5330/*    YEAR, NAME,     PARENT,   MACHINE,  INPUT,    INIT,     MONITOR, COMPANY, FULLNAME */
5475/*    YEAR, NAME,     PARENT,   MACHINE,  INPUT,    STATE,        INIT,     MONITOR, COMPANY, FULLNAME */
53315476GAMEL(1987, finallap,  0,        finallap, finallap, namcos2_state, finallap, ROT0,   "Namco", "Final Lap (Rev E)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap )
53325477GAMEL(1987, finallapd, finallap, finallap, finallap, namcos2_state, finallap, ROT0,   "Namco", "Final Lap (Rev D)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap )
53335478GAMEL(1987, finallapc, finallap, finallap, finallap, namcos2_state, finallap, ROT0,   "Namco", "Final Lap (Rev C)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap )
r22047r22048
53795524GAME( 1990, sgunner,   0,        sgunner,  sgunner, namcos2_state,  sgunner2, ROT0,   "Namco", "Steel Gunner", 0 )
53805525GAME( 1990, sgunnerj,  sgunner,  sgunner,  sgunner, namcos2_state,  sgunner2, ROT0,   "Namco", "Steel Gunner (Japan)", 0 )
53815526
5382GAME( 1991, sgunner2,  0,        sgunner,  sgunner, namcos2_state,  sgunner2, ROT0,   "Namco", "Steel Gunner 2 (US)", 0 )
5383GAME( 1991, sgunner2j, sgunner2, sgunner,  sgunner, namcos2_state,  sgunner2, ROT0,   "Namco", "Steel Gunner 2 (Japan)", 0 )
5527GAME( 1991, sgunner2,  0,        sgunner2, sgunner2,namcos2_state,  sgunner2, ROT0,   "Namco", "Steel Gunner 2 (US)", 0 )
5528GAME( 1991, sgunner2j, sgunner2, sgunner2, sgunner2,namcos2_state,  sgunner2, ROT0,   "Namco", "Steel Gunner 2 (Japan)", 0 )
53845529
53855530GAME( 1991, cosmogng,  0,        default,  default, namcos2_state,  cosmogng, ROT90,  "Namco", "Cosmo Gang the Video (US)", 0 )
53865531GAME( 1991, cosmogngj, cosmogng, default,  default, namcos2_state,  cosmogng, ROT90,  "Namco", "Cosmo Gang the Video (Japan)", 0 )
trunk/src/mame/machine/namcos2.c
r22047r22048
8383static void
8484ResetAllSubCPUs( running_machine &machine, int state )
8585{
86   namcos2_shared_state *s2state = machine.driver_data<namcos2_shared_state>();
87
8688   machine.device("slave")->execute().set_input_line(INPUT_LINE_RESET, state);
87   machine.device("mcu")->execute().set_input_line(INPUT_LINE_RESET, state);
89   if (s2state->m_c68)
90   {
91      machine.device("c68")->execute().set_input_line(INPUT_LINE_RESET, state);
92   }
93   else
94   {
95      machine.device("mcu")->execute().set_input_line(INPUT_LINE_RESET, state);
96   }
8897   switch( machine.driver_data<namcos2_shared_state>()->m_gametype )
8998   {
9099   case NAMCOS21_SOLVALOU:
r22047r22048
134143
135144   /* reset POSIRQ timer */
136145   namcos2_posirq_timer->adjust(attotime::never);
146   
147   m_player_mux = 0;
137148}
138149
139150/*************************************************************/
trunk/src/mame/mame.mak
r22047r22048
24002400$(VIDEO)/n64.o:     $(MAMESRC)/video/rdpfiltr.c
24012401$(DRIVERS)/bfm_sc4.o: $(MAMESRC)/includes/bfm_sc45.h
24022402$(DRIVERS)/bfm_sc5.o: $(MAMESRC)/includes/bfm_sc45.h
2403$(DRIVERS)/namcos2.o: $(MAMESRC)/includes/namcos2.h
2404$(MACHINE)/namcos2.o: $(MAMESRC)/includes/namcos2.h
2405$(VIDEO)/namcos2.o: $(MAMESRC)/includes/namcos2.h
24032406
trunk/src/mame/includes/namcos2.h
r22047r22048
77***************************************************************************/
88
99#include "namcoic.h"
10#include "cpu/m6502/m3745x.h"
1011
1112/* CPU reference numbers */
1213
r22047r22048
9495public:
9596   namcos2_shared_state(const machine_config &mconfig, device_type type, const char *tag)
9697      : driver_device(mconfig, type, tag),
98         m_c68(*this, "c68"),
9799         m_gametype(0),
98100         m_c169_roz_videoram(*this, "rozvideoram", 0),
99101         m_c169_roz_gfxbank(0),
r22047r22048
102104         m_c355_obj_palxor(0)
103105   { }
104106
107   optional_device<m37450_device> m_c68;
108
105109   // game type helpers
106110   bool is_system21();
107111   int m_gametype;
r22047r22048
174178   UINT16 m_c355_obj_position[4];
175179   UINT16 m_c355_obj_ram[0x20000/2];
176180
181   UINT8 m_player_mux;
182
177183public:
178184   // general
179185   void zdrawgfxzoom(bitmap_ind16 &dest_bmp, const rectangle &clip, gfx_element *gfx, UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, int zpos);
r22047r22048
217223         m_roz_ctrl(*this, "rozctrl"),
218224         m_c45_road(*this, "c45_road")
219225   { }
226
227   DECLARE_READ8_MEMBER(c68_p5_r);
228   DECLARE_WRITE8_MEMBER(c68_p3_w);
220229   DECLARE_READ16_MEMBER(dpram_word_r);
221230   DECLARE_WRITE16_MEMBER(dpram_word_w);
222231   DECLARE_READ8_MEMBER(dpram_byte_r);
223232   DECLARE_WRITE8_MEMBER(dpram_byte_w);
233   DECLARE_READ8_MEMBER(ack_mcu_vbl_r);
224234   DECLARE_DRIVER_INIT(cosmogng);
225235   DECLARE_DRIVER_INIT(sgunner2);
226236   DECLARE_DRIVER_INIT(kyukaidk);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team