summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/vme/mvme187.cpp
blob: 7fd1633838f36cc0ccd9bf6c958d1d313c446082 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// 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(VME_MVME187, vme_mvme187_card_device, "mvme187", "Motorola MVME187")

vme_mvme187_card_device::vme_mvme187_card_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock)
	: device_t(mconfig, VME_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 *vme_mvme187_card_device::device_rom_region() const
{
	return ROM_NAME(mvme187);
}

ioport_constructor vme_mvme187_card_device::device_input_ports() const
{
	return INPUT_PORTS_NAME(mvme187);
}

void vme_mvme187_card_device::device_start()
{
}

void vme_mvme187_card_device::device_reset()
{
	m_boot.select(0);
}

void vme_mvme187_card_device::device_add_mconfig(machine_config &config)
{
	MC88100(config, m_cpu, 50_MHz_XTAL / 2);
	m_cpu->set_addrmap(AS_PROGRAM, &vme_mvme187_card_device::cpu_mem);
	m_cpu->set_cmmu_code([this](u32 const address) -> mc88200_device & { return *m_mmu[0]; });
	m_cpu->set_cmmu_data([this](u32 const address) -> mc88200_device & { return *m_mmu[1]; });

	MC88200(config, m_mmu[0], 50_MHz_XTAL / 2, 0x77).set_mbus(m_cpu, AS_PROGRAM);
	MC88200(config, m_mmu[1], 50_MHz_XTAL / 2, 0x7f).set_mbus(m_cpu, AS_PROGRAM);

	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 vme_mvme187_card_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);
}