diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index df37b27033e..32805592c97 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -2635,6 +2635,8 @@ end if (BUSES["VME"]~=null) then files { + MAME_DIR .. "src/devices/bus/vme/mvme187.cpp", + MAME_DIR .. "src/devices/bus/vme/mvme187.h", MAME_DIR .. "src/devices/bus/vme/tp881v.cpp", MAME_DIR .. "src/devices/bus/vme/tp881v.h", MAME_DIR .. "src/devices/bus/vme/vme.cpp", diff --git a/src/devices/bus/vme/mvme187.cpp b/src/devices/bus/vme/mvme187.cpp new file mode 100644 index 00000000000..f74e14dafaf --- /dev/null +++ b/src/devices/bus/vme/mvme187.cpp @@ -0,0 +1,138 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +/* + * Motorola MVME187 + * + * Sources: + * - MVME187 RISC Single Board Computer Installation Guide (MVME187IG/D4), Motorola 1997 + * - Single Board Computers Programmer's Reference Guide (VMESBCA1/PG1), Motorola 1996 + * + * TODO: + * - skeleton only + * + * Skeleton is based on the variant of the MVME187 used in the Motorola M8120 system. + * + * M8120 variant + * - no SRAM + * - two additional serial ports (total 6) + * - no parallel port + * - only two ROM sockets + */ + +/* + * M8120 parts + * ----------- + * MC88100RC25 + * MC88200RC25 x 2 + * DS1643-150 8Kx8 NVRAM with RTC (MK48T08 compatible) + * 53C710 SCSI controller + * TL-SCSI285N SCSI voltage regulator + * DS1232S MicroMonitor chip + * KU82596CA-33 Ethernet controller + * D82C501AD Ethernet serial interface + * CL-CD2401-10QC-I x 2 Four-channel multi-protocol communications controller + * MC145406DW x 9 RS-232-D driver/receiver + * + * 51-W6281B01 1444F0011 Motorola custom ASIC (PCCChip2 or VMEChip2?) + * 51-W6280B02 16H7Y0005 Motorola custom ASIC (PCCChip2 or VMEChip2?) + * M5M27C202JK x 2 131072 word x 16 bit CMOS EEPROM + * + * DS1 run LED (green) + * DS2 stat LED (yellow) + * DS3 scsi LED (yellow) + * DS4 fail LED (red) + * abort switch + * reset switch + * + * 50.000MHz + * 20.0000MHz + * + * RAM mezzanine board has MEMC040 or MCECC memory controller ASIC + */ + +#include "emu.h" +#include "mvme187.h" + +#define VERBOSE 0 +#include "logmacro.h" + +DEFINE_DEVICE_TYPE(MVME187, mvme187_device, "mvme187", "Motorola MVME187") + +mvme187_device::mvme187_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) + : device_t(mconfig, MVME187, tag, owner, clock) + , device_vme_card_interface(mconfig, *this) + , m_cpu(*this, "cpu") + , m_mmu(*this, "mmu%u", 0U) + , m_rtc(*this, "rtc") + //, m_uart(*this, "uart") + , m_serial(*this, "serial%u", 0U) + //, m_scsi(*this, "scsi") + , m_lan(*this, "lan") + , m_boot(*this, "boot") +{ +} + +ROM_START(mvme187) + ROM_REGION32_BE(0x8'0000, "eprom", 0) + ROM_SYSTEM_BIOS(0, "m8120", "M8120 Debugger/Diagnostics Release Version 1.2 - 04/14/93") + ROMX_LOAD("6631b05c__03_08_94__8120.u1", 0x0002, 0x4'0000, CRC(d31cc388) SHA1(c2e613ded8d66102d3afa41ca763e997d9829d28), ROM_REVERSE | ROM_GROUPWORD | ROM_SKIP(2) | ROM_BIOS(0)) // M5M27C202JK + ROMX_LOAD("6631b06c__03_08_94__8120.u4", 0x0000, 0x4'0000, CRC(c62923e9) SHA1(62515c6e0dbeca6d18f373ad33e185096f10d2fc), ROM_REVERSE | ROM_GROUPWORD | ROM_SKIP(2) | ROM_BIOS(0)) // M5M27C202JK +ROM_END + +static INPUT_PORTS_START(mvme187) +INPUT_PORTS_END + +const tiny_rom_entry *mvme187_device::device_rom_region() const +{ + return ROM_NAME(mvme187); +} + +ioport_constructor mvme187_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(mvme187); +} + +void mvme187_device::device_start() +{ +} + +void mvme187_device::device_reset() +{ + m_boot.select(0); +} + +void mvme187_device::device_add_mconfig(machine_config &config) +{ + MC88100(config, m_cpu, 50_MHz_XTAL / 2); + m_cpu->set_addrmap(AS_PROGRAM, &mvme187_device::cpu_mem); + + MC88200(config, m_mmu[0], 50_MHz_XTAL / 2, 0x77); + m_mmu[0]->set_mbus(m_cpu, AS_PROGRAM); + m_cpu->set_cmmu_i(m_mmu[0]); + + MC88200(config, m_mmu[1], 50_MHz_XTAL / 2, 0x7f); + m_mmu[1]->set_mbus(m_cpu, AS_PROGRAM); + m_cpu->set_cmmu_d(m_mmu[1]); + + DS1643(config, m_rtc); + + RS232_PORT(config, m_serial[0], default_rs232_devices, "terminal"); + RS232_PORT(config, m_serial[1], default_rs232_devices, nullptr); + RS232_PORT(config, m_serial[2], default_rs232_devices, nullptr); + RS232_PORT(config, m_serial[3], default_rs232_devices, nullptr); + RS232_PORT(config, m_serial[4], default_rs232_devices, nullptr); + RS232_PORT(config, m_serial[5], default_rs232_devices, nullptr); + + //NCR53C7XX(config, m_scsi, 0); + I82596_BE32(config, m_lan, 20'000'000); +} + +void mvme187_device::cpu_mem(address_map &map) +{ + map(0x0000'0000, 0x00ff'ffff).view(m_boot); + m_boot[0](0x0000'0000, 0x0007'ffff).rom().region("eprom", 0); + m_boot[1](0x0000'0000, 0x00ff'ffff).ram(); + + map(0xff80'0000, 0xff87'ffff).rom().region("eprom", 0); +} diff --git a/src/devices/bus/vme/mvme187.h b/src/devices/bus/vme/mvme187.h new file mode 100644 index 00000000000..bea354b8400 --- /dev/null +++ b/src/devices/bus/vme/mvme187.h @@ -0,0 +1,51 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +#ifndef MAME_BUS_VME_MVME187_H +#define MAME_BUS_VME_MVME187_H + +#pragma once + +#include "cpu/m88000/m88000.h" + +#include "machine/53c7xx.h" +//#include "machine/cd2400.h" +#include "machine/i82586.h" +#include "machine/mc88200.h" +#include "machine/timekpr.h" + +#include "bus/vme/vme.h" +#include "bus/rs232/rs232.h" + +class mvme187_device + : public device_t + , public device_vme_card_interface +{ +public: + mvme187_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + virtual ioport_constructor device_input_ports() const override; + virtual void device_start() override; + virtual void device_reset() override; + +private: + void cpu_mem(address_map &map); + + required_device m_cpu; + required_device_array m_mmu; + + required_device m_rtc; + //required_device_array m_uart; + required_device_array m_serial; + //required_device m_scsi; + required_device m_lan; + + memory_view m_boot; +}; + +DECLARE_DEVICE_TYPE(MVME187, mvme187_device) + +#endif // MAME_BUS_VME_MVME187_H diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 821d29dc388..7898453941f 100755 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -31885,6 +31885,9 @@ m6805evs // 705r3prg // 705u3prg // +@source:motorola/m8120.cpp +m8120 // Motorola M8120 + @source:motorola/mekd1.cpp mekd1 // 1975 Motorola Evaluation Kit diff --git a/src/mame/motorola/m8120.cpp b/src/mame/motorola/m8120.cpp new file mode 100644 index 00000000000..795793dd648 --- /dev/null +++ b/src/mame/motorola/m8120.cpp @@ -0,0 +1,40 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +/* + * Motorola M8120 system. + */ + +#include "emu.h" + +#include "bus/vme/mvme187.h" + +namespace { + +class m8120_state : public driver_device +{ +public: + m8120_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + { + } + + void m8120(machine_config &config); +}; + +void m8120_state::m8120(machine_config &config) +{ + VME(config, "vme", 0); + + vme_slot_device &slot(VME_SLOT(config, "vme:0", 0)); + slot.set_vme_slot("vme", 0); + slot.option_set("mvme187", MVME187); +} + +ROM_START(m8120) +ROM_END + +} // anonymous namespace + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1991, m8120, 0, 0, m8120, 0, m8120_state, empty_init, "Motorola", "M8120", MACHINE_IS_SKELETON )