summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/plus4.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/plus4.cpp')
-rw-r--r--src/mame/drivers/plus4.cpp202
1 files changed, 101 insertions, 101 deletions
diff --git a/src/mame/drivers/plus4.cpp b/src/mame/drivers/plus4.cpp
index 4aed0eef155..3f7866dcd5b 100644
--- a/src/mame/drivers/plus4.cpp
+++ b/src/mame/drivers/plus4.cpp
@@ -840,24 +840,26 @@ void plus4_state::machine_reset()
// MACHINE_CONFIG( plus4 )
//-------------------------------------------------
-MACHINE_CONFIG_START(plus4_state::plus4)
+void plus4_state::plus4(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD(MOS7501_TAG, M7501, 0)
- MCFG_DEVICE_PROGRAM_MAP(plus4_mem)
- MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks
- MCFG_M7501_PORT_CALLBACKS(READ8(*this, plus4_state, cpu_r), WRITE8(*this, plus4_state, cpu_w))
- MCFG_M7501_PORT_PULLS(0x00, 0xc0)
- MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG)
+ M7501(config, m_maincpu, 0);
+ m_maincpu->set_addrmap(AS_PROGRAM, &plus4_state::plus4_mem);
+ m_maincpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks
+ m_maincpu->read_callback().set(FUNC(plus4_state::cpu_r));
+ m_maincpu->write_callback().set(FUNC(plus4_state::cpu_w));
+ m_maincpu->set_pulls(0x00, 0xc0);
+ config.m_perfect_cpu_quantum = subtag(MOS7501_TAG);
INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m7501_device::IRQ_LINE);
// video and sound hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
- MCFG_SCREEN_REFRESH_RATE(mos7360_device::PAL_VRETRACERATE)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_SIZE(336, 216)
- MCFG_SCREEN_VISIBLE_AREA(0, 336 - 1, 0, 216 - 1)
- MCFG_SCREEN_UPDATE_DEVICE(MOS7360_TAG, mos7360_device, screen_update)
+ screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(mos7360_device::PAL_VRETRACERATE);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_size(336, 216);
+ screen.set_visarea(0, 336 - 1, 0, 216 - 1);
+ screen.set_screen_update(MOS7360_TAG, FUNC(mos7360_device::screen_update));
SPEAKER(config, "mono").front_center();
@@ -869,7 +871,7 @@ MACHINE_CONFIG_START(plus4_state::plus4)
m_ted->add_route(ALL_OUTPUTS, "mono", 0.25);
// devices
- MCFG_PLS100_ADD(PLA_TAG)
+ PLS100(config, m_pla);
PET_USER_PORT(config, m_user, plus4_user_port_cards, nullptr);
m_user->p4_handler().set(m_spi_user, FUNC(mos6529_device::write_p2)); // cassette sense
@@ -893,130 +895,128 @@ MACHINE_CONFIG_START(plus4_state::plus4)
m_acia->txd_handler().set(m_user, FUNC(pet_user_port_device::write_m));
m_acia->irq_handler().set("mainirq", FUNC(input_merger_device::in_w<1>));
- MCFG_DEVICE_ADD(m_spi_user, MOS6529, 0)
- MCFG_MOS6529_P0_HANDLER(WRITELINE(m_user, pet_user_port_device, write_b))
- MCFG_MOS6529_P1_HANDLER(WRITELINE(m_user, pet_user_port_device, write_k))
- MCFG_MOS6529_P2_HANDLER(WRITELINE(m_user, pet_user_port_device, write_4))
- MCFG_MOS6529_P3_HANDLER(WRITELINE(m_user, pet_user_port_device, write_5))
- MCFG_MOS6529_P4_HANDLER(WRITELINE(m_user, pet_user_port_device, write_6))
- MCFG_MOS6529_P5_HANDLER(WRITELINE(m_user, pet_user_port_device, write_7))
- MCFG_MOS6529_P6_HANDLER(WRITELINE(m_user, pet_user_port_device, write_j))
- MCFG_MOS6529_P7_HANDLER(WRITELINE(m_user, pet_user_port_device, write_f))
-
- MCFG_DEVICE_ADD(MOS6529_KB_TAG, MOS6529, 0)
- MCFG_MOS6529_P0_HANDLER(WRITELINE(*this, plus4_state, write_kb0))
- MCFG_MOS6529_P1_HANDLER(WRITELINE(*this, plus4_state, write_kb1))
- MCFG_MOS6529_P2_HANDLER(WRITELINE(*this, plus4_state, write_kb2))
- MCFG_MOS6529_P3_HANDLER(WRITELINE(*this, plus4_state, write_kb3))
- MCFG_MOS6529_P4_HANDLER(WRITELINE(*this, plus4_state, write_kb4))
- MCFG_MOS6529_P5_HANDLER(WRITELINE(*this, plus4_state, write_kb5))
- MCFG_MOS6529_P6_HANDLER(WRITELINE(*this, plus4_state, write_kb6))
- MCFG_MOS6529_P7_HANDLER(WRITELINE(*this, plus4_state, write_kb7))
-
- MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NOOP)
-
- MCFG_CBM_IEC_ADD("c1541")
- MCFG_CBM_IEC_BUS_ATN_CALLBACK(WRITELINE(m_user, pet_user_port_device, write_9))
-
- MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr)
- MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
- MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL(14'318'181)/16, plus4_expansion_cards, nullptr)
- MCFG_PLUS4_EXPANSION_SLOT_IRQ_CALLBACK(WRITELINE("mainirq", input_merger_device, in_w<2>))
- MCFG_PLUS4_EXPANSION_SLOT_CD_INPUT_CALLBACK(READ8(*this, plus4_state, read))
- MCFG_PLUS4_EXPANSION_SLOT_CD_OUTPUT_CALLBACK(WRITE8(*this, plus4_state, write))
- MCFG_PLUS4_EXPANSION_SLOT_AEC_CALLBACK(INPUTLINE(MOS7501_TAG, INPUT_LINE_HALT))
-
- MCFG_QUICKLOAD_ADD("quickload", plus4_state, cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
+ MOS6529(config, m_spi_user, 0);
+ m_spi_user->p_handler<0>().set(m_user, FUNC(pet_user_port_device::write_b));
+ m_spi_user->p_handler<1>().set(m_user, FUNC(pet_user_port_device::write_k));
+ m_spi_user->p_handler<2>().set(m_user, FUNC(pet_user_port_device::write_4));
+ m_spi_user->p_handler<3>().set(m_user, FUNC(pet_user_port_device::write_5));
+ m_spi_user->p_handler<4>().set(m_user, FUNC(pet_user_port_device::write_6));
+ m_spi_user->p_handler<5>().set(m_user, FUNC(pet_user_port_device::write_7));
+ m_spi_user->p_handler<6>().set(m_user, FUNC(pet_user_port_device::write_j));
+ m_spi_user->p_handler<7>().set(m_user, FUNC(pet_user_port_device::write_f));
+
+ MOS6529(config, m_spi_kb, 0);
+ m_spi_kb->p_handler<0>().set(FUNC(plus4_state::write_kb0));
+ m_spi_kb->p_handler<1>().set(FUNC(plus4_state::write_kb1));
+ m_spi_kb->p_handler<2>().set(FUNC(plus4_state::write_kb2));
+ m_spi_kb->p_handler<3>().set(FUNC(plus4_state::write_kb3));
+ m_spi_kb->p_handler<4>().set(FUNC(plus4_state::write_kb4));
+ m_spi_kb->p_handler<5>().set(FUNC(plus4_state::write_kb5));
+ m_spi_kb->p_handler<6>().set(FUNC(plus4_state::write_kb6));
+ m_spi_kb->p_handler<7>().set(FUNC(plus4_state::write_kb7));
+
+ PET_DATASSETTE_PORT(config, m_cassette, plus4_datassette_devices, "c1531");
+ m_cassette->read_handler().set_nop();
+
+ cbm_iec_slot_device::add(config, m_iec, "c1541");
+ m_iec->atn_callback().set(m_user, FUNC(pet_user_port_device::write_9));
+
+ VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr);
+ VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, "joy");
+
+ PLUS4_EXPANSION_SLOT(config, m_exp, XTAL(14'318'181)/16, plus4_expansion_cards, nullptr);
+ m_exp->irq_wr_callback().set("mainirq", FUNC(input_merger_device::in_w<2>));
+ m_exp->cd_rd_callback().set(FUNC(plus4_state::read));
+ m_exp->cd_wr_callback().set(FUNC(plus4_state::write));
+ m_exp->aec_wr_callback().set_inputline(MOS7501_TAG, INPUT_LINE_HALT);
+
+ quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0));
+ quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(plus4_state, cbm_c16), this), "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS);
// internal ram
RAM(config, m_ram).set_default_size("64K");
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// MACHINE_CONFIG( plus4p )
//-------------------------------------------------
-MACHINE_CONFIG_START(c16_state::plus4p)
+void c16_state::plus4p(machine_config &config)
+{
plus4(config);
- MCFG_DEVICE_MODIFY(MOS7501_TAG)
- MCFG_DEVICE_CLOCK(XTAL(17'734'470)/20)
-
- MCFG_DEVICE_MODIFY(MOS7360_TAG)
- MCFG_DEVICE_CLOCK(XTAL(17'734'470)/5)
+ m_maincpu->set_clock(XTAL(17'734'470)/20);
+ m_ted->set_clock(XTAL(17'734'470)/5);
// software list
- MCFG_SOFTWARE_LIST_ADD("cart_list", "plus4_cart")
- MCFG_SOFTWARE_LIST_ADD("cass_list", "plus4_cass")
- MCFG_SOFTWARE_LIST_ADD("flop_list", "plus4_flop")
- MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL")
- MCFG_SOFTWARE_LIST_FILTER("cass_list", "PAL")
- MCFG_SOFTWARE_LIST_FILTER("flop_list", "PAL")
-MACHINE_CONFIG_END
-
+ SOFTWARE_LIST(config, "cart_list").set_original("plus4_cart");
+ SOFTWARE_LIST(config, "cass_list").set_original("plus4_cass");
+ SOFTWARE_LIST(config, "flop_list").set_original("plus4_flop");
+ subdevice<software_list_device>("cart_list")->set_filter("PAL");
+ subdevice<software_list_device>("cass_list")->set_filter("PAL");
+ subdevice<software_list_device>("flop_list")->set_filter("PAL");
+}
//-------------------------------------------------
// MACHINE_CONFIG( plus4n )
//-------------------------------------------------
-MACHINE_CONFIG_START(c16_state::plus4n)
+void c16_state::plus4n(machine_config &config)
+{
plus4(config);
- MCFG_DEVICE_MODIFY(MOS7501_TAG)
- MCFG_DEVICE_CLOCK(XTAL(14'318'181)/16)
-
- MCFG_DEVICE_MODIFY(MOS7360_TAG)
- MCFG_DEVICE_CLOCK(XTAL(14'318'181)/4)
+ m_maincpu->set_clock(XTAL(14'318'181)/16);
+ m_ted->set_clock(XTAL(14'318'181)/4);
// software list
- MCFG_SOFTWARE_LIST_ADD("cart_list", "plus4_cart")
- MCFG_SOFTWARE_LIST_ADD("cass_list", "plus4_cass")
- MCFG_SOFTWARE_LIST_ADD("flop_list", "plus4_flop")
- MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC")
- MCFG_SOFTWARE_LIST_FILTER("cass_list", "NTSC")
- MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC")
-MACHINE_CONFIG_END
+ SOFTWARE_LIST(config, "cart_list").set_original("plus4_cart");
+ SOFTWARE_LIST(config, "cass_list").set_original("plus4_cass");
+ SOFTWARE_LIST(config, "flop_list").set_original("plus4_flop");
+ subdevice<software_list_device>("cart_list")->set_filter("NTSC");
+ subdevice<software_list_device>("cass_list")->set_filter("NTSC");
+ subdevice<software_list_device>("flop_list")->set_filter("NTSC");
+}
//-------------------------------------------------
// MACHINE_CONFIG( c16n )
//-------------------------------------------------
-MACHINE_CONFIG_START(c16_state::c16n)
+void c16_state::c16n(machine_config &config)
+{
plus4n(config);
- MCFG_DEVICE_MODIFY(MOS7501_TAG)
- MCFG_M7501_PORT_CALLBACKS(READ8(*this, c16_state, cpu_r), WRITE8(*this, plus4_state, cpu_w))
- MCFG_M7501_PORT_PULLS(0x00, 0xc0)
+ m_maincpu->read_callback().set(FUNC(c16_state::cpu_r));
+ m_maincpu->write_callback().set(FUNC(plus4_state::cpu_w));
+ m_maincpu->set_pulls(0x00, 0xc0);
- MCFG_DEVICE_REMOVE(MOS6551_TAG)
- MCFG_DEVICE_REMOVE(MOS6529_USER_TAG)
- MCFG_DEVICE_REMOVE(PET_USER_PORT_TAG)
+ config.device_remove(MOS6551_TAG);
+ config.device_remove(MOS6529_USER_TAG);
+ config.device_remove(PET_USER_PORT_TAG);
- MCFG_DEVICE_MODIFY(CBM_IEC_TAG)
- MCFG_CBM_IEC_BUS_ATN_CALLBACK(NOOP)
+ m_iec->atn_callback().set_nop();
m_ram->set_default_size("16K").set_extra_options("64K");
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// MACHINE_CONFIG( c16p )
//-------------------------------------------------
-MACHINE_CONFIG_START(c16_state::c16p)
+void c16_state::c16p(machine_config &config)
+{
plus4p(config);
- MCFG_DEVICE_MODIFY(MOS7501_TAG)
- MCFG_M7501_PORT_CALLBACKS(READ8(*this, c16_state, cpu_r), WRITE8(*this, plus4_state, cpu_w))
- MCFG_M7501_PORT_PULLS(0x00, 0xc0)
+ m_maincpu->read_callback().set(FUNC(c16_state::cpu_r));
+ m_maincpu->write_callback().set(FUNC(plus4_state::cpu_w));
+ m_maincpu->set_pulls(0x00, 0xc0);
- MCFG_DEVICE_REMOVE(MOS6551_TAG)
- MCFG_DEVICE_REMOVE(MOS6529_USER_TAG)
- MCFG_DEVICE_REMOVE(PET_USER_PORT_TAG)
+ config.device_remove(MOS6551_TAG);
+ config.device_remove(MOS6529_USER_TAG);
+ config.device_remove(PET_USER_PORT_TAG);
- MCFG_DEVICE_MODIFY(CBM_IEC_TAG)
- MCFG_CBM_IEC_BUS_ATN_CALLBACK(NOOP)
+ m_iec->atn_callback().set_nop();
m_ram->set_default_size("16K").set_extra_options("64K");
-MACHINE_CONFIG_END
+}
void c16_state::c232(machine_config &config)
@@ -1030,13 +1030,13 @@ void c16_state::c232(machine_config &config)
// MACHINE_CONFIG( v364 )
//-------------------------------------------------
-MACHINE_CONFIG_START(c16_state::v364)
+void c16_state::v364(machine_config &config)
+{
plus4n(config);
- MCFG_DEVICE_ADD(T6721A_TAG, T6721A, XTAL(640'000))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+ T6721A(config, T6721A_TAG, XTAL(640'000)).add_route(ALL_OUTPUTS, "mono", 0.25);
- MCFG_MOS8706_ADD(MOS8706_TAG, XTAL(14'318'181)/16)
-MACHINE_CONFIG_END
+ MOS8706(config, m_vslsi, XTAL(14'318'181)/16);
+}