summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa/ne2000.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/isa/ne2000.cpp')
-rw-r--r--src/devices/bus/isa/ne2000.cpp41
1 files changed, 20 insertions, 21 deletions
diff --git a/src/devices/bus/isa/ne2000.cpp b/src/devices/bus/isa/ne2000.cpp
index 246447836ba..1473c043f2a 100644
--- a/src/devices/bus/isa/ne2000.cpp
+++ b/src/devices/bus/isa/ne2000.cpp
@@ -3,6 +3,8 @@
#include "emu.h"
#include "ne2000.h"
+#include "multibyte.h"
+
DEFINE_DEVICE_TYPE(NE2000, ne2000_device, "ne2000", "NE2000 Network Adapter")
@@ -14,8 +16,8 @@ void ne2000_device::device_add_mconfig(machine_config &config)
m_dp8390->mem_write_callback().set(FUNC(ne2000_device::ne2000_mem_write));
}
-ne2000_device::ne2000_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock)
- : device_t(mconfig, NE2000, tag, owner, clock),
+ne2000_device::ne2000_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock) :
+ device_t(mconfig, NE2000, tag, owner, clock),
device_isa16_card_interface(mconfig, *this),
m_dp8390(*this, "dp8390d"),
m_irq(0)
@@ -23,34 +25,33 @@ ne2000_device::ne2000_device(const machine_config& mconfig, const char* tag, dev
}
void ne2000_device::device_start() {
- char mac[7];
+ uint8_t mac[6];
uint32_t num = machine().rand();
memset(m_prom, 0x57, 16);
- sprintf(mac+2, "\x1b%c%c%c", (num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff);
+ mac[2] = 0x1b;
+ put_u24be(mac+3, num);
mac[0] = 0; mac[1] = 0; // avoid gcc warning
memcpy(m_prom, mac, 6);
m_dp8390->set_mac(mac);
set_isa_device();
- m_isa->install16_device(0x0300, 0x031f, read16_delegate(*this, FUNC(ne2000_device::ne2000_port_r)), write16_delegate(*this, FUNC(ne2000_device::ne2000_port_w)));
+ m_isa->install16_device(0x0300, 0x031f, read16s_delegate(*this, FUNC(ne2000_device::ne2000_port_r)), write16s_delegate(*this, FUNC(ne2000_device::ne2000_port_w)));
}
void ne2000_device::device_reset() {
- memcpy(m_prom, m_dp8390->get_mac(), 6);
+ memcpy(m_prom, &m_dp8390->get_mac()[0], 6);
m_irq = ioport("CONFIG")->read() & 3;
}
-READ16_MEMBER(ne2000_device::ne2000_port_r) {
+uint16_t ne2000_device::ne2000_port_r(offs_t offset, uint16_t mem_mask) {
offset <<= 1;
if(offset < 16) {
- m_dp8390->dp8390_cs(CLEAR_LINE);
- return m_dp8390->dp8390_r(space, offset, 0xff) |
- m_dp8390->dp8390_r(space, offset+1, 0xff) << 8;
+ return m_dp8390->cs_read(offset) |
+ m_dp8390->cs_read(offset+1) << 8;
}
if(mem_mask == 0xff00) offset++;
switch(offset) {
case 16:
- m_dp8390->dp8390_cs(ASSERT_LINE);
- return m_dp8390->dp8390_r(space, offset, mem_mask);
+ return m_dp8390->remote_read();
case 31:
m_dp8390->dp8390_reset(CLEAR_LINE);
return 0;
@@ -60,23 +61,21 @@ READ16_MEMBER(ne2000_device::ne2000_port_r) {
return 0;
}
-WRITE16_MEMBER(ne2000_device::ne2000_port_w) {
+void ne2000_device::ne2000_port_w(offs_t offset, uint16_t data, uint16_t mem_mask) {
offset <<= 1;
if(offset < 16) {
- m_dp8390->dp8390_cs(CLEAR_LINE);
if(mem_mask == 0xff00) {
data >>= 8;
offset++;
}
- m_dp8390->dp8390_w(space, offset, data & 0xff, 0xff);
- if(mem_mask == 0xffff) m_dp8390->dp8390_w(space, offset+1, data>>8, 0xff);
+ m_dp8390->cs_write(offset, data & 0xff);
+ if(mem_mask == 0xffff) m_dp8390->cs_write(offset+1, data>>8);
return;
}
if(mem_mask == 0xff00) offset++;
switch(offset) {
case 16:
- m_dp8390->dp8390_cs(ASSERT_LINE);
- m_dp8390->dp8390_w(space, offset, data, mem_mask);
+ m_dp8390->remote_write(data);
return;
case 31:
m_dp8390->dp8390_reset(ASSERT_LINE);
@@ -87,7 +86,7 @@ WRITE16_MEMBER(ne2000_device::ne2000_port_w) {
return;
}
-WRITE_LINE_MEMBER(ne2000_device::ne2000_irq_w) {
+void ne2000_device::ne2000_irq_w(int state) {
switch(m_irq) {
case 0:
m_isa->irq2_w(state);
@@ -104,7 +103,7 @@ WRITE_LINE_MEMBER(ne2000_device::ne2000_irq_w) {
}
}
-READ8_MEMBER(ne2000_device::ne2000_mem_read) {
+uint8_t ne2000_device::ne2000_mem_read(offs_t offset) {
offset &= ~0x8000;
if(offset < 32) return m_prom[offset>>1];
if((offset < (16*1024)) || (offset >= (32*1024))) {
@@ -114,7 +113,7 @@ READ8_MEMBER(ne2000_device::ne2000_mem_read) {
return m_board_ram[offset - (16*1024)];
}
-WRITE8_MEMBER(ne2000_device::ne2000_mem_write) {
+void ne2000_device::ne2000_mem_write(offs_t offset, uint8_t data) {
offset &= ~0x8000;
if((offset < (16*1024)) || (offset >= (32*1024))) {
logerror("ne2000: invalid memory write %04X\n", offset);