New systems marked not working

------------------------------
Motorola MVME327A [Bitsavers]
This commit is contained in:
Patrick Mackinlay 2023-02-03 14:44:53 +07:00
parent e914e421c7
commit 1d39af0599
3 changed files with 179 additions and 0 deletions

View File

@ -2565,6 +2565,8 @@ if (BUSES["VME"]~=null) then
MAME_DIR .. "src/devices/bus/vme/vme_mvme180.h",
MAME_DIR .. "src/devices/bus/vme/vme_mvme181.cpp",
MAME_DIR .. "src/devices/bus/vme/vme_mvme181.h",
MAME_DIR .. "src/devices/bus/vme/vme_mvme327a.cpp",
MAME_DIR .. "src/devices/bus/vme/vme_mvme327a.h",
}
end

View File

@ -0,0 +1,129 @@
// license:BSD-3-Clause
// copyright-holders:Patrick Mackinlay
/*
* Motorola MVME327A VMEbus To SCSI Bus Adapter
*
* Sources:
* - MVME327A VMEbus To SCSI Bus Adapter And MVME717 Transition Module User's Manual (MVME327A/D1)
*
* TODO:
* - skeleton only
*/
#include "emu.h"
#include "vme_mvme327a.h"
#include "bus/nscsi/hd.h"
#include "bus/nscsi/cd.h"
#define VERBOSE 0
#include "logmacro.h"
DEFINE_DEVICE_TYPE(VME_MVME327A, vme_mvme327a_device, "mvme327a", "Motorola MVME327A")
vme_mvme327a_device::vme_mvme327a_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock)
: device_t(mconfig, VME_MVME327A, tag, owner, clock)
, device_vme_card_interface(mconfig, *this)
, m_cpu(*this, "cpu")
, m_pit(*this, "pit")
, m_bim(*this, "bim")
, m_fdc(*this, "fdc")
, m_scsi(*this, "scsi:7:wd33c93a")
, m_boot(*this, "boot")
{
}
ROM_START(mvme327a)
ROM_REGION16_BE(0x20000, "eprom", 0)
ROM_SYSTEM_BIOS(0, "v27", "327A 2.7 4/17/95")
ROMX_LOAD("5527c29a.u34", 0x0001, 0x10000, CRC(2ef4cc9a) SHA1(0e80e208756995cb34c006d2f1e84a5978ad17d6), ROM_SKIP(1) | ROM_BIOS(0))
ROMX_LOAD("5527c30a.u42", 0x0000, 0x10000, CRC(7be983d0) SHA1(ec5fc0709d8e91119d39231ace66f4fcbdb457e9), ROM_SKIP(1) | ROM_BIOS(0))
ROM_END
static INPUT_PORTS_START(mvme327a)
INPUT_PORTS_END
const tiny_rom_entry *vme_mvme327a_device::device_rom_region() const
{
return ROM_NAME(mvme327a);
}
ioport_constructor vme_mvme327a_device::device_input_ports() const
{
return INPUT_PORTS_NAME(mvme327a);
}
void vme_mvme327a_device::device_start()
{
}
void vme_mvme327a_device::device_reset()
{
m_boot.select(0);
}
static void scsi_devices(device_slot_interface &device)
{
device.option_add("cdrom", NSCSI_CDROM);
device.option_add("harddisk", NSCSI_HARDDISK);
device.option_add("wd33c93a", WD33C93A);
}
void vme_mvme327a_device::device_add_mconfig(machine_config &config)
{
M68010(config, m_cpu, 20_MHz_XTAL / 2);
m_cpu->set_addrmap(AS_PROGRAM, &vme_mvme327a_device::cpu_mem);
m_cpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &vme_mvme327a_device::cpu_int);
MC68153(config, m_bim, 0);
PIT68230(config, m_pit, 0);
WD37C65C(config, m_fdc, 0);
NSCSI_BUS(config, "scsi", 0);
NSCSI_CONNECTOR(config, "scsi:0", scsi_devices, nullptr, false);
NSCSI_CONNECTOR(config, "scsi:1", scsi_devices, nullptr, false);
NSCSI_CONNECTOR(config, "scsi:2", scsi_devices, nullptr, false);
NSCSI_CONNECTOR(config, "scsi:3", scsi_devices, nullptr, false);
NSCSI_CONNECTOR(config, "scsi:4", scsi_devices, nullptr, false);
NSCSI_CONNECTOR(config, "scsi:5", scsi_devices, nullptr, false);
NSCSI_CONNECTOR(config, "scsi:6", scsi_devices, nullptr, false);
NSCSI_CONNECTOR(config, "scsi:7").option_set("wd33c93a", WD33C93A).machine_config(
[this](device_t *device)
{
wd33c9x_base_device &wd33c93(downcast<wd33c9x_base_device &>(*device));
wd33c93.set_clock(10000000);
//wd33c93.irq_cb().set(*this, ...);
//wd33c93.drq_cb().set(*this, ...);
});
}
void vme_mvme327a_device::cpu_mem(address_map &map)
{
map(0x00'0000, 0x01'ffff).view(m_boot);
m_boot[0](0x00'0000, 0x01'ffff).rom().region("eprom", 0);
m_boot[1](0x00'0000, 0x01'ffff).ram();
//map(0x04'0000, 0x04'0001).rw(m_scsi, FUNC(wd33c93a_device))
//map(0x07'0000, 0x07'0003).m(m_fdc, &wd37c65c_device::map).umask16(0x00ff);
map(0x0b'0000, 0x0b'003f).rw(m_pit, FUNC(pit68230_device::read), FUNC(pit68230_device::write)).mirror(0xffc0).umask16(0x00ff);
map(0x0c'0000, 0x0c'000f).rw(m_bim, FUNC(bim68153_device::read), FUNC(bim68153_device::write)).mirror(0xfff0).umask16(0x00ff);
map(0x10'0000, 0x11'ffff).rom().region("eprom", 0);
map(0x10'0000, 0x10'0003).lw16([this](u32 data) { m_boot.select(1); }, "ram_enable");
// 0x80'0000-0xff'ffff VMEbus access
}
void vme_mvme327a_device::cpu_int(address_map &map)
{
map(0xfffff3, 0xfffff3).lr8(NAME([]() { return m68000_base_device::autovector(1); }));
map(0xfffff5, 0xfffff5).lr8(NAME([]() { return m68000_base_device::autovector(2); }));
map(0xfffff7, 0xfffff7).lr8(NAME([]() { return m68000_base_device::autovector(3); }));
map(0xfffff9, 0xfffff9).lr8(NAME([]() { return m68000_base_device::autovector(4); }));
map(0xfffffb, 0xfffffb).lr8(NAME([]() { return m68000_base_device::autovector(5); }));
map(0xfffffd, 0xfffffd).lr8(NAME([]() { return m68000_base_device::autovector(6); }));
map(0xffffff, 0xffffff).lr8(NAME([]() { return m68000_base_device::autovector(7); }));
}

View File

@ -0,0 +1,48 @@
// license:BSD-3-Clause
// copyright-holders:Patrick Mackinlay
#ifndef MAME_BUS_VME_MVME327A_H
#define MAME_BUS_VME_MVME327A_H
#pragma once
#include "cpu/m68000/m68010.h"
#include "machine/68230pit.h"
#include "machine/68153bim.h"
#include "machine/wd33c9x.h"
#include "machine/upd765.h"
#include "bus/vme/vme.h"
class vme_mvme327a_device
: public device_t
, public device_vme_card_interface
{
public:
vme_mvme327a_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);
void cpu_int(address_map &map);
required_device<m68010_device> m_cpu;
required_device<pit68230_device> m_pit;
required_device<bim68153_device> m_bim;
required_device<wd37c65c_device> m_fdc;
required_device<wd33c93a_device> m_scsi;
memory_view m_boot;
};
DECLARE_DEVICE_TYPE(VME_MVME327A, vme_mvme327a_device)
#endif // MAME_BUS_VME_MVME327A_H