diff options
author | Patrick Mackinlay <pmackinlay@hotmail.com> | 2018-08-22 18:59:15 +0700 |
---|---|---|
committer | Patrick Mackinlay <pmackinlay@hotmail.com> | 2018-08-22 18:59:15 +0700 |
commit | 3ebc17c46bf1eabad69d5b0c50ff67be7ceba160 (patch) | |
tree | d49bb5583c475612dcca55f1366e45a81610d064 /src/mame/drivers/interpro.cpp | |
parent | 403196c318fa275fccbb08ac21c9a83371d3123c (diff) |
interpro: cleanup + more graphics (nw)
* interpro: removed remaining MCFG and refactored
* gt: major overhaul, support GT+/GTII boards
* ncr5390: added devcb3 support
Diffstat (limited to 'src/mame/drivers/interpro.cpp')
-rw-r--r-- | src/mame/drivers/interpro.cpp | 521 |
1 files changed, 260 insertions, 261 deletions
diff --git a/src/mame/drivers/interpro.cpp b/src/mame/drivers/interpro.cpp index aa50748371d..760a648c8cf 100644 --- a/src/mame/drivers/interpro.cpp +++ b/src/mame/drivers/interpro.cpp @@ -702,20 +702,24 @@ FLOPPY_FORMATS_MEMBER(interpro_state::floppy_formats) FLOPPY_PC_FORMAT FLOPPY_FORMATS_END -static void interpro_floppies(device_slot_interface &device) -{ - device.option_add("525hd", FLOPPY_525_HD); - device.option_add("35hd", FLOPPY_35_HD); -} - void interpro_state::interpro_serial(machine_config &config) { + /* + * Documentation states that all three serial ports have RxD, TxD, CTS and + * RTS signals connected, and serial port 0 also has RI, DTR and DTS(?). + * Serial diagnostics pass all tests (except internal loopback which is not + * supported by z80scc_device) when a dec_loopback device is installed. The + * diagnostic tests also indicate that DCD is connected on all three ports. + * + * The documentation consistently refers to a DTS signal on serial port 0, + * but this appears to be an error or typo, as it doesn't match any known + * RS-232 signal; possibly it should be DSR? + */ // scc1 channel A (serial port 1) rs232_port_device &port1(RS232_PORT(config, INTERPRO_SERIAL_PORT1_TAG, default_rs232_devices, nullptr)); port1.cts_handler().set(m_scc1, FUNC(z80scc_device::ctsa_w)); port1.dcd_handler().set(m_scc1, FUNC(z80scc_device::dcda_w)); port1.rxd_handler().set(m_scc1, FUNC(z80scc_device::rxa_w)); - m_scc1->out_dtra_callback().set(port1, FUNC(rs232_port_device::write_dtr)); m_scc1->out_rtsa_callback().set(port1, FUNC(rs232_port_device::write_rts)); m_scc1->out_txda_callback().set(port1, FUNC(rs232_port_device::write_txd)); m_scc1->out_wreqa_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_serial1)).invert(); @@ -725,18 +729,12 @@ void interpro_state::interpro_serial(machine_config &config) port2.cts_handler().set(m_scc1, FUNC(z80scc_device::ctsb_w)); port2.dcd_handler().set(m_scc1, FUNC(z80scc_device::dcdb_w)); port2.rxd_handler().set(m_scc1, FUNC(z80scc_device::rxb_w)); - m_scc1->out_dtrb_callback().set(port2, FUNC(rs232_port_device::write_dtr)); m_scc1->out_rtsb_callback().set(port2, FUNC(rs232_port_device::write_rts)); m_scc1->out_txdb_callback().set(port2, FUNC(rs232_port_device::write_txd)); m_scc1->out_wreqb_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_serial2)).invert(); m_scc1->out_int_callback().set(m_ioga, FUNC(interpro_ioga_device::ir11_w)); - // scc2 channel A (keyboard) - INTERPRO_KEYBOARD_PORT(config, m_keyboard, interpro_keyboard_devices, nullptr); - m_keyboard->rxd_handler_cb().set(m_scc2, FUNC(z80scc_device::rxa_w)); - m_scc2->out_txda_callback().set(m_keyboard, FUNC(interpro_keyboard_port_device::write_txd)); - // scc2 channel B (serial port 0) rs232_port_device &port0(RS232_PORT(config, INTERPRO_SERIAL_PORT0_TAG, default_rs232_devices, nullptr)); port0.cts_handler().set(m_scc2, FUNC(z80scc_device::ctsb_w)); @@ -757,28 +755,14 @@ static void interpro_scsi_devices(device_slot_interface &device) device.option_add("cdrom", NSCSI_CDROM); } -static void emerald_scsi_devices(device_slot_interface &device) -{ - device.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C90A); -} - -static void turquoise_scsi_devices(device_slot_interface &device) +void interpro_state::interpro_scsi_adapter(device_t *device) { - device.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C90A); -} + ncr5390_device &adapter = downcast<ncr5390_device &>(*device); -static void sapphire_scsi_devices(device_slot_interface &device) -{ - device.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C94); -} + adapter.set_clock(24_MHz_XTAL); -void interpro_state::interpro_scsi_adapter(device_t *device) -{ - devcb_base *devcb; - (void)devcb; - MCFG_DEVICE_CLOCK(24_MHz_XTAL) - MCFG_NCR5390_IRQ_HANDLER(WRITELINE(":" INTERPRO_IOGA_TAG, interpro_ioga_device, ir0_w)) - MCFG_NCR5390_DRQ_HANDLER(WRITELINE(":" INTERPRO_IOGA_TAG, interpro_ioga_device, drq_scsi)) + adapter.irq_handler_cb().set(":" INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::ir0_w)); + adapter.drq_handler_cb().set(":" INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::drq_scsi)); } void interpro_state::interpro_cdrom(device_t *device) @@ -810,10 +794,8 @@ void interpro_state::ioga(machine_config &config) m_ioga->eth_ca_callback().set(m_eth, FUNC(i82586_base_device::ca)); } -static INPUT_PORTS_START(interpro) -INPUT_PORTS_END - -MACHINE_CONFIG_START(interpro_state::interpro) +void interpro_state::interpro(machine_config &config) +{ RAM(config, m_ram, 0); m_ram->set_default_size("16M"); m_ram->set_extra_options("32M,64M,128M,256M"); @@ -829,44 +811,48 @@ MACHINE_CONFIG_START(interpro_state::interpro) // serial // real-time clock/non-volatile memory - MCFG_DEVICE_ADD(m_rtc, MC146818, 32.768_kHz_XTAL) - MCFG_MC146818_UTC(true) - MCFG_MC146818_IRQ_HANDLER(WRITELINE(m_ioga, interpro_ioga_device, ir9_w)) - - // scsi - MCFG_DEVICE_ADD(m_scsibus, NSCSI_BUS, 0) - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":0", interpro_scsi_devices, "harddisk", false) - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":1", interpro_scsi_devices, nullptr, false) - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":2", interpro_scsi_devices, nullptr, false) - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":3", interpro_scsi_devices, nullptr, false) - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":4", interpro_scsi_devices, "cdrom", false) - MCFG_SLOT_OPTION_MACHINE_CONFIG("cdrom", interpro_cdrom) - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":5", interpro_scsi_devices, nullptr, false) - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":6", interpro_scsi_devices, nullptr, false) + MC146818(config, m_rtc, 32.768_kHz_XTAL); + m_rtc->set_use_utc(true); + m_rtc->irq_callback().set(m_ioga, FUNC(interpro_ioga_device::ir9_w)); + + // scsi bus and devices + NSCSI_BUS(config, m_scsibus, 0); + + nscsi_connector &harddisk(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":0", 0)); + interpro_scsi_devices(harddisk); + harddisk.set_default_option("harddisk"); + + nscsi_connector &cdrom(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":4", 0)); + interpro_scsi_devices(cdrom); + cdrom.set_default_option("cdrom"); + cdrom.set_option_machine_config("cdrom", interpro_cdrom); + + interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":1", 0)); + interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":2", 0)); + interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":3", 0)); + interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":5", 0)); + interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":6", 0)); // ethernet // i/o gate array - // mouse - interpro_mouse_port_device &mouse(INTERPRO_MOUSE_PORT(config, INTERPRO_MOUSE_PORT_TAG, interpro_mouse_devices, "interpro_mouse")); - mouse.state_func().set(m_ioga, FUNC(interpro_ioga_device::mouse_status_w)); - // system layout config.set_default_layout(layout_interpro); // software lists - MCFG_SOFTWARE_LIST_ADD("softlist", "interpro") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, m_softlist).set_type("interpro", SOFTWARE_LIST_ORIGINAL_SYSTEM); +} -MACHINE_CONFIG_START(emerald_state::emerald) +void emerald_state::emerald(machine_config &config) +{ interpro(config); - MCFG_DEVICE_ADD(m_maincpu, CLIPPER_C300, 12.5_MHz_XTAL) - MCFG_DEVICE_ADDRESS_MAP(0, emerald_main_map) - MCFG_DEVICE_ADDRESS_MAP(1, emerald_io_map) - MCFG_DEVICE_ADDRESS_MAP(2, interpro_boot_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(INTERPRO_IOGA_TAG, interpro_ioga_device, acknowledge_interrupt) + CLIPPER_C300(config, m_maincpu, 12.5_MHz_XTAL); // 40MHz? + m_maincpu->set_addrmap(0, &emerald_state::emerald_main_map); + m_maincpu->set_addrmap(1, &emerald_state::emerald_io_map); + m_maincpu->set_addrmap(2, &emerald_state::interpro_boot_map); + m_maincpu->set_irq_acknowledge_callback(INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::acknowledge_interrupt)); CAMMU_C3(config, m_i_cammu, 0); m_i_cammu->exception_callback().set(m_maincpu, FUNC(clipper_device::set_exception)); @@ -882,23 +868,26 @@ MACHINE_CONFIG_START(emerald_state::emerald) INTERPRO_MCGA(config, m_mcga, 0); // floppy controller - MCFG_I82072_ADD(m_fdc, false) - MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, ir1_w)) - MCFG_UPD765_DRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, drq_floppy)) + I82072(config, m_fdc, 24_MHz_XTAL); + m_fdc->set_ready_line_connected(false); + m_fdc->intrq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::ir1_w)); + m_fdc->drq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_floppy)); // connect a 3.5" drive at id 3 - //MCFG_FLOPPY_DRIVE_ADD(INTERPRO_FDC_TAG ":2", interpro_floppies, "525hd", interpro_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(INTERPRO_FDC_TAG ":3", interpro_floppies, "35hd", interpro_state::floppy_formats) - MCFG_FLOPPY_DRIVE_SOUND(false) + //FLOPPY_CONNECTOR(config, INTERPRO_FDC_TAG ":2", "525hd", FLOPPY_525_HD, true, interpro_state::floppy_formats).enable_sound(false); + FLOPPY_CONNECTOR(config, INTERPRO_FDC_TAG ":3", "35hd", FLOPPY_35_HD, true, interpro_state::floppy_formats).enable_sound(false); // serial controllers and ports SCC85C30(config, m_scc1, 4.9152_MHz_XTAL); SCC85C30(config, m_scc2, 4.9152_MHz_XTAL); interpro_serial(config); - // scsi controller - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":7", emerald_scsi_devices, INTERPRO_SCSI_ADAPTER_TAG, true) - MCFG_SLOT_OPTION_MACHINE_CONFIG(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter) + // scsi host adapter + nscsi_connector &adapter(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":7", 0)); + adapter.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C90A); + adapter.set_default_option(INTERPRO_SCSI_ADAPTER_TAG); + adapter.set_fixed(true); + adapter.set_option_machine_config(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter); // ethernet controller I82586(config, m_eth, 10_MHz_XTAL); @@ -909,16 +898,25 @@ MACHINE_CONFIG_START(emerald_state::emerald) EMERALD_IOGA(config, m_ioga, 0); m_ioga->set_memory(m_maincpu, 0); ioga(config); -MACHINE_CONFIG_END -MACHINE_CONFIG_START(turquoise_state::turquoise) + // srx bus + SRX_BUS(config, m_bus, 0, m_maincpu); + + m_bus->out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); + m_bus->out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); + m_bus->out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); + m_bus->out_irq3_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); +} + +void turquoise_state::turquoise(machine_config &config) +{ interpro(config); - MCFG_DEVICE_ADD(m_maincpu, CLIPPER_C300, 12.5_MHz_XTAL) - MCFG_DEVICE_ADDRESS_MAP(0, turquoise_main_map) - MCFG_DEVICE_ADDRESS_MAP(1, turquoise_io_map) - MCFG_DEVICE_ADDRESS_MAP(2, interpro_boot_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(INTERPRO_IOGA_TAG, interpro_ioga_device, acknowledge_interrupt) + CLIPPER_C300(config, m_maincpu, 12.5_MHz_XTAL); // 40Mhz? + m_maincpu->set_addrmap(0, &turquoise_state::turquoise_main_map); + m_maincpu->set_addrmap(1, &turquoise_state::turquoise_io_map); + m_maincpu->set_addrmap(2, &turquoise_state::interpro_boot_map); + m_maincpu->set_irq_acknowledge_callback(INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::acknowledge_interrupt)); CAMMU_C3(config, m_i_cammu, 0); m_i_cammu->exception_callback().set(m_maincpu, FUNC(clipper_device::set_exception)); @@ -934,22 +932,34 @@ MACHINE_CONFIG_START(turquoise_state::turquoise) INTERPRO_MCGA(config, m_mcga, 0); // floppy controller - MCFG_I82072_ADD(m_fdc, false) - MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, ir1_w)) - MCFG_UPD765_DRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, drq_floppy)) + I82072(config, m_fdc, 24_MHz_XTAL); + m_fdc->set_ready_line_connected(false); + m_fdc->intrq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::ir1_w)); + m_fdc->drq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_floppy)); // connect a 3.5" drive at id 3 - MCFG_FLOPPY_DRIVE_ADD(INTERPRO_FDC_TAG ":3", interpro_floppies, "35hd", interpro_state::floppy_formats) - MCFG_FLOPPY_DRIVE_SOUND(false) + FLOPPY_CONNECTOR(config, INTERPRO_FDC_TAG ":3", "35hd", FLOPPY_35_HD, true, interpro_state::floppy_formats).enable_sound(false); // serial controllers and ports SCC85C30(config, m_scc1, 4.9152_MHz_XTAL); SCC85C30(config, m_scc2, 4.9152_MHz_XTAL); interpro_serial(config); - // scsi controller - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":7", turquoise_scsi_devices, INTERPRO_SCSI_ADAPTER_TAG, true) - MCFG_SLOT_OPTION_MACHINE_CONFIG(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter) + // keyboard port + INTERPRO_KEYBOARD_PORT(config, m_kbd_port, interpro_keyboard_devices, nullptr); + m_kbd_port->rxd_handler_cb().set(m_scc2, FUNC(z80scc_device::rxa_w)); + m_scc2->out_txda_callback().set(m_kbd_port, FUNC(interpro_keyboard_port_device::write_txd)); + + // mouse port + INTERPRO_MOUSE_PORT(config, m_mse_port, interpro_mouse_devices, nullptr); + m_mse_port->state_func().set(m_ioga, FUNC(interpro_ioga_device::mouse_status_w)); + + // scsi host adapter + nscsi_connector &adapter(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":7", 0)); + adapter.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C90A); + adapter.set_default_option(INTERPRO_SCSI_ADAPTER_TAG); + adapter.set_fixed(true); + adapter.set_option_machine_config(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter); // ethernet controller I82586(config, m_eth, 10_MHz_XTAL); @@ -960,15 +970,25 @@ MACHINE_CONFIG_START(turquoise_state::turquoise) TURQUOISE_IOGA(config, m_ioga, 0); m_ioga->set_memory(m_maincpu, 0); ioga(config); -MACHINE_CONFIG_END -MACHINE_CONFIG_START(sapphire_state::sapphire) + // cbus bus + CBUS_BUS(config, m_bus, 0, m_maincpu); + + m_bus->out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); + m_bus->out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); + m_bus->out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); + m_bus->out_irq3_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); +} + +void sapphire_state::sapphire(machine_config &config) +{ interpro(config); - MCFG_DEVICE_ADD(m_maincpu, CLIPPER_C400, 12.5_MHz_XTAL) - MCFG_DEVICE_ADDRESS_MAP(0, sapphire_main_map) - MCFG_DEVICE_ADDRESS_MAP(1, sapphire_io_map) - MCFG_DEVICE_ADDRESS_MAP(2, interpro_boot_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(INTERPRO_IOGA_TAG, interpro_ioga_device, acknowledge_interrupt) + + CLIPPER_C400(config, m_maincpu, 12.5_MHz_XTAL); + m_maincpu->set_addrmap(0, &sapphire_state::sapphire_main_map); + m_maincpu->set_addrmap(1, &sapphire_state::sapphire_io_map); + m_maincpu->set_addrmap(2, &sapphire_state::interpro_boot_map); + m_maincpu->set_irq_acknowledge_callback(INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::acknowledge_interrupt)); // FIXME: 2400/6400 should be C4T cammu? CAMMU_C4I(config, m_mmu, 0); @@ -978,13 +998,13 @@ MACHINE_CONFIG_START(sapphire_state::sapphire) INTERPRO_FMCC(config, m_mcga, 0); // floppy controller - MCFG_N82077AA_ADD(m_fdc, n82077aa_device::MODE_PS2) - MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, ir1_w)) - MCFG_UPD765_DRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, drq_floppy)) + N82077AA(config, m_fdc, 24_MHz_XTAL); + m_fdc->set_mode(n82077aa_device::MODE_PS2); + m_fdc->intrq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::ir1_w)); + m_fdc->drq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_floppy)); // connect a 3.5" drive at id 1 - MCFG_FLOPPY_DRIVE_ADD(INTERPRO_FDC_TAG ":1", interpro_floppies, "35hd", interpro_state::floppy_formats) - MCFG_FLOPPY_DRIVE_SOUND(false) + FLOPPY_CONNECTOR(config, INTERPRO_FDC_TAG ":1", "35hd", FLOPPY_35_HD, true, interpro_state::floppy_formats).enable_sound(false); // srx arbiter gate array INTERPRO_ARBGA(config, m_arbga, 0); @@ -994,9 +1014,12 @@ MACHINE_CONFIG_START(sapphire_state::sapphire) SCC85C30(config, m_scc2, 4.9152_MHz_XTAL); interpro_serial(config); - // scsi controller - MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":7", sapphire_scsi_devices, INTERPRO_SCSI_ADAPTER_TAG, true) - MCFG_SLOT_OPTION_MACHINE_CONFIG(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter) + // scsi host adapter + nscsi_connector &adapter(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":7", 0)); + adapter.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C94); + adapter.set_default_option(INTERPRO_SCSI_ADAPTER_TAG); + adapter.set_fixed(true); + adapter.set_option_machine_config(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter); // ethernet controller I82596_LE16(config, m_eth, 20_MHz_XTAL); @@ -1011,217 +1034,193 @@ MACHINE_CONFIG_START(sapphire_state::sapphire) // flash memory INTEL_28F010(config, m_flash_lsb); INTEL_28F010(config, m_flash_msb); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(turquoise_state::ip2000) +void turquoise_state::ip2000(machine_config &config) +{ turquoise(config); - //m_maincpu->set_clock(40_MHz_XTAL); - m_keyboard->set_default_option("lle_en_us"); + // default is 2020 with GT graphics + m_kbd_port->set_default_option("lle_en_us"); + m_mse_port->set_default_option("interpro_mouse"); - // bus and slots (default to 2020 with GT graphics) - cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu)); + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "mpcb963", false); + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false); - bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); - bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); - bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); - bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); + m_softlist->set_filter("2000"); +} - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "mpcb963", false); - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false); +void cbus_sapphire_state::cbus_sapphire(machine_config &config) +{ + sapphire(config); + + // keyboard port + INTERPRO_KEYBOARD_PORT(config, m_kbd_port, interpro_keyboard_devices, nullptr); + m_kbd_port->rxd_handler_cb().set(m_scc2, FUNC(z80scc_device::rxa_w)); + m_scc2->out_txda_callback().set(m_kbd_port, FUNC(interpro_keyboard_port_device::write_txd)); - MCFG_SOFTWARE_LIST_FILTER("softlist", "2000") -MACHINE_CONFIG_END + // mouse port + INTERPRO_MOUSE_PORT(config, m_mse_port, interpro_mouse_devices, nullptr); + m_mse_port->state_func().set(m_ioga, FUNC(interpro_ioga_device::mouse_status_w)); + + // cbus bus + CBUS_BUS(config, m_bus, 0, m_maincpu); + + m_bus->out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); + m_bus->out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); + m_bus->out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); + m_bus->out_irq3_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); +} -MACHINE_CONFIG_START(sapphire_state::ip2400) +void srx_sapphire_state::srx_sapphire(machine_config &config) +{ sapphire(config); - //m_maincpu->set_clock(50_MHz_XTAL); - m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR0); + // srx bus + SRX_BUS(config, m_bus, 0, m_maincpu); - m_keyboard->set_default_option("lle_en_us"); + m_bus->out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); + m_bus->out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); + m_bus->out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); + m_bus->out_irq3_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); +} - // bus and slots (default to 2430 with GT+ graphics) - cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu)); +void cbus_sapphire_state::ip2400(machine_config &config) +{ + cbus_sapphire(config); - bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); - bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); - bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); - bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); + //m_maincpu->set_clock(50_MHz_XTAL); + m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR0); - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "msmt070", false); - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false); + // default is 2430 with GT+ graphics + m_kbd_port->set_default_option("lle_en_us"); + m_mse_port->set_default_option("interpro_mouse"); - MCFG_SOFTWARE_LIST_FILTER("softlist", "2400") -MACHINE_CONFIG_END + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "msmt070", false); + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false); -MACHINE_CONFIG_START(sapphire_state::ip2500) - sapphire(config); - //m_maincpu->set_clock(?); + m_softlist->set_filter("2400"); +} - // FIXME: don't know which cammu revision - m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR0); +void cbus_sapphire_state::ip2500(machine_config &config) +{ + cbus_sapphire(config); - m_keyboard->set_default_option("lle_en_us"); + //m_maincpu->set_clock(?); + // FIXME: don't know which cammu revision + m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2); - // bus and slots (default to 2530 with GT+ graphics) - cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu)); + // default is 2530 with GT+ graphics + m_kbd_port->set_default_option("lle_en_us"); + m_mse_port->set_default_option("interpro_mouse"); - bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); - bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); - bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); - bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "msmt070", false); + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false); - // GT II graphics (msmt135)? - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "msmt070", false); - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false); + m_softlist->set_filter("2500"); +} - MCFG_SOFTWARE_LIST_FILTER("softlist", "2500") -MACHINE_CONFIG_END +void cbus_sapphire_state::ip2700(machine_config &config) +{ + cbus_sapphire(config); -MACHINE_CONFIG_START(sapphire_state::ip2700) - sapphire(config); //m_maincpu->set_clock(?); - m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2); - m_keyboard->set_default_option("lle_en_us"); + // default is 2730 with GT+ graphics + m_kbd_port->set_default_option("lle_en_us"); + m_mse_port->set_default_option("interpro_mouse"); - // bus and slots (default to 2730 with GT+ graphics) - cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu)); + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "msmt070", false); + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false); - bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); - bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); - bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); - bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); - - // GT II graphics (msmt135)? - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "msmt070", false); - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false); + m_softlist->set_filter("2700"); +} - MCFG_SOFTWARE_LIST_FILTER("softlist", "2700") -MACHINE_CONFIG_END +void cbus_sapphire_state::ip2800(machine_config &config) +{ + cbus_sapphire(config); -MACHINE_CONFIG_START(sapphire_state::ip2800) - sapphire(config); //m_maincpu->set_clock(?); - // FIXME: don't know which cammu revision m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2); - m_keyboard->set_default_option("lle_en_us"); - - // bus and slots (default to 2830 with GT+ graphics) - cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu)); + // default is 2830 with GT+ graphics + m_kbd_port->set_default_option("lle_en_us"); + m_mse_port->set_default_option("interpro_mouse"); - bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); - bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); - bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); - bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "msmt070", false); + CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false); - // GT II graphics (msmt135)? - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "msmt070", false); - CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false); - - MCFG_SOFTWARE_LIST_FILTER("softlist", "2800") -MACHINE_CONFIG_END + m_softlist->set_filter("2800"); +} -MACHINE_CONFIG_START(emerald_state::ip6000) +void emerald_state::ip6000(machine_config &config) +{ emerald(config); - //m_maincpu->set_clock(80_MHz_XTAL / 2); - - // bus and slots (default to 6040 with EDGE-1 graphics) - srx_bus_device &bus(SRX_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu)); - bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); - bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); - bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); - bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); + // default is 6040 with EDGE-1 graphics + SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcb828", false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, "mpcb828", false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, nullptr, false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, bus, srx_cards, nullptr, false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, bus, srx_cards, nullptr, false); + m_softlist->set_filter("6000"); +} - MCFG_SOFTWARE_LIST_FILTER("softlist", "6000") -MACHINE_CONFIG_END +void srx_sapphire_state::ip6400(machine_config &config) +{ + srx_sapphire(config); -MACHINE_CONFIG_START(sapphire_state::ip6400) - sapphire(config); //m_maincpu->set_clock(36_MHz_XTAL); - m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR0); - m_keyboard->set_default_option("lle_en_us"); - - // bus and slots (default to 6450 with GT II graphics) - srx_bus_device &bus(SRX_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu)); - - bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); - bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); - bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); - bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); - - SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, "mpcbb92", false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, nullptr, false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, bus, srx_cards, nullptr, false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, bus, srx_cards, nullptr, false); - - // EDGE systems use graphics keyboard - //m_keyboard->set_default_option(nullptr); + // default is 6450 with GT II graphics + SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcbb68", false); // EDGE-2 graphics (6480) - //SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, "mpcb030", false); - //SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, "mpcba63", false); + //SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, "mpcb030", false); + //SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcba63", false); - MCFG_SOFTWARE_LIST_FILTER("softlist", "6400") -MACHINE_CONFIG_END + m_softlist->set_filter("6400"); +} -MACHINE_CONFIG_START(sapphire_state::ip6700) - sapphire(config); - //m_maincpu->set_clock(?); +void srx_sapphire_state::ip6700(machine_config &config) +{ + srx_sapphire(config); + //m_maincpu->set_clock(?); // FIXME: don't know which cammu revision m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2); - // bus and slots (default to 6780 with EDGE-2 Plus graphics) - srx_bus_device &bus(SRX_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu)); + // default is 6780 with EDGE-2 Plus graphics + SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, "msmt094", false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcb896", false); - bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); - bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); - bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); - bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); - - SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, "msmt094", false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, "mpcb896", false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, bus, srx_cards, nullptr, false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, bus, srx_cards, nullptr, false); + m_softlist->set_filter("6700"); +} - MCFG_SOFTWARE_LIST_FILTER("softlist", "6700") -MACHINE_CONFIG_END +void srx_sapphire_state::ip6800(machine_config &config) +{ + srx_sapphire(config); -MACHINE_CONFIG_START(sapphire_state::ip6800) - sapphire(config); //m_maincpu->set_clock(?); - // FIXME: don't know which cammu revision m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2); - // bus and slots (default to 6880 with EDGE-2 Plus graphics) - srx_bus_device &bus(SRX_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu)); - - bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w)); - bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w)); - bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w)); - bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w)); + // default is 6880 with EDGE-2 Plus graphics + SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, m_bus, srx_cards, nullptr, false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, "msmt094", false); + SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcb896", false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, nullptr, false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, nullptr, false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, bus, srx_cards, "msmt094", false); - SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, bus, srx_cards, "mpcb896", false); - - MCFG_SOFTWARE_LIST_FILTER("softlist", "6800") -MACHINE_CONFIG_END + m_softlist->set_filter("6800"); +} ROM_START(ip2000) ROM_REGION(0x80, INTERPRO_NODEID_TAG, 0) @@ -1359,13 +1358,13 @@ ROM_START(ip6800) ROM_LOAD_OPTIONAL("y226.u130", 0x00000, 0x20000, CRC(54d95730) SHA1(a4e114dee1567d8aa31eed770f7cc366588f395c)) ROM_END -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1990, ip2000, 0, 0, ip2000, interpro, turquoise_state,init_common,"Intergraph", "InterPro/InterServe 20x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) -COMP( 1992, ip2400, 0, 0, ip2400, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 24x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) -COMP( 1993, ip2500, 0, 0, ip2500, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 25x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) -COMP( 1993, ip2700, 0, 0, ip2700, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 27x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) -COMP( 1994, ip2800, 0, 0, ip2800, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 28x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) -COMP( 1990, ip6000, 0, 0, ip6000, interpro, emerald_state, init_common,"Intergraph", "InterPro/InterServe 60x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) -COMP( 1992, ip6400, 0, 0, ip6400, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 64x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) -COMP( 1993, ip6700, 0, 0, ip6700, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 67x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) -COMP( 1993, ip6800, 0, 0, ip6800, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 68x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP( 1990, ip2000, 0, 0, ip2000, 0, turquoise_state, init_common,"Intergraph", "InterPro/InterServe 20x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +COMP( 1992, ip2400, 0, 0, ip2400, 0, cbus_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 24x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +COMP( 1993, ip2500, 0, 0, ip2500, 0, cbus_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 25x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +COMP( 1993, ip2700, 0, 0, ip2700, 0, cbus_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 27x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +COMP( 1994, ip2800, 0, 0, ip2800, 0, cbus_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 28x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +COMP( 1990, ip6000, 0, 0, ip6000, 0, emerald_state, init_common,"Intergraph", "InterPro/InterServe 60x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +COMP( 1992, ip6400, 0, 0, ip6400, 0, srx_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 64x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +COMP( 1993, ip6700, 0, 0, ip6700, 0, srx_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 67x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) +COMP( 1993, ip6800, 0, 0, ip6800, 0, srx_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 68x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) |