summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-03-09 10:04:51 -0500
committer AJR <ajrhacker@users.noreply.github.com>2019-03-09 10:04:51 -0500
commita2614ad206c9bf58fa0dd66c66b014472435713a (patch)
tree0d815332343cd640c7eeabbdfe230904ddb2cddd
parentb158e4a32170e2af4ab3a1f71d6482c7c917658c (diff)
tti: Add SCSI (nw)
-rw-r--r--src/mame/drivers/tti.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/mame/drivers/tti.cpp b/src/mame/drivers/tti.cpp
index 97ad14dacdb..54077ada8a2 100644
--- a/src/mame/drivers/tti.cpp
+++ b/src/mame/drivers/tti.cpp
@@ -21,6 +21,9 @@ Other: LED, 20MHz crystal. Next to the MC68901P is another chip just as large (4
#include "machine/74259.h"
#include "machine/eepromser.h"
#include "machine/mc68901.h"
+#include "machine/ncr5390.h"
+#include "machine/nscsi_cd.h"
+#include "machine/nscsi_hd.h"
class tti_state : public driver_device
{
@@ -34,6 +37,8 @@ public:
void tti(machine_config &config);
private:
+ void asc_config(device_t *device);
+
IRQ_CALLBACK_MEMBER(intack);
void prg_map(address_map &map);
@@ -55,9 +60,28 @@ void tti_state::prg_map(address_map &map)
map(0x00000, 0x07fff).rom().region("maincpu", 0);
map(0x7e000, 0x7ffff).ram();
map(0x80000, 0x80017).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write));
+ map(0x80020, 0x8002b).m("scsibus:7:asc", FUNC(ncr53c90a_device::map));
map(0x80070, 0x80077).w("bitlatch", FUNC(ls259_device::write_d0));
}
+static void tti_scsi_devices(device_slot_interface &device)
+{
+ // FIXME: these device options are placeholders
+ device.option_add("cdrom", NSCSI_CDROM);
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("asc", NCR53C90A);
+}
+
+void tti_state::asc_config(device_t *device)
+{
+ ncr53c90a_device &adapter = downcast<ncr53c90a_device &>(*device);
+
+ adapter.set_clock(20_MHz_XTAL);
+
+ adapter.irq_handler_cb().set(m_mfp, FUNC(mc68901_device::i7_w)).invert();
+ //adapter.drq_handler_cb().set(?);
+}
+
void tti_state::tti(machine_config &config)
{
M68008(config, m_maincpu, 20_MHz_XTAL / 2); // guess
@@ -71,6 +95,16 @@ void tti_state::tti(machine_config &config)
m_mfp->out_so_cb().set("rs232", FUNC(rs232_port_device::write_txd));
m_mfp->out_irq_cb().set_inputline("maincpu", M68K_IRQ_5);
+ NSCSI_BUS(config, "scsibus");
+ NSCSI_CONNECTOR(config, "scsibus:0", tti_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsibus:1", tti_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsibus:2", tti_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsibus:3", tti_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsibus:4", tti_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsibus:5", tti_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsibus:6", tti_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsibus:7", tti_scsi_devices, "asc", true).set_option_machine_config("asc", [this] (device_t *device) { asc_config(device); });
+
rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
rs232.rxd_handler().set(m_mfp, FUNC(mc68901_device::write_rx));