diff options
Diffstat (limited to 'src/mame/drivers/cyberbal.cpp')
-rw-r--r-- | src/mame/drivers/cyberbal.cpp | 150 |
1 files changed, 81 insertions, 69 deletions
diff --git a/src/mame/drivers/cyberbal.cpp b/src/mame/drivers/cyberbal.cpp index 5d7b4bdf589..6944d51d177 100644 --- a/src/mame/drivers/cyberbal.cpp +++ b/src/mame/drivers/cyberbal.cpp @@ -27,6 +27,7 @@ #include "machine/eeprompar.h" #include "machine/watchdog.h" #include "sound/volt_reg.h" +#include "diexec.h" #include "speaker.h" #include "rendlay.h" @@ -133,8 +134,8 @@ void cyberbal_state::main_map(address_map &map) map(0xfe1000, 0xfe1fff).portr("IN1"); map(0xfe8000, 0xfe8fff).ram().w("rpalette", FUNC(palette_device::write16)).share("rpalette"); map(0xfec000, 0xfecfff).ram().w("lpalette", FUNC(palette_device::write16)).share("lpalette"); - map(0xff0000, 0xff1fff).ram().w(m_playfield2_tilemap, FUNC(tilemap_device::write16)).share("playfield2"); - map(0xff2000, 0xff2fff).ram().w(m_alpha2_tilemap, FUNC(tilemap_device::write16)).share("alpha2"); + map(0xff0000, 0xff1fff).ram().w(m_playfield2, FUNC(tilemap_device::write16)).share("playfield2"); + map(0xff2000, 0xff2fff).ram().w(m_alpha2, FUNC(tilemap_device::write16)).share("alpha2"); map(0xff3000, 0xff37ff).ram().share("mob2"); map(0xff3800, 0xff3fff).ram().share("ff3800"); map(0xff4000, 0xff5fff).ram().w("playfield", FUNC(tilemap_device::write16)).share("playfield"); @@ -161,8 +162,8 @@ void cyberbal_state::extra_map(address_map &map) map(0xfe1000, 0xfe1fff).portr("IN1"); map(0xfe8000, 0xfe8fff).ram().w("rpalette", FUNC(palette_device::write16)).share("rpalette"); map(0xfec000, 0xfecfff).ram().w("lpalette", FUNC(palette_device::write16)).share("lpalette"); - map(0xff0000, 0xff1fff).ram().w(m_playfield2_tilemap, FUNC(tilemap_device::write16)).share("playfield2"); - map(0xff2000, 0xff2fff).ram().w(m_alpha2_tilemap, FUNC(tilemap_device::write16)).share("alpha2"); + map(0xff0000, 0xff1fff).ram().w(m_playfield2, FUNC(tilemap_device::write16)).share("playfield2"); + map(0xff2000, 0xff2fff).ram().w(m_alpha2, FUNC(tilemap_device::write16)).share("alpha2"); map(0xff3000, 0xff37ff).ram().share("mob2"); map(0xff3800, 0xff3fff).ram().share("ff3800"); map(0xff4000, 0xff5fff).ram().w("playfield", FUNC(tilemap_device::write16)).share("playfield"); @@ -392,92 +393,101 @@ GFXDECODE_END * *************************************/ -MACHINE_CONFIG_START(cyberbal_state::cyberbal) +MACHINE_CONFIG_START(cyberbal_state::cyberbal_base) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M68000(config, m_maincpu, ATARI_CLOCK_14MHz/2); + m_maincpu->set_addrmap(AS_PROGRAM, &cyberbal_state::main_map); - MCFG_DEVICE_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8) - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_PERIODIC_INT_DEVICE("soundcomm", atari_sound_comm_device, sound_irq_gen, ATARI_CLOCK_14MHz/4/4/16/16/14) + M6502(config, m_audiocpu, ATARI_CLOCK_14MHz/8); + m_audiocpu->set_addrmap(AS_PROGRAM, &cyberbal_state::sound_map); + m_audiocpu->set_periodic_int("soundcomm", FUNC(atari_sound_comm_device::sound_irq_gen), attotime::from_hz(ATARI_CLOCK_14MHz/4/4/16/16/14)); - MCFG_DEVICE_ADD("extra", M68000, ATARI_CLOCK_14MHz/2) - MCFG_DEVICE_PROGRAM_MAP(extra_map) + M68000(config, m_extracpu, ATARI_CLOCK_14MHz/2); + m_extracpu->set_addrmap(AS_PROGRAM, &cyberbal_state::extra_map); MCFG_DEVICE_ADD("dac", M68000, ATARI_CLOCK_14MHz/2) MCFG_DEVICE_PROGRAM_MAP(sound_68k_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(cyberbal_state, sound_68k_irq_gen, 10000) - MCFG_QUANTUM_TIME(attotime::from_hz(600)) - - MCFG_EEPROM_2804_ADD("eeprom") - MCFG_EEPROM_28XX_LOCK_AFTER_WRITE(true) + config.m_minimum_quantum = attotime::from_hz(600); - MCFG_WATCHDOG_ADD("watchdog") + WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "lpalette", gfx_interleaved) - - MCFG_PALETTE_ADD("lpalette", 2048) - MCFG_PALETTE_FORMAT(IRRRRRGGGGGBBBBB) - MCFG_PALETTE_ADD("rpalette", 2048) - MCFG_PALETTE_FORMAT(IRRRRRGGGGGBBBBB) - - MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, cyberbal_state, get_playfield_tile_info, 16,8, SCAN_ROWS, 64,64) - MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, cyberbal_state, get_alpha_tile_info, 16,8, SCAN_ROWS, 64,32, 0) - MCFG_ATARI_MOTION_OBJECTS_ADD("mob", "lscreen", cyberbal_state::s_mob_config) - MCFG_ATARI_MOTION_OBJECTS_GFXDECODE("gfxdecode") - - MCFG_TILEMAP_ADD_STANDARD("playfield2", "gfxdecode", 2, cyberbal_state, get_playfield2_tile_info, 16,8, SCAN_ROWS, 64,64) - MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha2", "gfxdecode", 2, cyberbal_state, get_alpha2_tile_info, 16,8, SCAN_ROWS, 64,32, 0) - MCFG_ATARI_MOTION_OBJECTS_ADD("mob2", "rscreen", cyberbal_state::s_mob_config) - MCFG_ATARI_MOTION_OBJECTS_GFXDECODE("gfxdecode") - - MCFG_SCREEN_ADD("lscreen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + GFXDECODE(config, m_gfxdecode, "lpalette", gfx_interleaved); + + PALETTE(config, "lpalette", 2048).set_format(PALETTE_FORMAT_IRRRRRGGGGGBBBBB); + PALETTE(config, "rpalette", 2048).set_format(PALETTE_FORMAT_IRRRRRGGGGGBBBBB); + + TILEMAP(config, m_playfield, "gfxdecode", 2, 16,8, TILEMAP_SCAN_ROWS, 64,64) + .set_info_callback(FUNC(cyberbal_state::get_playfield_tile_info)); + TILEMAP(config, m_alpha, "gfxdecode", 2, 16,8, TILEMAP_SCAN_ROWS, 64,32, 0) + .set_info_callback(FUNC(cyberbal_state::get_alpha_tile_info)); + ATARI_MOTION_OBJECTS(config, m_mob, 0).set_screen("lscreen"); + m_mob->set_config(cyberbal_state::s_mob_config); + m_mob->set_gfxdecode("gfxdecode"); + + TILEMAP(config, m_playfield2, "gfxdecode", 2, 16,8, TILEMAP_SCAN_ROWS, 64,64) + .set_info_callback(FUNC(cyberbal_state::get_playfield2_tile_info)); + TILEMAP(config, m_alpha2, "gfxdecode", 2, 16,8, TILEMAP_SCAN_ROWS, 64,32, 0) + .set_info_callback(FUNC(cyberbal_state::get_alpha2_tile_info)); + ATARI_MOTION_OBJECTS(config, m_mob2, 0).set_screen("rscreen"); + m_mob2->set_config(cyberbal_state::s_mob_config); + m_mob2->set_gfxdecode("gfxdecode"); + + SCREEN(config, m_lscreen, SCREEN_TYPE_RASTER); + m_lscreen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses an SOS-2 chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz, 456*2, 0, 336*2, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(cyberbal_state, screen_update_cyberbal_left) - MCFG_SCREEN_PALETTE("lpalette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cyberbal_state, video_int_write_line)) /* or is it "right?" */ + m_lscreen->set_raw(ATARI_CLOCK_14MHz, 456*2, 0, 336*2, 262, 0, 240); + m_lscreen->set_screen_update(FUNC(cyberbal_state::screen_update_cyberbal_left)); + m_lscreen->set_palette("lpalette"); + m_lscreen->screen_vblank().set(FUNC(cyberbal_state::video_int_write_line)); /* or is it "right?" har, har! */ - MCFG_SCREEN_ADD("rscreen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + SCREEN(config, m_rscreen, SCREEN_TYPE_RASTER); + m_rscreen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); /* note: these parameters are from published specs, not derived */ /* the board uses an SOS-2 chip to generate video signals */ - MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz, 456*2, 0, 336*2, 262, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(cyberbal_state, screen_update_cyberbal_right) - MCFG_SCREEN_PALETTE("rpalette") + m_rscreen->set_raw(ATARI_CLOCK_14MHz, 456*2, 0, 336*2, 262, 0, 240); + m_rscreen->set_screen_update(FUNC(cyberbal_state::screen_update_cyberbal_right)); + m_rscreen->set_palette("rpalette"); /* sound hardware */ - MCFG_ATARI_SOUND_COMM_ADD("soundcomm", "audiocpu", INPUTLINE("maincpu", M68K_IRQ_1)) + ATARI_SOUND_COMM(config, m_soundcomm, "audiocpu") + .int_callback().set_inputline("maincpu", M68K_IRQ_1); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("ymsnd", YM2151, ATARI_CLOCK_14MHz/4) - MCFG_YM2151_IRQ_HANDLER(WRITELINE("soundcomm", atari_sound_comm_device, ym2151_irq_gen)) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.60) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.60) - - MCFG_DEVICE_ADD("rdac", AM6012, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) // AM6012.6j - MCFG_DEVICE_ADD("ldac", AM6012, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) // AM6012.6j - MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) - MCFG_SOUND_ROUTE(0, "rdac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac", -1.0, DAC_VREF_NEG_INPUT) - MCFG_SOUND_ROUTE(0, "ldac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac", -1.0, DAC_VREF_NEG_INPUT) + YM2151(config, m_ymsnd, ATARI_CLOCK_14MHz/4); + m_ymsnd->irq_handler().set("soundcomm", FUNC(atari_sound_comm_device::ym2151_irq_gen)); + m_ymsnd->add_route(0, "lspeaker", 0.60); + m_ymsnd->add_route(1, "rspeaker", 0.60); + + AM6012(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // AM6012.6j + AM6012(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // AM6012.6j + voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); + vref.set_output(5.0); + vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT); + vref.add_route(0, "rdac", -1.0, DAC_VREF_NEG_INPUT); + vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT); + vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT); MACHINE_CONFIG_END +void cyberbal_state::cyberbal(machine_config &config) +{ + cyberbal_base(config); -MACHINE_CONFIG_START(cyberbal_state::cyberbalt) - cyberbal(config); - MCFG_DEVICE_REMOVE("eeprom") - MCFG_EEPROM_2816_ADD("eeprom") - MCFG_EEPROM_28XX_LOCK_AFTER_WRITE(true) + EEPROM_2804(config, "eeprom").lock_after_write(true); +} - MCFG_DEVICE_ADD("slapstic", SLAPSTIC, 116, true) -MACHINE_CONFIG_END +void cyberbal_state::cyberbalt(machine_config &config) +{ + cyberbal_base(config); + EEPROM_2816(config, "eeprom").lock_after_write(true); + SLAPSTIC(config, "slapstic", 116, true); +} MACHINE_CONFIG_START(cyberbal2p_state::cyberbal2p) @@ -485,8 +495,7 @@ MACHINE_CONFIG_START(cyberbal2p_state::cyberbal2p) MCFG_DEVICE_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2) MCFG_DEVICE_PROGRAM_MAP(cyberbal2p_map) - MCFG_EEPROM_2816_ADD("eeprom") - MCFG_EEPROM_28XX_LOCK_AFTER_WRITE(true) + EEPROM_2816(config, "eeprom").lock_after_write(true); MCFG_WATCHDOG_ADD("watchdog") @@ -495,10 +504,13 @@ MACHINE_CONFIG_START(cyberbal2p_state::cyberbal2p) MCFG_PALETTE_ADD("palette", 2048) MCFG_PALETTE_FORMAT(IRRRRRGGGGGBBBBB) - MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 2, cyberbal2p_state, get_playfield_tile_info, 16,8, SCAN_ROWS, 64,64) - MCFG_TILEMAP_ADD_STANDARD_TRANSPEN("alpha", "gfxdecode", 2, cyberbal2p_state, get_alpha_tile_info, 16,8, SCAN_ROWS, 64,32, 0) - MCFG_ATARI_MOTION_OBJECTS_ADD("mob", "screen", cyberbal2p_state::s_mob_config) - MCFG_ATARI_MOTION_OBJECTS_GFXDECODE("gfxdecode") + TILEMAP(config, m_playfield, "gfxdecode", 2, 16,8, TILEMAP_SCAN_ROWS, 64,64) + .set_info_callback(FUNC(cyberbal2p_state::get_playfield_tile_info)); + TILEMAP(config, m_alpha, "gfxdecode", 2, 16,8, TILEMAP_SCAN_ROWS, 64,32, 0) + .set_info_callback(FUNC(cyberbal2p_state::get_alpha_tile_info)); + ATARI_MOTION_OBJECTS(config, m_mob, 0).set_screen("screen"); + m_mob->set_config(cyberbal2p_state::s_mob_config); + m_mob->set_gfxdecode("gfxdecode"); MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) |