trunk/src/mess/machine/3c505.c
| r21734 | r21735 | |
| 27 | 27 | |
| 28 | 28 | #define MAINCPU "maincpu" |
| 29 | 29 | |
| 30 | #ifdef LSB_FIRST |
| 31 | static UINT16 uint16_to_le(UINT16 value) |
| 32 | { |
| 33 | return value; |
| 34 | } |
| 35 | |
| 36 | static UINT16 uint16_from_le(UINT16 value) |
| 37 | { |
| 38 | return ((value&0x00ff)<<8)|((value&0xff00)>>8); |
| 39 | } |
| 40 | #else |
| 41 | static UINT16 uint16_to_le(UINT16 value) |
| 42 | { |
| 43 | return ((value&0x00ff)<<8)|((value&0xff00)>>8); |
| 44 | } |
| 45 | |
| 46 | static UINT16 uint16_from_le(UINT16 value) |
| 47 | { |
| 48 | return value; |
| 49 | } |
| 50 | #endif |
| 51 | |
| 30 | 52 | //************************************************************************** |
| 31 | 53 | // CONSTANTS |
| 32 | 54 | //************************************************************************** |
| r21734 | r21735 | |
| 644 | 666 | // m_response.data.rcv_resp.buf_len = htole16(buf_len); |
| 645 | 667 | |
| 646 | 668 | // htole16 and friends are not portable beyond Linux. It's named differently on *BSD and differently again on OS X. Avoid! |
| 647 | | #ifdef LSB_FIRST |
| 648 | | m_response.data.rcv_resp.pkt_len = m_rx_data_buffer.get_length(); |
| 669 | m_response.data.rcv_resp.pkt_len = uint16_to_le(m_rx_data_buffer.get_length()); |
| 649 | 670 | m_response.data.rcv_resp.timeout = 0; // successful completion |
| 650 | | m_response.data.rcv_resp.status = m_rx_data_buffer.get_length() > 0 ? 0 : 0xffff; |
| 671 | m_response.data.rcv_resp.status = uint16_to_le(m_rx_data_buffer.get_length() > 0 ? 0 : 0xffff); |
| 651 | 672 | m_response.data.rcv_resp.timetag = 0; // TODO: time tag |
| 652 | | #else |
| 653 | | UINT16 temp; |
| 654 | | temp = m_rx_data_buffer.get_length(); |
| 655 | | m_response.data.rcv_resp.pkt_len = (temp << 8) | (temp>>8); |
| 656 | | m_response.data.rcv_resp.timeout = 0; // successful completion |
| 657 | | temp = m_rx_data_buffer.get_length() > 0 ? 0 : 0xffff; |
| 658 | | m_response.data.rcv_resp.status = (temp << 8) | (temp>>8); |
| 659 | | m_response.data.rcv_resp.timetag = 0; // TODO: time tag |
| 660 | | #endif |
| 661 | 673 | |
| 662 | 674 | // compute and check no of bytes to be DMA'ed (must be even) |
| 663 | | #ifdef LSB_FIRST |
| 664 | | UINT16 buf_len = m_response.data.rcv_resp.buf_len & ~1; |
| 665 | | #else |
| 666 | | UINT16 buf_len = ((m_response.data.rcv_resp.buf_len&0xff)<<8) || ((m_response.data.rcv_resp.buf_len&0xff00)>>8) & ~1; |
| 667 | | #endif |
| 675 | UINT16 buf_len = uint16_from_le(m_response.data.rcv_resp.buf_len) & ~1; |
| 668 | 676 | if (m_rx_data_buffer.get_length() > buf_len) |
| 669 | 677 | { |
| 670 | 678 | LOG1(("do_receive_command !!! buffer size too small (%d < %d)", buf_len, m_rx_data_buffer.get_length())); |
| 671 | | #ifdef LSB_FIRST |
| 672 | | m_response.data.rcv_resp.pkt_len = buf_len; |
| 673 | | #else |
| 674 | | m_response.data.rcv_resp.pkt_len = ((buf_len & 0xff)<<8) | ((buf_len & 0xff00)>>8); |
| 675 | | #endif |
| 679 | m_response.data.rcv_resp.pkt_len = uint16_to_le(buf_len); |
| 676 | 680 | m_response.data.rcv_resp.status = 0xffff; |
| 677 | 681 | } |
| 678 | 682 | else |
| 679 | 683 | { |
| 680 | 684 | buf_len = (m_rx_data_buffer.get_length() + 1) & ~1; |
| 681 | | #ifdef LSB_FIRST |
| 682 | | m_response.data.rcv_resp.pkt_len = buf_len; |
| 683 | | #else |
| 684 | | m_response.data.rcv_resp.pkt_len = ((buf_len & 0xff)<<8) | ((buf_len & 0xff00)>>8); |
| 685 | | #endif |
| 685 | m_response.data.rcv_resp.pkt_len = uint16_to_le(buf_len); |
| 686 | 686 | } |
| 687 | 687 | |
| 688 | 688 | m_response_length = m_response.length + 2; |
| r21734 | r21735 | |
| 815 | 815 | |
| 816 | 816 | case CMD_NETWORK_STATISTICS: // 0x0a |
| 817 | 817 | m_response.length = sizeof(struct Netstat); |
| 818 | | m_response.data.netstat.tot_recv = htole16(m_netstat.tot_recv); |
| 819 | | m_response.data.netstat.tot_xmit = htole16(m_netstat.tot_xmit); |
| 820 | | m_response.data.netstat.err_CRC = htole16(m_netstat.err_CRC); |
| 821 | | m_response.data.netstat.err_align = htole16(m_netstat.err_align); |
| 822 | | m_response.data.netstat.err_res = htole16(m_netstat.err_res); |
| 823 | | m_response.data.netstat.err_ovrrun = htole16(m_netstat.err_ovrrun); |
| 818 | m_response.data.netstat.tot_recv = uint16_to_le(m_netstat.tot_recv); |
| 819 | m_response.data.netstat.tot_xmit = uint16_to_le(m_netstat.tot_xmit); |
| 820 | m_response.data.netstat.err_CRC = uint16_to_le(m_netstat.err_CRC); |
| 821 | m_response.data.netstat.err_align = uint16_to_le(m_netstat.err_align); |
| 822 | m_response.data.netstat.err_res = uint16_to_le(m_netstat.err_res); |
| 823 | m_response.data.netstat.err_ovrrun = uint16_to_le(m_netstat.err_ovrrun); |
| 824 | 824 | break; |
| 825 | 825 | |
| 826 | 826 | case CMD_ADAPTER_INFO: // 0x11 |
| r21734 | r21735 | |
| 828 | 828 | // FIXME: using demo data |
| 829 | 829 | m_response.data.info.minor_vers = 1; |
| 830 | 830 | m_response.data.info.major_vers = 2; |
| 831 | | m_response.data.info.ROM_cksum = htole16(3); |
| 832 | | m_response.data.info.RAM_sz = htole16(4); |
| 833 | | m_response.data.info.free_ofs = htole16(5); |
| 834 | | m_response.data.info.free_seg = htole16(6); |
| 831 | m_response.data.info.ROM_cksum = uint16_to_le(3); |
| 832 | m_response.data.info.RAM_sz = uint16_to_le(4); |
| 833 | m_response.data.info.free_ofs = uint16_to_le(5); |
| 834 | m_response.data.info.free_seg = uint16_to_le(6); |
| 835 | 835 | break; |
| 836 | 836 | |
| 837 | 837 | case CMD_LOAD_MULTICAST_LIST:// 0x0b |