summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/devices/bus/vme/vme.cpp192
-rw-r--r--src/devices/bus/vme/vme.h129
-rw-r--r--src/devices/bus/vme/vme_fccpu20.cpp29
-rw-r--r--src/devices/bus/vme/vme_fccpu20.h2
-rw-r--r--src/devices/bus/vme/vme_mzr8300.cpp22
-rw-r--r--src/mame/drivers/fccpu20.cpp17
-rw-r--r--src/mame/drivers/fccpu30.cpp2
-rw-r--r--src/mame/drivers/force68k.cpp2
-rw-r--r--src/mame/drivers/hk68v10.cpp2
-rw-r--r--src/mame/drivers/miniforce.cpp77
-rw-r--r--src/mame/drivers/mvme147.cpp2
-rw-r--r--src/mame/drivers/mzr8105.cpp3
12 files changed, 337 insertions, 142 deletions
diff --git a/src/devices/bus/vme/vme.cpp b/src/devices/bus/vme/vme.cpp
index 4d6b35a4c80..781e494ab7f 100644
--- a/src/devices/bus/vme/vme.cpp
+++ b/src/devices/bus/vme/vme.cpp
@@ -78,7 +78,7 @@
#define LOG_SETUP 0x02
#define LOG_PRINTF 0x04
-#define VERBOSE 0 //(LOG_PRINTF | LOG_SETUP | LOG_GENERAL)
+#define VERBOSE 0 // (LOG_PRINTF | LOG_SETUP | LOG_GENERAL)
#define LOGMASK(mask, ...) do { if (VERBOSE & mask) logerror(__VA_ARGS__); } while (0)
#define LOGLEVEL(mask, level, ...) do { if ((VERBOSE & mask) >= level) logerror(__VA_ARGS__); } while (0)
@@ -110,6 +110,7 @@ vme_slot_device::vme_slot_device(const machine_config &mconfig, const char *tag,
,m_vme_slottag(nullptr)
,m_vme_j1_callback(*this)
{
+ LOG("%s %s\n", tag, FUNCNAME);
}
vme_slot_device::vme_slot_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source) :
@@ -119,10 +120,19 @@ vme_slot_device::vme_slot_device(const machine_config &mconfig, device_type type
,m_vme_slottag(nullptr)
,m_vme_j1_callback(*this)
{
+ LOG("%s %s\n", tag, FUNCNAME);
}
//-------------------------------------------------
-// device_start - device-specific startup
+// static_update_vme_chains
+//-------------------------------------------------
+void vme_slot_device::static_update_vme_chains(device_t &device, uint32_t slot_nbr)
+{
+ LOG("%s %s - %d\n", FUNCNAME, device.tag(), slot_nbr);
+}
+
+//-------------------------------------------------
+// static_set_vme_slot
//-------------------------------------------------
void vme_slot_device::static_set_vme_slot(device_t &device, const char *tag, const char *slottag)
{
@@ -202,95 +212,194 @@ SLOT_INTERFACE_END
const device_type VME = &device_creator<vme_device>;
+// static_set_cputag - used to be able to lookup the CPU owning this VME bus
+void vme_device::static_set_cputag(device_t &device, const char *tag)
+{
+ vme_device &vme = downcast<vme_device &>(device);
+ vme.m_cputag = tag;
+}
+
+// static_set_use_owner_spaces - disables use of the memory interface and use the address spaces
+// of the owner instead. This is useful for VME buses where no address modifiers or arbitration is
+// being used and gives some gain in performance.
+void vme_device::static_use_owner_spaces(device_t &device)
+{
+ LOG("%s %s\n", device.tag(), FUNCNAME);
+ vme_device &vme = downcast<vme_device &>(device);
+
+ vme.m_allocspaces = false;
+}
+
vme_device::vme_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, VME, "VME", tag, owner, clock, "vme", __FILE__)
+ , device_memory_interface(mconfig, *this)
+ , m_a32_config("VME A32", ENDIANNESS_BIG, 32, 32, 0, nullptr)
+ , m_allocspaces(true)
+ , m_cputag("maincpu")
{
+ LOG("%s %s\n", tag, FUNCNAME);
}
vme_device::vme_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source) :
device_t(mconfig, type, name, tag, owner, clock, shortname, source)
+ , device_memory_interface(mconfig, *this)
+ , m_a32_config("VME A32", ENDIANNESS_BIG, 32, 32, 0, nullptr)
+ , m_allocspaces(true)
+ , m_cputag("maincpu")
{
+ LOG("%s %s\n", tag, FUNCNAME);
}
vme_device::~vme_device()
{
+ LOG("%s %s\n", tag(), FUNCNAME);
m_device_list.detach_all();
}
void vme_device::device_start()
{
+ LOG("%s %s %s\n", owner()->tag(), tag(), FUNCNAME);
+ if (m_allocspaces)
+ {
+ LOG(" - using my own memory spaces\n");
+ m_prgspace = &space(AS_PROGRAM);
+ m_prgwidth = m_prgspace->data_width();
+ LOG(" - Done at %d width\n", m_prgwidth);
+ }
+ else // use host CPU's spaces directly
+ {
+ LOG(" - using owner memory spaces for %s\n", m_cputag);
+ m_maincpu = owner()->subdevice<cpu_device>(m_cputag);
+ m_prgspace = &m_maincpu->space(AS_PROGRAM);
+ m_prgwidth = m_maincpu->space_config(AS_PROGRAM)->m_databus_width;
+ LOG(" - Done at %d width\n", m_prgwidth);
+ }
}
void vme_device::device_reset()
{
+ LOG("%s %s\n", tag(), FUNCNAME);
}
void vme_device::add_vme_card(device_vme_card_interface *card)
{
+ LOG("%s %s\n", tag(), FUNCNAME);
m_device_list.append(*card);
}
-void vme_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask)
+#if 0
+/*
+ * Install UB (Utility Bus) handlers for this board
+ *
+ * The Utility Bus signal lines
+ *------------------------------
+ * System Clock (SYSCLK)
+ * Serial Clock (SERCLK)
+ * Serial Data (SERDAT*)
+ * AC Fail (ACFAIL*)
+ * System Reset (SYSRESET*)
+ * System Failure (SYSFAIL*)
+ *------------------------------
+ */
+void vme_device::install_ub_handler(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask)
{
- cpu_device *m_maincpu = machine().device<cpu_device>("maincpu");
+}
+#endif
+
+/*
+ * Install DTB (Data Transfer Bus) handlers for this board
+ */
+
+// D8 bit devices in A16, A24 and A32
+void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask)
+{
+ LOG("%s %s AM%d D%02x\n", tag(), FUNCNAME, amod, m_prgwidth);
+
+ LOG(" - width:%d\n", m_prgwidth);
- int buswidth = m_maincpu->space_config(AS_PROGRAM)->m_databus_width;
- LOG("%s width:%d\n", FUNCNAME, buswidth);
- switch(buswidth)
+ // TODO: support address modifiers and buscycles other than single access cycles
+ switch(amod)
{
- case 32:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask);
+ case A16_SC: break;
+ case A24_SC: break;
+ case A32_SC: break;
+ default: fatalerror("VME D8: Non supported Address modifier: AM%02x\n", amod);
+ }
+
+ switch(m_prgwidth)
+ {
+ case 16:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint16_t)(mask & 0x0000ffff));
break;
- case 24:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask);
+ case 24:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint32_t)(mask & 0x00ffffff));
break;
- case 16:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, (uint16_t)(mask & 0xffff));
+ case 32:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, mask);
break;
- default:
- fatalerror("VME D8: Bus width %d not supported\n", buswidth);
+ default: fatalerror("VME D8: Bus width %d not supported\n", m_prgwidth);
}
}
-void vme_device::install_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask)
+// D16 bit devices in A16, A24 and A32
+void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask)
{
- cpu_device *m_maincpu = machine().device<cpu_device>("maincpu");
- int buswidth = m_maincpu->space_config(AS_PROGRAM)->m_databus_width;
- LOG("%s width:%d\n", FUNCNAME, buswidth);
- switch(buswidth)
+ LOG("%s %s AM%d D%02x\n", tag(), FUNCNAME, amod, m_prgwidth);
+
+ LOG(" - width:%d\n", m_prgwidth);
+
+ // TODO: support address modifiers and buscycles other than single access cycles
+ switch(amod)
{
- case 32:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask);
+ case A16_SC: break;
+ case A24_SC: break;
+ case A32_SC: break;
+ default: fatalerror("VME D16: Non supported Address modifier: %02x\n", amod);
+ }
+
+ switch(m_prgwidth)
+ {
+ case 16:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint16_t)(mask & 0x0000ffff));
break;
- case 24:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask);
+ case 24:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint32_t)(mask & 0x00ffffff));
break;
- case 16:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, (uint16_t)(mask & 0xffff));
+ case 32:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, mask);
break;
- default:
- fatalerror("VME D16: Bus width %d not supported\n", buswidth);
+ default: fatalerror("VME D16: Bus width %d not supported\n", m_prgwidth);
}
}
-void vme_device::install_device(offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, uint32_t mask)
+// D32 bit devices in A16, A24 and A32
+void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, uint32_t mask)
{
- cpu_device *m_maincpu = machine().device<cpu_device>("maincpu");
- int buswidth = m_maincpu->space_config(AS_PROGRAM)->m_databus_width;
- LOG("%s width:%d\n", FUNCNAME, buswidth);
- switch(buswidth)
+ LOG("%s %s AM%d D%02x\n", tag(), FUNCNAME, amod, m_prgwidth);
+
+ LOG(" - width:%d\n", m_prgwidth);
+
+ // TODO: support address modifiers and buscycles other than single access cycles
+ switch(amod)
{
- case 32:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask);
+ case A16_SC: break;
+ case A24_SC: break;
+ case A32_SC: break;
+ default: fatalerror("VME D32: Non supported Address modifier: %02x\n", amod);
+ }
+
+ switch(m_prgwidth)
+ {
+ case 16:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint16_t)(mask & 0x0000ffff));
break;
- case 24:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask);
+ case 24:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, (uint32_t)(mask & 0x00ffffff));
break;
- case 16:
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, (uint16_t)(mask & 0xffff));
+ case 32:
+ m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, mask);
break;
- default:
- fatalerror("VME D32: Bus width %d not supported\n", buswidth);
+ default: fatalerror("VME D32: Bus width %d not supported\n", m_prgwidth);
}
}
@@ -316,6 +425,7 @@ device_vme_card_interface::~device_vme_card_interface()
void device_vme_card_interface::static_set_vme_tag(device_t &device, const char *tag, const char *slottag)
{
+ LOG("%s %s\n", tag, FUNCNAME);
device_vme_card_interface &vme_card = dynamic_cast<device_vme_card_interface &>(device);
vme_card.m_vme_tag = tag;
vme_card.m_vme_slottag = slottag;
diff --git a/src/devices/bus/vme/vme.h b/src/devices/bus/vme/vme.h
index c2aa6e2b666..24b7a94976b 100644
--- a/src/devices/bus/vme/vme.h
+++ b/src/devices/bus/vme/vme.h
@@ -101,6 +101,8 @@ public:
virtual void device_config_complete() override;
static void static_set_vme_slot(device_t &device, const char *tag, const char *slottag);
+ static void static_update_vme_chains(device_t &device, uint32_t slot_nbr);
+
// configuration
const char *m_vme_tag, *m_vme_slottag;
@@ -115,27 +117,102 @@ private:
extern const device_type VME;
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
#define MCFG_VME_DEVICE_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, VME, 0)
+#define MCFG_VME_CPU(_cputag) \
+ vme_device::static_set_cputag(*device, _cputag);
+
+#define MCFG_VME_BUS_OWNER_SPACES() \
+ vme_device::static_use_owner_spaces(*device);
+
class vme_card_interface;
-class vme_device : public device_t
+class vme_device : public device_t,
+ public device_memory_interface
{
public:
vme_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
vme_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source);
~vme_device();
+ // inline configuration
+ static void static_set_cputag(device_t &device, const char *tag);
+ static void static_use_owner_spaces(device_t &device);
+
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override
+ {
+ switch (spacenum)
+ {
+ case AS_PROGRAM: return &m_a32_config;
+ default: return nullptr;
+ }
+ }
+ const address_space_config m_a32_config;
+
void add_vme_card(device_vme_card_interface *card);
- void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask);
- void install_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask);
- void install_device(offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, uint32_t mask);
+
+ //
+ // Address Modifiers
+ //
+ /* There are 6 address modifier lines. They allow the MASTER to pass additional binary
+ information to the SLAVE during data transfers. Table 2-3 lists all of the 64 possible
+ address modifier (AM) codes and classifies each into one of three categories:
+ - Defined
+ - Reserved
+ - User defined
+ The defined address modifier codes can be further classified into three categories:
+ Short addressing AM codes indicate that address lines A02-A15 are being used to select a BYTE(0-3) group.
+ Standard addressing AM codes ,indicate that address lines A02-A23 are being used to select a BYTE(0-3) group.
+ Extended addressing AM codes indicate that address lines A02-A31 are being used to select a BYTE(0-3) group.*/
+
+ enum vme_amod_t
+ { // Defined and User Defined Address Modifier Values (long bnames from VME standard text. please use short)
+ AMOD_EXTENDED_NON_PRIV_DATA = 0x09, //A32 SC (Single Cycle)
+ A32_SC = 0x09, //A32 SC (Single Cycle)
+ AMOD_EXTENDED_NON_PRIV_PRG = 0x0A,
+ AMOD_EXTENDED_NON_PRIV_BLK = 0x0B,
+ AMOD_EXTENDED_SUPERVIS_DATA = 0x0D,
+ AMOD_EXTENDED_SUPERVIS_PRG = 0x0E,
+ AMOD_EXTENDED_SUPERVIS_BLK = 0x0F,
+ AMOD_USER_DEFINED_FIRST = 0x10,
+ AMOD_USER_DEFINED_LAST = 0x1F,
+ AMOD_SHORT_NON_PRIV_ACCESS = 0x29, //A16 SC
+ A16_SC = 0x29, //A16 SC
+ AMOD_SHORT_SUPERVIS_ACCESS = 0x2D,
+ AMOD_STANDARD_NON_PRIV_DATA = 0x39, //A24 SC
+ A24_SC = 0x39, //A24 SC
+ AMOD_STANDARD_NON_PRIV_PRG = 0x3A,
+ AMOD_STANDARD_NON_PRIV_BLK = 0x3B, //A24 BLT
+ AMOD_STANDARD_SUPERVIS_DATA = 0x3D,
+ AMOD_STANDARD_SUPERVIS_PRG = 0x3E,
+ AMOD_STANDARD_SUPERVIS_BLK = 0x3F
+ };
+ void install_device(vme_amod_t amod, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, uint32_t mask);
+ // void install_device(vme_amod_t amod, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);
+ void install_device(vme_amod_t amod, offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, uint32_t mask);
+ void install_device(vme_amod_t amod, offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, uint32_t mask);
+
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
simple_list<device_vme_card_interface> m_device_list;
+
+ // internal state
+ cpu_device *m_maincpu;
+
+ // address spaces
+ address_space *m_prgspace;
+ int m_prgwidth;
+ bool m_allocspaces;
+
+ const char *m_cputag;
+
};
@@ -161,45 +238,15 @@ public:
const char *m_vme_tag, *m_vme_slottag;
int m_slot;
device_vme_card_interface *m_next;
-
- //
- // Address Modifiers
- //
- /* There are 6 address modifier lines. They allow the MASTER to pass additional binary
- information to the SLAVE during data transfers. Table 2-3 lists all of the 64 possible
- address modifier (AM) codes and classifies each into one of three categories:
- - Defined
- - Reserved
- - User defined
- The defined address modifier codes can be further classified into three categories:
- Short addressing AM codes indicate that address lines A02-A15 are being used to select a BYTE(0-3) group.
- Standard addressing AM codes ,indicate that address lines A02-A23 are being used to select a BYTE(0-3) group.
- Extended addressing AM codes indicate that address lines A02-A31 are being used to select a BYTE(0-3) group.*/
- enum
- { // Defined and User Defined Address Modifier Values, The rest us Reserved between 0x00 and 0x3F
- AMOD_EXTENDED_NON_PRIV_DATA = 0x09,
- AMOD_EXTENDED_NON_PRIV_PRG = 0x0A,
- AMOD_EXTENDED_NON_PRIV_BLK = 0x0B,
- AMOD_EXTENDED_SUPERVIS_DATA = 0x0D,
- AMOD_EXTENDED_SUPERVIS_PRG = 0x0E,
- AMOD_EXTENDED_SUPERVIS_BLK = 0x0F,
- AMOD_USER_DEFINED_FIRST = 0x10,
- AMOD_USER_DEFINED_LAST = 0x1F,
- AMOD_SHORT_NON_PRIV_ACCESS = 0x29,
- AMOD_SHORT_SUPERVIS_ACCESS = 0x2D,
- AMOD_STANDARD_NON_PRIV_DATA = 0x39,
- AMOD_STANDARD_NON_PRIV_PRG = 0x3A,
- AMOD_STANDARD_NON_PRIV_BLK = 0x3B,
- AMOD_STANDARD_SUPERVIS_DATA = 0x3D,
- AMOD_STANDARD_SUPERVIS_PRG = 0x3E,
- AMOD_STANDARD_SUPERVIS_BLK = 0x3F
- };
};
-#define MCFG_VME_SLOT_ADD(_tag, _slot_tag, _slot_intf,_def_slot) \
- MCFG_DEVICE_ADD(_slot_tag, VME_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
- vme_slot_device::static_set_vme_slot(*device, _tag, _slot_tag);
+#define MCFG_VME_SLOT_ADD(_tag, _slotnbr, _slot_intf,_def_slot) \
+ { std::string stag = "slot" + std::to_string(_slotnbr); \
+ MCFG_DEVICE_ADD(stag.c_str(), VME_SLOT, 0); \
+ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false); \
+ vme_slot_device::static_set_vme_slot(*device, _tag, stag.c_str()); \
+ vme_slot_device::static_update_vme_chains(*device, _slotnbr); \
+ }
#define MCFG_VME_SLOT_REMOVE(_tag) \
MCFG_DEVICE_REMOVE(_tag)
diff --git a/src/devices/bus/vme/vme_fccpu20.cpp b/src/devices/bus/vme/vme_fccpu20.cpp
index e1d9c7afc9b..92282f5f73c 100644
--- a/src/devices/bus/vme/vme_fccpu20.cpp
+++ b/src/devices/bus/vme/vme_fccpu20.cpp
@@ -25,7 +25,7 @@
* BM C| | XTAL | +-----------------------+ | | |
* || | 40MHz | +-----------------------+ | |P1 |
* || +-------+ | PIT | | | |
- * FLMA C| +-------+ | MC68230P8 | | | |
+ * FLME C| +-------+ | MC68230P8 | | | |
* EPROM C| | XTAL | +-----------------------+ | | |
* 2WST C| | 32MHz | | | |
* 4WST C| +-------+ | | |
@@ -456,12 +456,36 @@ void vme_fccpu20_device::device_start()
m_vme->install_device(base + 2, base + 3, // Channel B - Control
read8_delegate(FUNC(z80sio_device::cb_r), subdevice<z80sio_device>("pit")), write8_delegate(FUNC(z80sio_device::cb_w), subdevice<z80sio_device>("pit")), 0x00ff);
#endif
-
}
+enum
+{
+ TIMER_ID_BUS_GRANT
+};
+
void vme_fccpu20_device::device_reset()
{
LOG("%s\n", FUNCNAME);
+
+ /* We need to delay the static bus grant signal until we have it from the VME interface or MAME supports bus arbitration */
+ m_arbiter_start = timer_alloc(TIMER_ID_BUS_GRANT);
+ m_arbiter_start->adjust(attotime::from_msec(10), TIMER_ID_BUS_GRANT, attotime::never);
+}
+
+//-------------------------------------------------
+// device_timer - handler timer events
+//-------------------------------------------------
+void vme_fccpu20_device::device_timer (emu_timer &timer, device_timer_id id, int32_t param, void *ptr)
+{
+ switch(id)
+ {
+ case TIMER_ID_BUS_GRANT:
+ m_pit->h1_w(ASSERT_LINE); // Grant bus always
+ break;
+ default:
+ LOG("Unhandled Timer ID %d\n", id);
+ break;
+ }
}
/* Boot vector handler, the PCB hardwires the first 8 bytes from 0xff800000 to 0x0 at reset*/
@@ -541,6 +565,7 @@ READ8_MEMBER (vme_fccpu20_device::pitb_r)
}
/* VME board ID bit and bus release software settings (output) (ROR, RAT, RATAR, RATBCLR, RORAT, RORRAT */
+/* Bit 4 is bus available */
READ8_MEMBER (vme_fccpu20_device::pitc_r)
{
uint8_t board_id = 0;
diff --git a/src/devices/bus/vme/vme_fccpu20.h b/src/devices/bus/vme/vme_fccpu20.h
index fd506da11ca..067d11c01ff 100644
--- a/src/devices/bus/vme/vme_fccpu20.h
+++ b/src/devices/bus/vme/vme_fccpu20.h
@@ -77,6 +77,8 @@ private:
// Below replaces machine_start and machine_reset from src/mame/drivers/fccpu20.cpp
protected:
virtual void device_reset() override;
+ virtual void device_timer (emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+ emu_timer *m_arbiter_start; // Need a startup delay because it is hooked up to the sense inputs of the PIT
};
//**************************************************************************
diff --git a/src/devices/bus/vme/vme_mzr8300.cpp b/src/devices/bus/vme/vme_mzr8300.cpp
index 550cf2f3c2d..f0f5af5abc9 100644
--- a/src/devices/bus/vme/vme_mzr8300.cpp
+++ b/src/devices/bus/vme/vme_mzr8300.cpp
@@ -171,14 +171,20 @@ void vme_mzr8300_card_device::device_start()
/* Setup r/w handlers for first SIO in A16 */
uint32_t base = 0xFF0000;
- m_vme->install_device(base + 0, base + 1, // Channel B - Data
- read8_delegate(FUNC(z80sio_device::db_r), subdevice<z80sio_device>("sio0")), write8_delegate(FUNC(z80sio_device::db_w), subdevice<z80sio_device>("sio0")), 0x00ff);
- m_vme->install_device(base + 2, base + 3, // Channel B - Control
- read8_delegate(FUNC(z80sio_device::cb_r), subdevice<z80sio_device>("sio0")), write8_delegate(FUNC(z80sio_device::cb_w), subdevice<z80sio_device>("sio0")), 0x00ff);
- m_vme->install_device(base + 4, base + 5, // Channel A - Data
- read8_delegate(FUNC(z80sio_device::da_r), subdevice<z80sio_device>("sio0")), write8_delegate(FUNC(z80sio_device::da_w), subdevice<z80sio_device>("sio0")), 0x00ff);
- m_vme->install_device(base + 6, base + 7, // Channel A - Control
- read8_delegate(FUNC(z80sio_device::ca_r), subdevice<z80sio_device>("sio0")), write8_delegate(FUNC(z80sio_device::ca_w), subdevice<z80sio_device>("sio0")), 0x00ff);
+ // m_vme->static_set_custom_spaces(*this);
+
+ m_vme->install_device(vme_device::A16_SC, base + 0, base + 1, // Channel B - Data
+ read8_delegate(FUNC(z80sio_device::db_r), subdevice<z80sio_device>("sio0")),
+ write8_delegate(FUNC(z80sio_device::db_w), subdevice<z80sio_device>("sio0")), 0x00ff);
+ m_vme->install_device(vme_device::A16_SC, base + 2, base + 3, // Channel B - Control
+ read8_delegate(FUNC(z80sio_device::cb_r), subdevice<z80sio_device>("sio0")),
+ write8_delegate(FUNC(z80sio_device::cb_w), subdevice<z80sio_device>("sio0")), 0x00ff);
+ m_vme->install_device(vme_device::A16_SC, base + 4, base + 5, // Channel A - Data
+ read8_delegate(FUNC(z80sio_device::da_r), subdevice<z80sio_device>("sio0")),
+ write8_delegate(FUNC(z80sio_device::da_w), subdevice<z80sio_device>("sio0")), 0x00ff);
+ m_vme->install_device(vme_device::A16_SC, base + 6, base + 7, // Channel A - Control
+ read8_delegate(FUNC(z80sio_device::ca_r), subdevice<z80sio_device>("sio0")),
+ write8_delegate(FUNC(z80sio_device::ca_w), subdevice<z80sio_device>("sio0")), 0x00ff);
}
void vme_mzr8300_card_device::device_reset()
diff --git a/src/mame/drivers/fccpu20.cpp b/src/mame/drivers/fccpu20.cpp
index 95d930fbe19..bc32d103f09 100644
--- a/src/mame/drivers/fccpu20.cpp
+++ b/src/mame/drivers/fccpu20.cpp
@@ -94,7 +94,10 @@ cpu20_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device (mconfig, type, tag)
{
}
+ virtual void machine_start () override { LOGSETUP("%s\n", FUNCNAME); }
+// virtual void machine_reset () override;
+ DECLARE_DRIVER_INIT(cpu20) { LOGSETUP("%s\n", FUNCNAME); }
DECLARE_DRIVER_INIT(cpu21s) { LOGSETUP("%s\n", FUNCNAME); }
DECLARE_DRIVER_INIT(cpu21) { LOGSETUP("%s\n", FUNCNAME); }
DECLARE_DRIVER_INIT(cpu21a) { LOGSETUP("%s\n", FUNCNAME); }
@@ -139,37 +142,37 @@ SLOT_INTERFACE_END
/* Machine configurations */
MACHINE_CONFIG_START (cpu20, cpu20_state)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", cpu20_vme_cards, "fccpu20")
+ MCFG_VME_SLOT_ADD ("vme", 1, cpu20_vme_cards, "fccpu20")
MACHINE_CONFIG_END
MACHINE_CONFIG_START (cpu21s, cpu20_state)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", cpu21s_vme_cards, "fccpu21s")
+ MCFG_VME_SLOT_ADD ("vme", 1, cpu21s_vme_cards, "fccpu21s")
MACHINE_CONFIG_END
MACHINE_CONFIG_START (cpu21, cpu20_state)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", cpu21_vme_cards, "fccpu21")
+ MCFG_VME_SLOT_ADD ("vme", 1, cpu21_vme_cards, "fccpu21")
MACHINE_CONFIG_END
MACHINE_CONFIG_START (cpu21a, cpu20_state)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", cpu21a_vme_cards, "fccpu21a")
+ MCFG_VME_SLOT_ADD ("vme", 1, cpu21a_vme_cards, "fccpu21a")
MACHINE_CONFIG_END
MACHINE_CONFIG_START (cpu21ya, cpu20_state)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", cpu21ya_vme_cards, "fccpu21ya")
+ MCFG_VME_SLOT_ADD ("vme", 1, cpu21ya_vme_cards, "fccpu21ya")
MACHINE_CONFIG_END
MACHINE_CONFIG_START (cpu21b, cpu20_state)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", cpu21b_vme_cards, "fccpu21b")
+ MCFG_VME_SLOT_ADD ("vme", 1, cpu21b_vme_cards, "fccpu21b")
MACHINE_CONFIG_END
MACHINE_CONFIG_START (cpu21yb, cpu20_state)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", cpu21yb_vme_cards, "fccpu21yb")
+ MCFG_VME_SLOT_ADD ("vme", 1, cpu21yb_vme_cards, "fccpu21yb")
MACHINE_CONFIG_END
/* ROM configurations */
diff --git a/src/mame/drivers/fccpu30.cpp b/src/mame/drivers/fccpu30.cpp
index 35540290f72..13dee232008 100644
--- a/src/mame/drivers/fccpu30.cpp
+++ b/src/mame/drivers/fccpu30.cpp
@@ -657,7 +657,7 @@ static MACHINE_CONFIG_START (cpu30, cpu30_state)
MCFG_NVRAM_ADD_0FILL("nvram")
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", fccpu30_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 1, fccpu30_vme_cards, nullptr)
/* Terminal Port config */
/* Force CPU30 series of boards has up to four serial ports, p1-p4, the FGA boot uses p4 as console and subsequent
firmware uses p1 as console and in an operating system environment there may be user login shells on the other.
diff --git a/src/mame/drivers/force68k.cpp b/src/mame/drivers/force68k.cpp
index 2770844d9c6..ea32699b052 100644
--- a/src/mame/drivers/force68k.cpp
+++ b/src/mame/drivers/force68k.cpp
@@ -492,7 +492,7 @@ static MACHINE_CONFIG_START (fccpu1, force68k_state)
// VME interface
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", fccpu1_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 1, fccpu1_vme_cards, nullptr)
MACHINE_CONFIG_END
#if 0 /*
diff --git a/src/mame/drivers/hk68v10.cpp b/src/mame/drivers/hk68v10.cpp
index 756af103380..e5fbeb53234 100644
--- a/src/mame/drivers/hk68v10.cpp
+++ b/src/mame/drivers/hk68v10.cpp
@@ -348,7 +348,7 @@ static MACHINE_CONFIG_START (hk68v10, hk68v10_state)
MCFG_RS232_CTS_HANDLER (DEVWRITELINE ("scc", scc8530_device, ctsa_w))
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", hk68_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 1, hk68_vme_cards, nullptr)
MACHINE_CONFIG_END
/* ROM definitions */
diff --git a/src/mame/drivers/miniforce.cpp b/src/mame/drivers/miniforce.cpp
index 141276284a8..fa6d670178b 100644
--- a/src/mame/drivers/miniforce.cpp
+++ b/src/mame/drivers/miniforce.cpp
@@ -10,34 +10,34 @@
* required to start the work with this driver.
*
* +=============================================================================================================================+
- * | CPU-20 | | | | | | |WFC-1| | SYS68K/PWR-09A | SYS68K/WFMOD-50 |
- * | | | | | | | | | | | |
- * | RST | | | | | | |O RUN| | | |
- * | ABT | | | | | | | R/L | |O +5v |+---------------------------------------------+|
- * | | | | | | | |O LOC| |O +12v || ||
- * |O RUN O RUN| | | | | | |O ERR| |O -12v || ||
- * |O HLT | | | | | | |O BSY| |O ON || ||
- * |O BM | | | | | | | | | || ||
- * | | | | | | | | | | |+---------------------------------------------+|
- * |O FLM O SL0| | | | | | | | | || FDD ||
- * |O EPR O SL1| | | | | | | | | || ||
- * |O 2WS | | | | | | | | | +-------+ || ||
- * |O 4WS | | | | | | | | | | o |PWR || ||
- * |O 6WS | | | | | | | | | | | |+---------------------------------------------+|
- * |O 8WS | | | | | | | | | +-------+ | |
- * |O12WS | | | | | | | | | | |
- * |O14WS | | | | | | | | | |+---------------------------------------------+|
- * | | | | | | | | | | || HDD ||
- * | CSH | | | | | | | | | || ||
- * | R/M | | | | | | | | | || ||
- * | | | | | | | | | | || ||
- * | o | | | | | | | | | |+---------------------------------------------+|
- * | o | | | | | | | | | || ||
- * | o | | | | | | | | | || ||
- * | o | | | | | | | | | || ||
+ * |CPU |SRAM | | | | | | |WFC-1| | SYS68K/PWR-09A | SYS68K/WFMOD-50 |
+ * |-21 | -22 | | | | | | | | | | |
+ * | RST | | | | | | | |O RUN| | | |
+ * | ABT | | | | | | | | R/L | |O +5v |+---------------------------------------------+|
+ * | | | | | | | | |O LOC| |O +12v || ||
+ * |O RUN|O RUN| | | | | | |O ERR| |O -12v || ||
+ * |O HLT| | | | | | | |O BSY| |O ON || ||
+ * |O BM | | | | | | | | | | || ||
+ * | | | | | | | | | | | |+---------------------------------------------+|
+ * |O FLM|O SL0| | | | | | | | | || FDD ||
+ * |O EPR|O SL1| | | | | | | | | || ||
+ * |O 2WS| | | | | | | | | | +-------+ || ||
+ * |O 4WS| | | | | | | | | | | o |PWR || ||
+ * |O 6WS| | | | | | | | | | | | |+---------------------------------------------+|
+ * |O 8WS| | | | | | | | | | +-------+ | |
+ * |O12WS| | | | | | | | | | | |
+ * |O14WS| | | | | | | | | | |+---------------------------------------------+|
+ * | | | | | | | | | | | || HDD ||
+ * | CSH | | | | | | | | | | || ||
+ * | R/M | | | | | | | | | | || ||
+ * | | | | | | | | | | | || ||
+ * | o | | | | | | | | | | |+---------------------------------------------+|
+ * | o | | | | | | | | | | || ||
+ * | o | | | | | | | | | | || ||
+ * | o | | | | | | | | | | || ||
* | RS232/422 | | | | | | | | | || ||
- * | P4 P3 | | | | | | | | | |+---------------------------------------------+|
- * | | | | | | | | | | | |
+ * | P4 | P3 | | | | | | | | | |+---------------------------------------------+|
+ * | | | | | | | | | | | | |
* |SLOT1|SLOT2|SLOT3|SLOT4|SLOT5|SLOT6|SLOT7|SLOT7|SLOT9| | | |
* +=============================================================================================================================+
*
@@ -100,6 +100,7 @@
#include "bus/vme/vme_fccpu20.h"
#include "bus/vme/vme_fcisio.h"
#include "bus/vme/vme_fcscsi.h"
+#include "bus/vme/vme_mzr8300.h"
#include "machine/clock.h"
#define LOG_GENERAL 0x01
@@ -164,7 +165,7 @@ static INPUT_PORTS_START (miniforce)
INPUT_PORTS_END
static SLOT_INTERFACE_START(miniforce_vme_cards)
- SLOT_INTERFACE("fccpu20", VME_FCCPU20)
+ SLOT_INTERFACE("fccpu21", VME_FCCPU21)
SLOT_INTERFACE("fcisio", VME_FCISIO1)
SLOT_INTERFACE("fcscsi", VME_FCSCSI1)
SLOT_INTERFACE_END
@@ -173,17 +174,17 @@ SLOT_INTERFACE_END
* Machine configuration
*/
MACHINE_CONFIG_START (miniforce, miniforce_state)
-// MCFG_CPU_PROGRAM_MAP (miniforce_mem)
+// MCFG_CPU_PROGRAM_MAP (miniforce_mem)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", miniforce_vme_cards, "fccpu20")
- MCFG_VME_SLOT_ADD ("vme", "slot2", miniforce_vme_cards, nullptr)
- MCFG_VME_SLOT_ADD ("vme", "slot3", miniforce_vme_cards, nullptr)
- MCFG_VME_SLOT_ADD ("vme", "slot4", miniforce_vme_cards, nullptr)
- MCFG_VME_SLOT_ADD ("vme", "slot5", miniforce_vme_cards, nullptr)
- MCFG_VME_SLOT_ADD ("vme", "slot6", miniforce_vme_cards, nullptr)
- MCFG_VME_SLOT_ADD ("vme", "slot7", miniforce_vme_cards, nullptr)
- MCFG_VME_SLOT_ADD ("vme", "slot8", miniforce_vme_cards, nullptr)
- MCFG_VME_SLOT_ADD ("vme", "slot9", miniforce_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 1, miniforce_vme_cards, "fccpu21")
+ MCFG_VME_SLOT_ADD ("vme", 2, miniforce_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 3, miniforce_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 4, miniforce_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 5, miniforce_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 6, miniforce_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 7, miniforce_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 8, miniforce_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 9, miniforce_vme_cards, nullptr)
MACHINE_CONFIG_END
ROM_START(miniforce)
diff --git a/src/mame/drivers/mvme147.cpp b/src/mame/drivers/mvme147.cpp
index b8ad2aa3e7b..80764860c03 100644
--- a/src/mame/drivers/mvme147.cpp
+++ b/src/mame/drivers/mvme147.cpp
@@ -649,7 +649,7 @@ static MACHINE_CONFIG_START (mvme147, mvme147_state)
MCFG_CPU_ADD ("maincpu", M68030, XTAL_16MHz)
MCFG_CPU_PROGRAM_MAP (mvme147_mem)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", mvme147_vme_cards, nullptr)
+ MCFG_VME_SLOT_ADD ("vme", 1, mvme147_vme_cards, nullptr)
MCFG_M48T02_ADD("m48t18") /* t08 differs only in accepted voltage levels compared to t18 */
diff --git a/src/mame/drivers/mzr8105.cpp b/src/mame/drivers/mzr8105.cpp
index 38beb8b2c03..89c1d624906 100644
--- a/src/mame/drivers/mzr8105.cpp
+++ b/src/mame/drivers/mzr8105.cpp
@@ -207,7 +207,8 @@ MACHINE_CONFIG_START (mzr8105, mzr8105_state)
MCFG_CPU_ADD ("maincpu", M68000, XTAL_10MHz)
MCFG_CPU_PROGRAM_MAP (mzr8105_mem)
MCFG_VME_DEVICE_ADD("vme")
- MCFG_VME_SLOT_ADD ("vme", "slot1", mzr8105_vme_cards, nullptr)
+ MCFG_VME_BUS_OWNER_SPACES()
+ MCFG_VME_SLOT_ADD ("vme", 1, mzr8105_vme_cards, "mzr8300")
MACHINE_CONFIG_END
/* ROM definitions */