diff options
author | Patrick Mackinlay <pmackinlay@hotmail.com> | 2018-05-15 21:01:13 +0700 |
---|---|---|
committer | Olivier Galibert <galibert@pobox.com> | 2018-05-15 16:01:13 +0200 |
commit | 90dc8100237508469cbd741dd8e3d9787c207878 (patch) | |
tree | 41327b9f411be77c15aa7216a2a7de192f91fdae /src/mame/drivers/interpro.cpp | |
parent | 4a0bbac3b5972755e66bfe322fc750e1087075ce (diff) |
interpro: wip checkpoint (nw) (#3573)
* softfloat3: do we like this better? (nw)
* softfloat3: it gets the hose again (nw)
* softfloat3: sonofa (nw)
* interpro: wip checkpoint (nw)
* added 6x00 models
* added EDGE graphics skeleton
* split bus/cards into two types
* various fixes/changes
Diffstat (limited to 'src/mame/drivers/interpro.cpp')
-rw-r--r-- | src/mame/drivers/interpro.cpp | 425 |
1 files changed, 391 insertions, 34 deletions
diff --git a/src/mame/drivers/interpro.cpp b/src/mame/drivers/interpro.cpp index e334103260b..56c12ef53f2 100644 --- a/src/mame/drivers/interpro.cpp +++ b/src/mame/drivers/interpro.cpp @@ -61,12 +61,11 @@ * * Both the desktop and minicase units supported expansion slots with a variety * of cards, although with different profiles and connectors between 2xxx and - * 6xxx systems. The bus is referred to as SR, SRX, SR Bus, CBUS and some - * combinations of these in various places, but all appear to be compatible or - * identical, possibly with SRX being an enhanced version. The bus supported a - * range of add-in cards, ranging from expanded SCSI and serial controllers, - * to specialised scanning and plotting controllers, a VME bridge, and most - * importantly various single and dual-headed graphics boards. + * 6xxx systems. The 2xxx bus is referred to as CBUS, with the 6xxx bus known + * as SRX bus; SR (shared resource) bus is used to refer to either type. The + * bus supported a range of add-in cards, ranging from expanded SCSI and serial + * controllers, to specialised scanning and plotting controllers, a VME bridge, + * and most importantly various single and dual-headed graphics boards. * * The InterPro graphics options included the GT range, generally fitted to the * desktops, and EDGE graphics for the 6xxx systems. Systems with no graphics @@ -87,13 +86,14 @@ * GT graphics are also referred to in various places as Memory Mapped Graphics * or MMG. EDGE stands for Extensible Display Geometry Engine. * - * This emulation currently supports the Turquoise and Sapphire desktop systems (i.e. models - * 2000/2400/2500/2700/2800). Base GT graphics can be used with any of these models, or the - * graphics and keyboard removed and the systems used with a serial terminal instead. + * This driver currently supports the Emerald, Turquoise and Sapphire systems + * (i.e. 2x00 and 6x00 models), but not all of the variants of the Emerald at + * this point. GT/GTDB or EDGE graphics can be used depending on model, or + * graphics and keyboard uninstalled and a serial terminal used instead. * * Key parts lists for the supported models are as follows. * - * 2000 Turquoise (C300 @ 50MHz?, main board PCB962) + * 2000 Turquoise (PCB962 rev A, PCB824 rev J) * * Ref Part Function * U37 Intel 82072 Floppy drive controller @@ -112,7 +112,7 @@ * U171 128 kB EPROM (MPRGM530E) Boot ROM MSB * U172 128 kB EPROM (MPRGM540E) Boot ROM LSB * - * 2400 Sapphire (C400T @ 40MHz?, main board SMT047) + * 2400 Sapphire (SMT047 rev 0, SMT038?) * * Ref Part Function * U31 Zilog Z85C30 SCC Keyboard and console serial controller @@ -138,7 +138,7 @@ * U118? (MPRG X510R) * U155 CYID21704 TC140G54AF * - * 2700 Sapphire (C400I @ 70MHz?, main board SMT128) + * 2700 Sapphire (SMT128 rev 0, SMT104 rev A) * * Ref Part Function * U31 Zilog Z85C30 SCC Keyboard and console serial controller @@ -149,7 +149,7 @@ * U44 Intel 82596SX-20 Ethernet controller * U68 CYID21603 TC150G89AF * U67 Intel N28F010 128Kx8 flash memory (Y226 0C30 4291) - * U71 LSI L1A7374 CIDC094A3 Intergraph I/O gate array + * U71 LSI L1A7374 CICD094A3 Intergraph I/O gate array * U76 Intel N28F010 128Kx8 flash memory (Y225 0C30 4220) * U81 NCR 53C94 SCSI controller * U86 24.0 MHz crystal Clock source for 82077 @@ -164,14 +164,60 @@ * U118? () * U155 CYID212?4 TC140G54AF? * + * 6000 (PCB765 rev B, PCB82409 rev D) + * + * Ref Part Function + * U264 Xilinx XC3020-50 Plotter control FPGA? + * U294 4.9152 MHz crystal + * U287 Z8530H-6JC Serial controller + * U288 Z8530H-6JC Serial controller + * U318 24.0 MHz crystal + * U323 20.0 MHz crystal + * U324 Intel 82586-10 Ethernet controller + * U303 CICD84607 TC110G75CY + * U311 NCR 53C90A SCSI controller + * U336 27C010 (MPRGG360F) 128Kx8 Boot EPROM ?SB + * U341 Dallas DS1287 RTC and NVRAM + * U349 27C010 (MPRGG350F) 128Kx8 Boot EPROM ?SB + * U347 Intel 82072 Floppy drive controller + * + * 6400 (SMT046 rev B, SMT082) + * + * 6800 Sapphire (SMT127 rev B, SMT104 rev C) + * + * Ref Part Function + * U53 LSI L1A7751 CICD094A3 Intergraph I/O gate array + * U55 Xilinx XC3020-70 Plotter control FPGA? + * U57 CYID21704 TC140G54AF + * U69 CYID21603 TC150G89AF + * U73 20.0 MHz crystal Clock source for 82596? + * U78 29.0 MHz crystal + * U88 4.9152 MHz crystal Clock source for 8530s? + * U94 40.0 MHz crystal + * U95 CICD 89703 TC110G11AT + * U108 24.0 MHz crystal Clock source for 82077 + * U117 Intel N28F010 128Kx8 flash memory (Y225 0C40 6010) + * U118 Zilog Z85C30 SCC Keyboard and console serial controller + * U119 Zilog Z85230 ESCC Serial controller for serial port 0 and 1 + * U130 Intel N28F010 128Kx8 flash memory (Y226 0C40 6280) + * U136 NCR 53C94 SCSI controller + * U144 27C1024 (MPRGZ530A) 128Kx8 Boot EPROM + * U145 Dallas DS12887 RTC and NVRAM + * U159 Intel 82596SX-20 Ethernet controller + * U164 Intel N82077SL-1? Floppy drive controller + * * CPU daughter-boards - * PCB824 Rev J - 2000 (also has label MPCBA5507) + * + * PCB824 Rev J (MPCBA5507) + * CPCB82409 rev D (MPCB92108) - 6000 C311 + 2xC322 + 80MHz crystal + * * SMT082 (MSMT0820B, 36MHz?) - 6400 (SMT046 "6400 36-MHz Series System Board") * SMT03? 2400/6400 - (MSMT03804 -> rev 2 cammu, goes with "6400 36-MHz Series System Board", MSMT0380A eco 3+ use rev 3 cammu) * SMT019 (MSMT019 C4E CPU Assembly) * SMT104 Rev A - 2700/6700 (aka MSMT1040A "C4I CPU", C4 CPU REV 3 + C4 FPU REV 3 + C4I CAMMU) * * PCB962 2000 System Board MPCB824 C300 + * PCB??? 6000 System Board w/?MB MPCB824 C300 * SMT046 6400 36-MHz Series System Board MSMT03804 rev 2 CAMMU/30MHz Kryptonite Rev 3 CAMMU/32MHz Kryptonite Rev 3 CAMMU/MSMT0820B(36MHz) * SMT047 2400 Series System Board MSMT03804 rev 2 CAMMU/MSMT0380A eco 3+ Rev 3 CAMMU * SMT098A 6400 32-MHz Sapphire System Board @@ -208,6 +254,8 @@ void interpro_state::machine_start() save_item(NAME(m_sreg_ctrl2)); save_item(NAME(m_sreg_ctrl3)); + + m_reset_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(interpro_state::reset_timer), this)); } void interpro_state::machine_reset() @@ -216,6 +264,10 @@ void interpro_state::machine_reset() m_sreg_error = 0; m_sreg_status = 0x400; m_sreg_ctrl1 = CTRL1_FLOPLOW; + + // suspend the main cpu long enough for the keyboard to boot + m_maincpu->suspend(SUSPEND_REASON_RESET, false); + m_reset_timer->adjust(attotime::from_msec(750)); } void interpro_state::init_common() @@ -363,6 +415,39 @@ void interpro_state::interpro_common_map(address_map &map) map(0x7f0fff00, 0x7f0fffff).m(m_ioga, FUNC(interpro_ioga_device::map)); } +void emerald_state::emerald_base_map(address_map &map) +{ + interpro_common_map(map); + + map(0x40000000, 0x4000003f).m(m_mcga, FUNC(interpro_mcga_device::map)); + + // scsi registers have unusual address mapping + map(0x7f000201, 0x7f000201).rw(m_scsi, FUNC(ncr53c90a_device::tcounter_lo_r), FUNC(ncr53c90a_device::tcount_lo_w)); + map(0x7f000205, 0x7f000205).rw(m_scsi, FUNC(ncr53c90a_device::tcounter_hi_r), FUNC(ncr53c90a_device::tcount_hi_w)); + map(0x7f000209, 0x7f000209).rw(m_scsi, FUNC(ncr53c90a_device::fifo_r), FUNC(ncr53c90a_device::fifo_w)); + map(0x7f00020d, 0x7f00020d).rw(m_scsi, FUNC(ncr53c90a_device::command_r), FUNC(ncr53c90a_device::command_w)); + map(0x7f000211, 0x7f000211).rw(m_scsi, FUNC(ncr53c90a_device::status_r), FUNC(ncr53c90a_device::bus_id_w)); + map(0x7f000215, 0x7f000215).rw(m_scsi, FUNC(ncr53c90a_device::istatus_r), FUNC(ncr53c90a_device::timeout_w)); + map(0x7f000219, 0x7f000219).rw(m_scsi, FUNC(ncr53c90a_device::seq_step_r), FUNC(ncr53c90a_device::sync_period_w)); + map(0x7f00021d, 0x7f00021d).rw(m_scsi, FUNC(ncr53c90a_device::fifo_flags_r), FUNC(ncr53c90a_device::sync_offset_w)); + map(0x7f000221, 0x7f000221).rw(m_scsi, FUNC(ncr53c90a_device::conf_r), FUNC(ncr53c90a_device::conf_w)); + map(0x7f000225, 0x7f000225).w(m_scsi, FUNC(ncr53c90a_device::clock_w)); + map(0x7f000229, 0x7f000229).w(m_scsi, FUNC(ncr53c90a_device::test_w)); + map(0x7f00022d, 0x7f00022d).rw(m_scsi, FUNC(ncr53c90a_device::conf2_r), FUNC(ncr53c90a_device::conf2_w)); + + map(0x7f000300, 0x7f000300).w(this, FUNC(emerald_state::sreg_error_w)); + + map(0x7f000600, 0x7f00067f).rom().region(INTERPRO_NODEID_TAG, 0); +} + +void emerald_state::emerald_main_map(address_map &map) +{ + emerald_base_map(map); + + map(0x00000000, 0x00ffffff).ram().share(RAM_TAG); + map(0x7f100000, 0x7f13ffff).rom().region(INTERPRO_EPROM_TAG, 0); +} + void turquoise_state::turquoise_base_map(address_map &map) { interpro_common_map(map); @@ -424,12 +509,26 @@ void sapphire_state::sapphire_base_map(address_map &map) void sapphire_state::sapphire_main_map(address_map &map) { + //map(0x00000000, 0xffffffff).rw(this, FUNC(sapphire_state::unmapped_r), FUNC(sapphire_state::unmapped_w)); + sapphire_base_map(map); map(0x00000000, 0x00ffffff).ram().share(RAM_TAG); map(0x7f100000, 0x7f11ffff).rom().region(INTERPRO_EPROM_TAG, 0); map(0x7f180000, 0x7f1fffff).rw(INTERPRO_FLASH_TAG "_lo", FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).umask32(0x00ff00ff).mask(0x3ffff); map(0x7f180000, 0x7f1fffff).rw(INTERPRO_FLASH_TAG "_hi", FUNC(intel_28f010_device::read), FUNC(intel_28f010_device::write)).umask32(0xff00ff00).mask(0x3ffff); + + // HACK: for SRX bus Sapphire only + //map(0x8f007f80, 0x8f007fff).rom().region(INTERPRO_IDPROM_TAG, 0); +} + +void emerald_state::emerald_io_map(address_map &map) +{ + emerald_base_map(map); + + map(0x00000800, 0x000009ff).m(INTERPRO_MMU_TAG "_d", FUNC(cammu_c3_device::map)); + map(0x00000a00, 0x00000bff).m(INTERPRO_MMU_TAG "_i", FUNC(cammu_c3_device::map)); + map(0x00000c00, 0x00000dff).m(INTERPRO_MMU_TAG "_d", FUNC(cammu_c3_device::map_global)); } void turquoise_state::turquoise_io_map(address_map &map) @@ -443,6 +542,8 @@ void turquoise_state::turquoise_io_map(address_map &map) void sapphire_state::sapphire_io_map(address_map &map) { + //map(0x00000000, 0xffffffff).rw(this, FUNC(sapphire_state::unmapped_r), FUNC(sapphire_state::unmapped_w)); + sapphire_base_map(map); map(0x00000000, 0x00001fff).m(m_mmu, FUNC(cammu_c4_device::map)); @@ -457,6 +558,11 @@ void interpro_state::interpro_boot_map(address_map &map) map(0x00000000, 0x00001fff).ram(); } +void emerald_state::interpro_82586_map(address_map &map) +{ + map(0x00000000, 0x00ffffff).rw(INTERPRO_IOGA_TAG, FUNC(turquoise_ioga_device::eth_r), FUNC(turquoise_ioga_device::eth_w)); +} + void turquoise_state::interpro_82586_map(address_map &map) { map(0x00000000, 0x00ffffff).rw(INTERPRO_IOGA_TAG, FUNC(turquoise_ioga_device::eth_r), FUNC(turquoise_ioga_device::eth_w)); @@ -473,7 +579,7 @@ FLOPPY_FORMATS_END static void interpro_floppies(device_slot_interface &device) { - device.option_add("525dd", FLOPPY_525_DD); + device.option_add("525hd", FLOPPY_525_HD); device.option_add("35hd", FLOPPY_35_HD); } @@ -518,6 +624,11 @@ 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) { device.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C90A); @@ -599,12 +710,6 @@ MACHINE_CONFIG_START(interpro_state::interpro) MCFG_DEVICE_SLOT_INTERFACE(interpro_mouse_devices, "interpro_mouse", false) MCFG_MOUSE_STATE_CB(WRITE32(INTERPRO_IOGA_TAG, interpro_ioga_device, mouse_status_w)) - // sr bus and slots - MCFG_DEVICE_ADD(INTERPRO_SRBUS_TAG, SR, 0) - MCFG_SR_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir6_w)) - MCFG_SR_SLOT_ADD(INTERPRO_SRBUS_TAG, INTERPRO_SRBUS_TAG ":0", sr_cards, "mpcb963", false) - MCFG_SR_SLOT_ADD(INTERPRO_SRBUS_TAG, INTERPRO_SRBUS_TAG ":1", sr_cards, nullptr, false) - // system layout MCFG_DEFAULT_LAYOUT(layout_interpro) @@ -612,6 +717,62 @@ MACHINE_CONFIG_START(interpro_state::interpro) MCFG_SOFTWARE_LIST_ADD("softlist", "interpro") MACHINE_CONFIG_END +MACHINE_CONFIG_START(emerald_state::emerald) + interpro(config); + + MCFG_DEVICE_ADD(INTERPRO_CPU_TAG, CLIPPER_C300, XTAL(12'500'000)) + 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) + + MCFG_DEVICE_ADD(INTERPRO_MMU_TAG "_i", CAMMU_C3, 0) + MCFG_CAMMU_EXCEPTION_CB(WRITE16(INTERPRO_CPU_TAG, clipper_device, set_exception)) + + MCFG_DEVICE_ADD(INTERPRO_MMU_TAG "_d", CAMMU_C3, 0) + MCFG_CAMMU_EXCEPTION_CB(WRITE16(INTERPRO_CPU_TAG, clipper_device, set_exception)) + MCFG_CAMMU_LINK(INTERPRO_MMU_TAG "_i") + + // boot fails memory test without this + MCFG_DEVICE_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_VALUE(0x00) + + // memory control gate array + MCFG_DEVICE_ADD(INTERPRO_MCGA_TAG, INTERPRO_MCGA, 0) + + // floppy controller + MCFG_I82072_ADD(INTERPRO_FDC_TAG, false) + MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir1_w)) + MCFG_UPD765_DRQ_CALLBACK(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, drq_floppy)) + + // connect a 5.25" drive at id 3 + MCFG_DEVICE_ADD("fdc:0", FLOPPY_CONNECTOR, 0) + MCFG_DEVICE_ADD("fdc:1", FLOPPY_CONNECTOR, 0) + MCFG_DEVICE_ADD("fdc:2", FLOPPY_CONNECTOR, 0) + MCFG_FLOPPY_DRIVE_ADD("fdc:3", interpro_floppies, "525hd", interpro_state::floppy_formats) + MCFG_FLOPPY_DRIVE_SOUND(false) + + // serial controllers and ports + MCFG_SCC85C30_ADD(INTERPRO_SCC1_TAG, XTAL(4'915'200), 0, 0, 0, 0) + interpro_scc1(config); + MCFG_SCC85C30_ADD(INTERPRO_SCC2_TAG, XTAL(4'915'200), 0, 0, 0, 0) + interpro_scc2(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) + + // ethernet controller + MCFG_DEVICE_ADD(INTERPRO_ETH_TAG, I82586, 10_MHz_XTAL) + MCFG_I82586_IRQ_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir12_w)) + MCFG_DEVICE_ADDRESS_MAP(0, interpro_82586_map) + + // i/o gate array + MCFG_DEVICE_ADD(INTERPRO_IOGA_TAG, TURQUOISE_IOGA, 0) + MCFG_INTERPRO_IOGA_MEMORY(INTERPRO_CPU_TAG, 0) + ioga(config); +MACHINE_CONFIG_END + MACHINE_CONFIG_START(turquoise_state::turquoise) interpro(config); MCFG_DEVICE_ADD(INTERPRO_CPU_TAG, CLIPPER_C300, XTAL(12'500'000)) @@ -666,8 +827,15 @@ MACHINE_CONFIG_START(turquoise_state::turquoise) MCFG_INTERPRO_IOGA_MEMORY(INTERPRO_CPU_TAG, 0) ioga(config); - MCFG_DEVICE_MODIFY(INTERPRO_SRBUS_TAG) - MCFG_SR_MEMORY(INTERPRO_CPU_TAG, 0, 1) + // cbus and slots + MCFG_DEVICE_ADD(INTERPRO_SLOT_TAG, CBUS, 0) + MCFG_CBUS_MEMORY(INTERPRO_CPU_TAG, 0, 1) + MCFG_CBUS_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir3_w)) + MCFG_CBUS_OUT_IRQ1_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir4_w)) + MCFG_CBUS_OUT_IRQ2_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir5_w)) + MCFG_CBUS_OUT_VBLANK_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir6_w)) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":0", cbus_cards, nullptr, false) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":1", cbus_cards, nullptr, false) MACHINE_CONFIG_END MACHINE_CONFIG_START(sapphire_state::sapphire) @@ -721,10 +889,6 @@ MACHINE_CONFIG_START(sapphire_state::sapphire) // flash memory MCFG_DEVICE_ADD(INTERPRO_FLASH_TAG "_lo", INTEL_28F010, 0) MCFG_DEVICE_ADD(INTERPRO_FLASH_TAG "_hi", INTEL_28F010, 0) - - // sr bus address spaces - MCFG_DEVICE_MODIFY(INTERPRO_SRBUS_TAG) - MCFG_SR_MEMORY(INTERPRO_CPU_TAG, 0, 1) MACHINE_CONFIG_END MACHINE_CONFIG_START(turquoise_state::ip2000) @@ -732,6 +896,10 @@ MACHINE_CONFIG_START(turquoise_state::ip2000) //MCFG_DEVICE_MODIFY(INTERPRO_CPU_TAG) //MCFG_DEVICE_CLOCK(XTAL(40'000'000)) + // GT graphics (2020) + MCFG_DEVICE_MODIFY(INTERPRO_SLOT_TAG ":0") + MCFG_SLOT_DEFAULT_OPTION("mpcb963") + MCFG_SOFTWARE_LIST_FILTER("softlist", "2000") MACHINE_CONFIG_END @@ -743,8 +911,12 @@ MACHINE_CONFIG_START(sapphire_state::ip2400) MCFG_DEVICE_MODIFY(INTERPRO_MMU_TAG) MCFG_CAMMU_ID(cammu_c4i_device::CID_C4IR0) - MCFG_DEVICE_MODIFY(INTERPRO_SRBUS_TAG ":0") - MCFG_SLOT_DEFAULT_OPTION("mpcb070") + // cbus and slots (default to 2430 with GT+ graphics) + MCFG_DEVICE_ADD(INTERPRO_SLOT_TAG, CBUS, 0) + MCFG_CBUS_MEMORY(INTERPRO_CPU_TAG, 0, 1) + MCFG_CBUS_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir6_w)) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":0", cbus_cards, "msmt070", false) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":1", cbus_cards, nullptr, false) MCFG_SOFTWARE_LIST_FILTER("softlist", "2400") MACHINE_CONFIG_END @@ -754,6 +926,16 @@ MACHINE_CONFIG_START(sapphire_state::ip2500) //MCFG_DEVICE_MODIFY(INTERPRO_CPU_TAG) //MCFG_DEVICE_CLOCK(XTAL(?) + // cbus and slots (default to 2530 with GT+ graphics) + MCFG_DEVICE_ADD(INTERPRO_SLOT_TAG, CBUS, 0) + MCFG_CBUS_MEMORY(INTERPRO_CPU_TAG, 0, 1) + MCFG_CBUS_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir6_w)) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":0", cbus_cards, "msmt070", false) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":1", cbus_cards, nullptr, false) + + // GT II graphics? + //MCFG_SLOT_DEFAULT_OPTION("msmt135") + // FIXME: don't know which cammu revision MCFG_DEVICE_MODIFY(INTERPRO_MMU_TAG) MCFG_CAMMU_ID(cammu_c4i_device::CID_C4IR0) @@ -766,6 +948,16 @@ MACHINE_CONFIG_START(sapphire_state::ip2700) //MCFG_DEVICE_MODIFY(INTERPRO_CPU_TAG) //MCFG_DEVICE_CLOCK(?) + // cbus and slots (default to 2730 with GT+ graphics) + MCFG_DEVICE_ADD(INTERPRO_SLOT_TAG, CBUS, 0) + MCFG_CBUS_MEMORY(INTERPRO_CPU_TAG, 0, 1) + MCFG_CBUS_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir6_w)) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":0", cbus_cards, "msmt070", false) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":1", cbus_cards, nullptr, false) + + // GT II graphics? + //MCFG_SLOT_DEFAULT_OPTION("msmt135") + MCFG_DEVICE_MODIFY(INTERPRO_MMU_TAG) MCFG_CAMMU_ID(cammu_c4i_device::CID_C4IR2) @@ -777,6 +969,16 @@ MACHINE_CONFIG_START(sapphire_state::ip2800) //MCFG_DEVICE_MODIFY(INTERPRO_CPU_TAG) //MCFG_DEVICE_CLOCK(?) + // cbus and slots (default to 2830 with GT+ graphics) + MCFG_DEVICE_ADD(INTERPRO_SLOT_TAG, CBUS, 0) + MCFG_CBUS_MEMORY(INTERPRO_CPU_TAG, 0, 1) + MCFG_CBUS_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir6_w)) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":0", cbus_cards, "msmt070", false) + MCFG_CBUS_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":1", cbus_cards, nullptr, false) + + // GT II graphics? + //MCFG_SLOT_DEFAULT_OPTION("msmt135") + // FIXME: don't know which cammu revision MCFG_DEVICE_MODIFY(INTERPRO_MMU_TAG) MCFG_CAMMU_ID(cammu_c4i_device::CID_C4IR2) @@ -784,6 +986,96 @@ MACHINE_CONFIG_START(sapphire_state::ip2800) MCFG_SOFTWARE_LIST_FILTER("softlist", "2800") MACHINE_CONFIG_END +MACHINE_CONFIG_START(emerald_state::ip6000) + emerald(config); + + //MCFG_DEVICE_MODIFY(INTERPRO_CPU_TAG) + //MCFG_DEVICE_CLOCK(80_MHz_XTAL / 2) + + // srx and slots (default to 6040 with EDGE-1 graphics) + MCFG_DEVICE_ADD(INTERPRO_SLOT_TAG, SRX, 0) + MCFG_SRX_MEMORY(INTERPRO_CPU_TAG, 0, 1) + MCFG_SRX_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir6_w)) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":1", srx_cards, "mpcb828", false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":2", srx_cards, nullptr, false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":3", srx_cards, nullptr, false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":4", srx_cards, nullptr, false) + + MCFG_SOFTWARE_LIST_FILTER("softlist", "6000") +MACHINE_CONFIG_END + +MACHINE_CONFIG_START(sapphire_state::ip6400) + sapphire(config); + //MCFG_DEVICE_MODIFY(INTERPRO_CPU_TAG) + //MCFG_DEVICE_CLOCK(XTAL(36'000'000)) + + MCFG_DEVICE_MODIFY(INTERPRO_MMU_TAG) + MCFG_CAMMU_ID(cammu_c4i_device::CID_C4IR0) + + // srx and slots (default to 6450 with GT II graphics) + MCFG_DEVICE_ADD(INTERPRO_SLOT_TAG, SRX, 0) + MCFG_SRX_MEMORY(INTERPRO_CPU_TAG, 0, 1) + MCFG_SRX_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir6_w)) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":1", srx_cards, "mpcbb92", false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":2", srx_cards, nullptr, false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":3", srx_cards, nullptr, false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":4", srx_cards, nullptr, false) + + // EDGE-2 graphics (6480) + //MCFG_SRX_SLOT_ADD(INTERPRO_SRBUS_TAG, INTERPRO_SRBUS_TAG ":1", srx_cards, "mpcb030", false) + //MCFG_SRX_SLOT_ADD(INTERPRO_SRBUS_TAG, INTERPRO_SRBUS_TAG ":2", srx_cards, "mpcba63", false) + + MCFG_SOFTWARE_LIST_FILTER("softlist", "6400") +MACHINE_CONFIG_END + +MACHINE_CONFIG_START(sapphire_state::ip6700) + sapphire(config); + //MCFG_DEVICE_MODIFY(INTERPRO_CPU_TAG) + //MCFG_DEVICE_CLOCK(?) + + // FIXME: don't know which cammu revision + MCFG_DEVICE_MODIFY(INTERPRO_MMU_TAG) + MCFG_CAMMU_ID(cammu_c4i_device::CID_C4IR2) + + // srx and slots (default to 6780 with EDGE-2 Plus graphics) + MCFG_DEVICE_ADD(INTERPRO_SLOT_TAG, SRX, 0) + MCFG_SRX_MEMORY(INTERPRO_CPU_TAG, 0, 1) + MCFG_SRX_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir6_w)) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":1", srx_cards, "msmt094", false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":2", srx_cards, "mpcb896", false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":3", srx_cards, nullptr, false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":4", srx_cards, nullptr, false) + + MCFG_SOFTWARE_LIST_FILTER("softlist", "6700") +MACHINE_CONFIG_END + +MACHINE_CONFIG_START(sapphire_state::ip6800) + sapphire(config); + //MCFG_DEVICE_MODIFY(INTERPRO_CPU_TAG) + //MCFG_DEVICE_CLOCK(?) + + // FIXME: don't know which cammu revision + MCFG_DEVICE_MODIFY(INTERPRO_MMU_TAG) + MCFG_CAMMU_ID(cammu_c4i_device::CID_C4IR2) + + // EDGE systems use graphics keyboard + MCFG_DEVICE_MODIFY(INTERPRO_KEYBOARD_PORT_TAG) + MCFG_SLOT_DEFAULT_OPTION(nullptr) + + // srx and slots (default to 6880 with EDGE-2 Plus graphics) + MCFG_DEVICE_ADD(INTERPRO_SLOT_TAG, SRX, 0) + MCFG_SRX_MEMORY(INTERPRO_CPU_TAG, 0, 1) + MCFG_SRX_OUT_IRQ0_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir3_w)) + MCFG_SRX_OUT_IRQ1_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir4_w)) + MCFG_SRX_OUT_IRQ2_CB(WRITELINE(INTERPRO_IOGA_TAG, interpro_ioga_device, ir5_w)) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":1", srx_cards, nullptr, false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":2", srx_cards, nullptr, false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":3", srx_cards, "msmt094", false) + MCFG_SRX_SLOT_ADD(INTERPRO_SLOT_TAG, INTERPRO_SLOT_TAG ":4", srx_cards, "mpcb896", false) + + MCFG_SOFTWARE_LIST_FILTER("softlist", "6800") +MACHINE_CONFIG_END + ROM_START(ip2000) ROM_REGION(0x80, INTERPRO_NODEID_TAG, 0) ROM_LOAD32_BYTE("nodeid.bin", 0x0, 0x20, CRC(a38397a6) SHA1(9f45fb932bbe231c95b3d5470dcd1fa1c846486f)) @@ -791,7 +1083,7 @@ ROM_START(ip2000) ROM_REGION(0x80, INTERPRO_IDPROM_TAG, 0) ROM_LOAD32_BYTE("mpcb962a.bin", 0x0, 0x20, CRC(e391342c) SHA1(02e03aad760b6651b8599c3a41c7c457983ee97d)) - ROM_REGION(0x0040000, INTERPRO_EPROM_TAG, 0) + ROM_REGION(0x40000, INTERPRO_EPROM_TAG, 0) ROM_SYSTEM_BIOS(0, "ip2000", "InterPro 2000 EPROM") ROMX_LOAD("mprgm530e__26_apr_91k.u171", 0x00001, 0x20000, CRC(e4c470cb) SHA1(ff1917bfa963988d739a9dbf0b8f034fe49f2f8c), ROM_SKIP(1) | ROM_BIOS(1)) ROMX_LOAD("mprgm540e__06_may_91k.u172", 0x00000, 0x20000, CRC(03225843) SHA1(03cfcd5b8ae0057240ef808a40108cb5d082eb63), ROM_SKIP(1) | ROM_BIOS(1)) @@ -801,7 +1093,7 @@ ROM_START(ip2400) ROM_REGION(0x80, INTERPRO_IDPROM_TAG, 0) ROM_LOAD32_BYTE("msmt0470.bin", 0x0, 0x20, CRC(498c80df) SHA1(18a49732ac9d04b20a77747c1b946c2e88abb087)) - ROM_REGION(0x0020000, INTERPRO_EPROM_TAG, 0) + ROM_REGION(0x20000, INTERPRO_EPROM_TAG, 0) ROM_SYSTEM_BIOS(0, "ip2400", "InterPro 2400 EPROM") ROMX_LOAD("mprgw510b__05_16_92.u35", 0x00000, 0x20000, CRC(3b2c4545) SHA1(4e4c98d1cd1035a04be8527223f44d0b687ec3ef), ROM_BIOS(1)) @@ -816,7 +1108,7 @@ ROM_START(ip2500) ROM_REGION(0x80, INTERPRO_IDPROM_TAG, 0) ROM_LOAD32_BYTE("msmt1000.bin", 0x0, 0x20, CRC(548046c0) SHA1(ce7646e868f3aa35642d7f9348f6b9e91693918e)) - ROM_REGION(0x0020000, INTERPRO_EPROM_TAG, 0) + ROM_REGION(0x20000, INTERPRO_EPROM_TAG, 0) ROM_SYSTEM_BIOS(0, "ip2500", "InterPro 2500 EPROM") ROMX_LOAD("ip2500_eprom.bin", 0x00000, 0x20000, NO_DUMP, ROM_BIOS(1)) @@ -831,7 +1123,7 @@ ROM_START(ip2700) ROM_REGION(0x80, INTERPRO_IDPROM_TAG, 0) ROM_LOAD32_BYTE("msmt1280.bin", 0x0, 0x20, CRC(32d833af) SHA1(7225c5f5670fe49d86556a2cb453ae6fe09e3e19)) - ROM_REGION(0x0020000, INTERPRO_EPROM_TAG, 0) + ROM_REGION(0x20000, INTERPRO_EPROM_TAG, 0) ROM_SYSTEM_BIOS(0, "ip2700", "InterPro 2700 EPROM") ROMX_LOAD("mprgz530a__9405181.u35", 0x00000, 0x20000, CRC(467ce7bd) SHA1(53faee40d5df311f53b24c930e434cbf94a5c4aa), ROM_BIOS(1)) @@ -846,7 +1138,7 @@ ROM_START(ip2800) ROM_REGION(0x80, INTERPRO_IDPROM_TAG, 0) ROM_LOAD32_BYTE("msmt1450.bin", 0x0, 0x20, CRC(61c7a305) SHA1(efcd045cbdfda8df44eaad761b0ba99367973cd7)) - ROM_REGION(0x0020000, INTERPRO_EPROM_TAG, 0) + ROM_REGION(0x20000, INTERPRO_EPROM_TAG, 0) ROM_SYSTEM_BIOS(0, "ip2800", "InterPro 2800 EPROM") ROMX_LOAD("ip2800_eprom.bin", 0x00000, 0x20000, CRC(467ce7bd) SHA1(53faee40d5df311f53b24c930e434cbf94a5c4aa), ROM_BIOS(1)) @@ -857,9 +1149,74 @@ ROM_START(ip2800) ROM_LOAD_OPTIONAL("y226.u67", 0x00000, 0x20000, CRC(54d95730) SHA1(a4e114dee1567d8aa31eed770f7cc366588f395c)) ROM_END +ROM_START(ip6000) + ROM_REGION(0x80, INTERPRO_NODEID_TAG, 0) + ROM_LOAD32_BYTE("nodeid.bin", 0x0, 0x20, CRC(a38397a6) SHA1(9f45fb932bbe231c95b3d5470dcd1fa1c846486f)) + + ROM_REGION(0x80, INTERPRO_IDPROM_TAG, 0) + ROM_LOAD32_BYTE("mpcb765b.bin", 0x0, 0x20, CRC(d81bda5c) SHA1(27e6baffb13fa9f3118b7ff539c7e11b7e778416)) + + ROM_REGION(0x40000, INTERPRO_EPROM_TAG, 0) + ROM_SYSTEM_BIOS(0, "ip6000", "InterPro 6000 EPROM") + ROMX_LOAD("ip6000_lo.bin", 0x00001, 0x20000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(1)) + ROMX_LOAD("ip6000_hi.bin", 0x00000, 0x20000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(1)) +ROM_END + +ROM_START(ip6400) + ROM_REGION(0x80, INTERPRO_IDPROM_TAG, 0) + ROM_LOAD32_BYTE("msmt046b.bin", 0x0, 0x20, CRC(3e8ffc77) SHA1(719a3f8b01bb506c9cb876506d63d167550bcd0a)) + + // FIXME: use 2400 eprom until we have a 6400 dump + ROM_REGION(0x20000, INTERPRO_EPROM_TAG, 0) + ROM_SYSTEM_BIOS(0, "ip6400", "InterPro 6400 EPROM") + ROMX_LOAD("ip6400_eprom.bin", 0x00000, 0x20000, BAD_DUMP CRC(3b2c4545) SHA1(4e4c98d1cd1035a04be8527223f44d0b687ec3ef), ROM_BIOS(1)) + + ROM_REGION(0x20000, INTERPRO_FLASH_TAG "_lo", 0) + ROM_LOAD_OPTIONAL("flash.lo", 0x00000, 0x20000, CRC(46c0b105) SHA1(7c4a104e4fb3d0e5e8db7c911cdfb3f5c4fb0218)) + + ROM_REGION(0x20000, INTERPRO_FLASH_TAG "_hi", 0) + ROM_LOAD_OPTIONAL("flash.hi", 0x00000, 0x20000, CRC(54d95730) SHA1(a4e114dee1567d8aa31eed770f7cc366588f395c)) +ROM_END + +ROM_START(ip6700) + ROM_REGION(0x80, INTERPRO_IDPROM_TAG, 0) + ROM_LOAD32_BYTE("msmt127b.bin", 0x0, 0x20, CRC(cc112f65) SHA1(8533a31b4733fd91bb87effcd276fc93f2858629)) + + // FIXME: use 2800 eprom until we have a 6700 dump + ROM_REGION(0x20000, INTERPRO_EPROM_TAG, 0) + ROM_SYSTEM_BIOS(0, "ip6700", "InterPro 6700 EPROM") + ROMX_LOAD("mprgz530a.u144", 0x00000, 0x20000, BAD_DUMP CRC(467ce7bd) SHA1(53faee40d5df311f53b24c930e434cbf94a5c4aa), ROM_BIOS(1)) + + ROM_REGION(0x20000, INTERPRO_FLASH_TAG "_lo", 0) + ROM_LOAD_OPTIONAL("y225.u117", 0x00000, 0x20000, CRC(46c0b105) SHA1(7c4a104e4fb3d0e5e8db7c911cdfb3f5c4fb0218)) + + ROM_REGION(0x20000, INTERPRO_FLASH_TAG "_hi", 0) + ROM_LOAD_OPTIONAL("y226.u130", 0x00000, 0x20000, CRC(54d95730) SHA1(a4e114dee1567d8aa31eed770f7cc366588f395c)) +ROM_END + +ROM_START(ip6800) + ROM_REGION(0x80, INTERPRO_IDPROM_TAG, 0) + ROM_LOAD32_BYTE("msmt127b.bin", 0x0, 0x20, CRC(cc112f65) SHA1(8533a31b4733fd91bb87effcd276fc93f2858629)) + + // FIXME: use 2800 eprom until we have a 6800 dump + ROM_REGION(0x20000, INTERPRO_EPROM_TAG, 0) + ROM_SYSTEM_BIOS(0, "ip6800", "InterPro 6800 EPROM") + ROMX_LOAD("mprgz530a__9406270.u144", 0x00000, 0x20000, BAD_DUMP CRC(467ce7bd) SHA1(53faee40d5df311f53b24c930e434cbf94a5c4aa), ROM_BIOS(1)) + + ROM_REGION(0x20000, INTERPRO_FLASH_TAG "_lo", 0) + ROM_LOAD_OPTIONAL("y225.u117", 0x00000, 0x20000, CRC(46c0b105) SHA1(7c4a104e4fb3d0e5e8db7c911cdfb3f5c4fb0218)) + + ROM_REGION(0x20000, INTERPRO_FLASH_TAG "_hi", 0) + 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 2000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) COMP( 1992, ip2400, 0, 0, ip2400, interpro, sapphire_state, init_common,"Intergraph", "InterPro 2400", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) COMP( 1993, ip2500, 0, 0, ip2500, interpro, sapphire_state, init_common,"Intergraph", "InterPro 2500", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) COMP( 1993, ip2700, 0, 0, ip2700, interpro, sapphire_state, init_common,"Intergraph", "InterPro 2700", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) COMP( 1994, ip2800, 0, 0, ip2800, interpro, sapphire_state, init_common,"Intergraph", "InterPro 2800", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1990, ip6000, 0, 0, ip6000, interpro, emerald_state, init_common,"Intergraph", "InterPro 6000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1992, ip6400, 0, 0, ip6400, interpro, sapphire_state, init_common,"Intergraph", "InterPro 6400", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1993, ip6700, 0, 0, ip6700, interpro, sapphire_state, init_common,"Intergraph", "InterPro 6700", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1993, ip6800, 0, 0, ip6800, interpro, sapphire_state, init_common,"Intergraph", "InterPro 6800", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) |