summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/mb8795.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/mb8795.cpp')
-rw-r--r--src/devices/machine/mb8795.cpp72
1 files changed, 31 insertions, 41 deletions
diff --git a/src/devices/machine/mb8795.cpp b/src/devices/machine/mb8795.cpp
index 0ec30d1f84b..37ccf805a97 100644
--- a/src/devices/machine/mb8795.cpp
+++ b/src/devices/machine/mb8795.cpp
@@ -38,22 +38,17 @@ void mb8795_device::check_irq()
bool old_irq_rx = irq_rx;
irq_tx = txstat & txmask;
irq_rx = rxstat & rxmask;
- if(irq_tx != old_irq_tx && !irq_tx_cb.isnull())
+ if(irq_tx != old_irq_tx)
irq_tx_cb(irq_tx);
- if(irq_rx != old_irq_rx && !irq_rx_cb.isnull())
+ if(irq_rx != old_irq_rx)
irq_rx_cb(irq_rx);
}
void mb8795_device::device_start()
{
- irq_tx_cb.resolve();
- irq_rx_cb.resolve();
- drq_tx_cb.resolve();
- drq_rx_cb.resolve();
-
memset(mac, 0, 6);
- timer_tx = timer_alloc(TIMER_TX);
- timer_rx = timer_alloc(TIMER_RX);
+ timer_tx = timer_alloc(FUNC(mb8795_device::tx_update), this);
+ timer_rx = timer_alloc(FUNC(mb8795_device::rx_update), this);
}
void mb8795_device::device_reset()
@@ -70,8 +65,6 @@ void mb8795_device::device_reset()
txlen = rxlen = txcount = 0;
- set_promisc(true);
-
start_send();
}
@@ -82,95 +75,95 @@ void mb8795_device::recv_cb(uint8_t *buf, int len)
receive();
}
-READ8_MEMBER(mb8795_device::txstat_r)
+uint8_t mb8795_device::txstat_r()
{
// logerror("txstat_r %02x %s\n", txstat, machine().describe_context());
return txstat;
}
-WRITE8_MEMBER(mb8795_device::txstat_w)
+void mb8795_device::txstat_w(uint8_t data)
{
txstat = txstat & (0xf0 | ~data);
check_irq();
logerror("txstat_w %02x %s\n", txstat, machine().describe_context());
}
-READ8_MEMBER(mb8795_device::txmask_r)
+uint8_t mb8795_device::txmask_r()
{
logerror("txmask_r %02x %s\n", txmask, machine().describe_context());
return txmask;
}
-WRITE8_MEMBER(mb8795_device::txmask_w)
+void mb8795_device::txmask_w(uint8_t data)
{
txmask = data & 0xaf;
check_irq();
logerror("txmask_w %02x %s\n", txmask, machine().describe_context());
}
-READ8_MEMBER(mb8795_device::rxstat_r)
+uint8_t mb8795_device::rxstat_r()
{
logerror("rxstat_r %02x %s\n", rxstat, machine().describe_context());
return rxstat;
}
-WRITE8_MEMBER(mb8795_device::rxstat_w)
+void mb8795_device::rxstat_w(uint8_t data)
{
rxstat = rxstat & (0x70 | ~data);
check_irq();
logerror("rxstat_w %02x %s\n", rxstat, machine().describe_context());
}
-READ8_MEMBER(mb8795_device::rxmask_r)
+uint8_t mb8795_device::rxmask_r()
{
logerror("rxmask_r %02x %s\n", rxmask, machine().describe_context());
return rxmask;
}
-WRITE8_MEMBER(mb8795_device::rxmask_w)
+void mb8795_device::rxmask_w(uint8_t data)
{
rxmask = data & 0x9f;
check_irq();
logerror("rxmask_w %02x %s\n", rxmask, machine().describe_context());
}
-READ8_MEMBER(mb8795_device::txmode_r)
+uint8_t mb8795_device::txmode_r()
{
logerror("txmode_r %02x %s\n", txmode, machine().describe_context());
return txmode;
}
-WRITE8_MEMBER(mb8795_device::txmode_w)
+void mb8795_device::txmode_w(uint8_t data)
{
txmode = data;
logerror("txmode_w %02x %s\n", txmode, machine().describe_context());
}
-READ8_MEMBER(mb8795_device::rxmode_r)
+uint8_t mb8795_device::rxmode_r()
{
logerror("rxmode_r %02x %s\n", rxmode, machine().describe_context());
return rxmode;
}
-WRITE8_MEMBER(mb8795_device::rxmode_w)
+void mb8795_device::rxmode_w(uint8_t data)
{
rxmode = data;
logerror("rxmode_w %02x %s\n", rxmode, machine().describe_context());
}
-WRITE8_MEMBER(mb8795_device::reset_w)
+void mb8795_device::reset_w(uint8_t data)
{
if(data & EN_RST_RESET)
device_reset();
}
-READ8_MEMBER(mb8795_device::tdc_lsb_r)
+uint8_t mb8795_device::tdc_lsb_r()
{
logerror("tdc_lsb_r %02x %s\n", txcount & 0xff, machine().describe_context());
return txcount;
}
-READ8_MEMBER(mb8795_device::mac_r)
+uint8_t mb8795_device::mac_r(offs_t offset)
{
if(offset < 6)
return mac[offset];
@@ -181,11 +174,11 @@ READ8_MEMBER(mb8795_device::mac_r)
return 0;
}
-WRITE8_MEMBER(mb8795_device::mac_w)
+void mb8795_device::mac_w(offs_t offset, uint8_t data)
{
if(offset < 6) {
mac[offset] = data;
- set_mac((const char *)mac);
+ set_mac(mac);
}
}
@@ -203,8 +196,7 @@ void mb8795_device::tx_dma_w(uint8_t data, bool eof)
}
drq_tx = false;
- if(!drq_tx_cb.isnull())
- drq_tx_cb(drq_tx);
+ drq_tx_cb(drq_tx);
if(eof) {
logerror("send packet, dest=%02x.%02x.%02x.%02x.%02x.%02x len=%04x loopback=%s\n",
@@ -232,8 +224,7 @@ void mb8795_device::tx_dma_w(uint8_t data, bool eof)
void mb8795_device::rx_dma_r(uint8_t &data, bool &eof)
{
drq_rx = false;
- if(!drq_rx_cb.isnull())
- drq_rx_cb(drq_rx);
+ drq_rx_cb(drq_rx);
if(rxlen) {
data = rxbuf[0];
@@ -323,17 +314,16 @@ bool mb8795_device::recv_is_multicast()
return rxbuf[0] & 0x01;
}
-void mb8795_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+TIMER_CALLBACK_MEMBER(mb8795_device::tx_update)
{
- if(id == TIMER_TX) {
- drq_tx = true;
- if(!drq_tx_cb.isnull())
- drq_tx_cb(drq_tx);
- }
+ drq_tx = true;
+ drq_tx_cb(drq_tx);
+}
- if(id == TIMER_RX && rxlen) {
+TIMER_CALLBACK_MEMBER(mb8795_device::rx_update)
+{
+ if(rxlen) {
drq_rx = true;
- if(!drq_rx_cb.isnull())
- drq_rx_cb(drq_rx);
+ drq_rx_cb(drq_rx);
}
}