diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2011-09-09 14:21:42 +0000 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2011-09-09 14:21:42 +0000 |
commit | 1063a955cc5ac713c0342c79e20d74fe1725f643 (patch) | |
tree | fc235eb3613fde9623eb907ab3cd682ea998240e /src/osd/osdnet.c | |
parent | d57fb0b8dcfcba7ca235b5677d6739dc553c3c98 (diff) |
Added network support used by MESS implemented by Carl (no whatsnew)
part is disabled for now by compile options. Will be enabled,at least in MESS
when all platforms get their implementation.
Diffstat (limited to 'src/osd/osdnet.c')
-rw-r--r-- | src/osd/osdnet.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/osd/osdnet.c b/src/osd/osdnet.c new file mode 100644 index 00000000000..6a2fbbaac2f --- /dev/null +++ b/src/osd/osdnet.c @@ -0,0 +1,92 @@ +#include "emu.h" +#include "osdnet.h" + +typedef struct netdev_entry +{ + char name[256]; + create_netdev func; + struct netdev_entry *m_next; +} netdev_entry_t; + +static class simple_list<netdev_entry_t> netdev_list; + +void add_netdev(const char *name, create_netdev func) +{ + netdev_entry_t *entry = new netdev_entry_t; + strncpy(entry->name, name, 255); + entry->name[255] = '\0'; + entry->func = func; + netdev_list.append(*entry); +} + +class netdev *open_netdev(const char *name, class device_network_interface *ifdev, int rate) +{ + netdev_entry_t *entry = netdev_list.first(); + while(entry) { + if(!strncmp(name, entry->name, 256)) + return entry->func(entry->name, ifdev, rate); + entry = entry->m_next; + } + + return NULL; +} + +netdev::netdev(class device_network_interface *ifdev, int rate) +{ + m_dev = ifdev; + ifdev->device().machine().scheduler().timer_pulse(attotime::from_hz(rate), timer_expired_delegate(FUNC(netdev::recv), this)); +} + +netdev::~netdev() +{ +} + +int netdev::send(UINT8 *buf, int len) +{ + return 0; +} + +void netdev::recv(void *ptr, int param) +{ + UINT8 *buf; + int len; + while((len = recv_dev(&buf))) + { + if(buf[0] & 1) + { + if(memcmp("\xff\xff\xff\xff\xff\xff", buf, 6) && !m_dev->mcast_chk(buf, len)) continue; + } + else + if(memcmp(get_mac(), buf, 6) && !get_promisc()) continue; + + m_dev->recv_cb(buf, len); + } +} + +int netdev::recv_dev(UINT8 **buf) +{ + return 0; +} + +void netdev::set_mac(const char *mac) +{ +} + +void netdev::set_promisc(bool promisc) +{ +} + +bool netdev::get_promisc() +{ + if(m_dev) + return m_dev->get_promisc(); + return false; +} + +const char *netdev::get_mac() +{ + if(m_dev) + return m_dev->get_mac(); + return "\0\0\0\0\0\0"; +} + |