diff options
Diffstat (limited to 'src/devices/machine/mb8795.cpp')
-rw-r--r-- | src/devices/machine/mb8795.cpp | 72 |
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); } } |