diff options
Diffstat (limited to 'src/devices/bus')
-rw-r--r-- | src/devices/bus/isa/tekram_dc820.cpp | 30 | ||||
-rw-r--r-- | src/devices/bus/isa/tekram_dc820.h | 4 |
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); |