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