diff options
Diffstat (limited to 'src/devices/machine')
-rw-r--r-- | src/devices/machine/am79c90.cpp | 2 | ||||
-rw-r--r-- | src/devices/machine/dp8390.cpp | 18 | ||||
-rw-r--r-- | src/devices/machine/mb8795.cpp | 2 | ||||
-rw-r--r-- | src/devices/machine/smc91c9x.cpp | 9 |
4 files changed, 14 insertions, 17 deletions
diff --git a/src/devices/machine/am79c90.cpp b/src/devices/machine/am79c90.cpp index d08c2b93a5a..c2e56692461 100644 --- a/src/devices/machine/am79c90.cpp +++ b/src/devices/machine/am79c90.cpp @@ -709,8 +709,6 @@ void am7990_device_base::initialize() m_mode = init_block[0]; - set_promisc(m_mode & MODE_PROM); - put_u16le(&m_physical_addr[0], init_block[1]); put_u16le(&m_physical_addr[2], init_block[2]); put_u16le(&m_physical_addr[4], init_block[3]); diff --git a/src/devices/machine/dp8390.cpp b/src/devices/machine/dp8390.cpp index 2ed12551e78..af6bf323dd6 100644 --- a/src/devices/machine/dp8390.cpp +++ b/src/devices/machine/dp8390.cpp @@ -126,12 +126,23 @@ void dp8390_device::recv(uint8_t *buf, int len) { high16 = (m_regs.dcr & 4)?m_regs.rsar<<16:0; if(buf[0] & 1) { if(!memcmp((const char *)buf, "\xff\xff\xff\xff\xff\xff", 6)) { + // broadcast if(!(m_regs.rcr & 4)) return; - } else if (memcmp((const char *)buf, "\x09\x00\x07\xff\xff\xff", 6) != 0) { // not AppleTalk broadcast - return; // multicast + } else { + // multicast + if(!(m_regs.rcr & 8)) return; + unsigned const crc = util::crc32_creator::simple(buf, 6) >> 26; + if(!BIT(m_regs.mar[crc >> 3], crc & 7)) return; } m_regs.rsr = 0x20; - } else m_regs.rsr = 0; + } else if(m_regs.rcr & 0x10) { + // promiscuous + m_regs.rsr = 0; + } else { + // physical + if(memcmp(m_regs.par, buf, 6)) return; + m_regs.rsr = 0; + } len &= 0xffff; for(i = 0; i < len; i++) { @@ -403,7 +414,6 @@ void dp8390_device::cs_write(offs_t offset, uint8_t data) { break; case 0x0c: m_regs.rcr = data; - set_promisc((data & 0x10)?true:false); break; case 0x0d: m_regs.tcr = data; diff --git a/src/devices/machine/mb8795.cpp b/src/devices/machine/mb8795.cpp index 7d619a18d90..37ccf805a97 100644 --- a/src/devices/machine/mb8795.cpp +++ b/src/devices/machine/mb8795.cpp @@ -65,8 +65,6 @@ void mb8795_device::device_reset() txlen = rxlen = txcount = 0; - set_promisc(true); - start_send(); } diff --git a/src/devices/machine/smc91c9x.cpp b/src/devices/machine/smc91c9x.cpp index ea153bc2d58..baca4edceda 100644 --- a/src/devices/machine/smc91c9x.cpp +++ b/src/devices/machine/smc91c9x.cpp @@ -179,8 +179,6 @@ void smc91c9x_device::device_reset() m_reg[B3_ERCV] = 0x331f; m_regmask[B3_ERCV] = 0x009f; - set_promisc(false); - update_ethernet_irq(); // Reset MMU @@ -935,11 +933,6 @@ void smc91c9x_device::write(offs_t offset, u16 data, u16 mem_mask) m_reg[B0_EPH_STATUS] |= LINK_OK; } - if ((old_reg ^ new_reg) & PRMS) - { - set_promisc(new_reg & PRMS); - } - if (VERBOSE & LOG_GENERAL) { if (data & SOFT_RST) LOG(" SOFT RST\n"); @@ -972,8 +965,6 @@ void smc91c9x_device::write(offs_t offset, u16 data, u16 mem_mask) case B1_IA4_5: if ( ACCESSING_BITS_8_15 ) { - set_promisc(m_reg[B0_RCR] & PRMS); - u8 mac[6]; put_u16le(&mac[0], m_reg[B1_IA0_1]); put_u16le(&mac[2], m_reg[B1_IA2_3]); |