diff options
Diffstat (limited to 'src/mame/drivers/m90.cpp')
-rw-r--r-- | src/mame/drivers/m90.cpp | 194 |
1 files changed, 93 insertions, 101 deletions
diff --git a/src/mame/drivers/m90.cpp b/src/mame/drivers/m90.cpp index fe63826ffa9..39b3747a95a 100644 --- a/src/mame/drivers/m90.cpp +++ b/src/mame/drivers/m90.cpp @@ -23,7 +23,6 @@ #include "includes/iremipt.h" #include "cpu/nec/nec.h" -#include "cpu/nec/v25.h" #include "cpu/z80/z80.h" #include "machine/gen_latch.h" #include "machine/irem_cpu.h" @@ -730,32 +729,32 @@ WRITE_LINE_MEMBER(m90_state::bomblord_vblank_int_w) /* Basic hardware -- no decryption table is setup for CPU */ -MACHINE_CONFIG_START(m90_state::m90) +void m90_state::m90(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", V35, XTAL(32'000'000)/2) - MCFG_DEVICE_PROGRAM_MAP(m90_main_cpu_map) - MCFG_DEVICE_IO_MAP(m90_main_cpu_io_map) + V35(config, m_maincpu, XTAL(32'000'000)/2); + m_maincpu->set_addrmap(AS_PROGRAM, &m90_state::m90_main_cpu_map); + m_maincpu->set_addrmap(AS_IO, &m90_state::m90_main_cpu_io_map); - MCFG_DEVICE_ADD("soundcpu", Z80, XTAL(3'579'545)) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(m90_sound_cpu_map) - MCFG_DEVICE_IO_MAP(m90_sound_cpu_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(m90_state, nmi_line_pulse, 128*60) /* clocked by V1? (Vigilante) */ - /* IRQs are generated by main Z80 and YM2151 */ - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("soundirq", rst_neg_buffer_device, inta_cb) + Z80(config, m_soundcpu, XTAL(3'579'545)); /* verified on pcb */ + m_soundcpu->set_addrmap(AS_PROGRAM, &m90_state::m90_sound_cpu_map); + m_soundcpu->set_addrmap(AS_IO, &m90_state::m90_sound_cpu_io_map); + m_soundcpu->set_periodic_int(FUNC(m90_state::nmi_line_pulse), attotime::from_hz(128*60)); /* clocked by V1? (Vigilante) */ + /* IRQs are generated by main Z80 and YM2151 */ + m_soundcpu->set_irq_acknowledge_callback("soundirq", FUNC(rst_neg_buffer_device::inta_cb)); /* 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, 64*8) - MCFG_SCREEN_VISIBLE_AREA(6*8, 54*8-1, 17*8, 47*8-1) - MCFG_SCREEN_UPDATE_DRIVER(m90_state, screen_update_m90) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", NEC_INPUT_LINE_INTP0)) - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_m90) - MCFG_PALETTE_ADD("palette", 512) - MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) + 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, 64*8); + m_screen->set_visarea(6*8, 54*8-1, 17*8, 47*8-1); + m_screen->set_screen_update(FUNC(m90_state::screen_update_m90)); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set_inputline("maincpu", NEC_INPUT_LINE_INTP0); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_m90); + PALETTE(config, m_palette, 512).set_format(PALETTE_FORMAT_xBBBBBGGGGGRRRRR); /* sound hardware */ SPEAKER(config, "speaker").front_center(); @@ -766,122 +765,115 @@ MACHINE_CONFIG_START(m90_state::m90) RST_NEG_BUFFER(config, "soundirq", 0).int_callback().set_inputline(m_soundcpu, 0); - MCFG_DEVICE_ADD("m72", IREM_M72_AUDIO) + IREM_M72_AUDIO(config, "m72"); ym2151_device &ymsnd(YM2151(config, "ymsnd", XTAL(3'579'545))); /* verified on pcb */ ymsnd.irq_handler().set("soundirq", FUNC(rst_neg_buffer_device::rst28_w)); ymsnd.add_route(0, "speaker", 0.15); ymsnd.add_route(1, "speaker", 0.15); - MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.1) // unknown DAC - MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) - MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) -MACHINE_CONFIG_END - + DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.1); // unknown DAC + voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); + vref.set_output(5.0); + vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); + vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); +} -MACHINE_CONFIG_START(m90_state::hasamu) +void m90_state::hasamu(machine_config &config) +{ m90(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_V25_CONFIG(gunforce_decryption_table) -MACHINE_CONFIG_END + subdevice<v35_device>("maincpu")->set_decryption_table(gunforce_decryption_table); +} -MACHINE_CONFIG_START(m90_state::quizf1) +void m90_state::quizf1(machine_config &config) +{ m90(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(quizf1_main_cpu_map) - MCFG_DEVICE_IO_MAP(quizf1_main_cpu_io_map) - MCFG_V25_CONFIG(lethalth_decryption_table) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(6*8, 54*8-1, 17*8-8, 47*8-1+8) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(m90_state::matchit2) + m_maincpu->set_addrmap(AS_PROGRAM, &m90_state::quizf1_main_cpu_map); + m_maincpu->set_addrmap(AS_IO, &m90_state::quizf1_main_cpu_io_map); + subdevice<v35_device>("maincpu")->set_decryption_table(lethalth_decryption_table); + + m_screen->set_visarea(6*8, 54*8-1, 17*8-8, 47*8-1+8); +} + +void m90_state::matchit2(machine_config &config) +{ m90(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_V25_CONFIG(matchit2_decryption_table) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(6*8, 54*8-1, 17*8-8, 47*8-1+8) -MACHINE_CONFIG_END + subdevice<v35_device>("maincpu")->set_decryption_table(matchit2_decryption_table); + m_screen->set_visarea(6*8, 54*8-1, 17*8-8, 47*8-1+8); +} -MACHINE_CONFIG_START(m90_state::riskchal) +void m90_state::riskchal(machine_config &config) +{ m90(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_V25_CONFIG(gussun_decryption_table) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(10*8, 50*8-1, 17*8, 47*8-1) -MACHINE_CONFIG_END + subdevice<v35_device>("maincpu")->set_decryption_table(gussun_decryption_table); + m_screen->set_visarea(10*8, 50*8-1, 17*8, 47*8-1); +} -MACHINE_CONFIG_START(m90_state::bombrman) +void m90_state::bombrman(machine_config &config) +{ m90(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_V25_CONFIG(bomberman_decryption_table) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(10*8, 50*8-1, 17*8, 47*8-1) -MACHINE_CONFIG_END + subdevice<v35_device>("maincpu")->set_decryption_table(bomberman_decryption_table); + m_screen->set_visarea(10*8, 50*8-1, 17*8, 47*8-1); +} -MACHINE_CONFIG_START(m90_state::bbmanwj) +void m90_state::bbmanwj(machine_config &config) +{ m90(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_V25_CONFIG(dynablaster_decryption_table) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(10*8, 50*8-1, 17*8, 47*8-1) -MACHINE_CONFIG_END + subdevice<v35_device>("maincpu")->set_decryption_table(dynablaster_decryption_table); + m_screen->set_visarea(10*8, 50*8-1, 17*8, 47*8-1); +} -MACHINE_CONFIG_START(m90_state::bbmanw) +void m90_state::bbmanw(machine_config &config) +{ bbmanwj(config); - MCFG_DEVICE_MODIFY("soundcpu") - MCFG_DEVICE_IO_MAP(m99_sound_cpu_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(m90_state, fake_nmi, 128*60) -MACHINE_CONFIG_END - + m_soundcpu->set_addrmap(AS_IO, &m90_state::m99_sound_cpu_io_map); + m_soundcpu->set_periodic_int(FUNC(m90_state::fake_nmi), attotime::from_hz(128*60)); +} -MACHINE_CONFIG_START(m90_state::bomblord) +void m90_state::bomblord(machine_config &config) +{ m90(config); - MCFG_DEVICE_REPLACE("maincpu", V30, 32000000/4) - MCFG_DEVICE_PROGRAM_MAP(bomblord_main_cpu_map) - MCFG_DEVICE_IO_MAP(m90_main_cpu_io_map) + V30(config.replace(), m_maincpu, 32000000/4); + m_maincpu->set_addrmap(AS_PROGRAM, &m90_state::bomblord_main_cpu_map); + m_maincpu->set_addrmap(AS_IO, &m90_state::m90_main_cpu_io_map); - MCFG_DEVICE_MODIFY("soundcpu") - MCFG_DEVICE_IO_MAP(m99_sound_cpu_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(m90_state, bomblord_fake_nmi, 128*60) + m_soundcpu->set_addrmap(AS_IO, &m90_state::m99_sound_cpu_io_map); + m_soundcpu->set_periodic_int(FUNC(m90_state::bomblord_fake_nmi), attotime::from_hz(128*60)); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(10*8, 50*8-1, 17*8, 47*8-1) - MCFG_SCREEN_UPDATE_DRIVER(m90_state, screen_update_bomblord) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, m90_state, bomblord_vblank_int_w)) + m_screen->set_visarea(10*8, 50*8-1, 17*8, 47*8-1); + m_screen->set_screen_update(FUNC(m90_state::screen_update_bomblord)); + m_screen->screen_vblank().set(FUNC(m90_state::bomblord_vblank_int_w)); MCFG_VIDEO_START_OVERRIDE(m90_state,bomblord) -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(m90_state::dynablsb) +void m90_state::dynablsb(machine_config &config) +{ m90(config); - MCFG_DEVICE_REPLACE("maincpu", V30, 32000000/4) - MCFG_DEVICE_PROGRAM_MAP(dynablsb_main_cpu_map) - MCFG_DEVICE_IO_MAP(dynablsb_main_cpu_io_map) + V30(config.replace(), m_maincpu, 32000000/4); + m_maincpu->set_addrmap(AS_PROGRAM, &m90_state::dynablsb_main_cpu_map); + m_maincpu->set_addrmap(AS_IO, &m90_state::dynablsb_main_cpu_io_map); - MCFG_DEVICE_MODIFY("soundcpu") - MCFG_DEVICE_IO_MAP(dynablsb_sound_cpu_io_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(m90_state, irq0_line_hold, 64*60) /* half the sample rate of the original */ - MCFG_DEVICE_IRQ_ACKNOWLEDGE_REMOVE() + m_soundcpu->set_addrmap(AS_IO, &m90_state::dynablsb_sound_cpu_io_map); + m_soundcpu->set_periodic_int(FUNC(m90_state::irq0_line_hold), attotime::from_hz(64*60)); /* half the sample rate of the original */ + m_soundcpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate()); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(320, 240) - MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(m90_state, screen_update_dynablsb) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, m90_state, dynablsb_vblank_int_w)) + m_screen->set_size(320, 240); + m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(m90_state::screen_update_dynablsb)); + m_screen->screen_vblank().set(FUNC(m90_state::dynablsb_vblank_int_w)); MCFG_VIDEO_START_OVERRIDE(m90_state,dynablsb) - MCFG_DEVICE_REMOVE("m72") - MCFG_DEVICE_REMOVE("soundirq") + config.device_remove("m72"); + config.device_remove("soundirq"); auto &soundlatch(*subdevice<generic_latch_8_device>("soundlatch")); soundlatch.data_pending_callback().set_inputline(m_soundcpu, INPUT_LINE_NMI); soundlatch.set_separate_acknowledge(false); subdevice<ym2151_device>("ymsnd")->irq_handler().set_nop(); /* this bootleg polls the YM2151 instead of taking interrupts from it */ -MACHINE_CONFIG_END +} /***************************************************************************/ |