diff options
Diffstat (limited to 'src/devices/bus/isa/ne2000.cpp')
-rw-r--r-- | src/devices/bus/isa/ne2000.cpp | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/src/devices/bus/isa/ne2000.cpp b/src/devices/bus/isa/ne2000.cpp index 3ad2cc592ef..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(FUNC(ne2000_device::ne2000_port_r), this), write16_delegate(FUNC(ne2000_device::ne2000_port_w), this)); + 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); |