diff -Naur picp/includes.h picp-mod/includes.h
--- picp/includes.h	Fri Apr 14 18:10:31 2000
+++ picp-mod/includes.h	Thu Feb 28 22:43:57 2002
@@ -7,6 +7,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <termio.h>
+#include <sys/ioctl.h>
 #include <sys/time.h>
 #include <limits.h>
 #include <errno.h>
diff -Naur picp/picdev.c picp-mod/picdev.c
--- picp/picdev.c	Thu Jan 11 17:05:32 2001
+++ picp-mod/picdev.c	Thu Feb 28 22:43:49 2002
@@ -2744,6 +2744,67 @@
 };
 
 //-----------------------------------------------------------------------------
+//
+//  PIC16C745:
+//
+
+const static UINT8 def_PIC16C745[] =
+{
+    0x20, 0x00, 0x3f, 0xff, 
+    0x3f, 0xff, 0x00, 0x7f, 
+    0x00, 0x7f, 0x3f, 0x3f, 
+    0x3f, 0x3f, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x01, 0x20, 0x00, 
+    0x04, 0x20, 0x07, 0x01, 
+    0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 
+    0x03, 0x19, 0x03, 0x06,
+};
+
+const static UINT8 defx_PIC16C745[] =
+{
+    0x3f, 0x3f, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 
+    0x3f, 0x3f, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00,
+};
+
+const static UINT8 def_PIC16C765[] =
+{
+    0x20, 0x00, 0x3f, 0xff, 
+    0x3f, 0xff, 0x00, 0x7f, 
+    0x00, 0x7f, 0x3f, 0x3f, 
+    0x3f, 0x3f, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x01, 0x20, 0x00, 
+    0x04, 0x20, 0x07, 0x01, 
+    0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 
+    0x03, 0x19, 0x04, 0x06,
+};
+
+const static PIC_DEFINITION PIC16C745 =
+{
+	"16C745",
+	def_PIC16C745,
+	defx_PIC16C745,
+	0,
+	0,
+};
+
+const static PIC_DEFINITION PIC16C765 =
+{
+	"16C765",
+	def_PIC16C765,
+	defx_PIC16C745,
+	0,
+	0,
+};
+
+//-----------------------------------------------------------------------------
 /*
   14 July, 2000:
 
@@ -2837,9 +2898,11 @@
 	&PIC16C73A,
 	&PIC16C73B,
 	&PIC16C74,
+	&PIC16C745,
 	&PIC16C74A,
 	&PIC16C74B,
 	&PIC16C76,
+	&PIC16C765,
 	&PIC16C77,
 	&PIC16C773,
 	&PIC16C774,
diff -Naur picp/picstart.c picp-mod/picstart.c
--- picp/picstart.c	Tue Feb 20 23:06:37 2001
+++ picp-mod/picstart.c	Wed Apr 10 20:06:32 2002
@@ -103,7 +103,8 @@
 #include "includes.h"
 
 #define CHAR_TIMEOUT	500000				// time to wait for a character before giving up (in microseconds)
-#define BUFFERSIZE		0x2000				// buffer bigger than anyone should need
+#define BLANK_CHAR_TIMEOUT	2000000				// time to wait for a character before giving up (in microseconds)
+#define BUFFERSIZE		0x10000				// buffer bigger than anyone should need
 
 // COMMANDS (sent to PICSTART)
 //
@@ -282,7 +283,7 @@
 //
 //-----------------------------------------------------------------------------
 
-static bool SendMsg(const UINT8 *cmdBuff, UINT32 cmdBytes, UINT8 *rtnBuff, UINT32 rtnBytes)
+static bool SendMsgTimeout(const UINT8 *cmdBuff, UINT32 cmdBytes, UINT8 *rtnBuff, UINT32 rtnBytes, UINT32 timeOut)
 {
 	bool fail = false;
 	int numRead;
@@ -295,7 +296,7 @@
 
 	while(bytesRemaining && !fail)
 	{
-		numRead = ReadBytes(theDevice,&rtnBuff[rtnBytes-bytesRemaining],bytesRemaining,CHAR_TIMEOUT);
+		numRead = ReadBytes(theDevice,&rtnBuff[rtnBytes-bytesRemaining],bytesRemaining,timeOut);
 
 		if(numRead < 0)
 		{
@@ -312,6 +313,10 @@
 	return(!fail);
 }
 
+static bool SendMsg(const UINT8 *cmdBuff, UINT32 cmdBytes, UINT8 *rtnBuff, UINT32 rtnBytes)
+{
+    return SendMsgTimeout(cmdBuff, cmdBytes, rtnBuff, rtnBytes, CHAR_TIMEOUT);
+}
 
 //-----------------------------------------------------------------------------
 //
@@ -426,7 +431,7 @@
 	UINT8 theBuffer[3];
 
 	theBuffer[0] = CMD_BLANK_CHECK;
-	fail = !SendMsg(theBuffer,1,theBuffer,2);
+	fail = !SendMsgTimeout(theBuffer,1,theBuffer,2,BLANK_CHAR_TIMEOUT);
 	if(!fail)
 	{
 		int idx = 0;
diff -Naur picp/serial.c picp-mod/serial.c
--- picp/serial.c	Tue Feb 20 23:03:51 2001
+++ picp-mod/serial.c	Thu Feb 28 22:43:57 2002
@@ -5,6 +5,32 @@
 
 #include	"includes.h"
 
+#ifdef __CYGWIN__
+#include <io.h>
+
+#define _POSIX_VDISABLE 0
+#define TCGETS TCGETA
+#define TCSETS TCSETA
+
+// Declare native Win32 functions for ioctl calls not supported by Cygwin.
+
+#define MS_CTS_ON 16
+#define MS_DSR_ON 32
+#define MS_RING_ON 64
+#define MS_RLSD_ON 128
+int __stdcall GetCommModemStatus(long,unsigned long*);
+
+#define CLRDTR 6
+#define CLRRTS 4
+#define SETDTR 5
+#define SETRTS 3
+#define SETXOFF 1
+#define SETXON 2
+#define SETBREAK 8
+#define CLRBREAK 9
+int __stdcall EscapeCommFunction(long,unsigned long);
+#endif
+
 #define MIN_CHARS		0		// DEBUG something is amiss with this, if VTIME is non-zero we get EAGAIN returned instead of zero (and no delay)
 #define CHAR_TIMEOUT	0		// character timeout (read fails and returns if this much time passes without a character) in 1/10's sec
 
@@ -367,6 +393,7 @@
 // CTS is true when the modem has raised CTS (letting us know it is ok to send)
 // DCD is true when the carrier detect line is active
 {
+#ifndef __CYGWIN__
 	int
 		status;
 
@@ -382,11 +409,25 @@
 			*DCD=true;
 		}
 	}
+#else
+	// TIOCMGET not supported under Cygwin so use Win32 API directly.
+
+	unsigned long status = 0;
+
+	*CTS=*DCD=false;
+	if (GetCommModemStatus(get_osfhandle(theDevice), &status)) {
+	    if (status & MS_CTS_ON)
+		*CTS = true;
+	    if (status & MS_RLSD_ON)
+		*DCD =  true;
+	}
+#endif
 }
 
 void SetDTR(int theDevice,bool DTR)
 // Set the state of the DTR handshake line
 {
+#if ! defined(__CYGWIN__)
 	int
 		control;
 
@@ -399,6 +440,11 @@
 	{
 		ioctl(theDevice,TIOCMBIC,&control);
 	}
+#else
+	// TIOCMBI[SC] not supported under Cygwin so use Win32 API directly.
+
+	EscapeCommFunction(get_osfhandle(theDevice), (DTR ? SETDTR : CLRDTR));
+#endif
 }
 
 static struct termios
