diff options
Diffstat (limited to 'src/mame/drivers/rmnimbus.cpp')
-rw-r--r-- | src/mame/drivers/rmnimbus.cpp | 183 |
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 ¢_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 ) |