--- /dev/null
+diff -Nur xilprg-0.5/makefile xilprg-new/makefile
+--- xilprg-0.5/makefile 2006-08-23 07:41:20.000000000 +0200
++++ xilprg-new/makefile 2007-04-07 17:09:16.000000000 +0200
+@@ -40,6 +40,7 @@
+ $(SRC_DIR)/prgfile.cpp \\r
+ $(SRC_DIR)/chip.cpp \\r
+ $(SRC_DIR)/parport.cpp \\r
++ $(SRC_DIR)/onbusb.cpp \\r
+ $(SRC_DIR)/cable.cpp \\r
+ $(SRC_DIR)/digilent.cpp \\r
+ $(SRC_DIR)/xilinx.cpp\r
+diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp
+--- xilprg-0.5/src/cable.cpp 2006-08-23 07:38:34.000000000 +0200
++++ xilprg-new/src/cable.cpp 2007-04-07 17:20:55.000000000 +0200
+@@ -49,6 +49,7 @@
+ #include "chip.h"\r
+ #include "cmdline.h"\r
+ #include "digilent.h"\r
++#include "onbusb.h"\r
+ #include "parport.h"\r
+ \r
+ cable::cable()\r
+@@ -587,6 +588,9 @@
+ if (stricmp(argv[0], "dusb") == 0)\r
+ cbl = new digilent;\r
+ else\r
++ if (stricmp(argv[0], "ousb") ==0)\r
++ cbl = new onbusb;\r
++ else\r
+ {\r
+ msgf(STR_INVALID_CABLE_DEF);\r
+ return NULL;\r
+diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp
+--- xilprg-0.5/src/onbusb.cpp 1970-01-01 01:00:00.000000000 +0100
++++ xilprg-new/src/onbusb.cpp 2007-04-07 17:15:34.000000000 +0200
+@@ -0,0 +1,113 @@
++/*\r
++ * onboard usb\r
++ *\r
++ * author: till & frank zirkelbach\r
++ *\r
++ */\r
++\r
++#include "xilprg.h"\r
++#include "utils.h"\r
++#include "onbusb.h"\r
++\r
++onbusb::onbusb()\r
++{\r
++ handle=NULL;\r
++}\r
++\r
++onbusb::~onbusb()\r
++{\r
++}\r
++\r
++int onbusb::open()\r
++{\r
++ \r
++ struct usb_bus *bus; \r
++\r
++ usb_init();\r
++ usb_find_busses();\r
++ usb_find_devices();\r
++\r
++ bus=usb_get_busses();\r
++ while(bus) {\r
++ dev=bus->devices;\r
++ while(dev) {\r
++ if(dev->descriptor.idVendor==USB_VENDOR_ID &&\r
++ dev->descriptor.idProduct==USB_PRODUCT_ID)\r
++ /* found the device */\r
++ return 0;\r
++ dev=dev->next;\r
++ }\r
++ bus=bus->next;\r
++ }\r
++\r
++ return -1;\r
++\r
++ handle=usb_open(dev);\r
++ if(handle==NULL)\r
++ goto cleanup;\r
++\r
++ if(usb_set_configuration(handle,1)<0)\r
++ goto cleanup;\r
++\r
++ if(usb_claim_interface(handle,0)<0)\r
++ goto cleanup;\r
++\r
++ if(usb_set_altinterface(handle,1)<0)\r
++ goto cleanup;\r
++\r
++ data = 0x10;\r
++\r
++ reset_tap_state();\r
++\r
++ return 0;\r
++\r
++cleanup:\r
++\r
++ close();\r
++\r
++ return 1;\r
++\r
++}\r
++\r
++int onbusb::close()\r
++{\r
++\r
++ usb_close(handle);\r
++\r
++ return 0;\r
++}\r
++\r
++int onbusb::get_description(string& desc)\r
++{\r
++ char s[256];\r
++ sprintf(s, "onboard usb bitbanging");\r
++ desc = s;\r
++ return 0;\r
++}\r
++\r
++void onbusb::set_tdi(int bit)\r
++{\r
++ if (bit) data |= 0x04; else data &= ~0x04;\r
++ data|=0xa0;\r
++ usb_bulk_write(handle,0x01,&data,1,0);\r
++}\r
++\r
++void onbusb::set_tck(int bit)\r
++{\r
++ if (bit) data |= 0x10; else data &= ~0x10;\r
++ data|=0xa0;\r
++ usb_bulk_write(handle,0x01,&data,1,0);\r
++}\r
++\r
++void onbusb::set_tms(int bit)\r
++{\r
++ if (bit) data |= 0x08; else data &= ~0x08;\r
++ data|=0xa0;\r
++ usb_bulk_write(handle,0x01,&data,1,0);\r
++}\r
++\r
++int onbusb::get_tdo()\r
++{\r
++ usb_bulk_read(handle,0x81,&data,1,0);\r
++ return data & 0x01 ? 1 : 0;\r
++}\r
+diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h
+--- xilprg-0.5/src/onbusb.h 1970-01-01 01:00:00.000000000 +0100
++++ xilprg-new/src/onbusb.h 2007-04-07 17:14:07.000000000 +0200
+@@ -0,0 +1,43 @@
++/*\r
++ * onboard usb\r
++ *\r
++ * author: till & frank zirkelbach\r
++ *\r
++ */\r
++\r
++#ifndef _ONBUSB_H_INCLUDED_\r
++#define _ONBUSB_H_INCLUDED_\r
++\r
++#include "cable.h"\r
++\r
++#include <usb.h>\r
++\r
++class onbusb : public cable\r
++{\r
++public:\r
++ onbusb();\r
++ virtual ~onbusb();\r
++\r
++ enum\r
++ {\r
++ USB_VENDOR_ID = 0x04b4,\r
++ USB_PRODUCT_ID = 0x8613\r
++ };\r
++\r
++ virtual int open();\r
++ virtual int close();\r
++\r
++ virtual int get_description(string&);\r
++\r
++ virtual void set_tdi(int);\r
++ virtual void set_tck(int);\r
++ virtual void set_tms(int);\r
++ virtual int get_tdo();\r
++\r
++protected:\r
++ char data;\r
++ struct usb_device *dev;\r
++ usb_dev_handle *handle;\r
++};\r
++\r
++#endif\r
+diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp
+--- xilprg-0.5/src/strtable.cpp 2006-08-23 07:38:34.000000000 +0200
++++ xilprg-new/src/strtable.cpp 2007-04-07 16:56:25.000000000 +0200
+@@ -137,7 +137,7 @@
+ //STR_CMD_CABLE\r
+ "cable\0" \r
+ "Sets programmer cable\0"\r
+- "cable {xil3 [ioaddr]|dusb}\0",\r
++ "cable {xil3 [ioaddr]|dusb|ousb}\0",\r
+ //STR_CMD_CHIPS\r
+ "chips\0"\r
+ "Prints supported devices\0" \r