diff options
Diffstat (limited to 'docs/release/src/hbmame/drivers/fcrash.cpp')
-rw-r--r-- | docs/release/src/hbmame/drivers/fcrash.cpp | 516 |
1 files changed, 264 insertions, 252 deletions
diff --git a/docs/release/src/hbmame/drivers/fcrash.cpp b/docs/release/src/hbmame/drivers/fcrash.cpp index 194f4a21fd9..e2c03b05b64 100644 --- a/docs/release/src/hbmame/drivers/fcrash.cpp +++ b/docs/release/src/hbmame/drivers/fcrash.cpp @@ -689,6 +689,7 @@ void cps_state::dinopic_map(address_map &map) { map(0x800030,0x800037).w(FUNC(cps_state::cps1_coinctrl_w)); map(0x800100,0x80013f).w(FUNC(cps_state::cps1_cps_a_w)).share("cps_a_regs"); /* CPS-A custom */ map(0x800140,0x80017f).rw(FUNC(cps_state::cps1_cps_b_r),FUNC(cps_state::cps1_cps_b_w)).share("cps_b_regs"); + map(0x800180,0x800181).nopr(); //w(FUNC(cps_state::fcrash_soundlatch_w)).lr8("sc", [this] { return 0xff; }); /* Sound command */ map(0x800222,0x800223).w(FUNC(cps_state::dinopic_layer2_w)); map(0x880000,0x880001).nopw(); // always 0 map(0x900000,0x92ffff).ram().w(FUNC(cps_state::cps1_gfxram_w)).share("gfxram"); @@ -696,7 +697,7 @@ void cps_state::dinopic_map(address_map &map) { map(0xf18000,0xf19fff).ram(); map(0xf1c000,0xf1c001).portr("IN2"); /* Player 3 controls (later games) */ map(0xf1c004,0xf1c005).w(FUNC(cps_state::cpsq_coinctrl2_w)); /* Coin control2 (later games) */ - map(0xf1c006,0xf1c007).portr("EEPROMIN"); + map(0xf1c006,0xf1c007).portr("EEPROMIN").portw("EEPROMOUT"); map(0xff0000,0xffffff).ram(); } @@ -727,7 +728,7 @@ void cps_state::punipic_map(address_map &map) { map(0x990000,0x990001).nopw(); // unknown map(0x991000,0x991017).nopw(); // unknown map(0xf18000,0xf19fff).ram(); - map(0xf1c006,0xf1c007).portr("EEPROMIN"); + map(0xf1c006,0xf1c007).portr("EEPROMIN").portw("EEPROMOUT"); map(0xff0000,0xffffff).ram().share("mainram"); } @@ -790,7 +791,7 @@ void cps_state::sgyxz_map(address_map &map) { map(0x890000,0x890001).w(FUNC(cps_state::cps1_soundlatch2_w)); map(0x900000,0x92ffff).ram().w(FUNC(cps_state::cps1_gfxram_w)).share("gfxram"); map(0xf1c004,0xf1c005).w(FUNC(cps_state::cpsq_coinctrl2_w)); /* Coin control2 (later games) */ - map(0xf1c006,0xf1c007).portr("EEPROMIN"); + map(0xf1c006,0xf1c007).portr("EEPROMIN").portw("EEPROMOUT"); map(0xff0000,0xffffff).ram(); } @@ -809,7 +810,7 @@ void cps_state::slampic_map(address_map &map) { map(0xf18000,0xf19fff).ram(); map(0xf1c000,0xf1c001).portr("IN2"); /* Player 3 controls (later games) */ map(0xf1c004,0xf1c005).w(FUNC(cps_state::cpsq_coinctrl2_w)); /* Coin control2 (later games) */ - map(0xf1c006,0xf1c007).portr("EEPROMIN"); + map(0xf1c006,0xf1c007).portr("EEPROMIN").portw("EEPROMOUT"); map(0xf1f000,0xf1ffff).noprw(); // writes 0 to range, then reads F1F6EC map(0xff0000,0xffffff).ram(); } @@ -1560,85 +1561,87 @@ MACHINE_RESET_MEMBER(cps_state,fcrash) m_sample_select2 = 0; } -MACHINE_CONFIG_START( cps_state::fcrash ) - +void cps_state::fcrash(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(fcrash_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack) + M68000(config, m_maincpu, 10000000); + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::fcrash_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::cps1_interrupt)); + m_maincpu->set_irq_acknowledge_callback(FUNC(cps_state::cps1_int_ack)); - MCFG_DEVICE_ADD("audiocpu", Z80, 24000000/6) /* ? */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) + Z80(config, m_audiocpu, 24000000/6); /* ? */ + m_audiocpu->set_addrmap(AS_PROGRAM, &cps_state::sound_map); MCFG_MACHINE_START_OVERRIDE(cps_state,fcrash) MCFG_MACHINE_RESET_OVERRIDE(cps_state,fcrash) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 4096) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1 ); + m_screen->set_screen_update(FUNC(cps_state::screen_update_fcrash)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); - MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(4096); + + MCFG_VIDEO_START_OVERRIDE(cps_state, cps1) // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("ym1", YM2203, 24000000/6) /* ? */ - MCFG_SOUND_ROUTE(0, "mono", 0.10) - MCFG_SOUND_ROUTE(1, "mono", 0.10) - MCFG_SOUND_ROUTE(2, "mono", 0.10) - MCFG_SOUND_ROUTE(3, "mono", 1.0) + ym2203_device &ym1(YM2203(config, "ym1", 24000000/6)); /* ? */ + ym1.add_route(0, "mono", 0.10); + ym1.add_route(1, "mono", 0.10); + ym1.add_route(2, "mono", 0.10); + ym1.add_route(3, "mono", 1.0); - MCFG_DEVICE_ADD("ym2", YM2203, 24000000/6) /* ? */ - MCFG_SOUND_ROUTE(0, "mono", 0.10) - MCFG_SOUND_ROUTE(1, "mono", 0.10) - MCFG_SOUND_ROUTE(2, "mono", 0.10) - MCFG_SOUND_ROUTE(3, "mono", 1.0) + ym2203_device &ym2(YM2203(config, "ym2", 24000000/6)); /* ? */ + ym2.add_route(0, "mono", 0.10); + ym2.add_route(1, "mono", 0.10); + ym2.add_route(2, "mono", 0.10); + ym2.add_route(3, "mono", 1.0); - MSM5205(config, m_msm_1, 24000000/64); /* ? */ + MSM5205(config, m_msm_1, 24000000/64); /* ? */ m_msm_1->vck_legacy_callback().set(FUNC(cps_state::m5205_int1)); /* interrupt function */ - m_msm_1->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ + m_msm_1->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ m_msm_1->add_route(ALL_OUTPUTS, "mono", 0.25); - MSM5205(config, m_msm_2, 24000000/64); /* ? */ + MSM5205(config, m_msm_2, 24000000/64); /* ? */ m_msm_2->vck_legacy_callback().set(FUNC(cps_state::m5205_int2)); /* interrupt function */ - m_msm_2->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ + m_msm_2->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ m_msm_2->add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} // HBMAME start -MACHINE_CONFIG_START( cps_state::cawingb ) - +void cps_state::cawingb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 10'000'000 ) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(fcrash_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, irq6_line_hold) /* needed to write to scroll values */ + M68000(config, m_maincpu, XTAL(10'000'000)); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::fcrash_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::cps1_interrupt)); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::irq6_line_hold)); + m_maincpu->set_irq_acknowledge_callback(FUNC(cps_state::cps1_int_ack)); - MCFG_DEVICE_ADD("audiocpu", Z80, 3'579'545) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(sub_map) + Z80(config, m_audiocpu, XTAL(3'579'545)); /* verified on pcb */ + m_audiocpu->set_addrmap(AS_PROGRAM, &cps_state::sub_map); MCFG_MACHINE_START_OVERRIDE(cps_state, cawingbl) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(8'000'000, 518, 64, 448, 259, 16, 240) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 0xc00) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(8'000'000, 518, 64, 448, 259, 16, 240); + m_screen->set_screen_update(FUNC(cps_state::screen_update_fcrash)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(0xc00); MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) @@ -1652,116 +1655,116 @@ MACHINE_CONFIG_START( cps_state::cawingb ) ym2151.add_route(0, "mono", 0.35); ym2151.add_route(1, "mono", 0.35); - MCFG_DEVICE_ADD("oki", OKIM6295, 1'000'000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, XTAL(16'000'000)/4/4, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.30); +} // HBMAME end -MACHINE_CONFIG_START( cps_state::cawingbl ) +void cps_state::cawingbl(machine_config &config) +{ fcrash(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, irq6_line_hold) /* needed to write to scroll values */ + m_maincpu->set_vblank_int("screen", FUNC(cps_state::irq6_line_hold)); /* needed to write to scroll values */ MCFG_MACHINE_START_OVERRIDE(cps_state, cawingbl) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START( cps_state::kodb ) +} +void cps_state::kodb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(fcrash_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack) + M68000(config, m_maincpu, 10000000); + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::fcrash_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::cps1_interrupt)); + m_maincpu->set_irq_acknowledge_callback(FUNC(cps_state::cps1_int_ack)); - MCFG_DEVICE_ADD("audiocpu", Z80, 3579545) - MCFG_DEVICE_PROGRAM_MAP(kodb_sound_map) + Z80(config, m_audiocpu, 3579545); + m_audiocpu->set_addrmap(AS_PROGRAM, &cps_state::kodb_sound_map); MCFG_MACHINE_START_OVERRIDE(cps_state,kodb) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 0xc00) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1); + m_screen->set_screen_update(FUNC(cps_state::screen_update_fcrash)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(0xc00); MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) /* sound hardware */ SPEAKER(config, "mono").front_center(); + GENERIC_LATCH_8(config, m_soundlatch); - ym2151_device &ym2151(YM2151(config, "2151", XTAL(3'579'545))); + ym2151_device &ym2151(YM2151(config, "2151", XTAL(3'579'545))); /* verified on pcb */ ym2151.irq_handler().set_inputline(m_audiocpu, 0); ym2151.add_route(0, "mono", 0.35); ym2151.add_route(1, "mono", 0.35); /* CPS PPU is fed by a 16mhz clock,pin 117 outputs a 4mhz clock which is divided by 4 using 2 74ls74 */ - MCFG_DEVICE_ADD("oki", OKIM6295, 1'000'000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START( cps_state::sf2mdt ) + OKIM6295(config, m_oki, XTAL(16'000'000)/4/4, okim6295_device::PIN7_HIGH); // pin 7 can be changed by the game code, see f006 on z80 + m_oki->add_route(ALL_OUTPUTS, "mono", 0.30); +} +void cps_state::sf2mdt(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 12000000) - MCFG_DEVICE_PROGRAM_MAP(sf2mdt_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, irq4_line_hold) /* triggers the sprite ram and scroll writes */ + M68000(config, m_maincpu, 12000000); + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::sf2mdt_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::irq4_line_hold)); /* triggers the sprite ram and scroll writes */ - MCFG_DEVICE_ADD("audiocpu", Z80, 3579545) - MCFG_DEVICE_PROGRAM_MAP(sf2mdt_z80map) + Z80(config, m_audiocpu, 3579545); + m_audiocpu->set_addrmap(AS_PROGRAM, &cps_state::sf2mdt_z80map); MCFG_MACHINE_START_OVERRIDE(cps_state, sf2mdt) MCFG_MACHINE_RESET_OVERRIDE(cps_state,fcrash) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 4096) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1); + m_screen->set_screen_update(FUNC(cps_state::screen_update_fcrash)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(4096); MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("2151", YM2151, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(0, "mono", 0.35) - MCFG_SOUND_ROUTE(1, "mono", 0.35) + GENERIC_LATCH_8(config, m_soundlatch); + + YM2151(config, "2151", XTAL(3'579'545)).add_route(0, "mono", 0.35).add_route(1, "mono", 0.35); /* has 2x MSM5205 instead of OKI6295 */ - MSM5205(config, m_msm_1, 24000000/64); /* ? */ - m_msm_1->vck_legacy_callback().set(FUNC(cps_state::m5205_int1)); /* interrupt function */ - m_msm_1->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ + MSM5205(config, m_msm_1, 24000000/64); /* ? */ + m_msm_1->vck_legacy_callback().set(FUNC(cps_state::m5205_int1)); /* interrupt function */ + m_msm_1->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ m_msm_1->add_route(ALL_OUTPUTS, "mono", 0.25); - MSM5205(config, m_msm_2, 24000000/64); /* ? */ - m_msm_2->vck_legacy_callback().set(FUNC(cps_state::m5205_int2)); /* interrupt function */ - m_msm_2->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ + MSM5205(config, m_msm_2, 24000000/64); /* ? */ + m_msm_2->vck_legacy_callback().set(FUNC(cps_state::m5205_int2)); /* interrupt function */ + m_msm_2->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ m_msm_2->add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START( cps_state::sf2b ) +void cps_state::sf2b(machine_config &config) +{ sf2mdt(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(sf2b_map) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START( cps_state::knightsb ) + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::sf2b_map); +} +void cps_state::knightsb(machine_config &config) +{ /* basic machine hardware */ M68000(config, m_maincpu, 24000000 / 2); m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::knightsb_map); @@ -1808,7 +1811,7 @@ MACHINE_CONFIG_START( cps_state::knightsb ) m_msm_2->vck_legacy_callback().set(FUNC(cps_state::m5205_int2)); /* interrupt function */ m_msm_2->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ m_msm_2->add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} #define CODE_SIZE 0x400000 @@ -2163,42 +2166,42 @@ MACHINE_START_MEMBER(cps_state, dinopic) m_sprite_x_offset = 0; } -MACHINE_CONFIG_START( cps_state::dinopic ) - +void cps_state::dinopic(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 12000000) - MCFG_DEVICE_PROGRAM_MAP(dinopic_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack) + M68000(config, m_maincpu, 12000000); + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::dinopic_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::cps1_interrupt)); + m_maincpu->set_irq_acknowledge_callback(FUNC(cps_state::cps1_int_ack)); - //MCFG_DEVICE_ADD("audiocpu", PIC16C57, 12000000) - //MCFG_DEVICE_DISABLE() /* no valid dumps .. */ + //PIC16C57(config, m_audiocpu, 12000000).set_disable(); /* no valid dumps .. */ MCFG_MACHINE_START_OVERRIDE(cps_state, dinopic) EEPROM_93C46_8BIT(config, "eeprom"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 0xc00) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1 ); + m_screen->set_screen_update(FUNC(cps_state::screen_update_fcrash)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(0xc00); MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, 1'000'000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) -MACHINE_CONFIG_END + GENERIC_LATCH_8(config, m_soundlatch); + + OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.30); +} /* @@ -2314,8 +2317,7 @@ void cps_state::init_dinopic() init_cps1(); } -// see code around BB3A6. If protection fails then it jumps to 100000 which causes an exception. -// After fixing that, the picture is offset to the left, no sound, no sprites. Eprom required @ F1C006. +// The picture is offset to the left, no sound, no sprites. Most settings cannot be changed. ROM_START( dinopic4 ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) ROM_LOAD16_BYTE( "cad_28", 0x000000, 0x040000, CRC(97dc3d86) SHA1(8dbe9dab5682933b3ea2bfcd066f5f4503aad009) ) @@ -2326,6 +2328,8 @@ ROM_START( dinopic4 ) ROM_LOAD16_BYTE( "cad_35", 0x100001, 0x020000, CRC(fbcf4314) SHA1(a59a1d867abea5216367220d8c9d005f451c9d88) ) ROM_LOAD16_BYTE( "cad_30", 0x140000, 0x020000, CRC(bbcafc3b) SHA1(52ff5928b1da862813ef150ea77ac59cff82df5b) ) ROM_LOAD16_BYTE( "cad_34", 0x140001, 0x020000, CRC(481369b8) SHA1(065b5f6b3d2f337def183c3ab5f0ef8c21d0c849) ) + ROM_FILL(0xbb3b8,1,0x4e) // kill protection + ROM_FILL(0xbb3b9,1,0x71) ROM_REGION( 0x400000, "gfx", 0 ) ROMX_LOAD( "cad_24", 0x000000, 0x040000, CRC(e59e0066) SHA1(de8868ac7c9323c9ce4a22d610f25e8932e09218), ROM_SKIP(7) ) @@ -2364,44 +2368,49 @@ ROM_END // sound cpu is (239 V 249521 VC5006 KABUKI DL-030P-110V) - recycled Kabuki Z80 from genuine Capcom HW? // 3x8 dsws -MACHINE_CONFIG_START( cps_state::sgyxz ) +void cps_state::sgyxz(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 12000000) - MCFG_DEVICE_PROGRAM_MAP(sgyxz_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) + M68000(config, m_maincpu, 12000000); + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::sgyxz_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::cps1_interrupt)); + m_maincpu->set_irq_acknowledge_callback(FUNC(cps_state::cps1_int_ack)); - MCFG_DEVICE_ADD("audiocpu", Z80, 3579545) - MCFG_DEVICE_PROGRAM_MAP(sgyxz_sound_map) + Z80(config, m_audiocpu, 3579545); + m_audiocpu->set_addrmap(AS_PROGRAM, &cps_state::sgyxz_sound_map); MCFG_MACHINE_START_OVERRIDE(cps_state,sgyxz) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 0xc00) - MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1 ); + m_screen->set_screen_update(FUNC(cps_state::screen_update_fcrash)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(0xc00); + + MCFG_VIDEO_START_OVERRIDE(cps_state, cps1) EEPROM_93C46_8BIT(config, "eeprom"); /* sound hardware */ SPEAKER(config, "mono").front_center(); - ym2151_device &ym2151(YM2151(config, "2151", XTAL(3'579'545))); + GENERIC_LATCH_8(config, m_soundlatch); + GENERIC_LATCH_8(config, m_soundlatch2); + + ym2151_device &ym2151(YM2151(config, "2151", XTAL(3'579'545))); /* verified on pcb */ ym2151.irq_handler().set_inputline(m_audiocpu, 0); ym2151.add_route(0, "mono", 0.35); ym2151.add_route(1, "mono", 0.35); /* CPS PPU is fed by a 16mhz clock,pin 117 outputs a 4mhz clock which is divided by 4 using 2 74ls74 */ - MCFG_DEVICE_ADD("oki", OKIM6295, 1'000'000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, XTAL(16'000'000)/4/4, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.30); // pin 7 can be changed by the game code, see f006 on z80 +} ROM_START( sgyxz ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 Code */ @@ -2454,41 +2463,42 @@ MACHINE_START_MEMBER(cps_state, punipic) m_sprite_x_offset = 0; } -MACHINE_CONFIG_START( cps_state::punipic ) - +void cps_state::punipic(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 12000000) - MCFG_DEVICE_PROGRAM_MAP(punipic_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) + M68000(config, m_maincpu, 12000000); + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::punipic_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::cps1_interrupt)); + m_maincpu->set_irq_acknowledge_callback(FUNC(cps_state::cps1_int_ack)); - //MCFG_DEVICE_ADD("audiocpu", PIC16C57, 12000000) - //MCFG_DEVICE_DISABLE() /* no valid dumps .. */ + //PIC16C57(config, m_audiocpu, 12000000).set_disable(); /* no valid dumps .. */ MCFG_MACHINE_START_OVERRIDE(cps_state, punipic) EEPROM_93C46_8BIT(config, "eeprom"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 0xc00) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1 ); + m_screen->set_screen_update(FUNC(cps_state::screen_update_fcrash)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); - MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(0xc00); + + MCFG_VIDEO_START_OVERRIDE(cps_state, cps1) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, 1'000'000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) -MACHINE_CONFIG_END + GENERIC_LATCH_8(config, m_soundlatch); + + OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.30); +} /* bootleg with pic, like dinopic / dinopic2 */ ROM_START( punipic ) @@ -2647,38 +2657,41 @@ void cps_state::init_punipic3() // ************************************************************************* SF2M1 -MACHINE_CONFIG_START( cps_state::sf2m1 ) - +void cps_state::sf2m1(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 12'000'000 ) - MCFG_DEVICE_PROGRAM_MAP(sf2m1_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) + M68000(config, m_maincpu, XTAL(12'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::sf2m1_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::cps1_interrupt)); + m_maincpu->set_irq_acknowledge_callback(FUNC(cps_state::cps1_int_ack)); - MCFG_DEVICE_ADD("audiocpu", Z80, 3'579'545) - MCFG_DEVICE_PROGRAM_MAP(sgyxz_sound_map) + Z80(config, m_audiocpu, XTAL(3'579'545)); + m_audiocpu->set_addrmap(AS_PROGRAM, &cps_state::sgyxz_sound_map); MCFG_MACHINE_START_OVERRIDE(cps_state,sf2m1) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 0xc00) - MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART); + m_screen->set_screen_update(FUNC(cps_state::screen_update_fcrash)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(0xc00); + + MCFG_VIDEO_START_OVERRIDE(cps_state, cps1) /* sound hardware */ SPEAKER(config, "mono").front_center(); + GENERIC_LATCH_8(config, m_soundlatch); + GENERIC_LATCH_8(config, m_soundlatch2); ym2151_device &ym2151(YM2151(config, "2151", XTAL(3'579'545))); ym2151.irq_handler().set_inputline(m_audiocpu, 0); ym2151.add_route(0, "mono", 0.35); ym2151.add_route(1, "mono", 0.35); - MCFG_DEVICE_ADD("oki", OKIM6295, 1'000'000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, XTAL(16'000'000)/4/4, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.30); +} ROM_START( sf2m1 ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ @@ -2977,41 +2990,40 @@ MACHINE_START_MEMBER(cps_state, slampic) m_sprite_x_offset = 0; } -MACHINE_CONFIG_START( cps_state::slampic ) - +void cps_state::slampic(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 12000000) - MCFG_DEVICE_PROGRAM_MAP(slampic_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) + M68000(config, m_maincpu, 12000000); + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::slampic_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::cps1_interrupt)); + m_maincpu->set_irq_acknowledge_callback(FUNC(cps_state::cps1_int_ack)); - //MCFG_DEVICE_ADD("audiocpu", PIC16C57, 12000000) - //MCFG_DEVICE_DISABLE() /* no valid dumps .. */ + //PIC16C57(config, m_audiocpu, 12000000).set_disable(); /* no valid dumps .. */ MCFG_MACHINE_START_OVERRIDE(cps_state, slampic) EEPROM_93C46_8BIT(config, "eeprom"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 0xc00) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1 ); + m_screen->set_screen_update(FUNC(cps_state::screen_update_fcrash)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); - MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(0xc00); + + MCFG_VIDEO_START_OVERRIDE(cps_state, cps1) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6295, 1'000'000, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) -MACHINE_CONFIG_END + OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.30); +} ROM_START( slampic ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ @@ -3120,32 +3132,32 @@ MACHINE_START_MEMBER(cps_state, captcommb2) save_item(NAME(m_sample_select2)); } -MACHINE_CONFIG_START( cps_state::captcommb2 ) - +void cps_state::captcommb2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(captcommb2_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(cps_state, cps1_int_ack) + M68000(config, m_maincpu, 10000000); + m_maincpu->set_addrmap(AS_PROGRAM, &cps_state::captcommb2_map); + m_maincpu->set_vblank_int("screen", FUNC(cps_state::cps1_interrupt)); + m_maincpu->set_irq_acknowledge_callback(FUNC(cps_state::cps1_int_ack)); - MCFG_DEVICE_ADD("audiocpu", Z80, 3579545) - MCFG_DEVICE_PROGRAM_MAP(sf2mdt_z80map) + Z80(config, m_audiocpu, 3579545); + m_audiocpu->set_addrmap(AS_PROGRAM, &cps_state::sf2mdt_z80map); - MCFG_MACHINE_START_OVERRIDE(cps_state,captcommb2) - MCFG_MACHINE_RESET_OVERRIDE(cps_state,fcrash) + MCFG_MACHINE_START_OVERRIDE(cps_state, captcommb2) + MCFG_MACHINE_RESET_OVERRIDE(cps_state, fcrash) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_cps1) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1)) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1) - MCFG_PALETTE_ADD("palette", 4096) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(8*8, (64-8)*8-1, 2*8, 30*8-1 ); + m_screen->set_screen_update(FUNC(cps_state::screen_update_cps1)); + m_screen->screen_vblank().set(FUNC(cps_state::screen_vblank_cps1)); + m_screen->set_palette(m_palette); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); + PALETTE(config, m_palette).set_entries(0xc00); MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) @@ -3153,9 +3165,9 @@ MACHINE_CONFIG_START( cps_state::captcommb2 ) SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("2151", YM2151, XTAL(3'579'545)) - MCFG_SOUND_ROUTE(0, "mono", 0.35) - MCFG_SOUND_ROUTE(1, "mono", 0.35) + ym2151_device &ym2151(YM2151(config, "2151", XTAL(3'579'545))); + ym2151.add_route(0, "mono", 0.35); + ym2151.add_route(1, "mono", 0.35); /* has 2x MSM5205 instead of OKI6295 */ MSM5205(config, m_msm_1, 24000000/64); /* ? */ @@ -3167,7 +3179,7 @@ MACHINE_CONFIG_START( cps_state::captcommb2 ) m_msm_2->vck_legacy_callback().set(FUNC(cps_state::m5205_int2)); /* interrupt function */ m_msm_2->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ m_msm_2->add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} ROM_START( captcommb2 ) |