Add skeleton devices for Tekram EISA SCSI contrllers [Metropoli BBS Archive, I-Shou University File Server]

This commit is contained in:
AJR 2019-04-17 21:57:39 -04:00
parent 2ecfd840e8
commit 06fc72cdcb
4 changed files with 296 additions and 0 deletions

View File

@ -1326,6 +1326,8 @@ if (BUSES["ISA"]~=null) then
MAME_DIR .. "src/devices/bus/isa/ultra14f.h",
MAME_DIR .. "src/devices/bus/isa/ultra24f.cpp",
MAME_DIR .. "src/devices/bus/isa/ultra24f.h",
MAME_DIR .. "src/devices/bus/isa/tekram_dc820.cpp",
MAME_DIR .. "src/devices/bus/isa/tekram_dc820.h",
}
end

View File

@ -44,6 +44,7 @@
#include "ultra12f.h"
#include "ultra14f.h"
#include "ultra24f.h"
#include "tekram_dc820.h"
// sound
#include "adlib.h"
@ -193,4 +194,8 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("ultra12f", ULTRA12F);
device.option_add("ultra14f", ULTRA14F);
device.option_add("ultra24f", ULTRA24F); // actually an EISA card
device.option_add("dc320b", TEKRAM_DC320B); // actually an EISA card
device.option_add("dc320e", TEKRAM_DC320E); // actually an EISA card
device.option_add("dc820", TEKRAM_DC820); // actually an EISA card
device.option_add("dc820b", TEKRAM_DC820B); // actually an EISA card
}

View File

@ -0,0 +1,205 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/***************************************************************************
Tekram DC-320/DC-820 SCSI Controllers
These EISA host adapters have, in addition to internal and external
SCSI and floppy disk connectors, LED and "SPKER" jumper headers. The
DC-820 and DC-820B also have four SIMM slots in addition to 64K of
static RAM on board. The DC-320 and DC-320B only have 16K of SRAM.
The DC-820B has an ASIC in place of the 11 PLDs used by the DC-820.
***************************************************************************/
#include "emu.h"
#include "tekram_dc820.h"
#include "cpu/i86/i186.h"
//#include "machine/eepromser.h"
//#include "machine/i82355.h"
#include "machine/ncr5390.h"
#include "machine/nscsi_bus.h"
#include "machine/nscsi_hd.h"
DEFINE_DEVICE_TYPE(TEKRAM_DC320B, tekram_dc320b_device, "dc320b", "Tekram DC-320B SCSI Controller")
DEFINE_DEVICE_TYPE(TEKRAM_DC320E, tekram_dc320e_device, "dc320e", "Tekram DC-320E SCSI Controller")
DEFINE_DEVICE_TYPE(TEKRAM_DC820, tekram_dc820_device, "dc820", "Tekram DC-820 SCSI Cache Controller")
DEFINE_DEVICE_TYPE(TEKRAM_DC820B, tekram_dc820b_device, "dc820b", "Tekram DC-820B SCSI Cache Controller")
tekram_eisa_scsi_device::tekram_eisa_scsi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, type, tag, owner, clock)
, device_isa16_card_interface(mconfig, *this)
, m_mpu(*this, "mpu")
, m_fdc(*this, "fdc")
, m_bios(*this, "bios")
{
}
tekram_dc320b_device::tekram_dc320b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: tekram_eisa_scsi_device(mconfig, TEKRAM_DC320B, tag, owner, clock)
{
}
tekram_dc320e_device::tekram_dc320e_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: tekram_eisa_scsi_device(mconfig, TEKRAM_DC320E, tag, owner, clock)
{
}
tekram_dc820_device::tekram_dc820_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: tekram_eisa_scsi_device(mconfig, TEKRAM_DC820, tag, owner, clock)
{
}
tekram_dc820b_device::tekram_dc820b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: tekram_eisa_scsi_device(mconfig, TEKRAM_DC820B, tag, owner, clock)
{
}
void tekram_eisa_scsi_device::device_start()
{
}
void tekram_eisa_scsi_device::mpu_map(address_map &map)
{
map(0x00000, 0x0ffff).ram();
//map(0x10080, 0x10085).rw("bmic", FUNC(i82355_device::local_r), FUNC(i82355_device::local_w)).umask16(0x00ff);
map(0xf0000, 0xfffff).rom().region("firmware", 0);
}
void tekram_dc320b_device::mpu_map(address_map &map)
{
map(0x00000, 0x01fff).ram();
//map(0x08080, 0x08085).rw("bmic", FUNC(i82355_device::local_r), FUNC(i82355_device::local_w)).umask16(0x00ff);
map(0xf0000, 0xfffff).rom().region("firmware", 0);
}
static void tekram_scsi_devices(device_slot_interface &device)
{
device.option_add("harddisk", NSCSI_HARDDISK);
device.option_add_internal("scsic", NCR53CF94); // or Emulex FAS216
}
void tekram_eisa_scsi_device::scsic_config(device_t *device)
{
device->set_clock(40_MHz_XTAL);
}
void tekram_eisa_scsi_device::scsi_add(machine_config &config)
{
NSCSI_BUS(config, "scsi");
NSCSI_CONNECTOR(config, "scsi:0", tekram_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:1", tekram_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:2", tekram_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:3", tekram_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:4", tekram_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:5", tekram_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:6", tekram_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:7", tekram_scsi_devices, "scsic", true)
.set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
}
void tekram_dc320b_device::device_add_mconfig(machine_config &config)
{
I80186(config, m_mpu, 25'000'000); // verified for DC-320, but not DC-320B
m_mpu->set_addrmap(AS_PROGRAM, &tekram_dc320b_device::mpu_map);
//EEPROM_93C46_16BIT(config, m_eeprom);
scsi_add(config);
WD37C65C(config, m_fdc, 32'000'000, 9'600'000); // clocks verified for DC-320, but not DC-320B
}
void tekram_dc320e_device::device_add_mconfig(machine_config &config)
{
I80186(config, m_mpu, 25'000'000); // verified for DC-320, but not DC-320E
m_mpu->set_addrmap(AS_PROGRAM, &tekram_dc320e_device::mpu_map);
//EEPROM_93C46_16BIT(config, m_eeprom);
scsi_add(config);
WD37C65C(config, m_fdc, 32'000'000, 9'600'000); // clocks verified for DC-320, but not DC-320E
}
void tekram_dc820_device::device_add_mconfig(machine_config &config)
{
I80186(config, m_mpu, 32_MHz_XTAL); // N80C186-16
m_mpu->set_addrmap(AS_PROGRAM, &tekram_dc820_device::mpu_map);
//EEPROM_93C46_16BIT(config, m_eeprom);
scsi_add(config);
PC8477A(config, m_fdc, 24_MHz_XTAL); // PC8477AVF
}
void tekram_dc820b_device::device_add_mconfig(machine_config &config)
{
I80186(config, m_mpu, 32_MHz_XTAL); // N80186-16
m_mpu->set_addrmap(AS_PROGRAM, &tekram_dc820b_device::mpu_map);
//EEPROM_93C46_16BIT(config, m_eeprom);
scsi_add(config);
PC8477A(config, m_fdc, 24_MHz_XTAL); // PC8477BVF
}
ROM_START(dc320b)
ROM_REGION(0x8000, "bios", 0) // "SCSI controller BIOS VER 1.07 1994-1-31"
ROM_LOAD("rev_1.07.u28", 0x0000, 0x8000, CRC(2f796842) SHA1(2a98ff5205ba9ab166aedf354f0cb2b5d59ff0ee))
ROM_REGION16_LE(0x10000, "firmware", 0) // "Firmware Version 1.07 1994-1-31"
ROM_LOAD16_BYTE("rev_1.07.u2", 0x0000, 0x8000, CRC(591bd878) SHA1(0418c34a75ee4c8e6ddff2c184c6a263abb0a39d))
ROM_LOAD16_BYTE("rev_1.07.u3", 0x0001, 0x8000, CRC(f3a7a363) SHA1(f4e3c8d7d12c394247c7ac82dedb895c88b9a907))
ROM_END
ROM_START(dc320e)
ROM_REGION(0x8000, "bios", 0) // "SCSI controller BIOS VER 1.11 1994-3-31"
ROM_LOAD("rev_1.11.u19", 0x0000, 0x8000, CRC(45cdc4f6) SHA1(aa782220066685dc34db39a943f28127c02e34d4))
ROM_REGION16_LE(0x10000, "firmware", 0) // "Firmware Version 1.11 1994-3-31"
ROM_LOAD16_BYTE("rev_1.11.u2", 0x0000, 0x8000, CRC(51cf5044) SHA1(5aee942b0169b4913cb000fca1a247a0e1da75d4))
ROM_LOAD16_BYTE("rev_1.11.u1", 0x0001, 0x8000, CRC(07070fba) SHA1(b0847e442cae61da658e9041ad9fe3737e67a0ce))
ROM_END
ROM_START(dc820)
ROM_REGION(0x8000, "bios", 0) // "SCSI controller BIOS VER 1.07 1994-1-31"
ROM_LOAD("rev_1.07.u46", 0x0000, 0x8000, CRC(2f796842) SHA1(2a98ff5205ba9ab166aedf354f0cb2b5d59ff0ee))
ROM_REGION16_LE(0x10000, "firmware", 0) // "Firmware Version 1.07 1994-1-31"
ROM_LOAD16_BYTE("rev_1.07.u5", 0x0000, 0x8000, CRC(2b7bad09) SHA1(20871220b82994c6ac41357c33d5e18ab1c2f425))
ROM_LOAD16_BYTE("rev_1.07.u6", 0x0001, 0x8000, CRC(62e65545) SHA1(523a3e3258f07a7f9445620294934bcbe62cd912))
ROM_END
ROM_START(dc820b)
ROM_REGION(0x8000, "bios", 0) // "SCSI controller BIOS VER 1.12 1996-1-24"
ROM_LOAD("rev_1.12.u14", 0x0000, 0x8000, CRC(1f0fc01b) SHA1(bd789dc0fb66f7fcfdc4dfd9f3d4b7c6ed32cc6a))
ROM_REGION16_LE(0x10000, "firmware", 0) // "Firmware Version 1.11 1994-3-31"
ROM_LOAD16_BYTE("rev_1.11.u12", 0x0000, 0x8000, CRC(51cf5044) SHA1(5aee942b0169b4913cb000fca1a247a0e1da75d4))
ROM_LOAD16_BYTE("rev_1.11.u11", 0x0001, 0x8000, CRC(07070fba) SHA1(b0847e442cae61da658e9041ad9fe3737e67a0ce))
ROM_END
const tiny_rom_entry *tekram_dc320b_device::device_rom_region() const
{
return ROM_NAME(dc320b);
}
const tiny_rom_entry *tekram_dc320e_device::device_rom_region() const
{
return ROM_NAME(dc320e);
}
const tiny_rom_entry *tekram_dc820_device::device_rom_region() const
{
return ROM_NAME(dc820);
}
const tiny_rom_entry *tekram_dc820b_device::device_rom_region() const
{
return ROM_NAME(dc820b);
}

View File

@ -0,0 +1,84 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/***************************************************************************
Tekram DC-320/DC-820 SCSI Controllers
***************************************************************************/
#ifndef MAME_BUS_ISA_TEKRAM_DC820_H
#define MAME_BUS_ISA_TEKRAM_DC820_H
#pragma once
#include "isa.h"
#include "machine/upd765.h"
class tekram_eisa_scsi_device : public device_t, public device_isa16_card_interface
{
public:
static constexpr feature_type unemulated_features() { return feature::DISK; }
protected:
tekram_eisa_scsi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
virtual void device_start() override;
void mpu_map(address_map &map);
void scsic_config(device_t *device);
void scsi_add(machine_config &config);
required_device<cpu_device> m_mpu;
required_device<upd765_family_device> m_fdc;
required_region_ptr<u8> m_bios;
};
class tekram_dc320b_device : public tekram_eisa_scsi_device
{
public:
tekram_dc320b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
private:
void mpu_map(address_map &map);
};
class tekram_dc320e_device : public tekram_eisa_scsi_device
{
public:
tekram_dc320e_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
};
class tekram_dc820_device : public tekram_eisa_scsi_device
{
public:
tekram_dc820_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
};
class tekram_dc820b_device : public tekram_eisa_scsi_device
{
public:
tekram_dc820b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
};
DECLARE_DEVICE_TYPE(TEKRAM_DC320B, tekram_dc320b_device)
DECLARE_DEVICE_TYPE(TEKRAM_DC320E, tekram_dc320e_device)
DECLARE_DEVICE_TYPE(TEKRAM_DC820, tekram_dc820_device)
DECLARE_DEVICE_TYPE(TEKRAM_DC820B, tekram_dc820b_device)
#endif // MAME_BUS_ISA_TEKRAM_DC820_H