summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/rmnimbus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/rmnimbus.cpp')
-rw-r--r--src/mame/drivers/rmnimbus.cpp183
1 files changed, 100 insertions, 83 deletions
diff --git a/src/mame/drivers/rmnimbus.cpp b/src/mame/drivers/rmnimbus.cpp
index 262f3799d3c..131c14bbb31 100644
--- a/src/mame/drivers/rmnimbus.cpp
+++ b/src/mame/drivers/rmnimbus.cpp
@@ -105,109 +105,126 @@ void rmnimbus_state::nimbus_iocpu_io(address_map &map)
map(0x00000, 0x000FF).rw(FUNC(rmnimbus_state::nimbus_pc8031_iou_r), FUNC(rmnimbus_state::nimbus_pc8031_iou_w));
}
-MACHINE_CONFIG_START(rmnimbus_state::nimbus)
+void rmnimbus_state::nimbus(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD(m_maincpu, I80186, 16000000) // the cpu is a 10Mhz part but the serial clocks are wrong unless it runs at 8Mhz
- MCFG_DEVICE_PROGRAM_MAP(nimbus_mem)
- MCFG_DEVICE_IO_MAP(nimbus_io)
- MCFG_80186_IRQ_SLAVE_ACK(READ8(*this, rmnimbus_state, cascade_callback))
- MCFG_80186_TMROUT0_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, rxca_w))
- MCFG_80186_TMROUT1_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, rxtxcb_w))
-
- MCFG_DEVICE_ADD(IOCPU_TAG, I8031, 11059200)
- MCFG_DEVICE_PROGRAM_MAP(nimbus_iocpu_mem)
- MCFG_DEVICE_IO_MAP(nimbus_iocpu_io)
- MCFG_MCS51_PORT_P1_IN_CB(READ8(*this, rmnimbus_state, nimbus_pc8031_port1_r))
- MCFG_MCS51_PORT_P1_OUT_CB(WRITE8(*this, rmnimbus_state, nimbus_pc8031_port1_w))
- MCFG_MCS51_PORT_P3_IN_CB(READ8(*this, rmnimbus_state, nimbus_pc8031_port3_r))
- MCFG_MCS51_PORT_P3_OUT_CB(WRITE8(*this, rmnimbus_state, nimbus_pc8031_port3_w))
+ I80186(config, m_maincpu, 16000000); // the cpu is a 10Mhz part but the serial clocks are wrong unless it runs at 8Mhz
+ m_maincpu->set_addrmap(AS_PROGRAM, &rmnimbus_state::nimbus_mem);
+ m_maincpu->set_addrmap(AS_IO, &rmnimbus_state::nimbus_io);
+ m_maincpu->read_slave_ack_callback().set(FUNC(rmnimbus_state::cascade_callback));
+ m_maincpu->tmrout0_handler().set(Z80SIO_TAG, FUNC(z80dart_device::rxca_w));
+ m_maincpu->tmrout1_handler().set(Z80SIO_TAG, FUNC(z80dart_device::rxtxcb_w));
+
+ I8031(config, m_iocpu, 11059200);
+ m_iocpu->set_addrmap(AS_PROGRAM, &rmnimbus_state::nimbus_iocpu_mem);
+ m_iocpu->set_addrmap(AS_IO, &rmnimbus_state::nimbus_iocpu_io);
+ m_iocpu->port_in_cb<1>().set(FUNC(rmnimbus_state::nimbus_pc8031_port1_r));
+ m_iocpu->port_out_cb<1>().set(FUNC(rmnimbus_state::nimbus_pc8031_port1_w));
+ m_iocpu->port_in_cb<3>().set(FUNC(rmnimbus_state::nimbus_pc8031_port3_r));
+ m_iocpu->port_out_cb<3>().set(FUNC(rmnimbus_state::nimbus_pc8031_port3_w));
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(4.433619_MHz_XTAL * 2,650,0,640,260,0,250)
- MCFG_SCREEN_UPDATE_DRIVER(rmnimbus_state, screen_update_nimbus)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(4.433619_MHz_XTAL * 2, 650, 0, 640, 260, 0, 250);
+ m_screen->set_screen_update(FUNC(rmnimbus_state::screen_update_nimbus));
//MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE)
- MCFG_SCREEN_PALETTE("palette")
+ m_screen->set_palette(m_palette);
- MCFG_PALETTE_ADD("palette", 16)
+ PALETTE(config, m_palette, 16);
/* Backing storage */
- MCFG_DEVICE_ADD(FDC_TAG, WD2793, 1000000)
- MCFG_WD_FDC_FORCE_READY
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, rmnimbus_state,nimbus_fdc_intrq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, rmnimbus_state,nimbus_fdc_drq_w))
- MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", rmnimbus_floppies, "35dd", isa8_fdc_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":1", rmnimbus_floppies, "35dd", isa8_fdc_device::floppy_formats)
-
- MCFG_DEVICE_ADD(SCSIBUS_TAG, SCSI_PORT, 0)
- MCFG_SCSI_DATA_INPUT_BUFFER("scsi_data_in")
- MCFG_SCSI_MSG_HANDLER(WRITELINE(*this, rmnimbus_state, write_scsi_msg))
- MCFG_SCSI_BSY_HANDLER(WRITELINE(*this, rmnimbus_state, write_scsi_bsy))
- MCFG_SCSI_IO_HANDLER(WRITELINE(*this, rmnimbus_state, write_scsi_io))
- MCFG_SCSI_CD_HANDLER(WRITELINE(*this, rmnimbus_state, write_scsi_cd))
- MCFG_SCSI_REQ_HANDLER(WRITELINE(*this, rmnimbus_state, write_scsi_req))
-
- MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_0)
- MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_1)
- MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":" SCSI_PORT_DEVICE3, "harddisk", ACB4070, SCSI_ID_2)
- MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":" SCSI_PORT_DEVICE4, "harddisk", S1410, SCSI_ID_3)
-
- MCFG_SCSI_OUTPUT_LATCH_ADD("scsi_data_out", SCSIBUS_TAG)
- MCFG_DEVICE_ADD("scsi_data_in", INPUT_BUFFER, 0)
-
- MCFG_DEVICE_ADD("scsi_ctrl_out", OUTPUT_LATCH, 0)
- MCFG_OUTPUT_LATCH_BIT0_HANDLER(WRITELINE(SCSIBUS_TAG, scsi_port_device, write_rst))
- MCFG_OUTPUT_LATCH_BIT1_HANDLER(WRITELINE(SCSIBUS_TAG, scsi_port_device, write_sel))
- MCFG_OUTPUT_LATCH_BIT2_HANDLER(WRITELINE(*this, rmnimbus_state, write_scsi_iena))
-
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("1536K")
- MCFG_RAM_EXTRA_OPTIONS("128K,256K,384K,512K,640K,1024K")
+ WD2793(config, m_fdc, 1000000);
+ m_fdc->set_force_ready(true);
+ m_fdc->intrq_wr_callback().set(FUNC(rmnimbus_state::nimbus_fdc_intrq_w));
+ m_fdc->drq_wr_callback().set(FUNC(rmnimbus_state::nimbus_fdc_drq_w));
+ FLOPPY_CONNECTOR(config, FDC_TAG":0", rmnimbus_floppies, "35dd", isa8_fdc_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, FDC_TAG":1", rmnimbus_floppies, "35dd", isa8_fdc_device::floppy_formats);
+
+ SCSI_PORT(config, m_scsibus);
+ m_scsibus->set_data_input_buffer("scsi_data_in");
+ m_scsibus->msg_handler().set(FUNC(rmnimbus_state::write_scsi_msg));
+ m_scsibus->bsy_handler().set(FUNC(rmnimbus_state::write_scsi_bsy));
+ m_scsibus->io_handler().set(FUNC(rmnimbus_state::write_scsi_io));
+ m_scsibus->cd_handler().set(FUNC(rmnimbus_state::write_scsi_cd));
+ m_scsibus->req_handler().set(FUNC(rmnimbus_state::write_scsi_req));
+
+ m_scsibus->set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
+ m_scsibus->set_slot_device(2, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1));
+ m_scsibus->set_slot_device(3, "harddisk", ACB4070, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_2));
+ m_scsibus->set_slot_device(4, "harddisk", S1410, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_3));
+
+ OUTPUT_LATCH(config, m_scsi_data_out);
+ m_scsi_data_out->bit_handler<0>().set(m_scsibus, FUNC(scsi_port_device::write_data0));
+ m_scsi_data_out->bit_handler<1>().set(m_scsibus, FUNC(scsi_port_device::write_data1));
+ m_scsi_data_out->bit_handler<2>().set(m_scsibus, FUNC(scsi_port_device::write_data2));
+ m_scsi_data_out->bit_handler<3>().set(m_scsibus, FUNC(scsi_port_device::write_data3));
+ m_scsi_data_out->bit_handler<4>().set(m_scsibus, FUNC(scsi_port_device::write_data4));
+ m_scsi_data_out->bit_handler<5>().set(m_scsibus, FUNC(scsi_port_device::write_data5));
+ m_scsi_data_out->bit_handler<6>().set(m_scsibus, FUNC(scsi_port_device::write_data6));
+ m_scsi_data_out->bit_handler<7>().set(m_scsibus, FUNC(scsi_port_device::write_data7));
+
+ INPUT_BUFFER(config, m_scsi_data_in);
+
+ OUTPUT_LATCH(config, m_scsi_ctrl_out);
+ m_scsi_ctrl_out->bit_handler<0>().set(m_scsibus, FUNC(scsi_port_device::write_rst));
+ m_scsi_ctrl_out->bit_handler<1>().set(m_scsibus, FUNC(scsi_port_device::write_sel));
+ m_scsi_ctrl_out->bit_handler<2>().set(FUNC(rmnimbus_state::write_scsi_iena));
+
+ RAM(config, m_ram);
+ m_ram->set_default_size("1536K");
+ m_ram->set_extra_options("128K,256K,384K,512K,640K,1024K");
/* Peripheral chips */
- MCFG_DEVICE_ADD(Z80SIO_TAG, Z80SIO2, 4000000)
- MCFG_Z80DART_OUT_TXDB_CB(WRITELINE("rs232b", rs232_port_device, write_txd))
- MCFG_Z80DART_OUT_DTRB_CB(WRITELINE("rs232b", rs232_port_device, write_dtr))
- MCFG_Z80DART_OUT_RTSB_CB(WRITELINE("rs232b", rs232_port_device, write_rts))
- MCFG_Z80DART_OUT_INT_CB(WRITELINE(*this, rmnimbus_state, sio_interrupt))
+ Z80SIO2(config, m_z80sio, 4000000);
+ m_z80sio->out_txdb_callback().set("rs232b", FUNC(rs232_port_device::write_txd));
+ m_z80sio->out_dtrb_callback().set("rs232b", FUNC(rs232_port_device::write_dtr));
+ m_z80sio->out_rtsb_callback().set("rs232b", FUNC(rs232_port_device::write_rts));
+ m_z80sio->out_int_callback().set(FUNC(rmnimbus_state::sio_interrupt));
- MCFG_DEVICE_ADD("rs232a", RS232_PORT, keyboard, "rmnkbd")
- MCFG_RS232_RXD_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, rxa_w))
+ rs232_port_device &rs232a(RS232_PORT(config, "rs232a", keyboard, "rmnkbd"));
+ rs232a.rxd_handler().set(Z80SIO_TAG, FUNC(z80dart_device::rxa_w));
- MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, rxb_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, dcdb_w))
- MCFG_RS232_RI_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, rib_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, ctsb_w))
+ rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr));
+ rs232b.rxd_handler().set(Z80SIO_TAG, FUNC(z80dart_device::rxb_w));
+ rs232b.dcd_handler().set(Z80SIO_TAG, FUNC(z80dart_device::dcdb_w));
+ rs232b.ri_handler().set(Z80SIO_TAG, FUNC(z80dart_device::rib_w));
+ rs232b.cts_handler().set(Z80SIO_TAG, FUNC(z80dart_device::ctsb_w));
- MCFG_DEVICE_ADD(ER59256_TAG, EEPROM_SERIAL_93C06_16BIT)
+ EEPROM_SERIAL_93C06_16BIT(config, m_eeprom);
- MCFG_DEVICE_ADD(VIA_TAG, VIA6522, 1000000)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8("cent_data_out", output_latch_device, bus_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, rmnimbus_state,nimbus_via_write_portb))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_centronics, centronics_device, write_strobe))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(m_maincpu, i80186_cpu_device, int3_w))
+ VIA6522(config, m_via, 1000000);
+ m_via->writepa_handler().set("cent_data_out", FUNC(output_latch_device::bus_w));
+ m_via->writepb_handler().set(FUNC(rmnimbus_state::nimbus_via_write_portb));
+ m_via->ca2_handler().set(m_centronics, FUNC(centronics_device::write_strobe));
+ m_via->irq_handler().set(m_maincpu, FUNC(i80186_cpu_device::int3_w));
CENTRONICS(config, m_centronics, centronics_devices, "printer");
m_centronics->ack_handler().set(m_via, FUNC(via6522_device::write_ca1)).invert();
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
+ output_latch_device &cent_data(OUTPUT_LATCH(config, "cent_data_out"));
+ cent_data.bit_handler<0>().set(m_centronics, FUNC(centronics_device::write_data0));
+ cent_data.bit_handler<1>().set(m_centronics, FUNC(centronics_device::write_data1));
+ cent_data.bit_handler<2>().set(m_centronics, FUNC(centronics_device::write_data2));
+ cent_data.bit_handler<3>().set(m_centronics, FUNC(centronics_device::write_data3));
+ cent_data.bit_handler<4>().set(m_centronics, FUNC(centronics_device::write_data4));
+ cent_data.bit_handler<5>().set(m_centronics, FUNC(centronics_device::write_data5));
+ cent_data.bit_handler<6>().set(m_centronics, FUNC(centronics_device::write_data6));
+ cent_data.bit_handler<7>().set(m_centronics, FUNC(centronics_device::write_data7));
/* sound hardware */
SPEAKER(config, MONO_TAG).front_center();
- MCFG_DEVICE_ADD(AY8910_TAG, AY8910, 2000000)
- MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, rmnimbus_state, nimbus_sound_ay8910_porta_w))
- MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(*this, rmnimbus_state, nimbus_sound_ay8910_portb_w))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS,MONO_TAG, 0.75)
-
- MCFG_DEVICE_ADD(MSM5205_TAG, MSM5205, 384000)
- MCFG_MSM5205_VCLK_CB(WRITELINE(*this, rmnimbus_state, nimbus_msm5205_vck)) /* VCK function */
- MCFG_MSM5205_PRESCALER_SELECTOR(S48_4B) /* 8 kHz */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, MONO_TAG, 0.75)
-
- /* Software list */
- MCFG_SOFTWARE_LIST_ADD("disk_list","nimbus")
-MACHINE_CONFIG_END
+ ay8910_device &ay8910(AY8910(config, AY8910_TAG, 2000000));
+ ay8910.port_a_write_callback().set(FUNC(rmnimbus_state::nimbus_sound_ay8910_porta_w));
+ ay8910.port_b_write_callback().set(FUNC(rmnimbus_state::nimbus_sound_ay8910_portb_w));
+ ay8910.add_route(ALL_OUTPUTS, MONO_TAG, 0.75);
+
+ msm5205_device &msm5205(MSM5205(config, MSM5205_TAG, 384000));
+ msm5205.vck_callback().set(FUNC(rmnimbus_state::nimbus_msm5205_vck)); /* VCK function */
+ msm5205.set_prescaler_selector(msm5205_device::S48_4B); /* 8 kHz */
+ msm5205.add_route(ALL_OUTPUTS, MONO_TAG, 0.75);
+
+ SOFTWARE_LIST(config, "disk_list").set_type("nimbus", SOFTWARE_LIST_ORIGINAL_SYSTEM);
+}
ROM_START( nimbus )