summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-04-28 07:28:12 -0400
committer AJR <ajrhacker@users.noreply.github.com>2019-04-28 07:28:12 -0400
commitb01bc82f140fd10551bf86a7d64545488d3c9ed2 (patch)
treed38c0b156d33b857b4914d51d9b4862c6b86e408
parentdcf6e1c61be02811aa2205c46a2e006331b3f14d (diff)
bus/isa/tekram_dc820.cpp: Another latch (nw)
-rw-r--r--src/devices/bus/isa/tekram_dc820.cpp30
-rw-r--r--src/devices/bus/isa/tekram_dc820.h4
2 files changed, 29 insertions, 5 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));
diff --git a/src/devices/bus/isa/tekram_dc820.h b/src/devices/bus/isa/tekram_dc820.h
index a8b73d432ed..e723a91776e 100644
--- a/src/devices/bus/isa/tekram_dc820.h
+++ b/src/devices/bus/isa/tekram_dc820.h
@@ -26,6 +26,7 @@ protected:
virtual void device_start() override;
+ u8 latch_status_r();
void int0_ack_w(u8 data);
u8 status_r();
void misc_w(u8 data);
@@ -39,6 +40,7 @@ protected:
required_device<cpu_device> m_mpu;
required_device<generic_latch_8_device> m_cmdlatch;
+ required_device<generic_latch_8_device> m_hostlatch;
required_device<eeprom_serial_93cxx_device> m_eeprom;
required_device<upd765_family_device> m_fdc;
required_region_ptr<u8> m_bios;
@@ -55,7 +57,7 @@ protected:
private:
void eeprom_w(u8 data);
- u8 eeprom_r();
+ u8 latch_status_r();
u8 status_r();
void mpu_map(address_map &map);