diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2019-04-27 20:45:37 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2019-04-27 20:45:37 -0400 |
commit | a2460f12d3f03dee3754c2ed49807cc04f1dcbef (patch) | |
tree | 62ad8b5eeeaa3fe7a88c06bb26b0e01dd60214f2 | |
parent | 03ec11e2741b453e7117032afeb4e5a208cdd653 (diff) |
bus/isa/tekram_dc820.cpp: Add serial EEPROM and a few stub handlers (nw)
-rw-r--r-- | src/devices/bus/isa/tekram_dc820.cpp | 65 | ||||
-rw-r--r-- | src/devices/bus/isa/tekram_dc820.h | 12 |
2 files changed, 72 insertions, 5 deletions
diff --git a/src/devices/bus/isa/tekram_dc820.cpp b/src/devices/bus/isa/tekram_dc820.cpp index bdf105ee9f1..a281affa13f 100644 --- a/src/devices/bus/isa/tekram_dc820.cpp +++ b/src/devices/bus/isa/tekram_dc820.cpp @@ -17,7 +17,6 @@ #include "tekram_dc820.h" #include "cpu/i86/i186.h" -//#include "machine/eepromser.h" #include "machine/i82355.h" #include "machine/ncr5390.h" #include "machine/nscsi_bus.h" @@ -32,6 +31,7 @@ tekram_eisa_scsi_device::tekram_eisa_scsi_device(const machine_config &mconfig, : device_t(mconfig, type, tag, owner, clock) , device_isa16_card_interface(mconfig, *this) , m_mpu(*this, "mpu") + , m_eeprom(*this, "eeprom") , m_fdc(*this, "fdc") , m_bios(*this, "bios") { @@ -61,27 +61,82 @@ void tekram_eisa_scsi_device::device_start() { } +u8 tekram_eisa_scsi_device::status_r() +{ + return m_eeprom->do_read() << 3; +} + +void tekram_eisa_scsi_device::mask_w(u8 data) +{ + logerror("%s: Mask register(?) = %02X\n", machine().describe_context(), data); +} + +u8 tekram_eisa_scsi_device::unknown_r() +{ + if (!machine().side_effects_disabled()) + logerror("%s: Unknown read (reset something?)\n", machine().describe_context()); + return 0; +} + +void tekram_eisa_scsi_device::eeprom_w(u8 data) +{ + m_eeprom->di_write(BIT(data, 0)); + m_eeprom->cs_write(BIT(data, 2)); + m_eeprom->clk_write(BIT(data, 5)); +} + 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(0x10069, 0x10069).r(FUNC(tekram_eisa_scsi_device::status_r)); + 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(FUNC(tekram_eisa_scsi_device::unknown_r)); map(0x10080, 0x10085).rw("bmic", FUNC(i82355_device::local_r), FUNC(i82355_device::local_w)).umask16(0x00ff); map(0xf0000, 0xfffff).rom().region("firmware", 0); } +void tekram_dc320b_device::eeprom_w(u8 data) +{ + m_eeprom->di_write(BIT(data, 1)); + m_eeprom->cs_write(BIT(data, 2)); + m_eeprom->clk_write(BIT(data, 5)); +} + +u8 tekram_dc320b_device::eeprom_r() +{ + return m_eeprom->do_read() << 4; +} + void tekram_dc320b_device::mpu_map(address_map &map) { map(0x00000, 0x03fff).ram(); map(0x08000, 0x0801f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map)).umask16(0x00ff); + map(0x08001, 0x08001).r(FUNC(tekram_dc320b_device::unknown_r)); map(0x08080, 0x08085).rw("bmic", FUNC(i82355_device::local_r), FUNC(i82355_device::local_w)).umask16(0x00ff); + map(0x0810a, 0x0810a).w(FUNC(tekram_dc320b_device::eeprom_w)); + map(0x0810c, 0x0810c).w(FUNC(tekram_dc320b_device::mask_w)); + map(0x08180, 0x08180).r(FUNC(tekram_dc320b_device::eeprom_r)); map(0xf0000, 0xfffff).rom().region("firmware", 0); } +void tekram_dc820_device::eeprom_w(u8 data) +{ + m_eeprom->di_write(BIT(data, 1)); + m_eeprom->cs_write(BIT(data, 2)); + m_eeprom->clk_write(BIT(data, 5)); +} + 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(0x1010b, 0x1010b).w(FUNC(tekram_dc820_device::eeprom_w)); + map(0x1010d, 0x1010d).w(FUNC(tekram_dc820_device::mask_w)); + map(0x10200, 0x10200).r(FUNC(tekram_dc820_device::unknown_r)); + map(0x10283, 0x10283).r(FUNC(tekram_dc820_device::status_r)); map(0xf0000, 0xfffff).rom().region("firmware", 0); } @@ -116,7 +171,7 @@ void tekram_dc320b_device::device_add_mconfig(machine_config &config) I80186(config, m_mpu, 25'000'000); // verified for DC-320, but not DC-320B m_mpu->set_addrmap(AS_PROGRAM, &tekram_dc320b_device::mpu_map); - //EEPROM_93C46_16BIT(config, m_eeprom); + EEPROM_93C46_16BIT(config, m_eeprom); i82355_device &bmic(I82355(config, "bmic", 0)); bmic.lint_callback().set(m_mpu, FUNC(i80186_cpu_device::int2_w)); @@ -131,7 +186,7 @@ void tekram_dc320e_device::device_add_mconfig(machine_config &config) I80186(config, m_mpu, 32'000'000); // clock guessed to be same as DC-820B due to identical firmware m_mpu->set_addrmap(AS_PROGRAM, &tekram_dc320e_device::mpu_map); - //EEPROM_93C46_16BIT(config, m_eeprom); + EEPROM_93C46_16BIT(config, m_eeprom); i82355_device &bmic(I82355(config, "bmic", 0)); bmic.lint_callback().set(m_mpu, FUNC(i80186_cpu_device::int2_w)); @@ -146,7 +201,7 @@ void tekram_dc820_device::device_add_mconfig(machine_config &config) I80186(config, m_mpu, 32_MHz_XTAL); // N80C186-16 m_mpu->set_addrmap(AS_PROGRAM, &tekram_dc820_device::mpu_map); - //EEPROM_93C46_16BIT(config, m_eeprom); + EEPROM_93C46_16BIT(config, m_eeprom); i82355_device &bmic(I82355(config, "bmic", 0)); bmic.lint_callback().set(m_mpu, FUNC(i80186_cpu_device::int2_w)); @@ -161,7 +216,7 @@ void tekram_dc820b_device::device_add_mconfig(machine_config &config) I80186(config, m_mpu, 32_MHz_XTAL); // N80186-16 m_mpu->set_addrmap(AS_PROGRAM, &tekram_dc820b_device::mpu_map); - //EEPROM_93C46_16BIT(config, m_eeprom); + EEPROM_93C46_16BIT(config, m_eeprom); i82355_device &bmic(I82355(config, "bmic", 0)); bmic.lint_callback().set(m_mpu, FUNC(i80186_cpu_device::int2_w)); diff --git a/src/devices/bus/isa/tekram_dc820.h b/src/devices/bus/isa/tekram_dc820.h index c6fe4ac2f30..a9db3ebb2f8 100644 --- a/src/devices/bus/isa/tekram_dc820.h +++ b/src/devices/bus/isa/tekram_dc820.h @@ -12,6 +12,7 @@ #pragma once #include "isa.h" +#include "machine/eepromser.h" #include "machine/upd765.h" class tekram_eisa_scsi_device : public device_t, public device_isa16_card_interface @@ -24,11 +25,17 @@ protected: virtual void device_start() override; + u8 status_r(); + void mask_w(u8 data); + u8 unknown_r(); + void eeprom_w(u8 data); + void mpu_map(address_map &map); void scsic_config(device_t *device); void scsi_add(machine_config &config); required_device<cpu_device> m_mpu; + required_device<eeprom_serial_93cxx_device> m_eeprom; required_device<upd765_family_device> m_fdc; required_region_ptr<u8> m_bios; }; @@ -43,6 +50,9 @@ protected: virtual const tiny_rom_entry *device_rom_region() const override; private: + void eeprom_w(u8 data); + u8 eeprom_r(); + void mpu_map(address_map &map); }; @@ -66,6 +76,8 @@ protected: virtual const tiny_rom_entry *device_rom_region() const override; private: + void eeprom_w(u8 data); + void mpu_map(address_map &map); }; |