summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/cpu/sh/sh3comn.cpp8
-rw-r--r--src/devices/machine/am79c90.cpp2
-rw-r--r--src/devices/machine/dp8390.cpp18
-rw-r--r--src/devices/machine/mb8795.cpp2
-rw-r--r--src/devices/machine/smc91c9x.cpp9
-rw-r--r--src/devices/sound/flt_biquad.cpp8
-rw-r--r--src/devices/sound/flt_biquad.h3
7 files changed, 28 insertions, 22 deletions
diff --git a/src/devices/cpu/sh/sh3comn.cpp b/src/devices/cpu/sh/sh3comn.cpp
index 63b270cbb72..8b0f149cf6d 100644
--- a/src/devices/cpu/sh/sh3comn.cpp
+++ b/src/devices/cpu/sh/sh3comn.cpp
@@ -881,10 +881,10 @@ void sh3_base_device::irr0_w(offs_t offset, uint8_t data, uint8_t mem_mask)
COMBINE_DATA(&m_irr0);
logerror("'%s' (%08x): INTC unmapped internal write %02x & %02x (IRR0)\n", tag(), m_sh2_state->pc, data, mem_mask);
// not sure if this is how we should clear lines in this core...
- if (!(data & 0x01000000)) execute_set_input(0, CLEAR_LINE);
- if (!(data & 0x02000000)) execute_set_input(1, CLEAR_LINE);
- if (!(data & 0x04000000)) execute_set_input(2, CLEAR_LINE);
- if (!(data & 0x08000000)) execute_set_input(3, CLEAR_LINE);
+ if (!(data & 0x01)) execute_set_input(0, CLEAR_LINE);
+ if (!(data & 0x02)) execute_set_input(1, CLEAR_LINE);
+ if (!(data & 0x04)) execute_set_input(2, CLEAR_LINE);
+ if (!(data & 0x08)) execute_set_input(3, CLEAR_LINE);
}
uint8_t sh3_base_device::irr1_r(offs_t offset, uint8_t mem_mask)
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]);
diff --git a/src/devices/sound/flt_biquad.cpp b/src/devices/sound/flt_biquad.cpp
index de6bfe63462..e56c355ac95 100644
--- a/src/devices/sound/flt_biquad.cpp
+++ b/src/devices/sound/flt_biquad.cpp
@@ -527,6 +527,7 @@ void filter_biquad_device::recalc()
break;
// For highpass and friends, block the entire signal.
case biquad_type::HIGHPASS1P:
+ case biquad_type::HIGHPASS1P1Z:
case biquad_type::HIGHPASS:
case biquad_type::BANDPASS:
case biquad_type::PEAK:
@@ -563,6 +564,13 @@ void filter_biquad_device::recalc()
m_a1 = -m_a1;
m_b1 = m_b2 = m_a2 = 0.0;
break;
+ case biquad_type::HIGHPASS1P1Z:
+ normal = 1.0 / (K + 1.0);
+ m_b0 = normal;
+ m_b1 = -normal;
+ m_a1 = (K - 1.0) * normal;
+ m_b2 = m_a2 = 0.0;
+ break;
case biquad_type::LOWPASS:
m_b0 = Ksquared * normal;
m_b1 = 2.0 * m_b0;
diff --git a/src/devices/sound/flt_biquad.h b/src/devices/sound/flt_biquad.h
index ad58a91de79..702e42f9dac 100644
--- a/src/devices/sound/flt_biquad.h
+++ b/src/devices/sound/flt_biquad.h
@@ -25,7 +25,8 @@ public:
PEAK,
LOWSHELF,
HIGHSHELF,
- RAWPARAMS
+ RAWPARAMS,
+ HIGHPASS1P1Z
};
struct biquad_params