diff -Nru eth_lcd_tcp-2.8/CHANGES ethlcd-0.1-20080813/CHANGES
--- eth_lcd_tcp-2.8/CHANGES	1970-01-01 01:00:00.000000000 +0100
+++ ethlcd-0.1-20080813/CHANGES	2008-08-20 10:35:14.000000000 +0200
@@ -0,0 +1 @@
+0.1-20080813 - initial release based on eth_lcd_tcp-2.8.tar.gz
diff -Nru eth_lcd_tcp-2.8/ethlcd_proto.h ethlcd-0.1-20080813/ethlcd_proto.h
--- eth_lcd_tcp-2.8/ethlcd_proto.h	1970-01-01 01:00:00.000000000 +0100
+++ ethlcd-0.1-20080813/ethlcd_proto.h	2008-08-19 14:45:09.000000000 +0200
@@ -0,0 +1,24 @@
+/*
+ * ethlcd protocol constants
+ *
+ */
+
+#ifndef ETHLCD_PROTO_H
+#define ETHLCD_PROTO_H
+
+#define ETHLCD_SEND_INSTR		0x01
+#define ETHLCD_SEND_DATA		0x02
+#define ETHLCD_GET_BUTTONS		0x03
+#define ETHLCD_SET_BACKLIGHT		0x04
+#define ETHLCD_SET_BEEP			0x05
+#define ETHLCD_GET_FIRMWARE_VERSION	0x06
+#define ETHLCD_GET_PROTOCOL_VERSION	0x07
+#define ETHLCD_GET_ENC_REVISION		0x08
+#define ETHLCD_CLOSE_CONN		0x09
+#define ETHLCD_UNRECOGNIZED_COMMAND	0x0A
+
+#define ETHLCD_BACKLIGHT_ON		0x01
+#define ETHLCD_BACKLIGHT_HALF		0x02
+#define ETHLCD_BACKLIGHT_OFF		0x03
+
+#endif //ETHLCD_PROTO_H
diff -Nru eth_lcd_tcp-2.8/ip_arp_udp_tcp.c ethlcd-0.1-20080813/ip_arp_udp_tcp.c
--- eth_lcd_tcp-2.8/ip_arp_udp_tcp.c	2006-11-26 21:53:57.000000000 +0100
+++ ethlcd-0.1-20080813/ip_arp_udp_tcp.c	2008-08-17 21:23:24.000000000 +0200
@@ -21,7 +21,6 @@
 #include "net.h"
 #include "enc28j60.h"
 
-static uint8_t wwwport=80;
 static uint8_t macaddr[6];
 static uint8_t ipaddr[4];
 static int16_t info_hdr_len=0;
@@ -93,7 +92,6 @@
 // you must call this function once before you use any of the other functions:
 void init_ip_arp_udp_tcp(uint8_t *mymac,uint8_t *myip,uint8_t wwwp){
         uint8_t i=0;
-        wwwport=wwwp;
         while(i<4){
                 ipaddr[i]=myip[i];
                 i++;
@@ -193,7 +191,7 @@
 // After calling this function you can fill in the first data byte at TCP_OPTIONS_P+4
 // If cp_seq=0 then an initial sequence number is used (should be use in synack)
 // otherwise it is copied from the packet we received
-void make_tcphead(uint8_t *buf,uint16_t rel_ack_num,uint8_t mss,uint8_t cp_seq)
+void make_tcphead(uint8_t *buf,uint16_t rel_ack_num,uint8_t mss,uint8_t cp_seq, uint16_t srcport)
 {
         uint8_t i=0;
         uint8_t tseq;
@@ -203,7 +201,8 @@
                 i++;
         }
         // set source port  (http):
-        buf[TCP_SRC_PORT_L_P]=wwwport;
+        buf[TCP_SRC_PORT_H_P]=srcport>>8;
+        buf[TCP_SRC_PORT_L_P]=srcport & 0xff;
         i=4;
         // sequence numbers:
         // add the rel ack num to SEQACK
@@ -327,7 +326,7 @@
         enc28j60PacketSend(UDP_HEADER_LEN+IP_HEADER_LEN+ETH_HEADER_LEN+datalen,buf);
 }
 
-void make_tcp_synack_from_syn(uint8_t *buf)
+void make_tcp_synack_from_syn(uint8_t *buf, uint16_t srcport)
 {
         uint16_t ck;
         make_eth(buf);
@@ -337,7 +336,7 @@
         buf[IP_TOTLEN_L_P]=IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN+4;
         make_ip(buf);
         buf[TCP_FLAGS_P]=TCP_FLAGS_SYNACK_V;
-        make_tcphead(buf,1,1,0);
+        make_tcphead(buf,1,1,0, srcport);
         // calculate the checksum, len=8 (start from ip.src) + TCP_HEADER_LEN_PLAIN + 4 (one option: mss)
         ck=checksum(&buf[IP_SRC_P], 8+TCP_HEADER_LEN_PLAIN+4,2);
         buf[TCP_CHECKSUM_H_P]=ck>>8;
@@ -359,7 +358,7 @@
 }
 
 // do some basic length calculations and store the result in static varibales
-void init_len_info(uint8_t *buf)
+int16_t init_len_info(uint8_t *buf)
 {
         info_data_len=(buf[IP_TOTLEN_H_P]<<8)|(buf[IP_TOTLEN_L_P]&0xff);
         info_data_len-=IP_HEADER_LEN;
@@ -368,6 +367,7 @@
         if (info_data_len<=0){
                 info_data_len=0;
         }
+        return (info_data_len);
 }
 
 // fill in tcp data at position pos. pos=0 means start of
@@ -404,7 +404,7 @@
 
 // Make just an ack packet with no tcp data inside
 // This will modify the eth/ip/tcp header 
-void make_tcp_ack_from_any(uint8_t *buf)
+void make_tcp_ack_from_any(uint8_t *buf, uint16_t srcport)
 {
         uint16_t j;
         make_eth(buf);
@@ -412,9 +412,9 @@
         buf[TCP_FLAGS_P]=TCP_FLAGS_ACK_V;
         if (info_data_len==0){
                 // if there is no data then we must still acknoledge one packet
-                make_tcphead(buf,1,0,1); // no options
+                make_tcphead(buf,1,0,1,srcport); // no options
         }else{
-                make_tcphead(buf,info_data_len,0,1); // no options
+                make_tcphead(buf,info_data_len,0,1,srcport); // no options
         }
 
         // total length field in the IP header must be set:
@@ -435,14 +435,16 @@
 // You can use this function only immediately after make_tcp_ack_from_any
 // This is because this function will NOT modify the eth/ip/tcp header except for
 // length and checksum
-void make_tcp_ack_with_data(uint8_t *buf,uint16_t dlen)
+void make_tcp_ack_with_data(uint8_t *buf,uint16_t dlen,int fin)
 {
         uint16_t j;
         // fill the header:
         // This code requires that we send only one data packet
         // because we keep no state information. We must therefore set
         // the fin here:
-        buf[TCP_FLAGS_P]=TCP_FLAGS_ACK_V|TCP_FLAGS_PUSH_V|TCP_FLAGS_FIN_V;
+        buf[TCP_FLAGS_P]=TCP_FLAGS_ACK_V|TCP_FLAGS_PUSH_V;
+        if (fin)
+                buf[TCP_FLAGS_P] |= TCP_FLAGS_FIN_V;
 
         // total length field in the IP header must be set:
         // 20 bytes IP + 20 bytes tcp (when no options) + len of data
diff -Nru eth_lcd_tcp-2.8/ip_arp_udp_tcp.h ethlcd-0.1-20080813/ip_arp_udp_tcp.h
--- eth_lcd_tcp-2.8/ip_arp_udp_tcp.h	2006-11-26 21:54:19.000000000 +0100
+++ ethlcd-0.1-20080813/ip_arp_udp_tcp.h	2008-08-14 12:20:22.000000000 +0200
@@ -23,13 +23,13 @@
 extern void make_udp_reply_from_request(uint8_t *buf,char *data,uint8_t datalen,uint16_t port);
 
 
-extern void make_tcp_synack_from_syn(uint8_t *buf);
-extern void init_len_info(uint8_t *buf);
+extern void make_tcp_synack_from_syn(uint8_t *buf, uint16_t srcport);
+extern int16_t init_len_info(uint8_t *buf);
 extern uint16_t get_tcp_data_pointer(void);
 extern uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s);
 extern uint16_t fill_tcp_data(uint8_t *buf,uint16_t pos, const char *s);
-extern void make_tcp_ack_from_any(uint8_t *buf);
-extern void make_tcp_ack_with_data(uint8_t *buf,uint16_t dlen);
+extern void make_tcp_ack_from_any(uint8_t *buf, uint16_t srcport);
+extern void make_tcp_ack_with_data(uint8_t *buf,uint16_t dlen,int fin);
 
 
 #endif /* IP_ARP_UDP_TCP_H */
diff -Nru eth_lcd_tcp-2.8/lcd_hw.h ethlcd-0.1-20080813/lcd_hw.h
--- eth_lcd_tcp-2.8/lcd_hw.h	2007-01-22 18:57:24.000000000 +0100
+++ ethlcd-0.1-20080813/lcd_hw.h	2008-08-01 17:01:11.000000000 +0200
@@ -33,7 +33,7 @@
 
 
 /* normally you do not change the following */
-#define LCD_LINES           2     /* visible lines */
+#define LCD_LINES           4     /* visible lines */
 
 /* no need to change the next 4 lines. This is standard for HD44780 */
 #define LCD_START_LINE1  0x00     /* DDRAM address of first char of line 1 */
diff -Nru eth_lcd_tcp-2.8/main.c ethlcd-0.1-20080813/main.c
--- eth_lcd_tcp-2.8/main.c	2008-06-06 05:35:27.000000000 +0200
+++ ethlcd-0.1-20080813/main.c	2008-08-19 14:48:58.000000000 +0200
@@ -13,6 +13,11 @@
  *
  * http://tuxgraphics.org/electronics/
  * Note: there is a version number in the text. Search for "tuxgraphics"
+ *
+ * ethlcd
+ * (c) 2008 Mariusz Bialonczyk <manio@skyboo.net>
+ * http://manio.skyboo.net/ethlcd/
+ *
  *********************************************/
 #include <avr/io.h>
 #include <stdlib.h>
@@ -24,21 +29,24 @@
 #include "avr_compat.h"
 #include "net.h"
 #include "lcd.h"
+#include "ethlcd_proto.h"
 
 // please modify the following two lines. mac and ip have to be unique
 // in your local area network. You can not have the same numbers in
 // two devices:
-static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x25};
-// how did I get the mac addr? Translate the first 3 numbers into ascii is: TUX
-static uint8_t myip[4] = {10,0,0,25};
+static uint8_t mymac[6] = {0x00,0x04,0x25,0x54,0x55,0x58};
+// how did I get the mac addr? Translate the last 3 numbers into ascii is: TUX,
+// first 3 bytes are Atmel company vendor ID
+static uint8_t myip[4] = {10,1,0,7};
 // base url (you can put a DNS name instead of an IP addr. if you have
 // a DNS server (baseurl must end in "/"):
-static char baseurl[]="http://10.0.0.25/";
-static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)
-// or on a different port:
-//static char baseurl[]="http://10.0.0.24:88/";
-//static uint16_t mywwwport =88; // listen port for tcp/www (max range 1-254)
-//
+static char baseurl[]="http://10.1.0.7/";
+static uint16_t mywwwport =80; // listen port for tcp/www
+static uint16_t mydataport =2425; // listen port for tcp/dataport
+
+#define FIRMWARE_VERSION "v0.1-20080813"
+#define PROTOCOL_VERSION 1
+#define WELCOME_LINE "ethlcd " FIRMWARE_VERSION
 
 #define BUFFER_SIZE 750
 static uint8_t buf[BUFFER_SIZE+1];
@@ -219,13 +227,27 @@
 }
 
 
+void lcd_send_instr(uint8_t *data, uint16_t len)
+{
+	int16_t i=0;
+	for (i=0; i<len; i++)
+		lcd_command(data[i]);
+}
+
+void lcd_send_data(uint8_t *data, uint16_t len)
+{
+	int16_t i=0;
+	for (i=0; i<len; i++)
+		lcd_putc(data[i]);
+}
+
 int main(void){
 
         
         uint16_t plen;
         uint16_t dat_p;
-        uint8_t i=0;
         int8_t cmd;
+        int16_t dlen;	//data length
         
         // set the clock speed to "no pre-scaler" (8MHz with internal osc or 
         // full external speed)
@@ -234,29 +256,33 @@
         CLKPR=(1<<CLKPCE); // change enable
         CLKPR=0; // "no pre-scaler"
         delay_ms(1);
-        /* enable PB0, reset as output */
-        //DDRB|= (1<<DDB0);
 
         /* enable PD2/INT0, as input */
         DDRD&= ~(1<<DDD2);
 
-        
+        DDRC &= ~(1<<DDC1);	//C1 (LEFT button) as input
+        PORTC |= 1<<PC1;
+        DDRC &= ~(1<<DDC2);	//C2 (MENU button) as input
+        PORTC |= 1<<PC2;
+        DDRC &= ~(1<<DDC3);	//C3 (DOWN button) as input
+        PORTC |= 1<<PC3;
+        DDRC &= ~(1<<DDC4);	//C4 (ENTER button) as input
+        PORTC |= 1<<PC4;
+        DDRC &= ~(1<<DDC5);	//C5 (UP button) as input
+        PORTC |= 1<<PC5;
+        DDRB &= ~(1<<DDB1);	//B1 (RIGHT button) as input
+        PORTB |= 1<<PB1;
+
+        DDRC |= (1<<DDC0);	//C0 (beep) as output
+
+        DDRB |= (1<<DDB0);	//PB0 (backlight) as output
+        PORTB &= ~(1<<PB0);	//full light
+
         /*initialize enc28j60*/
         enc28j60Init(mymac);
         enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
         delay_ms(10);
         
-
-        // LED
-        /* enable PB1, LED as output */
-        DDRB|= (1<<DDB1);
-
-        /* set output to Vcc, LED off */
-        PORTB|= (1<<PB1);
-
-        // the transistor on PD7
-        DDRD|= (1<<DDD7);
-        PORTD &= ~(1<<PD7);// transistor off
         
         /* Magjack leds configuration, see enc28j60 datasheet, page 11 */
         // LEDB=yellow LEDA=green
@@ -266,14 +292,10 @@
         enc28j60PhyWrite(PHLCON,0x476);
         delay_ms(20);
         
-        /* set output to GND, red LED on */
-        PORTB &= ~(1<<PB1);
-        i=1;
-
         // lcd display:
         lcd_init(LCD_DISP_ON);
         lcd_clrscr();
-        lcd_puts_P("=ok=");
+        lcd_puts_P(WELCOME_LINE);
         //init the ethernet/ip layer:
         init_ip_arp_udp_tcp(mymac,myip,mywwwport);
 
@@ -281,7 +303,7 @@
                 // get the next new packet:
                 plen = enc28j60PacketReceive(BUFFER_SIZE, buf);
 
-                /*plen will ne unequal to zero if there is a valid 
+                /*plen will be unequal to zero if there is a valid 
                  * packet (without crc error) */
                 if(plen==0){
                         continue;
@@ -299,26 +321,16 @@
                 if(eth_type_is_ip_and_my_ip(buf,plen)==0){
                         continue;
                 }
-                // led----------
-                if (i){
-                        /* set output to Vcc, LED off */
-                        PORTB|= (1<<PB1);
-                        i=0;
-                }else{
-                        /* set output to GND, LED on */
-                        PORTB &= ~(1<<PB1);
-                        i=1;
-                }
                 
                 if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
                         // a ping packet, let's send pong
                         make_echo_reply_from_request(buf,plen);
                         continue;
                 }
-                // tcp port www start, compare only the lower byte
-                if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
+                // tcp port www start
+                if (buf[IP_PROTO_P]==IP_PROTO_TCP_V && buf[TCP_DST_PORT_H_P]==(mywwwport>>8) && buf[TCP_DST_PORT_L_P]==(mywwwport&0xFF)){
                         if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
-                                make_tcp_synack_from_syn(buf);
+                                make_tcp_synack_from_syn(buf, mywwwport);
                                 // make_tcp_synack_from_syn does already send the syn,ack
                                 continue;
                         }
@@ -329,7 +341,7 @@
                                 if (dat_p==0){
                                         if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
                                                 // finack, answer with ack
-                                                make_tcp_ack_from_any(buf);
+                                                make_tcp_ack_from_any(buf, mywwwport);
                                         }
                                         // just an ack with no data, wait for next packet
                                         continue;
@@ -358,22 +370,128 @@
                                         goto SENDTCP;
                                 }
                                 if (cmd==1){
-                                        PORTD|= (1<<PD7);// transistor on
+                                        PORTB|= (1<<PB0);// transistor on
                                 }
                                 if (cmd==0){
-                                        PORTD &= ~(1<<PD7);// transistor off
+                                        PORTB &= ~(1<<PB0);// transistor off
                                 }
                                 // just display the web-form:
-                                plen=print_webpage(buf,(PORTD & (1<<PD7)));
+                                plen=print_webpage(buf,(PORTB & (1<<PB0)));
                                 //
 SENDTCP:
-                                make_tcp_ack_from_any(buf); // send ack for http get
-                                make_tcp_ack_with_data(buf,plen); // send data
+                                make_tcp_ack_from_any(buf, mywwwport); // send ack for http get
+                                make_tcp_ack_with_data(buf,plen,1); // send data
                                 continue;
                         }
 
                 }
                 // tcp port www end
+
+                // ethlcd tcp data port start
+                if (buf[IP_PROTO_P]==IP_PROTO_TCP_V && buf[TCP_DST_PORT_H_P]==(mydataport>>8) && buf[TCP_DST_PORT_L_P]==(mydataport&0xFF)){
+                        if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
+                                make_tcp_synack_from_syn(buf, mydataport);
+                                // make_tcp_synack_from_syn does already send the syn,ack
+                                continue;
+                        }
+                        if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
+                                dlen=init_len_info(buf); // init some data structures
+                                // we can possibly have no data, just ack:
+                                dat_p=get_tcp_data_pointer();
+                                if (dat_p==0){
+                                        if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
+                                                // finack, answer with ack
+                                                make_tcp_ack_from_any(buf, mydataport);
+                                        }
+                                        // just an ack with no data, wait for next packet
+                                        continue;
+                                }
+                                switch (buf[dat_p])	//first byte of data is command
+				{
+					case ETHLCD_SEND_INSTR:
+						lcd_send_instr(&(buf[dat_p+1]), dlen-1);
+						strbuf[0] = ETHLCD_SEND_INSTR;
+						strbuf[1] = 0;
+						plen=fill_tcp_data(buf,0,strbuf);
+						break;
+					case ETHLCD_SEND_DATA:
+						lcd_send_data(&(buf[dat_p+1]), dlen-1);
+						strbuf[0] = ETHLCD_SEND_DATA;
+						strbuf[1] = 0;
+						plen=fill_tcp_data(buf,0,strbuf);
+						break;
+					case ETHLCD_GET_BUTTONS:
+						strbuf[0] = ETHLCD_GET_BUTTONS;
+						strbuf[1] = (PINC & 0x3E) | ((PINB & 1<<1) >> 1);
+						strbuf[2] = 0;
+						plen=fill_tcp_data(buf,0,strbuf);
+						break;
+					case ETHLCD_SET_BACKLIGHT:	//set the backlight
+						if (buf[dat_p+1]==ETHLCD_BACKLIGHT_ON)
+						{
+							DDRB |= (1<<DDB0);	//set as output
+							PORTB &= ~(1<<PB0);	//gnd - full backlight
+						}
+						else if (buf[dat_p+1]==ETHLCD_BACKLIGHT_HALF)
+						{
+						        DDRB |= (1<<DDB0);	//set as output
+							PORTB |= (1<<PB0);	//vcc - half backlight
+						}
+						else if (buf[dat_p+1]==ETHLCD_BACKLIGHT_OFF)
+						{
+							//when set as input - no backlight at all
+							//i know this is a dirty hack - but it works :)
+							//if you're avr guru then let me know if this
+							//is terribly wrong and i have to cut this code out
+							//or if i can leave as it is
+							DDRB &= ~(1<<DDB0);	//set as input
+							PORTB &= ~(1<<PB0);	//gnd
+						}
+						strbuf[0] = ETHLCD_SET_BACKLIGHT;
+						strbuf[1] = 0;
+						plen=fill_tcp_data(buf,0,strbuf);
+						break;
+					case ETHLCD_SET_BEEP:
+						if (buf[dat_p+1]==0)
+							PORTC &= ~(1<<PC0);	//beep off
+						else
+							PORTC |= (1<<PC0);	//beep on
+						strbuf[0] = ETHLCD_SET_BEEP;
+						strbuf[1] = 0;
+						plen=fill_tcp_data(buf,0,strbuf);
+						break;
+					case ETHLCD_GET_FIRMWARE_VERSION:	//firmware version
+						plen=fill_tcp_data_p(buf,0,PSTR(FIRMWARE_VERSION));
+						break;
+					case ETHLCD_GET_PROTOCOL_VERSION:	//protocol version
+						strbuf[0] = ETHLCD_GET_PROTOCOL_VERSION;
+						strbuf[1] = PROTOCOL_VERSION;
+						strbuf[2] = 0;
+						plen=fill_tcp_data(buf,0,strbuf);
+						break;
+					case ETHLCD_GET_ENC_REVISION:	//enc revision
+						strbuf[0] = ETHLCD_GET_ENC_REVISION;
+						strbuf[1] = enc28j60getrev();
+						strbuf[2] = 0;
+						plen=fill_tcp_data(buf,0,strbuf);
+						break;
+					case ETHLCD_CLOSE_CONN:
+						strbuf[0] = ETHLCD_CLOSE_CONN;
+						strbuf[1] = 0;
+						plen=fill_tcp_data(buf,0,strbuf);
+						break;
+					default:
+						strbuf[0] = ETHLCD_UNRECOGNIZED_COMMAND;
+						strbuf[1] = 0;
+						plen=fill_tcp_data(buf,0,strbuf);
+						break;
+                                }
+                                make_tcp_ack_from_any(buf, mydataport); // send ack
+                                make_tcp_ack_with_data(buf,plen, (buf[dat_p] == ETHLCD_CLOSE_CONN) ? 1 : 0); // send data
+                                continue;
+                        }
+                }
+                // ethlcd tcp data port end
                 //
                 // udp is not supported
         }
diff -Nru eth_lcd_tcp-2.8/Makefile ethlcd-0.1-20080813/Makefile
--- eth_lcd_tcp-2.8/Makefile	2007-12-09 22:35:12.000000000 +0100
+++ ethlcd-0.1-20080813/Makefile	2008-08-17 20:05:01.000000000 +0200
@@ -8,7 +8,9 @@
 #-------------------
 .PHONY: test0 test1 test2 all 
 #
-all: eth_rem_dev_tcp_lcd.hex test0.hex test1.hex test2.hex test_readSiliconRev.hex
+all: ethlcd.hex test0.hex test1.hex test2.hex test_readSiliconRev.hex
+#
+ethlcd: ethlcd.hex
 #
 test0: test0.hex
 #
@@ -21,15 +23,15 @@
 	@echo "or"
 	@echo "Usage: make clean"
 #-------------------
-eth_rem_dev_tcp_lcd.hex : eth_rem_dev_tcp_lcd.out 
-	$(OBJCOPY) -R .eeprom -O ihex eth_rem_dev_tcp_lcd.out eth_rem_dev_tcp_lcd.hex 
-	avr-size eth_rem_dev_tcp_lcd.out
+ethlcd.hex : ethlcd.out 
+	$(OBJCOPY) -R .eeprom -O ihex ethlcd.out ethlcd.hex 
+	avr-size ethlcd.out
 	@echo " "
 	@echo "Expl.: data=initialized data, bss=uninitialized data, text=code"
 	@echo " "
 
-eth_rem_dev_tcp_lcd.out : main.o ip_arp_udp_tcp.o enc28j60.o timeout.o lcd.o
-	$(CC) $(CFLAGS) -o eth_rem_dev_tcp_lcd.out -Wl,-Map,eth_rem_dev_tcp_lcd.map main.o ip_arp_udp_tcp.o enc28j60.o timeout.o lcd.o
+ethlcd.out : main.o ip_arp_udp_tcp.o enc28j60.o timeout.o lcd.o
+	$(CC) $(CFLAGS) -o ethlcd.out -Wl,-Map,ethlcd.map main.o ip_arp_udp_tcp.o enc28j60.o timeout.o lcd.o
 enc28j60.o : enc28j60.c avr_compat.h timeout.h enc28j60.h
 	$(CC) $(CFLAGS) -Os -c enc28j60.c
 ip_arp_udp_tcp.o : ip_arp_udp_tcp.c net.h avr_compat.h enc28j60.h
@@ -114,18 +116,18 @@
 	./prg_load_uc_168 test0.hex
 endif
 #------------------
-load: eth_rem_dev_tcp_lcd.hex
+load: ethlcd.hex
 ifeq ($(MCU),atmega88)
-	./prg_load_uc_88 eth_rem_dev_tcp_lcd.hex
+	./prg_load_uc_88 ethlcd.hex
 else
-	./prg_load_uc_168 eth_rem_dev_tcp_lcd.hex
+	./prg_load_uc_168 ethlcd.hex
 endif
 #
-loaduisp: eth_rem_dev_tcp_lcd.hex
+loaduisp: ethlcd.hex
 ifeq ($(MCU),atmega88)
-	./prg_load_uc_88 -u eth_rem_dev_tcp_lcd.hex
+	./prg_load_uc_88 -u ethlcd.hex
 else
-	./prg_load_uc_168 -u eth_rem_dev_tcp_lcd.hex
+	./prg_load_uc_168 -u ethlcd.hex
 endif
 #-------------------
 # Check this with make rdfuses
@@ -147,5 +149,5 @@
 endif
 #-------------------
 clean:
-	rm -f *.o *.map *.out test*.hex eth_rem_dev_tcp_lcd.hex
+	rm -f *.o *.map *.out test*.hex ethlcd.hex
 #-------------------
diff -Nru eth_lcd_tcp-2.8/README_ETHLCD ethlcd-0.1-20080813/README_ETHLCD
--- eth_lcd_tcp-2.8/README_ETHLCD	1970-01-01 01:00:00.000000000 +0100
+++ ethlcd-0.1-20080813/README_ETHLCD	2008-08-18 09:07:43.000000000 +0200
@@ -0,0 +1,18 @@
+All files in this directory are from Guido Socher's "LCD display with ethernet interface" project:
+http://tuxgraphics.org/electronics/200702/article07021.shtml
+I've changes the sources for ethlcd protocol and project.
+Actually it is based on eth_lcd_tcp-2.8.tar.gz downloaded from:
+http://tuxgraphics.org/common/src2/article07021/
+
+More info, diff file against original tarball and all about ethlcd project you can find at:
+http://manio.skyboo.net/ethlcd/
+
+Please read the original Guido Socher article and the info on my homepage before doing
+anything with the hardware. You can treat the ethlcd project as a fork of Guido's project.
+
+You also need to note that only test0.c was adapted for ethlcd hardware (i've changed the led
+to backlight and beep switching instead of LED - this test is good for avr testing) - i didn't
+change and analised the rest of tests - but i think they should work with small changes or
+without changes at all.
+
+Mariusz Bialonczyk <manio@skyboo.net>
diff -Nru eth_lcd_tcp-2.8/test0.c ethlcd-0.1-20080813/test0.c
--- eth_lcd_tcp-2.8/test0.c	2007-02-11 19:31:18.000000000 +0100
+++ ethlcd-0.1-20080813/test0.c	2008-08-17 20:34:56.000000000 +0200
@@ -38,15 +38,18 @@
         //CLKPR=((1<<CLKPS0)|(1<<CLKPS1)); // 1MHz
         //CLKPR=((1<<CLKPS0)|(1<<CLKPS2)); // 0.25MHz
 
-        /* enable PB1 as output */
-        DDRB|= (1<<DDB1);
+        /* enable PB0 and PC0 as output */
+        DDRB|= (1<<DDB0);
+        DDRC|= (1<<DDC0);
 
         while (1) {
-                    /* led on, pin=0 */
-                    PORTB &= ~(1<<PB1);
+                    /* beep and backlight, pin=0 */
+                    PORTB &= ~(1<<PB0);
+                    PORTC &= ~(1<<PC0);
                     delay_ms(500);
-                    /* set output to 5V, LED off */
-                    PORTB|= (1<<PB1);
+                    /* set output to 5V, beep and backlight */
+                    PORTB|= (1<<PB0);
+                    PORTC|= (1<<PC0);
                     delay_ms(500);
         }
         return(0);
