summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa/tekram_dc820.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/isa/tekram_dc820.cpp')
-rw-r--r--src/devices/bus/isa/tekram_dc820.cpp30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/devices/bus/isa/tekram_dc820.cpp b/src/devices/bus/isa/tekram_dc820.cpp
index 8b2192d0a57..60acf997886 100644
--- a/src/devices/bus/isa/tekram_dc820.cpp
+++ b/src/devices/bus/isa/tekram_dc820.cpp
@@ -11,6 +11,10 @@
The DC-820B has an ASIC in place of the 11 PLDs used by the DC-820.
+ It seems likely that these controllers, like the AHA-174X, support a
+ legacy ISA port interface as well as the standard EISA doorbell and
+ mailbox I/O provided by the BMIC.
+
***************************************************************************/
#include "emu.h"
@@ -32,6 +36,7 @@ tekram_eisa_scsi_device::tekram_eisa_scsi_device(const machine_config &mconfig,
, device_isa16_card_interface(mconfig, *this)
, m_mpu(*this, "mpu")
, m_cmdlatch(*this, "cmdlatch")
+ , m_hostlatch(*this, "hostlatch")
, m_eeprom(*this, "eeprom")
, m_fdc(*this, "fdc")
, m_bios(*this, "bios")
@@ -62,6 +67,11 @@ void tekram_eisa_scsi_device::device_start()
{
}
+u8 tekram_eisa_scsi_device::latch_status_r()
+{
+ return (m_cmdlatch->pending_r() << 7) | (m_hostlatch->pending_r() << 6);
+}
+
void tekram_eisa_scsi_device::int0_ack_w(u8 data)
{
}
@@ -97,13 +107,14 @@ void tekram_eisa_scsi_device::mpu_map(address_map &map)
{
map(0x00000, 0x0ffff).ram();
map(0x10040, 0x1005f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map)).umask16(0xff00);
- map(0x10068, 0x10068).w(FUNC(tekram_eisa_scsi_device::int0_ack_w));
+ map(0x10068, 0x10068).rw(FUNC(tekram_eisa_scsi_device::latch_status_r), FUNC(tekram_eisa_scsi_device::int0_ack_w));
map(0x10069, 0x10069).r(FUNC(tekram_eisa_scsi_device::status_r));
map(0x1006a, 0x1006a).w(FUNC(tekram_eisa_scsi_device::misc_w));
map(0x1006b, 0x1006b).w(FUNC(tekram_eisa_scsi_device::aux_w));
map(0x1006c, 0x1006c).w(FUNC(tekram_eisa_scsi_device::mask_w));
map(0x1006d, 0x1006d).w(FUNC(tekram_eisa_scsi_device::eeprom_w));
map(0x1006f, 0x1006f).r(m_cmdlatch, FUNC(generic_latch_8_device::read));
+ map(0x1006f, 0x1006f).w(m_hostlatch, FUNC(generic_latch_8_device::write));
map(0x10080, 0x10085).rw("bmic", FUNC(i82355_device::local_r), FUNC(i82355_device::local_w)).umask16(0x00ff);
map(0xf0000, 0xfffff).rom().region("firmware", 0);
}
@@ -115,9 +126,9 @@ void tekram_dc320b_device::eeprom_w(u8 data)
m_eeprom->clk_write(BIT(data, 5));
}
-u8 tekram_dc320b_device::eeprom_r()
+u8 tekram_dc320b_device::latch_status_r()
{
- return m_eeprom->do_read() << 4;
+ return (m_cmdlatch->pending_r() << 7) | (m_hostlatch->pending_r() << 6) | (m_eeprom->do_read() << 4);
}
u8 tekram_dc320b_device::status_r()
@@ -132,11 +143,12 @@ void tekram_dc320b_device::mpu_map(address_map &map)
map(0x08001, 0x08001).r(m_cmdlatch, FUNC(generic_latch_8_device::read));
map(0x08080, 0x08085).rw("bmic", FUNC(i82355_device::local_r), FUNC(i82355_device::local_w)).umask16(0x00ff);
map(0x08100, 0x08100).w(FUNC(tekram_dc320b_device::int0_ack_w));
+ map(0x08105, 0x08105).w(m_hostlatch, FUNC(generic_latch_8_device::write));
map(0x08108, 0x08108).w(FUNC(tekram_dc320b_device::aux_w));
map(0x0810a, 0x0810a).w(FUNC(tekram_dc320b_device::eeprom_w));
map(0x0810c, 0x0810c).w(FUNC(tekram_dc320b_device::mask_w));
map(0x0810e, 0x0810e).w(FUNC(tekram_dc320b_device::misc_w));
- map(0x08180, 0x08180).r(FUNC(tekram_dc320b_device::eeprom_r));
+ map(0x08180, 0x08180).r(FUNC(tekram_dc320b_device::latch_status_r));
map(0x08182, 0x08182).r(FUNC(tekram_dc320b_device::status_r));
map(0xf0000, 0xfffff).rom().region("firmware", 0);
}
@@ -153,12 +165,14 @@ void tekram_dc820_device::mpu_map(address_map &map)
map(0x00000, 0x0ffff).ram();
map(0x10000, 0x1001f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map)).umask16(0x00ff);
map(0x10080, 0x10085).rw("bmic", FUNC(i82355_device::local_r), FUNC(i82355_device::local_w)).umask16(0x00ff);
+ map(0x10104, 0x10104).w(m_hostlatch, FUNC(generic_latch_8_device::write));
map(0x10106, 0x10106).w(FUNC(tekram_dc820_device::int0_ack_w));
map(0x10109, 0x10109).w(FUNC(tekram_dc820_device::aux_w));
map(0x1010b, 0x1010b).w(FUNC(tekram_dc820_device::eeprom_w));
map(0x1010d, 0x1010d).w(FUNC(tekram_dc820_device::mask_w));
map(0x1010f, 0x1010f).w(FUNC(tekram_dc820_device::misc_w));
map(0x10200, 0x10200).r(m_cmdlatch, FUNC(generic_latch_8_device::read));
+ map(0x10281, 0x10281).r(FUNC(tekram_dc820_device::latch_status_r));
map(0x10283, 0x10283).r(FUNC(tekram_dc820_device::status_r));
map(0xf0000, 0xfffff).rom().region("firmware", 0);
}
@@ -197,6 +211,8 @@ void tekram_dc320b_device::device_add_mconfig(machine_config &config)
GENERIC_LATCH_8(config, m_cmdlatch);
m_cmdlatch->data_pending_callback().set(m_mpu, FUNC(i80186_cpu_device::int1_w));
+ GENERIC_LATCH_8(config, m_hostlatch);
+
EEPROM_93C46_16BIT(config, m_eeprom);
i82355_device &bmic(I82355(config, "bmic", 0));
@@ -215,6 +231,8 @@ void tekram_dc320e_device::device_add_mconfig(machine_config &config)
GENERIC_LATCH_8(config, m_cmdlatch);
m_cmdlatch->data_pending_callback().set(m_mpu, FUNC(i80186_cpu_device::int1_w));
+ GENERIC_LATCH_8(config, m_hostlatch);
+
EEPROM_93C46_16BIT(config, m_eeprom);
i82355_device &bmic(I82355(config, "bmic", 0));
@@ -233,6 +251,8 @@ void tekram_dc820_device::device_add_mconfig(machine_config &config)
GENERIC_LATCH_8(config, m_cmdlatch);
m_cmdlatch->data_pending_callback().set(m_mpu, FUNC(i80186_cpu_device::int1_w));
+ GENERIC_LATCH_8(config, m_hostlatch);
+
EEPROM_93C46_16BIT(config, m_eeprom);
i82355_device &bmic(I82355(config, "bmic", 0));
@@ -251,6 +271,8 @@ void tekram_dc820b_device::device_add_mconfig(machine_config &config)
GENERIC_LATCH_8(config, m_cmdlatch);
m_cmdlatch->data_pending_callback().set(m_mpu, FUNC(i80186_cpu_device::int1_w));
+ GENERIC_LATCH_8(config, m_hostlatch);
+
EEPROM_93C46_16BIT(config, m_eeprom);
i82355_device &bmic(I82355(config, "bmic", 0));