summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa/ultra14f.cpp
blob: 8b60f90813965109b662f1d8ca0c2c1b2aff72cd (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
// license:BSD-3-Clause
// copyright-holders:AJR
/***************************************************************************

    UltraStor Ultra 14F AT Bus Fast SCSI-2 Bus Master Controller

***************************************************************************/

#include "emu.h"
#include "ultra14f.h"

#include "bus/nscsi/devices.h"
#include "cpu/m68000/m68000.h"
#include "machine/ncr5390.h"
#include "machine/nscsi_bus.h"

DEFINE_DEVICE_TYPE(ULTRA14F, ultra14f_device, "ultra14f", "Ultra-14F SCSI Host Adapter")

ultra14f_device::ultra14f_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
	: device_t(mconfig, ULTRA14F, tag, owner, clock)
	, device_isa16_card_interface(mconfig, *this)
	, m_uscpu(*this, "uscpu")
	, m_fdc(*this, "fdc")
	, m_bios(*this, "bios")
{
}

void ultra14f_device::device_start()
{
}

void ultra14f_device::uscpu_map(address_map &map)
{
	map(0x000000, 0x007fff).rom().region("firmware", 0);
	map(0x00e000, 0x00e00f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map));
	map(0x3f8000, 0x3fffff).ram();
}

void ultra14f_device::scsic_config(device_t *device)
{
	device->set_clock(40_MHz_XTAL);
	downcast<ncr53cf94_device &>(*device).irq_handler_cb().set_inputline(m_uscpu, M68K_IRQ_1);
}

void ultra14f_device::device_add_mconfig(machine_config &config)
{
	M68008FN(config, m_uscpu, 40_MHz_XTAL / 4); // custom-marked as USC080-5-10A
	m_uscpu->set_addrmap(AS_PROGRAM, &ultra14f_device::uscpu_map);

	NSCSI_BUS(config, "scsi");
	NSCSI_CONNECTOR(config, "scsi:0", default_scsi_devices, nullptr);
	NSCSI_CONNECTOR(config, "scsi:1", default_scsi_devices, nullptr);
	NSCSI_CONNECTOR(config, "scsi:2", default_scsi_devices, nullptr);
	NSCSI_CONNECTOR(config, "scsi:3", default_scsi_devices, nullptr);
	NSCSI_CONNECTOR(config, "scsi:4", default_scsi_devices, nullptr);
	NSCSI_CONNECTOR(config, "scsi:5", default_scsi_devices, nullptr);
	NSCSI_CONNECTOR(config, "scsi:6", default_scsi_devices, nullptr);
	NSCSI_CONNECTOR(config, "scsi:7").option_set("scsic", NCR53CF94) // Emulex FAS216 or similar custom-marked as USC060-6-40B
		.machine_config([this] (device_t *device) { scsic_config(device); });

	DP8473(config, m_fdc, 24_MHz_XTAL); // custom-marked as USC020-1-24
}

ROM_START(ultra14f)
	ROM_REGION(0x8000, "firmware", 0)
	ROM_LOAD("28004.006", 0x0000, 0x8000, CRC(489a872e) SHA1(692faaf945856b3888be5d8778f5643e51711ee2))

	ROM_REGION(0x4000, "bios", 0) // "Date : 01/07/93 Version 2.01"
	ROM_LOAD("38004.005", 0x0000, 0x4000, CRC(0d9d831d) SHA1(9c1539f8473f8330be323e728e7aabccc77542d0))
ROM_END

const tiny_rom_entry *ultra14f_device::device_rom_region() const
{
	return ROM_NAME(ultra14f);
}