URL
https://opencores.org/ocsvn/w11/w11/trunk
Subversion Repositories w11
Compare Revisions
- This comparison shows the changes necessary to convert path
/w11/tags/w11a_V0.61/tools/fx2
- from Rev 25 to Rev 26
- ↔ Reverse comparison
Rev 25 → Rev 26
/src/lib/delay.c
0,0 → 1,75
/* -*- c++ -*- */ |
/* $Id: delay.c 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* Delay routines |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
/* |
* Delay approximately 1 microsecond (including overhead in udelay). |
*/ |
static void |
udelay1 (void) _naked |
{ |
_asm ; lcall that got us here took 4 bus cycles |
ret ; 4 bus cycles |
_endasm; |
} |
|
/* |
* delay for approximately usecs microseconds |
*/ |
void |
udelay (unsigned char usecs) |
{ |
do { |
udelay1 (); |
} while (--usecs != 0); |
} |
|
|
/* |
* Delay approximately 1 millisecond. |
* We're running at 48 MHz, so we need 48,000 clock cycles. |
* |
* Note however, that each bus cycle takes 4 clock cycles (not obvious, |
* but explains the factor of 4 problem below). |
*/ |
static void |
mdelay1 (void) _naked |
{ |
_asm |
mov dptr,#(-1200 & 0xffff) |
002$: |
inc dptr ; 3 bus cycles |
mov a, dpl ; 2 bus cycles |
orl a, dph ; 2 bus cycles |
jnz 002$ ; 3 bus cycles |
|
ret |
_endasm; |
} |
|
void |
mdelay (unsigned int msecs) |
{ |
do { |
mdelay1 (); |
} while (--msecs != 0); |
} |
|
|
/src/lib/syncdelay.h
0,0 → 1,65
/* -*- c++ -*- */ |
/* $Id: syncdelay.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* Synchronization delay for FX2 access to specific registers |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#ifndef _SYNCDELAY_H_ |
#define _SYNCDELAY_H_ |
|
/* |
* Magic delay required between access to certain xdata registers (TRM page 15-106). |
* For our configuration, 48 MHz FX2 / 48 MHz IFCLK, we need three cycles. Each |
* NOP is a single cycle.... |
* |
* From TRM page 15-105: |
* |
* Under certain conditions, some read and write access to the FX2 registers must |
* be separated by a "synchronization delay". The delay is necessary only under the |
* following conditions: |
* |
* - between a write to any register in the 0xE600 - 0xE6FF range and a write to one |
* of the registers listed below. |
* |
* - between a write to one of the registers listed below and a read from any register |
* in the 0xE600 - 0xE6FF range. |
* |
* Registers which require a synchronization delay: |
* |
* FIFORESET FIFOPINPOLAR |
* INPKTEND EPxBCH:L |
* EPxFIFOPFH:L EPxAUTOINLENH:L |
* EPxFIFOCFG EPxGPIFFLGSEL |
* PINFLAGSAB PINFLAGSCD |
* EPxFIFOIE EPxFIFOIRQ |
* GPIFIE GPIFIRQ |
* UDMACRCH:L GPIFADRH:L |
* GPIFTRIG EPxGPIFTRIG |
* OUTPKTEND REVCTL |
* GPIFTCB3 GPIFTCB2 |
* GPIFTCB1 GPIFTCB0 |
*/ |
|
/* |
* FIXME ensure that the peep hole optimizer isn't screwing us |
*/ |
#define SYNCDELAY _asm nop; nop; nop; _endasm |
#define NOP _asm nop; _endasm |
|
|
#endif /* _SYNCDELAY_H_ */ |
/src/lib/usb_common.c
0,0 → 1,372
/* -*- c++ -*- */ |
/* $Id: usb_common.c 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* Common USB code for FX2 |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#include "usb_common.h" |
#include "fx2regs.h" |
#include "syncdelay.h" |
#include "fx2utils.h" |
#include "isr.h" |
#include "usb_descriptors.h" |
#include "usb_requests.h" |
|
extern xdata char str0[]; |
extern xdata char str1[]; |
extern xdata char str2[]; |
extern xdata char str3[]; |
extern xdata char str4[]; |
extern xdata char str5[]; |
|
volatile bit _usb_got_SUDAV; |
|
unsigned char _usb_config = 0; |
unsigned char _usb_alt_setting = 0; // FIXME really 1/interface |
|
xdata unsigned char *current_device_descr; |
xdata unsigned char *current_devqual_descr; |
xdata unsigned char *current_config_descr; |
xdata unsigned char *other_config_descr; |
|
static void |
setup_descriptors (void) |
{ |
if (USBCS & bmHSM){ // high speed mode |
current_device_descr = high_speed_device_descr; |
current_devqual_descr = high_speed_devqual_descr; |
current_config_descr = high_speed_config_descr; |
other_config_descr = full_speed_config_descr; |
} |
else { |
current_device_descr = full_speed_device_descr; |
current_devqual_descr = full_speed_devqual_descr; |
current_config_descr = full_speed_config_descr; |
other_config_descr = high_speed_config_descr; |
} |
|
// whack the type fields |
// FIXME, may not be required. |
// current_config_descr[1] = DT_CONFIG; |
// other_config_descr[1] = DT_OTHER_SPEED; |
} |
|
static void |
isr_SUDAV (void) interrupt |
{ |
clear_usb_irq (); |
_usb_got_SUDAV = 1; |
} |
|
static void |
isr_USBRESET (void) interrupt |
{ |
clear_usb_irq (); |
setup_descriptors (); |
} |
|
static void |
isr_HIGHSPEED (void) interrupt |
{ |
clear_usb_irq (); |
setup_descriptors (); |
} |
|
void |
usb_install_handlers (void) |
{ |
setup_descriptors (); // ensure that they're set before use |
|
hook_uv (UV_SUDAV, (unsigned short) isr_SUDAV); |
hook_uv (UV_USBRESET, (unsigned short) isr_USBRESET); |
hook_uv (UV_HIGHSPEED, (unsigned short) isr_HIGHSPEED); |
|
USBIE = bmSUDAV | bmURES | bmHSGRANT; |
} |
|
// On the FX2 the only plausible endpoints are 0, 1, 2, 4, 6, 8 |
// This doesn't check to see that they're enabled |
|
unsigned char |
plausible_endpoint (unsigned char ep) |
{ |
ep &= ~0x80; // ignore direction bit |
|
if (ep > 8) |
return 0; |
|
if (ep == 1) |
return 1; |
|
return (ep & 0x1) == 0; // must be even |
} |
|
// return pointer to control and status register for endpoint. |
// only called with plausible_endpoints |
|
xdata volatile unsigned char * |
epcs (unsigned char ep) |
{ |
if (ep == 0x01) // ep1 has different in and out CS regs |
return EP1OUTCS; |
|
if (ep == 0x81) |
return EP1INCS; |
|
ep &= ~0x80; // ignore direction bit |
|
if (ep == 0x00) // ep0 |
return EP0CS; |
|
return EP2CS + (ep >> 1); // 2, 4, 6, 8 are consecutive |
} |
|
void |
usb_handle_setup_packet (void) |
{ |
_usb_got_SUDAV = 0; |
|
// handle the standard requests... |
|
switch (bRequestType & bmRT_TYPE_MASK){ |
|
case bmRT_TYPE_CLASS: |
case bmRT_TYPE_RESERVED: |
fx2_stall_ep0 (); // we don't handle these. indicate error |
break; |
|
case bmRT_TYPE_VENDOR: |
// call the application code. |
// If it handles the command it returns non-zero |
|
if (!app_vendor_cmd ()) |
fx2_stall_ep0 (); |
break; |
|
case bmRT_TYPE_STD: |
// these are the standard requests... |
|
if ((bRequestType & bmRT_DIR_MASK) == bmRT_DIR_IN){ |
|
//////////////////////////////////// |
// handle the IN requests |
//////////////////////////////////// |
|
switch (bRequest){ |
|
case RQ_GET_CONFIG: |
EP0BUF[0] = _usb_config; // FIXME app should handle |
EP0BCH = 0; |
EP0BCL = 1; |
break; |
|
// -------------------------------- |
|
case RQ_GET_INTERFACE: |
EP0BUF[0] = _usb_alt_setting; // FIXME app should handle |
EP0BCH = 0; |
EP0BCL = 1; |
break; |
|
// -------------------------------- |
|
case RQ_GET_DESCR: |
switch (wValueH){ |
|
case DT_DEVICE: |
SUDPTRH = MSB (current_device_descr); |
SUDPTRL = LSB (current_device_descr); |
break; |
|
case DT_DEVQUAL: |
SUDPTRH = MSB (current_devqual_descr); |
SUDPTRL = LSB (current_devqual_descr); |
break; |
|
case DT_CONFIG: |
if (0 && wValueL != 1) // FIXME only a single configuration |
fx2_stall_ep0 (); |
else { |
SUDPTRH = MSB (current_config_descr); |
SUDPTRL = LSB (current_config_descr); |
} |
break; |
|
case DT_OTHER_SPEED: |
if (0 && wValueL != 1) // FIXME only a single configuration |
fx2_stall_ep0 (); |
else { |
SUDPTRH = MSB (other_config_descr); |
SUDPTRL = LSB (other_config_descr); |
} |
break; |
|
case DT_STRING: |
if (wValueL >= nstring_descriptors) |
fx2_stall_ep0 (); |
else { |
xdata char *p = string_descriptors[wValueL]; |
SUDPTRH = MSB (p); |
SUDPTRL = LSB (p); |
} |
break; |
|
default: |
fx2_stall_ep0 (); // invalid request |
break; |
} |
break; |
|
// -------------------------------- |
|
case RQ_GET_STATUS: |
switch (bRequestType & bmRT_RECIP_MASK){ |
case bmRT_RECIP_DEVICE: |
EP0BUF[0] = 0; |
EP0BUF[1] = 0; |
EP0BCH = 0; |
EP0BCL = 2; |
break; |
|
case bmRT_RECIP_INTERFACE: |
EP0BUF[0] = 0; |
EP0BUF[1] = 0; |
EP0BCH = 0; |
EP0BCL = 2; |
break; |
|
case bmRT_RECIP_ENDPOINT: |
if (plausible_endpoint (wIndexL)){ |
EP0BUF[0] = *epcs (wIndexL) & bmEPSTALL; |
EP0BUF[1] = 0; |
EP0BCH = 0; |
EP0BCL = 2; |
} |
else |
fx2_stall_ep0 (); |
break; |
|
default: |
fx2_stall_ep0 (); |
break; |
} |
break; |
|
// -------------------------------- |
|
case RQ_SYNCH_FRAME: // not implemented |
default: |
fx2_stall_ep0 (); |
break; |
} |
} |
|
else { |
|
//////////////////////////////////// |
// handle the OUT requests |
//////////////////////////////////// |
|
switch (bRequest){ |
|
case RQ_SET_CONFIG: |
_usb_config = wValueL; // FIXME app should handle |
break; |
|
case RQ_SET_INTERFACE: |
_usb_alt_setting = wValueL; // FIXME app should handle |
break; |
|
// -------------------------------- |
|
case RQ_CLEAR_FEATURE: |
switch (bRequestType & bmRT_RECIP_MASK){ |
|
case bmRT_RECIP_DEVICE: |
switch (wValueL){ |
case FS_DEV_REMOTE_WAKEUP: |
default: |
fx2_stall_ep0 (); |
} |
break; |
|
case bmRT_RECIP_ENDPOINT: |
if (wValueL == FS_ENDPOINT_HALT && plausible_endpoint (wIndexL)){ |
*epcs (wIndexL) &= ~bmEPSTALL; |
fx2_reset_data_toggle (wIndexL); |
} |
else |
fx2_stall_ep0 (); |
break; |
|
default: |
fx2_stall_ep0 (); |
break; |
} |
break; |
|
// -------------------------------- |
|
case RQ_SET_FEATURE: |
switch (bRequestType & bmRT_RECIP_MASK){ |
|
case bmRT_RECIP_DEVICE: |
switch (wValueL){ |
case FS_TEST_MODE: |
// hardware handles this after we complete SETUP phase handshake |
break; |
|
case FS_DEV_REMOTE_WAKEUP: |
default: |
fx2_stall_ep0 (); |
break; |
} |
} |
break; |
|
case bmRT_RECIP_ENDPOINT: |
switch (wValueL){ |
case FS_ENDPOINT_HALT: |
if (plausible_endpoint (wIndexL)) |
*epcs (wIndexL) |= bmEPSTALL; |
else |
fx2_stall_ep0 (); |
break; |
|
default: |
fx2_stall_ep0 (); |
break; |
} |
break; |
|
// -------------------------------- |
|
case RQ_SET_ADDRESS: // handled by fx2 hardware |
case RQ_SET_DESCR: // not implemented |
default: |
fx2_stall_ep0 (); |
} |
|
} |
break; |
|
} // bmRT_TYPE_MASK |
|
// ack handshake phase of device request |
EP0CS |= bmHSNAK; |
} |
/src/lib/isr.h
0,0 → 1,171
/* -*- c++ -*- */ |
/* $Id: isr.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* Interrupt handling for FX2 |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#ifndef _ISR_H_ |
#define _ISR_H_ |
|
/* |
* ---------------------------------------------------------------- |
* routines for managing interrupt services routines |
* ---------------------------------------------------------------- |
*/ |
|
/* |
* The FX2 has three discrete sets of interrupt vectors. |
* The first set is the standard 8051 vector (13 8-byte entries). |
* The second set is USB interrupt autovector (32 4-byte entries). |
* The third set is the FIFO/GPIF autovector (14 4-byte entries). |
* |
* Since all the code we're running in the FX2 is ram based, we |
* forego the typical "initialize the interrupt vectors at link time" |
* strategy, in favor of calls at run time that install the correct |
* pointers to functions. |
*/ |
|
/* |
* Standard Vector numbers |
*/ |
|
#define SV_INT_0 0x03 |
#define SV_TIMER_0 0x0b |
#define SV_INT_1 0x13 |
#define SV_TIMER_1 0x1b |
#define SV_SERIAL_0 0x23 |
#define SV_TIMER_2 0x2b |
#define SV_RESUME 0x33 |
#define SV_SERIAL_1 0x3b |
#define SV_INT_2 0x43 // (INT_2) points at USB autovector |
#define SV_I2C 0x4b |
#define SV_INT_4 0x53 // (INT_4) points at FIFO/GPIF autovector |
#define SV_INT_5 0x5b |
#define SV_INT_6 0x63 |
|
#define SV_MIN SV_INT_0 |
#define SV_MAX SV_INT_6 |
|
/* |
* USB Auto Vector numbers |
*/ |
|
#define UV_SUDAV 0x00 |
#define UV_SOF 0x04 |
#define UV_SUTOK 0x08 |
#define UV_SUSPEND 0x0c |
#define UV_USBRESET 0x10 |
#define UV_HIGHSPEED 0x14 |
#define UV_EP0ACK 0x18 |
#define UV_SPARE_1C 0x1c |
#define UV_EP0IN 0x20 |
#define UV_EP0OUT 0x24 |
#define UV_EP1IN 0x28 |
#define UV_EP1OUT 0x2c |
#define UV_EP2 0x30 |
#define UV_EP4 0x34 |
#define UV_EP6 0x38 |
#define UV_EP8 0x3c |
#define UV_IBN 0x40 |
#define UV_SPARE_44 0x44 |
#define UV_EP0PINGNAK 0x48 |
#define UV_EP1PINGNAK 0x4c |
#define UV_EP2PINGNAK 0x50 |
#define UV_EP4PINGNAK 0x54 |
#define UV_EP6PINGNAK 0x58 |
#define UV_EP8PINGNAK 0x5c |
#define UV_ERRLIMIT 0x60 |
#define UV_SPARE_64 0x64 |
#define UV_SPARE_68 0x68 |
#define UV_SPARE_6C 0x6c |
#define UV_EP2ISOERR 0x70 |
#define UV_EP4ISOERR 0x74 |
#define UV_EP6ISOERR 0x78 |
#define UV_EP8ISOERR 0x7c |
|
#define UV_MIN UV_SUDAV |
#define UV_MAX UV_EP8ISOERR |
|
/* |
* FIFO/GPIF Auto Vector numbers |
*/ |
|
#define FGV_EP2PF 0x80 |
#define FGV_EP4PF 0x84 |
#define FGV_EP6PF 0x88 |
#define FGV_EP8PF 0x8c |
#define FGV_EP2EF 0x90 |
#define FGV_EP4EF 0x94 |
#define FGV_EP6EF 0x98 |
#define FGV_EP8EF 0x9c |
#define FGV_EP2FF 0xa0 |
#define FGV_EP4FF 0xa4 |
#define FGV_EP6FF 0xa8 |
#define FGV_EP8FF 0xac |
#define FGV_GPIFDONE 0xb0 |
#define FGV_GPIFWF 0xb4 |
|
#define FGV_MIN FGV_EP2PF |
#define FGV_MAX FGV_GPIFWF |
|
|
/* |
* Hook standard interrupt vector. |
* |
* vector_number is from the SV_<foo> list above. |
* addr is the address of the interrupt service routine. |
*/ |
void hook_sv (unsigned char vector_number, unsigned short addr); |
|
/* |
* Hook usb interrupt vector. |
* |
* vector_number is from the UV_<foo> list above. |
* addr is the address of the interrupt service routine. |
*/ |
void hook_uv (unsigned char vector_number, unsigned short addr); |
|
/* |
* Hook fifo/gpif interrupt vector. |
* |
* vector_number is from the FGV_<foo> list above. |
* addr is the address of the interrupt service routine. |
*/ |
void hook_fgv (unsigned char vector_number, unsigned short addr); |
|
/* |
* One time call to enable autovectoring for both USB and FIFO/GPIF |
*/ |
void setup_autovectors (void); |
|
|
/* |
* Must be called in each usb interrupt handler |
*/ |
#define clear_usb_irq() \ |
EXIF &= ~bmEXIF_USBINT; \ |
INT2CLR = 0 |
|
/* |
* Must be calledin each fifo/gpif interrupt handler |
*/ |
#define clear_fifo_gpif_irq() \ |
EXIF &= ~bmEXIF_IE4; \ |
INT4CLR = 0 |
|
#endif /* _ISR_H_ */ |
/src/lib/delay.h
0,0 → 1,37
/* -*- c++ -*- */ |
/* $Id: delay.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* Delay routines |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#ifndef _DELAY_H_ |
#define _DELAY_H_ |
|
/* |
* delay for approximately usecs microseconds |
* Note limit of 255 usecs. |
*/ |
void udelay (unsigned char usecs); |
|
/* |
* delay for approximately msecs milliseconds |
*/ |
void mdelay (unsigned short msecs); |
|
|
#endif /* _DELAY_H_ */ |
/src/lib/usb_common.h
0,0 → 1,51
/* -*- c++ -*- */ |
/* $Id: usb_common.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* Common USB code for FX2 |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#ifndef _USB_COMMON_H_ |
#define _USB_COMMON_H_ |
|
#define bRequestType SETUPDAT[0] |
#define bRequest SETUPDAT[1] |
#define wValueL SETUPDAT[2] |
#define wValueH SETUPDAT[3] |
#define wIndexL SETUPDAT[4] |
#define wIndexH SETUPDAT[5] |
#define wLengthL SETUPDAT[6] |
#define wLengthH SETUPDAT[7] |
|
#define MSB(x) (((unsigned short) x) >> 8) |
#define LSB(x) (((unsigned short) x) & 0xff) |
|
extern volatile bit _usb_got_SUDAV; |
|
// Provided by user application to report device status. |
// returns non-zero if it handled the command. |
unsigned char app_get_status (void); |
// Provided by user application to handle VENDOR commands. |
// returns non-zero if it handled the command. |
unsigned char app_vendor_cmd (void); |
|
void usb_install_handlers (void); |
void usb_handle_setup_packet (void); |
|
#define usb_setup_packet_avail() _usb_got_SUDAV |
|
#endif /* _USB_COMMON_H_ */ |
/src/lib/i2c.c
0,0 → 1,122
/* -*- c++ -*- */ |
/* $Id: i2c.c 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* I2C read/write functions for FX2 |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#include "i2c.h" |
#include "fx2regs.h" |
#include <string.h> |
|
|
// issue a stop bus cycle and wait for completion |
|
|
// returns non-zero if successful, else 0 |
unsigned char |
i2c_read (unsigned char addr, xdata unsigned char *buf, unsigned char len) |
{ |
volatile unsigned char junk; |
|
if (len == 0) // reading zero bytes always works |
return 1; |
|
while (I2CS & bmSTOP) // wait for stop to clear |
; |
|
I2CS = bmSTART; |
I2DAT = (addr << 1) | 1; // write address and direction (1's the read bit) |
|
while ((I2CS & bmDONE) == 0) |
; |
|
if ((I2CS & bmBERR) || (I2CS & bmACK) == 0) // no device answered... |
goto fail; |
|
if (len == 1) |
I2CS |= bmLASTRD; |
|
junk = I2DAT; // trigger the first read cycle |
|
while (--len != 0){ |
while ((I2CS & bmDONE) == 0) |
; |
|
if (I2CS & bmBERR) |
goto fail; |
|
if (len == 1) |
I2CS |= bmLASTRD; |
|
*buf++ = I2DAT; // get data, trigger another read |
} |
|
// wait for final byte |
|
while ((I2CS & bmDONE) == 0) |
; |
|
if (I2CS & bmBERR) |
goto fail; |
|
I2CS |= bmSTOP; |
*buf = I2DAT; |
|
return 1; |
|
fail: |
I2CS |= bmSTOP; |
return 0; |
} |
|
|
|
// returns non-zero if successful, else 0 |
unsigned char |
i2c_write (unsigned char addr, xdata const unsigned char *buf, unsigned char len) |
{ |
while (I2CS & bmSTOP) // wait for stop to clear |
; |
|
I2CS = bmSTART; |
I2DAT = (addr << 1) | 0; // write address and direction (0's the write bit) |
|
while ((I2CS & bmDONE) == 0) |
; |
|
if ((I2CS & bmBERR) || (I2CS & bmACK) == 0) // no device answered... |
goto fail; |
|
while (len > 0){ |
I2DAT = *buf++; |
len--; |
|
while ((I2CS & bmDONE) == 0) |
; |
|
if ((I2CS & bmBERR) || (I2CS & bmACK) == 0) // no device answered... |
goto fail; |
} |
|
I2CS |= bmSTOP; |
return 1; |
|
fail: |
I2CS |= bmSTOP; |
return 0; |
} |
/src/lib/usb_descriptors.h
0,0 → 1,39
/* -*- c++ -*- */ |
/* $Id: usb_descriptors.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* USB descriptor references |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
extern xdata const char high_speed_device_descr[]; |
extern xdata const char high_speed_devqual_descr[]; |
extern xdata const char high_speed_config_descr[]; |
|
extern xdata const char full_speed_device_descr[]; |
extern xdata const char full_speed_devqual_descr[]; |
extern xdata const char full_speed_config_descr[]; |
|
extern xdata unsigned char nstring_descriptors; |
extern xdata char * xdata string_descriptors[]; |
|
/* |
* We patch these locations with info read from the usrp config eeprom |
*/ |
extern xdata char usb_desc_hw_rev_binary_patch_location_0[]; |
extern xdata char usb_desc_hw_rev_binary_patch_location_1[]; |
extern xdata char usb_desc_hw_rev_ascii_patch_location_0[]; |
extern xdata char usb_desc_serial_number_ascii[]; |
/src/lib/timer.c
0,0 → 1,48
/* -*- c++ -*- */ |
/* $Id: timer.c 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* Timer handling for FX2 |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#include "timer.h" |
#include "fx2regs.h" |
#include "isr.h" |
|
/* |
* Arrange to have isr_tick_handler called at 100 Hz. |
* |
* The cpu clock is running at 48e6. The input to the timer |
* is 48e6 / 12 = 4e6. |
* |
* We arrange to have the timer overflow every 40000 clocks == 100 Hz |
*/ |
|
#define RELOAD_VALUE ((unsigned short) -40000) |
|
void |
hook_timer_tick (unsigned short isr_tick_handler) |
{ |
ET2 = 0; // disable timer 2 interrupts |
hook_sv (SV_TIMER_2, isr_tick_handler); |
|
RCAP2H = RELOAD_VALUE >> 8; // setup the auto reload value |
RCAP2L = RELOAD_VALUE & 0xFF; |
|
T2CON = 0x04; // interrupt on overflow; reload; run |
ET2 = 1; // enable timer 2 interrupts |
} |
/src/lib/fx2utils.c
0,0 → 1,53
/* -*- c++ -*- */ |
/* $Id: fx2utils.c 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* FX2 specific subroutines |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#include "fx2utils.h" |
#include "fx2regs.h" |
#include "delay.h" |
|
void |
fx2_stall_ep0 (void) |
{ |
EP0CS |= bmEPSTALL; |
} |
|
void |
fx2_reset_data_toggle (unsigned char ep) |
{ |
TOGCTL = ((ep & 0x80) >> 3 | (ep & 0x0f)); |
TOGCTL |= bmRESETTOGGLE; |
} |
|
void |
fx2_renumerate (void) |
{ |
USBCS |= bmDISCON | bmRENUM; |
|
// mdelay (1500); // FIXME why 1.5 seconds? |
mdelay (250); // FIXME why 1.5 seconds? |
|
USBIRQ = 0xff; // clear any pending USB irqs... |
EPIRQ = 0xff; // they're from before the renumeration |
|
EXIF &= ~bmEXIF_USBINT; |
|
USBCS &= ~bmDISCON; // reconnect USB |
} |
/src/lib/i2c.h
0,0 → 1,31
/* -*- c++ -*- */ |
/* $Id: i2c.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* I2C read/write functions for FX2 |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#ifndef _I2C_H_ |
#define _I2C_H_ |
|
// returns non-zero if successful, else 0 |
unsigned char i2c_read (unsigned char addr, xdata unsigned char *buf, unsigned char len); |
|
// returns non-zero if successful, else 0 |
unsigned char i2c_write (unsigned char addr, xdata const unsigned char *buf, unsigned char len); |
|
#endif /* _I2C_H_ */ |
/src/lib/fx2regs.h
0,0 → 1,715
/* -*- c++ -*- */ |
/* $Id: fx2regs.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* FX2 register definitions |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
/* |
//----------------------------------------------------------------------------- |
// File: FX2regs.h |
// Contents: EZ-USB FX2 register declarations and bit mask definitions. |
// |
// $Archive: /USB/Target/Inc/fx2regs.h $ |
// $Date: 2006-09-13 14:30:04 -0700 (Wed, 13 Sep 2006) $ |
// $Revision: 3534 $ |
// |
// |
// Copyright (c) 2000 Cypress Semiconductor, All rights reserved |
//----------------------------------------------------------------------------- |
*/ |
|
|
#ifndef FX2REGS_H /* Header Sentry */ |
#define FX2REGS_H |
|
#define ALLOCATE_EXTERN // required for "right thing to happen" with fx2regs.h |
|
/* |
//----------------------------------------------------------------------------- |
// FX2 Related Register Assignments |
//----------------------------------------------------------------------------- |
|
// The Ez-USB FX2 registers are defined here. We use FX2regs.h for register |
// address allocation by using "#define ALLOCATE_EXTERN". |
// When using "#define ALLOCATE_EXTERN", you get (for instance): |
// xdata volatile BYTE OUT7BUF[64] _at_ 0x7B40; |
// Such lines are created from FX2.h by using the preprocessor. |
// Incidently, these lines will not generate any space in the resulting hex |
// file; they just bind the symbols to the addresses for compilation. |
// You just need to put "#define ALLOCATE_EXTERN" in your main program file; |
// i.e. fw.c or a stand-alone C source file. |
// Without "#define ALLOCATE_EXTERN", you just get the external reference: |
// extern xdata volatile BYTE OUT7BUF[64] ;// 0x7B40; |
// This uses the concatenation operator "##" to insert a comment "//" |
// to cut off the end of the line, "_at_ 0x7B40;", which is not wanted. |
*/ |
|
|
#ifdef ALLOCATE_EXTERN |
#define EXTERN |
#define _AT_(a) at a |
#else |
#define EXTERN extern |
#define _AT_ ;/ ## / |
#endif |
|
typedef unsigned char BYTE; |
typedef unsigned short WORD; |
|
EXTERN xdata _AT_(0xE400) volatile BYTE GPIF_WAVE_DATA[128]; |
EXTERN xdata _AT_(0xE480) volatile BYTE RES_WAVEDATA_END ; |
|
// General Configuration |
|
EXTERN xdata _AT_(0xE600) volatile BYTE CPUCS ; // Control & Status |
EXTERN xdata _AT_(0xE601) volatile BYTE IFCONFIG ; // Interface Configuration |
EXTERN xdata _AT_(0xE602) volatile BYTE PINFLAGSAB ; // FIFO FLAGA and FLAGB Assignments |
EXTERN xdata _AT_(0xE603) volatile BYTE PINFLAGSCD ; // FIFO FLAGC and FLAGD Assignments |
EXTERN xdata _AT_(0xE604) volatile BYTE FIFORESET ; // Restore FIFOS to default state |
EXTERN xdata _AT_(0xE605) volatile BYTE BREAKPT ; // Breakpoint |
EXTERN xdata _AT_(0xE606) volatile BYTE BPADDRH ; // Breakpoint Address H |
EXTERN xdata _AT_(0xE607) volatile BYTE BPADDRL ; // Breakpoint Address L |
EXTERN xdata _AT_(0xE608) volatile BYTE UART230 ; // 230 Kbaud clock for T0,T1,T2 |
EXTERN xdata _AT_(0xE609) volatile BYTE FIFOPINPOLAR ; // FIFO polarities |
EXTERN xdata _AT_(0xE60A) volatile BYTE REVID ; // Chip Revision |
EXTERN xdata _AT_(0xE60B) volatile BYTE REVCTL ; // Chip Revision Control |
|
// Endpoint Configuration |
|
EXTERN xdata _AT_(0xE610) volatile BYTE EP1OUTCFG ; // Endpoint 1-OUT Configuration |
EXTERN xdata _AT_(0xE611) volatile BYTE EP1INCFG ; // Endpoint 1-IN Configuration |
EXTERN xdata _AT_(0xE612) volatile BYTE EP2CFG ; // Endpoint 2 Configuration |
EXTERN xdata _AT_(0xE613) volatile BYTE EP4CFG ; // Endpoint 4 Configuration |
EXTERN xdata _AT_(0xE614) volatile BYTE EP6CFG ; // Endpoint 6 Configuration |
EXTERN xdata _AT_(0xE615) volatile BYTE EP8CFG ; // Endpoint 8 Configuration |
EXTERN xdata _AT_(0xE618) volatile BYTE EP2FIFOCFG ; // Endpoint 2 FIFO configuration |
EXTERN xdata _AT_(0xE619) volatile BYTE EP4FIFOCFG ; // Endpoint 4 FIFO configuration |
EXTERN xdata _AT_(0xE61A) volatile BYTE EP6FIFOCFG ; // Endpoint 6 FIFO configuration |
EXTERN xdata _AT_(0xE61B) volatile BYTE EP8FIFOCFG ; // Endpoint 8 FIFO configuration |
EXTERN xdata _AT_(0xE620) volatile BYTE EP2AUTOINLENH ; // Endpoint 2 Packet Length H (IN only) |
EXTERN xdata _AT_(0xE621) volatile BYTE EP2AUTOINLENL ; // Endpoint 2 Packet Length L (IN only) |
EXTERN xdata _AT_(0xE622) volatile BYTE EP4AUTOINLENH ; // Endpoint 4 Packet Length H (IN only) |
EXTERN xdata _AT_(0xE623) volatile BYTE EP4AUTOINLENL ; // Endpoint 4 Packet Length L (IN only) |
EXTERN xdata _AT_(0xE624) volatile BYTE EP6AUTOINLENH ; // Endpoint 6 Packet Length H (IN only) |
EXTERN xdata _AT_(0xE625) volatile BYTE EP6AUTOINLENL ; // Endpoint 6 Packet Length L (IN only) |
EXTERN xdata _AT_(0xE626) volatile BYTE EP8AUTOINLENH ; // Endpoint 8 Packet Length H (IN only) |
EXTERN xdata _AT_(0xE627) volatile BYTE EP8AUTOINLENL ; // Endpoint 8 Packet Length L (IN only) |
EXTERN xdata _AT_(0xE630) volatile BYTE EP2FIFOPFH ; // EP2 Programmable Flag trigger H |
EXTERN xdata _AT_(0xE631) volatile BYTE EP2FIFOPFL ; // EP2 Programmable Flag trigger L |
EXTERN xdata _AT_(0xE632) volatile BYTE EP4FIFOPFH ; // EP4 Programmable Flag trigger H |
EXTERN xdata _AT_(0xE633) volatile BYTE EP4FIFOPFL ; // EP4 Programmable Flag trigger L |
EXTERN xdata _AT_(0xE634) volatile BYTE EP6FIFOPFH ; // EP6 Programmable Flag trigger H |
EXTERN xdata _AT_(0xE635) volatile BYTE EP6FIFOPFL ; // EP6 Programmable Flag trigger L |
EXTERN xdata _AT_(0xE636) volatile BYTE EP8FIFOPFH ; // EP8 Programmable Flag trigger H |
EXTERN xdata _AT_(0xE637) volatile BYTE EP8FIFOPFL ; // EP8 Programmable Flag trigger L |
EXTERN xdata _AT_(0xE640) volatile BYTE EP2ISOINPKTS ; // EP2 (if ISO) IN Packets per frame (1-3) |
EXTERN xdata _AT_(0xE641) volatile BYTE EP4ISOINPKTS ; // EP4 (if ISO) IN Packets per frame (1-3) |
EXTERN xdata _AT_(0xE642) volatile BYTE EP6ISOINPKTS ; // EP6 (if ISO) IN Packets per frame (1-3) |
EXTERN xdata _AT_(0xE643) volatile BYTE EP8ISOINPKTS ; // EP8 (if ISO) IN Packets per frame (1-3) |
EXTERN xdata _AT_(0xE648) volatile BYTE INPKTEND ; // Force IN Packet End |
EXTERN xdata _AT_(0xE649) volatile BYTE OUTPKTEND ; // Force OUT Packet End |
|
// Interrupts |
|
EXTERN xdata _AT_(0xE650) volatile BYTE EP2FIFOIE ; // Endpoint 2 Flag Interrupt Enable |
EXTERN xdata _AT_(0xE651) volatile BYTE EP2FIFOIRQ ; // Endpoint 2 Flag Interrupt Request |
EXTERN xdata _AT_(0xE652) volatile BYTE EP4FIFOIE ; // Endpoint 4 Flag Interrupt Enable |
EXTERN xdata _AT_(0xE653) volatile BYTE EP4FIFOIRQ ; // Endpoint 4 Flag Interrupt Request |
EXTERN xdata _AT_(0xE654) volatile BYTE EP6FIFOIE ; // Endpoint 6 Flag Interrupt Enable |
EXTERN xdata _AT_(0xE655) volatile BYTE EP6FIFOIRQ ; // Endpoint 6 Flag Interrupt Request |
EXTERN xdata _AT_(0xE656) volatile BYTE EP8FIFOIE ; // Endpoint 8 Flag Interrupt Enable |
EXTERN xdata _AT_(0xE657) volatile BYTE EP8FIFOIRQ ; // Endpoint 8 Flag Interrupt Request |
EXTERN xdata _AT_(0xE658) volatile BYTE IBNIE ; // IN-BULK-NAK Interrupt Enable |
EXTERN xdata _AT_(0xE659) volatile BYTE IBNIRQ ; // IN-BULK-NAK interrupt Request |
EXTERN xdata _AT_(0xE65A) volatile BYTE NAKIE ; // Endpoint Ping NAK interrupt Enable |
EXTERN xdata _AT_(0xE65B) volatile BYTE NAKIRQ ; // Endpoint Ping NAK interrupt Request |
EXTERN xdata _AT_(0xE65C) volatile BYTE USBIE ; // USB Int Enables |
EXTERN xdata _AT_(0xE65D) volatile BYTE USBIRQ ; // USB Interrupt Requests |
EXTERN xdata _AT_(0xE65E) volatile BYTE EPIE ; // Endpoint Interrupt Enables |
EXTERN xdata _AT_(0xE65F) volatile BYTE EPIRQ ; // Endpoint Interrupt Requests |
EXTERN xdata _AT_(0xE660) volatile BYTE GPIFIE ; // GPIF Interrupt Enable |
EXTERN xdata _AT_(0xE661) volatile BYTE GPIFIRQ ; // GPIF Interrupt Request |
EXTERN xdata _AT_(0xE662) volatile BYTE USBERRIE ; // USB Error Interrupt Enables |
EXTERN xdata _AT_(0xE663) volatile BYTE USBERRIRQ ; // USB Error Interrupt Requests |
EXTERN xdata _AT_(0xE664) volatile BYTE ERRCNTLIM ; // USB Error counter and limit |
EXTERN xdata _AT_(0xE665) volatile BYTE CLRERRCNT ; // Clear Error Counter EC[3..0] |
EXTERN xdata _AT_(0xE666) volatile BYTE INT2IVEC ; // Interupt 2 (USB) Autovector |
EXTERN xdata _AT_(0xE667) volatile BYTE INT4IVEC ; // Interupt 4 (FIFOS & GPIF) Autovector |
EXTERN xdata _AT_(0xE668) volatile BYTE INTSETUP ; // Interrupt 2&4 Setup |
|
// Input/Output |
|
EXTERN xdata _AT_(0xE670) volatile BYTE PORTACFG ; // I/O PORTA Alternate Configuration |
EXTERN xdata _AT_(0xE671) volatile BYTE PORTCCFG ; // I/O PORTC Alternate Configuration |
EXTERN xdata _AT_(0xE672) volatile BYTE PORTECFG ; // I/O PORTE Alternate Configuration |
EXTERN xdata _AT_(0xE678) volatile BYTE I2CS ; // Control & Status |
EXTERN xdata _AT_(0xE679) volatile BYTE I2DAT ; // Data |
EXTERN xdata _AT_(0xE67A) volatile BYTE I2CTL ; // I2C Control |
EXTERN xdata _AT_(0xE67B) volatile BYTE XAUTODAT1 ; // Autoptr1 MOVX access |
EXTERN xdata _AT_(0xE67C) volatile BYTE XAUTODAT2 ; // Autoptr2 MOVX access |
|
#define EXTAUTODAT1 XAUTODAT1 |
#define EXTAUTODAT2 XAUTODAT2 |
|
// USB Control |
|
EXTERN xdata _AT_(0xE680) volatile BYTE USBCS ; // USB Control & Status |
EXTERN xdata _AT_(0xE681) volatile BYTE SUSPEND ; // Put chip into suspend |
EXTERN xdata _AT_(0xE682) volatile BYTE WAKEUPCS ; // Wakeup source and polarity |
EXTERN xdata _AT_(0xE683) volatile BYTE TOGCTL ; // Toggle Control |
EXTERN xdata _AT_(0xE684) volatile BYTE USBFRAMEH ; // USB Frame count H |
EXTERN xdata _AT_(0xE685) volatile BYTE USBFRAMEL ; // USB Frame count L |
EXTERN xdata _AT_(0xE686) volatile BYTE MICROFRAME ; // Microframe count, 0-7 |
EXTERN xdata _AT_(0xE687) volatile BYTE FNADDR ; // USB Function address |
|
// Endpoints |
|
EXTERN xdata _AT_(0xE68A) volatile BYTE EP0BCH ; // Endpoint 0 Byte Count H |
EXTERN xdata _AT_(0xE68B) volatile BYTE EP0BCL ; // Endpoint 0 Byte Count L |
EXTERN xdata _AT_(0xE68D) volatile BYTE EP1OUTBC ; // Endpoint 1 OUT Byte Count |
EXTERN xdata _AT_(0xE68F) volatile BYTE EP1INBC ; // Endpoint 1 IN Byte Count |
EXTERN xdata _AT_(0xE690) volatile BYTE EP2BCH ; // Endpoint 2 Byte Count H |
EXTERN xdata _AT_(0xE691) volatile BYTE EP2BCL ; // Endpoint 2 Byte Count L |
EXTERN xdata _AT_(0xE694) volatile BYTE EP4BCH ; // Endpoint 4 Byte Count H |
EXTERN xdata _AT_(0xE695) volatile BYTE EP4BCL ; // Endpoint 4 Byte Count L |
EXTERN xdata _AT_(0xE698) volatile BYTE EP6BCH ; // Endpoint 6 Byte Count H |
EXTERN xdata _AT_(0xE699) volatile BYTE EP6BCL ; // Endpoint 6 Byte Count L |
EXTERN xdata _AT_(0xE69C) volatile BYTE EP8BCH ; // Endpoint 8 Byte Count H |
EXTERN xdata _AT_(0xE69D) volatile BYTE EP8BCL ; // Endpoint 8 Byte Count L |
EXTERN xdata _AT_(0xE6A0) volatile BYTE EP0CS ; // Endpoint Control and Status |
EXTERN xdata _AT_(0xE6A1) volatile BYTE EP1OUTCS ; // Endpoint 1 OUT Control and Status |
EXTERN xdata _AT_(0xE6A2) volatile BYTE EP1INCS ; // Endpoint 1 IN Control and Status |
EXTERN xdata _AT_(0xE6A3) volatile BYTE EP2CS ; // Endpoint 2 Control and Status |
EXTERN xdata _AT_(0xE6A4) volatile BYTE EP4CS ; // Endpoint 4 Control and Status |
EXTERN xdata _AT_(0xE6A5) volatile BYTE EP6CS ; // Endpoint 6 Control and Status |
EXTERN xdata _AT_(0xE6A6) volatile BYTE EP8CS ; // Endpoint 8 Control and Status |
EXTERN xdata _AT_(0xE6A7) volatile BYTE EP2FIFOFLGS ; // Endpoint 2 Flags |
EXTERN xdata _AT_(0xE6A8) volatile BYTE EP4FIFOFLGS ; // Endpoint 4 Flags |
EXTERN xdata _AT_(0xE6A9) volatile BYTE EP6FIFOFLGS ; // Endpoint 6 Flags |
EXTERN xdata _AT_(0xE6AA) volatile BYTE EP8FIFOFLGS ; // Endpoint 8 Flags |
EXTERN xdata _AT_(0xE6AB) volatile BYTE EP2FIFOBCH ; // EP2 FIFO total byte count H |
EXTERN xdata _AT_(0xE6AC) volatile BYTE EP2FIFOBCL ; // EP2 FIFO total byte count L |
EXTERN xdata _AT_(0xE6AD) volatile BYTE EP4FIFOBCH ; // EP4 FIFO total byte count H |
EXTERN xdata _AT_(0xE6AE) volatile BYTE EP4FIFOBCL ; // EP4 FIFO total byte count L |
EXTERN xdata _AT_(0xE6AF) volatile BYTE EP6FIFOBCH ; // EP6 FIFO total byte count H |
EXTERN xdata _AT_(0xE6B0) volatile BYTE EP6FIFOBCL ; // EP6 FIFO total byte count L |
EXTERN xdata _AT_(0xE6B1) volatile BYTE EP8FIFOBCH ; // EP8 FIFO total byte count H |
EXTERN xdata _AT_(0xE6B2) volatile BYTE EP8FIFOBCL ; // EP8 FIFO total byte count L |
EXTERN xdata _AT_(0xE6B3) volatile BYTE SUDPTRH ; // Setup Data Pointer high address byte |
EXTERN xdata _AT_(0xE6B4) volatile BYTE SUDPTRL ; // Setup Data Pointer low address byte |
EXTERN xdata _AT_(0xE6B5) volatile BYTE SUDPTRCTL ; // Setup Data Pointer Auto Mode |
EXTERN xdata _AT_(0xE6B8) volatile BYTE SETUPDAT[8] ; // 8 bytes of SETUP data |
|
// GPIF |
|
EXTERN xdata _AT_(0xE6C0) volatile BYTE GPIFWFSELECT ; // Waveform Selector |
EXTERN xdata _AT_(0xE6C1) volatile BYTE GPIFIDLECS ; // GPIF Done, GPIF IDLE drive mode |
EXTERN xdata _AT_(0xE6C2) volatile BYTE GPIFIDLECTL ; // Inactive Bus, CTL states |
EXTERN xdata _AT_(0xE6C3) volatile BYTE GPIFCTLCFG ; // CTL OUT pin drive |
EXTERN xdata _AT_(0xE6C4) volatile BYTE GPIFADRH ; // GPIF Address H |
EXTERN xdata _AT_(0xE6C5) volatile BYTE GPIFADRL ; // GPIF Address L |
|
EXTERN xdata _AT_(0xE6CE) volatile BYTE GPIFTCB3 ; // GPIF Transaction Count Byte 3 |
EXTERN xdata _AT_(0xE6CF) volatile BYTE GPIFTCB2 ; // GPIF Transaction Count Byte 2 |
EXTERN xdata _AT_(0xE6D0) volatile BYTE GPIFTCB1 ; // GPIF Transaction Count Byte 1 |
EXTERN xdata _AT_(0xE6D1) volatile BYTE GPIFTCB0 ; // GPIF Transaction Count Byte 0 |
|
#define EP2GPIFTCH GPIFTCB1 // these are here for backwards compatibility |
#define EP2GPIFTCL GPIFTCB0 // before REVE silicon (ie. REVB and REVD) |
#define EP4GPIFTCH GPIFTCB1 // these are here for backwards compatibility |
#define EP4GPIFTCL GPIFTCB0 // before REVE silicon (ie. REVB and REVD) |
#define EP6GPIFTCH GPIFTCB1 // these are here for backwards compatibility |
#define EP6GPIFTCL GPIFTCB0 // before REVE silicon (ie. REVB and REVD) |
#define EP8GPIFTCH GPIFTCB1 // these are here for backwards compatibility |
#define EP8GPIFTCL GPIFTCB0 // before REVE silicon (ie. REVB and REVD) |
|
// EXTERN xdata volatile BYTE EP2GPIFTCH _AT_ 0xE6D0; // EP2 GPIF Transaction Count High |
// EXTERN xdata volatile BYTE EP2GPIFTCL _AT_ 0xE6D1; // EP2 GPIF Transaction Count Low |
EXTERN xdata _AT_(0xE6D2) volatile BYTE EP2GPIFFLGSEL ; // EP2 GPIF Flag select |
EXTERN xdata _AT_(0xE6D3) volatile BYTE EP2GPIFPFSTOP ; // Stop GPIF EP2 transaction on prog. flag |
EXTERN xdata _AT_(0xE6D4) volatile BYTE EP2GPIFTRIG ; // EP2 FIFO Trigger |
// EXTERN xdata volatile BYTE EP4GPIFTCH _AT_ 0xE6D8; // EP4 GPIF Transaction Count High |
// EXTERN xdata volatile BYTE EP4GPIFTCL _AT_ 0xE6D9; // EP4 GPIF Transactionr Count Low |
EXTERN xdata _AT_(0xE6DA) volatile BYTE EP4GPIFFLGSEL ; // EP4 GPIF Flag select |
EXTERN xdata _AT_(0xE6DB) volatile BYTE EP4GPIFPFSTOP ; // Stop GPIF EP4 transaction on prog. flag |
EXTERN xdata _AT_(0xE6DC) volatile BYTE EP4GPIFTRIG ; // EP4 FIFO Trigger |
// EXTERN xdata volatile BYTE EP6GPIFTCH _AT_ 0xE6E0; // EP6 GPIF Transaction Count High |
// EXTERN xdata volatile BYTE EP6GPIFTCL _AT_ 0xE6E1; // EP6 GPIF Transaction Count Low |
EXTERN xdata _AT_(0xE6E2) volatile BYTE EP6GPIFFLGSEL ; // EP6 GPIF Flag select |
EXTERN xdata _AT_(0xE6E3) volatile BYTE EP6GPIFPFSTOP ; // Stop GPIF EP6 transaction on prog. flag |
EXTERN xdata _AT_(0xE6E4) volatile BYTE EP6GPIFTRIG ; // EP6 FIFO Trigger |
// EXTERN xdata volatile BYTE EP8GPIFTCH _AT_ 0xE6E8; // EP8 GPIF Transaction Count High |
// EXTERN xdata volatile BYTE EP8GPIFTCL _AT_ 0xE6E9; // EP8GPIF Transaction Count Low |
EXTERN xdata _AT_(0xE6EA) volatile BYTE EP8GPIFFLGSEL ; // EP8 GPIF Flag select |
EXTERN xdata _AT_(0xE6EB) volatile BYTE EP8GPIFPFSTOP ; // Stop GPIF EP8 transaction on prog. flag |
EXTERN xdata _AT_(0xE6EC) volatile BYTE EP8GPIFTRIG ; // EP8 FIFO Trigger |
EXTERN xdata _AT_(0xE6F0) volatile BYTE XGPIFSGLDATH ; // GPIF Data H (16-bit mode only) |
EXTERN xdata _AT_(0xE6F1) volatile BYTE XGPIFSGLDATLX ; // Read/Write GPIF Data L & trigger transac |
EXTERN xdata _AT_(0xE6F2) volatile BYTE XGPIFSGLDATLNOX ; // Read GPIF Data L, no transac trigger |
EXTERN xdata _AT_(0xE6F3) volatile BYTE GPIFREADYCFG ; // Internal RDY,Sync/Async, RDY5CFG |
EXTERN xdata _AT_(0xE6F4) volatile BYTE GPIFREADYSTAT ; // RDY pin states |
EXTERN xdata _AT_(0xE6F5) volatile BYTE GPIFABORT ; // Abort GPIF cycles |
|
// UDMA |
|
EXTERN xdata _AT_(0xE6C6) volatile BYTE FLOWSTATE ; //Defines GPIF flow state |
EXTERN xdata _AT_(0xE6C7) volatile BYTE FLOWLOGIC ; //Defines flow/hold decision criteria |
EXTERN xdata _AT_(0xE6C8) volatile BYTE FLOWEQ0CTL ; //CTL states during active flow state |
EXTERN xdata _AT_(0xE6C9) volatile BYTE FLOWEQ1CTL ; //CTL states during hold flow state |
EXTERN xdata _AT_(0xE6CA) volatile BYTE FLOWHOLDOFF ; |
EXTERN xdata _AT_(0xE6CB) volatile BYTE FLOWSTB ; //CTL/RDY Signal to use as master data strobe |
EXTERN xdata _AT_(0xE6CC) volatile BYTE FLOWSTBEDGE ; //Defines active master strobe edge |
EXTERN xdata _AT_(0xE6CD) volatile BYTE FLOWSTBHPERIOD ; //Half Period of output master strobe |
EXTERN xdata _AT_(0xE60C) volatile BYTE GPIFHOLDAMOUNT ; //Data delay shift |
EXTERN xdata _AT_(0xE67D) volatile BYTE UDMACRCH ; //CRC Upper byte |
EXTERN xdata _AT_(0xE67E) volatile BYTE UDMACRCL ; //CRC Lower byte |
EXTERN xdata _AT_(0xE67F) volatile BYTE UDMACRCQUAL ; //UDMA In only, host terminated use only |
|
|
// Debug/Test |
|
EXTERN xdata _AT_(0xE6F8) volatile BYTE DBUG ; // Debug |
EXTERN xdata _AT_(0xE6F9) volatile BYTE TESTCFG ; // Test configuration |
EXTERN xdata _AT_(0xE6FA) volatile BYTE USBTEST ; // USB Test Modes |
EXTERN xdata _AT_(0xE6FB) volatile BYTE CT1 ; // Chirp Test--Override |
EXTERN xdata _AT_(0xE6FC) volatile BYTE CT2 ; // Chirp Test--FSM |
EXTERN xdata _AT_(0xE6FD) volatile BYTE CT3 ; // Chirp Test--Control Signals |
EXTERN xdata _AT_(0xE6FE) volatile BYTE CT4 ; // Chirp Test--Inputs |
|
// Endpoint Buffers |
|
EXTERN xdata _AT_(0xE740) volatile BYTE EP0BUF[64] ; // EP0 IN-OUT buffer |
EXTERN xdata _AT_(0xE780) volatile BYTE EP1OUTBUF[64] ; // EP1-OUT buffer |
EXTERN xdata _AT_(0xE7C0) volatile BYTE EP1INBUF[64] ; // EP1-IN buffer |
EXTERN xdata _AT_(0xF000) volatile BYTE EP2FIFOBUF[1024] ; // 512/1024-byte EP2 buffer (IN or OUT) |
EXTERN xdata _AT_(0xF400) volatile BYTE EP4FIFOBUF[1024] ; // 512 byte EP4 buffer (IN or OUT) |
EXTERN xdata _AT_(0xF800) volatile BYTE EP6FIFOBUF[1024] ; // 512/1024-byte EP6 buffer (IN or OUT) |
EXTERN xdata _AT_(0xFC00) volatile BYTE EP8FIFOBUF[1024] ; // 512 byte EP8 buffer (IN or OUT) |
|
#undef EXTERN |
#undef _AT_ |
|
/*----------------------------------------------------------------------------- |
Special Function Registers (SFRs) |
The byte registers and bits defined in the following list are based |
on the Synopsis definition of the 8051 Special Function Registers for EZ-USB. |
If you modify the register definitions below, please regenerate the file |
"ezregs.inc" which includes the same basic information for assembly inclusion. |
-----------------------------------------------------------------------------*/ |
|
sfr at 0x80 IOA; |
sfr at 0x81 SP; |
sfr at 0x82 DPL; |
sfr at 0x83 DPH; |
sfr at 0x84 DPL1; |
sfr at 0x85 DPH1; |
sfr at 0x86 DPS; |
/* DPS */ |
sbit at 0x86+0 SEL; |
sfr at 0x87 PCON; /* PCON */ |
//sbit IDLE = 0x87+0; |
//sbit STOP = 0x87+1; |
//sbit GF0 = 0x87+2; |
//sbit GF1 = 0x87+3; |
//sbit SMOD0 = 0x87+7; |
sfr at 0x88 TCON; |
/* TCON */ |
sbit at 0x88+0 IT0; |
sbit at 0x88+1 IE0; |
sbit at 0x88+2 IT1; |
sbit at 0x88+3 IE1; |
sbit at 0x88+4 TR0; |
sbit at 0x88+5 TF0; |
sbit at 0x88+6 TR1; |
sbit at 0x88+7 TF1; |
sfr at 0x89 TMOD; |
/* TMOD */ |
//sbit M00 = 0x89+0; |
//sbit M10 = 0x89+1; |
//sbit CT0 = 0x89+2; |
//sbit GATE0 = 0x89+3; |
//sbit M01 = 0x89+4; |
//sbit M11 = 0x89+5; |
//sbit CT1 = 0x89+6; |
//sbit GATE1 = 0x89+7; |
sfr at 0x8A TL0; |
sfr at 0x8B TL1; |
sfr at 0x8C TH0; |
sfr at 0x8D TH1; |
sfr at 0x8E CKCON; |
/* CKCON */ |
//sbit MD0 = 0x89+0; |
//sbit MD1 = 0x89+1; |
//sbit MD2 = 0x89+2; |
//sbit T0M = 0x89+3; |
//sbit T1M = 0x89+4; |
//sbit T2M = 0x89+5; |
// sfr at 0x8F SPC_FNC; // Was WRS in Reg320 |
/* CKCON */ |
//sbit WRS = 0x8F+0; |
sfr at 0x90 IOB; |
sfr at 0x91 EXIF; // EXIF Bit Values differ from Reg320 |
/* EXIF */ |
//sbit USBINT = 0x91+4; |
//sbit I2CINT = 0x91+5; |
//sbit IE4 = 0x91+6; |
//sbit IE5 = 0x91+7; |
sfr at 0x92 MPAGE; |
sfr at 0x98 SCON0; |
/* SCON0 */ |
sbit at 0x98+0 RI; |
sbit at 0x98+1 TI; |
sbit at 0x98+2 RB8; |
sbit at 0x98+3 TB8; |
sbit at 0x98+4 REN; |
sbit at 0x98+5 SM2; |
sbit at 0x98+6 SM1; |
sbit at 0x98+7 SM0; |
sfr at 0x99 SBUF0; |
|
sfr at 0x9A APTR1H; |
sfr at 0x9B APTR1L; |
sfr at 0x9C AUTODAT1; |
sfr at 0x9D AUTOPTRH2; |
sfr at 0x9E AUTOPTRL2; |
sfr at 0x9F AUTODAT2; |
sfr at 0xA0 IOC; |
sfr at 0xA1 INT2CLR; |
sfr at 0xA2 INT4CLR; |
|
#define AUTOPTRH1 APTR1H |
#define AUTOPTRL1 APTR1L |
|
sfr at 0xA8 IE; |
/* IE */ |
sbit at 0xA8+0 EX0; |
sbit at 0xA8+1 ET0; |
sbit at 0xA8+2 EX1; |
sbit at 0xA8+3 ET1; |
sbit at 0xA8+4 ES0; |
sbit at 0xA8+5 ET2; |
sbit at 0xA8+6 ES1; |
sbit at 0xA8+7 EA; |
|
sfr at 0xAA EP2468STAT; |
/* EP2468STAT */ |
//sbit EP2E = 0xAA+0; |
//sbit EP2F = 0xAA+1; |
//sbit EP4E = 0xAA+2; |
//sbit EP4F = 0xAA+3; |
//sbit EP6E = 0xAA+4; |
//sbit EP6F = 0xAA+5; |
//sbit EP8E = 0xAA+6; |
//sbit EP8F = 0xAA+7; |
|
sfr at 0xAB EP24FIFOFLGS; |
sfr at 0xAC EP68FIFOFLGS; |
sfr at 0xAF AUTOPTRSETUP; |
/* AUTOPTRSETUP */ |
sbit at 0xAF+0 EXTACC; |
sbit at 0xAF+1 APTR1FZ; |
sbit at 0xAF+2 APTR2FZ; |
|
sfr at 0xB0 IOD; |
sfr at 0xB1 IOE; |
sfr at 0xB2 OEA; |
sfr at 0xB3 OEB; |
sfr at 0xB4 OEC; |
sfr at 0xB5 OED; |
sfr at 0xB6 OEE; |
|
sfr at 0xB8 IP; |
/* IP */ |
sbit at 0xB8+0 PX0; |
sbit at 0xB8+1 PT0; |
sbit at 0xB8+2 PX1; |
sbit at 0xB8+3 PT1; |
sbit at 0xB8+4 PS0; |
sbit at 0xB8+5 PT2; |
sbit at 0xB8+6 PS1; |
|
sfr at 0xBA EP01STAT; |
sfr at 0xBB GPIFTRIG; |
|
sfr at 0xBD GPIFSGLDATH; |
sfr at 0xBE GPIFSGLDATLX; |
sfr at 0xBF GPIFSGLDATLNOX; |
|
sfr at 0xC0 SCON1; |
/* SCON1 */ |
sbit at 0xC0+0 RI1; |
sbit at 0xC0+1 TI1; |
sbit at 0xC0+2 RB81; |
sbit at 0xC0+3 TB81; |
sbit at 0xC0+4 REN1; |
sbit at 0xC0+5 SM21; |
sbit at 0xC0+6 SM11; |
sbit at 0xC0+7 SM01; |
sfr at 0xC1 SBUF1; |
sfr at 0xC8 T2CON; |
/* T2CON */ |
sbit at 0xC8+0 CP_RL2; |
sbit at 0xC8+1 C_T2; |
sbit at 0xC8+2 TR2; |
sbit at 0xC8+3 EXEN2; |
sbit at 0xC8+4 TCLK; |
sbit at 0xC8+5 RCLK; |
sbit at 0xC8+6 EXF2; |
sbit at 0xC8+7 TF2; |
sfr at 0xCA RCAP2L; |
sfr at 0xCB RCAP2H; |
sfr at 0xCC TL2; |
sfr at 0xCD TH2; |
sfr at 0xD0 PSW; |
/* PSW */ |
sbit at 0xD0+0 P; |
sbit at 0xD0+1 FL; |
sbit at 0xD0+2 OV; |
sbit at 0xD0+3 RS0; |
sbit at 0xD0+4 RS1; |
sbit at 0xD0+5 F0; |
sbit at 0xD0+6 AC; |
sbit at 0xD0+7 CY; |
sfr at 0xD8 EICON; // Was WDCON in DS80C320 EICON; Bit Values differ from Reg320 |
/* EICON */ |
sbit at 0xD8+3 INT6; |
sbit at 0xD8+4 RESI; |
sbit at 0xD8+5 ERESI; |
sbit at 0xD8+7 SMOD1; |
sfr at 0xE0 ACC; |
sfr at 0xE8 EIE; // EIE Bit Values differ from Reg320 |
/* EIE */ |
sbit at 0xE8+0 EIUSB; |
sbit at 0xE8+1 EI2C; |
sbit at 0xE8+2 EIEX4; |
sbit at 0xE8+3 EIEX5; |
sbit at 0xE8+4 EIEX6; |
sfr at 0xF0 B; |
sfr at 0xF8 EIP; // EIP Bit Values differ from Reg320 |
/* EIP */ |
sbit at 0xF8+0 PUSB; |
sbit at 0xF8+1 PI2C; |
sbit at 0xF8+2 EIPX4; |
sbit at 0xF8+3 EIPX5; |
sbit at 0xF8+4 EIPX6; |
|
/*----------------------------------------------------------------------------- |
Bit Masks |
-----------------------------------------------------------------------------*/ |
|
#define bmBIT0 1 |
#define bmBIT1 2 |
#define bmBIT2 4 |
#define bmBIT3 8 |
#define bmBIT4 16 |
#define bmBIT5 32 |
#define bmBIT6 64 |
#define bmBIT7 128 |
|
/* CPU Control & Status Register (CPUCS) */ |
#define bmPRTCSTB bmBIT5 |
#define bmCLKSPD (bmBIT4 | bmBIT3) |
#define bmCLKSPD1 bmBIT4 |
#define bmCLKSPD0 bmBIT3 |
#define bmCLKINV bmBIT2 |
#define bmCLKOE bmBIT1 |
#define bm8051RES bmBIT0 |
/* Port Alternate Configuration Registers */ |
/* Port A (PORTACFG) */ |
#define bmFLAGD bmBIT7 |
#define bmINT1 bmBIT1 |
#define bmINT0 bmBIT0 |
/* Port C (PORTCCFG) */ |
#define bmGPIFA7 bmBIT7 |
#define bmGPIFA6 bmBIT6 |
#define bmGPIFA5 bmBIT5 |
#define bmGPIFA4 bmBIT4 |
#define bmGPIFA3 bmBIT3 |
#define bmGPIFA2 bmBIT2 |
#define bmGPIFA1 bmBIT1 |
#define bmGPIFA0 bmBIT0 |
/* Port E (PORTECFG) */ |
#define bmGPIFA8 bmBIT7 |
#define bmT2EX bmBIT6 |
#define bmINT6 bmBIT5 |
#define bmRXD1OUT bmBIT4 |
#define bmRXD0OUT bmBIT3 |
#define bmT2OUT bmBIT2 |
#define bmT1OUT bmBIT1 |
#define bmT0OUT bmBIT0 |
|
/* I2C Control & Status Register (I2CS) */ |
#define bmSTART bmBIT7 |
#define bmSTOP bmBIT6 |
#define bmLASTRD bmBIT5 |
#define bmID (bmBIT4 | bmBIT3) |
#define bmBERR bmBIT2 |
#define bmACK bmBIT1 |
#define bmDONE bmBIT0 |
/* I2C Control Register (I2CTL) */ |
#define bmSTOPIE bmBIT1 |
#define bm400KHZ bmBIT0 |
/* Interrupt 2 (USB) Autovector Register (INT2IVEC) */ |
#define bmIV4 bmBIT6 |
#define bmIV3 bmBIT5 |
#define bmIV2 bmBIT4 |
#define bmIV1 bmBIT3 |
#define bmIV0 bmBIT2 |
/* USB Interrupt Request & Enable Registers (USBIE/USBIRQ) */ |
#define bmEP0ACK bmBIT6 |
#define bmHSGRANT bmBIT5 |
#define bmURES bmBIT4 |
#define bmSUSP bmBIT3 |
#define bmSUTOK bmBIT2 |
#define bmSOF bmBIT1 |
#define bmSUDAV bmBIT0 |
/* Breakpoint register (BREAKPT) */ |
#define bmBREAK bmBIT3 |
#define bmBPPULSE bmBIT2 |
#define bmBPEN bmBIT1 |
/* Interrupt 2 & 4 Setup (INTSETUP) */ |
#define bmAV2EN bmBIT3 |
#define bmINT4IN bmBIT1 |
#define bmAV4EN bmBIT0 |
/* USB Control & Status Register (USBCS) */ |
#define bmHSM bmBIT7 |
#define bmDISCON bmBIT3 |
#define bmNOSYNSOF bmBIT2 |
#define bmRENUM bmBIT1 |
#define bmSIGRESUME bmBIT0 |
/* Wakeup Control and Status Register (WAKEUPCS) */ |
#define bmWU2 bmBIT7 |
#define bmWU bmBIT6 |
#define bmWU2POL bmBIT5 |
#define bmWUPOL bmBIT4 |
#define bmDPEN bmBIT2 |
#define bmWU2EN bmBIT1 |
#define bmWUEN bmBIT0 |
/* End Point 0 Control & Status Register (EP0CS) */ |
#define bmHSNAK bmBIT7 |
/* End Point 0-1 Control & Status Registers (EP0CS/EP1OUTCS/EP1INCS) */ |
#define bmEPBUSY bmBIT1 |
#define bmEPSTALL bmBIT0 |
/* End Point 2-8 Control & Status Registers (EP2CS/EP4CS/EP6CS/EP8CS) */ |
#define bmNPAK (bmBIT6 | bmBIT5 | bmBIT4) |
#define bmEPFULL bmBIT3 |
#define bmEPEMPTY bmBIT2 |
/* Endpoint Status (EP2468STAT) SFR bits */ |
#define bmEP8FULL bmBIT7 |
#define bmEP8EMPTY bmBIT6 |
#define bmEP6FULL bmBIT5 |
#define bmEP6EMPTY bmBIT4 |
#define bmEP4FULL bmBIT3 |
#define bmEP4EMPTY bmBIT2 |
#define bmEP2FULL bmBIT1 |
#define bmEP2EMPTY bmBIT0 |
/* SETUP Data Pointer Auto Mode (SUDPTRCTL) */ |
#define bmSDPAUTO bmBIT0 |
/* Endpoint Data Toggle Control (TOGCTL) */ |
#define bmQUERYTOGGLE bmBIT7 |
#define bmSETTOGGLE bmBIT6 |
#define bmRESETTOGGLE bmBIT5 |
#define bmTOGCTLEPMASK bmBIT3 | bmBIT2 | bmBIT1 | bmBIT0 |
/* IBN (In Bulk Nak) enable and request bits (IBNIE/IBNIRQ) */ |
#define bmEP8IBN bmBIT5 |
#define bmEP6IBN bmBIT4 |
#define bmEP4IBN bmBIT3 |
#define bmEP2IBN bmBIT2 |
#define bmEP1IBN bmBIT1 |
#define bmEP0IBN bmBIT0 |
|
/* PING-NAK enable and request bits (NAKIE/NAKIRQ) */ |
#define bmEP8PING bmBIT7 |
#define bmEP6PING bmBIT6 |
#define bmEP4PING bmBIT5 |
#define bmEP2PING bmBIT4 |
#define bmEP1PING bmBIT3 |
#define bmEP0PING bmBIT2 |
#define bmIBN bmBIT0 |
|
/* Interface Configuration bits (IFCONFIG) */ |
#define bmIFCLKSRC bmBIT7 // set == INTERNAL |
#define bm3048MHZ bmBIT6 // set == 48 MHz |
#define bmIFCLKOE bmBIT5 |
#define bmIFCLKPOL bmBIT4 |
#define bmASYNC bmBIT3 |
#define bmGSTATE bmBIT2 |
#define bmIFCFG1 bmBIT1 |
#define bmIFCFG0 bmBIT0 |
#define bmIFCFGMASK (bmIFCFG0 | bmIFCFG1) |
#define bmIFGPIF bmIFCFG1 |
|
/* EP 2468 FIFO Configuration bits (EP2FIFOCFG,EP4FIFOCFG,EP6FIFOCFG,EP8FIFOCFG) */ |
#define bmINFM bmBIT6 |
#define bmOEP bmBIT5 |
#define bmAUTOOUT bmBIT4 |
#define bmAUTOIN bmBIT3 |
#define bmZEROLENIN bmBIT2 |
// must be zero bmBIT1 |
#define bmWORDWIDE bmBIT0 |
|
/* |
* Chip Revision Control Bits (REVCTL) - used to ebable/disable revision specific features |
*/ |
#define bmNOAUTOARM bmBIT1 // these don't match the docs |
#define bmSKIPCOMMIT bmBIT0 // these don't match the docs |
|
#define bmDYN_OUT bmBIT1 // these do... |
#define bmENH_PKT bmBIT0 |
|
|
/* Fifo Reset bits (FIFORESET) */ |
#define bmNAKALL bmBIT7 |
|
/* Endpoint Configuration (EPxCFG) */ |
#define bmVALID bmBIT7 |
#define bmIN bmBIT6 |
#define bmTYPE1 bmBIT5 |
#define bmTYPE0 bmBIT4 |
#define bmISOCHRONOUS bmTYPE0 |
#define bmBULK bmTYPE1 |
#define bmINTERRUPT (bmTYPE1 | bmTYPE0) |
#define bm1KBUF bmBIT3 |
#define bmBUF1 bmBIT1 |
#define bmBUF0 bmBIT0 |
#define bmQUADBUF 0 |
#define bmINVALIDBUF bmBUF0 |
#define bmDOUBLEBUF bmBUF1 |
#define bmTRIPLEBUF (bmBUF1 | bmBUF0) |
|
/* OUTPKTEND */ |
#define bmSKIP bmBIT7 // low 4 bits specify which end point |
|
/* GPIFTRIG defs */ |
#define bmGPIF_IDLE bmBIT7 // status bit |
|
#define bmGPIF_EP2_START 0 |
#define bmGPIF_EP4_START 1 |
#define bmGPIF_EP6_START 2 |
#define bmGPIF_EP8_START 3 |
#define bmGPIF_READ bmBIT2 |
#define bmGPIF_WRITE 0 |
|
/* EXIF bits */ |
#define bmEXIF_USBINT bmBIT4 |
#define bmEXIF_I2CINT bmBIT5 |
#define bmEXIF_IE4 bmBIT6 |
#define bmEXIF_IE5 bmBIT7 |
|
|
#endif /* FX2REGS_H */ |
/src/lib/timer.h
0,0 → 1,34
/* -*- c++ -*- */ |
/* $Id: timer.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* Timer handling for FX2 |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#ifndef _TIMER_H_ |
#define _TIMER_H_ |
|
/* |
* Arrange to have isr_tick_handler called at 100 Hz |
*/ |
void hook_timer_tick (unsigned short isr_tick_handler); |
|
#define clear_timer_irq() \ |
TF2 = 0 /* clear overflow flag */ |
|
|
#endif /* _TIMER_H_ */ |
/src/lib/fx2utils.h
0,0 → 1,31
/* -*- c++ -*- */ |
/* $Id: fx2utils.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* FX2 specific subroutines |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#ifndef _FX2UTILS_H_ |
#define _FX2UTILS_H_ |
|
void fx2_stall_ep0 (void); |
void fx2_reset_data_toggle (unsigned char ep); |
void fx2_renumerate (void); |
|
|
|
#endif /* _FX2UTILS_H_ */ |
/src/lib/usb_requests.h
0,0 → 1,87
/* -*- c++ -*- */ |
/* $Id: usb_requests.h 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* USB request definitions |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
// Standard USB requests. |
// These are contained in end point 0 setup packets |
|
|
#ifndef _USB_REQUESTS_H_ |
#define _USB_REQUESTS_H_ |
|
// format of bmRequestType byte |
|
#define bmRT_DIR_MASK (0x1 << 7) |
#define bmRT_DIR_IN (1 << 7) |
#define bmRT_DIR_OUT (0 << 7) |
|
#define bmRT_TYPE_MASK (0x3 << 5) |
#define bmRT_TYPE_STD (0 << 5) |
#define bmRT_TYPE_CLASS (1 << 5) |
#define bmRT_TYPE_VENDOR (2 << 5) |
#define bmRT_TYPE_RESERVED (3 << 5) |
|
#define bmRT_RECIP_MASK (0x1f << 0) |
#define bmRT_RECIP_DEVICE (0 << 0) |
#define bmRT_RECIP_INTERFACE (1 << 0) |
#define bmRT_RECIP_ENDPOINT (2 << 0) |
#define bmRT_RECIP_OTHER (3 << 0) |
|
|
// standard request codes (bRequest) |
|
#define RQ_GET_STATUS 0 |
#define RQ_CLEAR_FEATURE 1 |
#define RQ_RESERVED_2 2 |
#define RQ_SET_FEATURE 3 |
#define RQ_RESERVED_4 4 |
#define RQ_SET_ADDRESS 5 |
#define RQ_GET_DESCR 6 |
#define RQ_SET_DESCR 7 |
#define RQ_GET_CONFIG 8 |
#define RQ_SET_CONFIG 9 |
#define RQ_GET_INTERFACE 10 |
#define RQ_SET_INTERFACE 11 |
#define RQ_SYNCH_FRAME 12 |
|
// standard descriptor types |
|
#define DT_DEVICE 1 |
#define DT_CONFIG 2 |
#define DT_STRING 3 |
#define DT_INTERFACE 4 |
#define DT_ENDPOINT 5 |
#define DT_DEVQUAL 6 |
#define DT_OTHER_SPEED 7 |
#define DT_INTERFACE_POWER 8 |
|
// standard feature selectors |
|
#define FS_ENDPOINT_HALT 0 // recip: endpoint |
#define FS_DEV_REMOTE_WAKEUP 1 // recip: device |
#define FS_TEST_MODE 2 // recip: device |
|
// Get Status device attributes |
|
#define bmGSDA_SELF_POWERED 0x01 |
#define bmGSDA_REM_WAKEUP 0x02 |
|
|
#endif /* _USB_REQUESTS_H_ */ |
/src/lib/.cvsignore
0,0 → 1,10
*.asm |
*.ihx |
*.lnk |
*.lst |
*.map |
*.mem |
*.rel |
*.rst |
*.sym |
libfx2.lib |
/src/lib/Makefile
0,0 → 1,37
# $Id: Makefile 394 2011-07-17 17:03:19Z mueller $ |
#----------------------------------------------------------------------------- |
# Makefile for FX2 library code |
#----------------------------------------------------------------------------- |
# Copyright (C) 2007 Kolja Waschk, ixo.de |
#----------------------------------------------------------------------------- |
# This code is part of usbjtag. usbjtag is free software; you can redistribute |
# it and/or modify it under the terms of the GNU General Public License as |
# published by the Free Software Foundation; either version 2 of the License, |
# or (at your option) any later version. usbjtag is distributed in the hope |
# that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
# GNU General Public License for more details. You should have received a |
# copy of the GNU General Public License along with this program in the file |
# COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
# St, Fifth Floor, Boston, MA 02110-1301 USA |
#----------------------------------------------------------------------------- |
|
CC=sdcc |
CFLAGS+=-mmcs51 --no-xinit-opt -I. |
CPPFLAGS+= |
OBJS=delay.rel fx2utils.rel i2c.rel isr.rel timer.rel usb_common.rel |
AR=sdcclib |
|
(%.rel) : %.c |
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.rel |
$(AR) -a $@ $*.rel |
rm $*.rel |
|
libfx2.lib: libfx2.lib($(OBJS)) |
|
clean: |
rm -f *.lst *.asm *.lib *.sym *.rel *.lib |
|
|
|
|
/src/lib/isr.c
0,0 → 1,169
/* -*- c++ -*- */ |
/* $Id: isr.c 395 2011-07-17 22:02:55Z mueller $ */ |
/*----------------------------------------------------------------------------- |
* Interrupt handling for FX2 |
*----------------------------------------------------------------------------- |
* Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2, |
* Copyright 2003 Free Software Foundation, Inc. |
*----------------------------------------------------------------------------- |
* This code is part of usbjtag. usbjtag is free software; you can redistribute |
* it and/or modify it under the terms of the GNU General Public License as |
* published by the Free Software Foundation; either version 2 of the License, |
* or (at your option) any later version. usbjtag is distributed in the hope |
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. You should have received a |
* copy of the GNU General Public License along with this program in the file |
* COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin |
* St, Fifth Floor, Boston, MA 02110-1301 USA |
*----------------------------------------------------------------------------- |
*/ |
|
#include "isr.h" |
#include "fx2regs.h" |
#include "syncdelay.h" |
|
extern xdata unsigned char _standard_interrupt_vector[]; |
extern xdata unsigned char _usb_autovector[]; |
extern xdata unsigned char _fifo_gpif_autovector[]; |
|
#define LJMP_OPCODE 0x02 |
|
/* |
* Hook standard interrupt vector. |
* |
* vector_number is from the SV_<foo> list. |
* addr is the address of the interrupt service routine. |
*/ |
void |
hook_sv (unsigned char vector_number, unsigned short addr) |
{ |
bit t; |
|
// sanity checks |
|
if (vector_number < SV_MIN || vector_number > SV_MAX) |
return; |
|
if ((vector_number & 0x0f) != 0x03 && (vector_number & 0x0f) != 0x0b) |
return; |
|
t = EA; |
EA = 0; |
_standard_interrupt_vector[vector_number] = LJMP_OPCODE; |
_standard_interrupt_vector[vector_number + 1] = addr >> 8; |
_standard_interrupt_vector[vector_number + 2] = addr & 0xff; |
EA = t; |
} |
|
/* |
* Hook usb interrupt vector. |
* |
* vector_number is from the UV_<foo> list. |
* addr is the address of the interrupt service routine. |
*/ |
void |
hook_uv (unsigned char vector_number, unsigned short addr) |
{ |
bit t; |
|
// sanity checks |
|
#if UV_MIN>0 |
if (vector_number < UV_MIN) return; |
#endif |
if (vector_number > UV_MAX) |
return; |
|
if ((vector_number & 0x3) != 0) |
return; |
|
t = EA; |
EA = 0; |
_usb_autovector[vector_number] = LJMP_OPCODE; |
_usb_autovector[vector_number + 1] = addr >> 8; |
_usb_autovector[vector_number + 2] = addr & 0xff; |
EA = t; |
} |
|
/* |
* Hook fifo/gpif interrupt vector. |
* |
* vector_number is from the FGV_<foo> list. |
* addr is the address of the interrupt service routine. |
*/ |
void |
hook_fgv (unsigned char vector_number, unsigned short addr) |
{ |
bit t; |
|
// sanity checks |
|
if (vector_number < FGV_MIN || vector_number > FGV_MAX) |
return; |
|
if ((vector_number & 0x3) != 0) |
return; |
|
t = EA; |
EA = 0; |
_fifo_gpif_autovector[vector_number] = LJMP_OPCODE; |
_fifo_gpif_autovector[vector_number + 1] = addr >> 8; |
_fifo_gpif_autovector[vector_number + 2] = addr & 0xff; |
EA = t; |
} |
|
/* |
* One time call to enable autovectoring for both USB and FIFO/GPIF. |
* |
* This disables all USB and FIFO/GPIF interrupts and clears |
* any pending interrupts too. It leaves the master USB and FIFO/GPIF |
* interrupts enabled. |
*/ |
void |
setup_autovectors (void) |
{ |
// disable master usb and fifo/gpif interrupt enables |
EIUSB = 0; |
EIEX4 = 0; |
|
hook_sv (SV_INT_2, (unsigned short) _usb_autovector); |
hook_sv (SV_INT_4, (unsigned short) _fifo_gpif_autovector); |
|
// disable all fifo interrupt enables |
SYNCDELAY; |
EP2FIFOIE = 0; SYNCDELAY; |
EP4FIFOIE = 0; SYNCDELAY; |
EP6FIFOIE = 0; SYNCDELAY; |
EP8FIFOIE = 0; SYNCDELAY; |
|
// clear all pending fifo irqs |
EP2FIFOIRQ = 0xff; SYNCDELAY; |
EP4FIFOIRQ = 0xff; SYNCDELAY; |
EP6FIFOIRQ = 0xff; SYNCDELAY; |
EP8FIFOIRQ = 0xff; SYNCDELAY; |
|
IBNIE = 0; |
IBNIRQ = 0xff; |
NAKIE = 0; |
NAKIRQ = 0xff; |
USBIE = 0; |
USBIRQ = 0xff; |
EPIE = 0; |
EPIRQ = 0xff; |
SYNCDELAY; GPIFIE = 0; |
SYNCDELAY; GPIFIRQ = 0xff; |
USBERRIE = 0; |
USBERRIRQ = 0xff; |
CLRERRCNT = 0; |
|
INTSETUP = bmAV2EN | bmAV4EN | bmINT4IN; |
|
// clear master irq's for usb and fifo/gpif |
EXIF &= ~bmEXIF_USBINT; |
EXIF &= ~bmEXIF_IE4; |
|
// enable master usb and fifo/gpif interrrupts |
EIUSB = 1; |
EIEX4 = 1; |
} |
src/lib
Property changes :
Added: svn:ignore
## -0,0 +1,43 ##
+*.dep_ghdl
+*.dep_isim
+*.dep_xst
+work-obj93.cf
+*.vcd
+*.ghw
+*.sav
+*.tmp
+*.exe
+ise
+xflow.his
+*.ngc
+*.ncd
+*.pcf
+*.bit
+*.msk
+isim
+isim.log
+isim.wdb
+fuse.log
+*_[sft]sim.vhd
+*_tsim.sdf
+*_xst.log
+*_tra.log
+*_twr.log
+*_map.log
+*_par.log
+*_tsi.log
+*_pad.log
+*_bgn.log
+*_svn.log
+*_sum.log
+*_[dsft]sim.log
+*.asm
+*.ihx
+*.lnk
+*.lst
+*.map
+*.mem
+*.rel
+*.rst
+*.sym
+libfx2.lib
Index: src/README_iso_jtag.txt
===================================================================
--- src/README_iso_jtag.txt (nonexistent)
+++ src/README_iso_jtag.txt (revision 26)
@@ -0,0 +1,123 @@
+$Id: README_iso_jtag.txt 525 2013-07-06 12:19:39Z mueller $
+
+usb_jtag using Cypress FX2 chip
+===============================
+
+== General information ==
+
+The code in this directory is for Cypress FX2 (e.g. CY7C68013A) and can be
+compiled with the SDCC compiler (I tried version 2.6 as shipped with Ubuntu
+6.10). Once I had a version that could be compiled with Keil tools (until early
+2007), but switched to SDCC because I usually develop on a Linux host.
+
+No logic beside the FX2 itself and only a few external components are required
+for a basic JTAG adapter. I don't have detailed schematics available; my test
+setup consists of a FX2 on a custom board where it's directly connected to a
+Cyclone FPGA.
+
+ ____________
+ | |
+ | Cypress |
+ USB__| EZ-USB FX2 |__JTAG(TDI,TDO,TCK,TMS)
+ | CY7C68013A |
+ |____________|
+ __|__________
+ | |
+ | 24 MHz XTAL |
+ |_____________|
+
+
+Similar boards are available from fpga4fun.com - the boards named "Saxo-L" and
+"Xylo-EM" are pre-wired for use with an adapted version of my code, while
+"Saxo" and "Xylo" can be used after soldering 4 extra wires:
+
+ http://www.fpga4fun.com/board_Xylo.html
+
+There's a discussion thread in the fpga4fun forum about this firmware:
+
+ http://www.fpga4fun.com/forum/viewtopic.php?t=483
+
+
+== Use with Nexys 1 / 2 Boards ==
+
+Through a contribution by Sune Mai, this code can be used with the Digilent
+Nexys / Nexys2 boards.
+
+ http://www.digilentinc.com/nexys/
+ http://www.digilentinc.com/nexys2/
+
+The hardware-specific code file is hw_nexys.c, just change the line
+"HARDWARE=hw_basic" to "HARDWARE=hw_nexys" in the file "Makefile" to use it.
+
+Also, you may use the "nexys2prog" script by Andy Ross, available from the
+same place this code is available from:
+
+ http://ixo-jtag.sourceforge.net/
+
+
+== Adapting the code to your hardware ==
+
+As is, the code assumes the following pin assignment:
+
+ Port C.0: TDI
+ Port C.1: TDO
+ Port C.2: TCK
+ Port C.3: TMS
+
+Other assignments are possible. If you have your signals connected to
+bit-addressable I/O pins (port A,B,C or D), I suggest you make a copy of
+hw_basic.c and adapt the definitions and ProgIO_Init() in it to your needs.
+The file hw_saxo_l is even simpler to adapt if you want only JTAG and no AS/PS
+mode. If your signals are not on bit-addressable I/Os (that is, you're using
+port E), you could base your adaptation on the slower hw_xpcu_i.c. You may
+specify the name of your adapted hardware-specific file when "make"ing, e.g.:
+
+ make HARDWARE=hw_saxo_l
+
+
+The USB identification data (vendor/product ID, strings, ...) can be modified
+in dscr.a51. The firmware emulates the 128 byte EEPROM that usually holds
+configuration data for the FT245 and which can be read from the host; its
+content (including checksum) is computed from the data in dscr.a51 as well.
+
+The WAKEUP pin should be high for the re-numeration to work reliably (thanks
+Jean/fpga4fun!).
+
+
+== Using it with Xilinx JTAG cable ==
+
+There is code to support running in the "Xilinx Platform Cable USB". If you
+select HARDWARE=hw_xpcu_i or hw_xpcu_x at the top of the Makefile, a firmware
+for the XPCU will be built. I've tested this only with unmodified CPLD version
+18 (0x12) on a Spartan-3E starter kit, as it was programmed by my WebPack 8.2i.
+The code needs optimization; yet it is merely a proof of concept.
+Compile for the XPCU with e.g. "make HARDWARE=hw_xpcu_x".
+
+ hw_xpcu_i: Access "internal" chain (the XPCU CPLD, IC3, itself)
+ hw_xpcu_x: Access "external" chain (the Spartan 3E, PROM, etc.)
+
+
+== History ==
+
+Changes since previous release 2008-07-05:
+ - Imported to SourceForge, please see the project page:
+ http://ixo-jtag.sourceforge.net/
+
+Changes since previous release on 2007-02-15:
+ - Jean Nicolle contributed hw_saxo_l.c for the FX2 boards from fpga4fun.com
+ - fx2/Makefile fixed to build correct libfx2.lib even under Windows.
+
+Changes since previous release on 2007-01-28:
+ - Initial suppport for running on Xilinx XPCU.
+ - New FX2 code, based on USRP2 from the GNU Radio Project;
+ - Firmware can now be compiled using SDCC 2.6. No more Keil support.
+ - EEPROM content is automatically computed from dscr.a51, including checksum.
+
+Changes since initial release on 2006-04-23:
+ - added this readme.txt
+ - reorganized my project folder: diff now created from Subversion repository
+ - stripped *.dist extension from eeprom.c and dscr.a51
+ - added unique proper product and vendor ID (thanks to Antti Lukats!)
+ - fixed checksum in eeprom.c
+ - added comments about AS/PS mode pins in usbjtag.c
+
Index: src/main.c
===================================================================
--- src/main.c (nonexistent)
+++ src/main.c (revision 26)
@@ -0,0 +1,376 @@
+/* $Id: main.c 472 2013-01-06 14:39:10Z mueller $ */
+/*
+ * Copyright 2011-2013 by Walter F.J. Mueller
+ * Code was forked from ixo-jtag.svn.sourceforge.net on 2011-07-17
+ *
+ * - original copyright and licence disclaimer --------------------------------
+ * - Code that turns a Cypress FX2 USB Controller into an USB JTAG adapter
+ * - Copyright (C) 2005..2007 Kolja Waschk, ixo.de
+ * - This code is part of usbjtag. usbjtag is free software;
+ *-----------------------------------------------------------------------------
+ *
+ * This program is free software; you may redistribute and/or modify it under
+ * the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 2, or at your option any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for complete details.
+ *
+ *-----------------------------------------------------------------------------
+ *
+ * EZ-USB FX2 controller main program
+ *
+ * Revision History:
+ *
+ * Date Rev Version Comment
+ * 2013-01-05 472 1.1.1 BUGFIX: explicitly set FIFOPINPOLAR=0
+ * 2011-07-23 397 1.1 factor out usb_fifo_init() code
+ * 2011-07-17 394 1.0 Initial version (from ixo-jtag/usb_jtag Rev 204)
+ *
+ *-----------------------------------------------------------------------------
+ */
+
+#include "isr.h"
+#include "timer.h"
+#include "delay.h"
+#include "fx2regs.h"
+#include "fx2utils.h"
+#include "usb_common.h"
+#include "usb_descriptors.h"
+#include "usb_requests.h"
+
+#include "syncdelay.h"
+
+#include "eeprom.h"
+#include "hardware.h"
+
+//-----------------------------------------------------------------------------
+// Define USE_MOD256_OUTBUFFER:
+// Saves about 256 bytes in code size, improves speed a little.
+// A further optimization could be not to use an extra output buffer at
+// all, but to write directly into EP1INBUF. Not implemented yet. When
+// downloading large amounts of data _to_ the target, there is no output
+// and thus the output buffer isn't used at all and doesn't slow down things.
+
+#define USE_MOD256_OUTBUFFER 1
+
+//-----------------------------------------------------------------------------
+// Global data
+
+typedef bit BOOL;
+#define FALSE 0
+#define TRUE 1
+static BOOL Running;
+static BOOL WriteOnly;
+
+static BYTE ClockBytes;
+static WORD Pending;
+
+#ifdef USE_MOD256_OUTBUFFER
+ static BYTE FirstDataInOutBuffer;
+ static BYTE FirstFreeInOutBuffer;
+#else
+ static WORD FirstDataInOutBuffer;
+ static WORD FirstFreeInOutBuffer;
+#endif
+
+#ifdef USE_MOD256_OUTBUFFER
+ /* Size of output buffer must be exactly 256 */
+ #define OUTBUFFER_LEN 0x100
+ /* Output buffer must begin at some address with lower 8 bits all zero */
+ xdata at 0xE000 BYTE OutBuffer[OUTBUFFER_LEN];
+#else
+ #define OUTBUFFER_LEN 0x200
+ static xdata BYTE OutBuffer[OUTBUFFER_LEN];
+#endif
+
+//-----------------------------------------------------------------------------
+
+void usb_jtag_init(void) // Called once at startup
+{
+ WORD tmp;
+
+ Running = FALSE;
+ ClockBytes = 0;
+ Pending = 0;
+ WriteOnly = TRUE;
+ FirstDataInOutBuffer = 0;
+ FirstFreeInOutBuffer = 0;
+
+ ProgIO_Init();
+
+ ProgIO_Enable();
+
+ // Make Timer2 reload at 100 Hz to trigger Keepalive packets
+
+ tmp = 65536 - ( 48000000 / 12 / 100 );
+ RCAP2H = tmp >> 8;
+ RCAP2L = tmp & 0xFF;
+ CKCON = 0; // Default Clock
+ T2CON = 0x04; // Auto-reload mode using internal clock, no baud clock.
+
+ // Enable Autopointer
+
+ EXTACC = 1; // Enable
+ APTR1FZ = 1; // Don't freeze
+ APTR2FZ = 1; // Don't freeze
+}
+
+void OutputByte(BYTE d)
+{
+#ifdef USE_MOD256_OUTBUFFER
+ OutBuffer[FirstFreeInOutBuffer] = d;
+ FirstFreeInOutBuffer = ( FirstFreeInOutBuffer + 1 ) & 0xFF;
+#else
+ OutBuffer[FirstFreeInOutBuffer++] = d;
+ if(FirstFreeInOutBuffer >= OUTBUFFER_LEN) FirstFreeInOutBuffer = 0;
+#endif
+ Pending++;
+}
+
+//-----------------------------------------------------------------------------
+// usb_jtag_activity does most of the work. It now happens to behave just like
+// the combination of FT245BM and Altera-programmed EPM7064 CPLD in Altera's
+// USB-Blaster. The CPLD knows two major modes: Bit banging mode and Byte
+// shift mode. It starts in Bit banging mode. While bytes are received
+// from the host on EP2OUT, each byte B of them is processed as follows:
+//
+// Please note: nCE, nCS, LED pins and DATAOUT actually aren't supported here.
+// Support for these would be required for AS/PS mode and isn't too complicated,
+// but I haven't had the time yet.
+//
+// Bit banging mode:
+//
+// 1. Remember bit 6 (0x40) in B as the "Read bit".
+//
+// 2. If bit 7 (0x40) is set, switch to Byte shift mode for the coming
+// X bytes ( X := B & 0x3F ), and don't do anything else now.
+//
+// 3. Otherwise, set the JTAG signals as follows:
+// TCK/DCLK high if bit 0 was set (0x01), otherwise low
+// TMS/nCONFIG high if bit 1 was set (0x02), otherwise low
+// nCE high if bit 2 was set (0x04), otherwise low
+// nCS high if bit 3 was set (0x08), otherwise low
+// TDI/ASDI/DATA0 high if bit 4 was set (0x10), otherwise low
+// Output Enable/LED active if bit 5 was set (0x20), otherwise low
+//
+// 4. If "Read bit" (0x40) was set, record the state of TDO(CONF_DONE) and
+// DATAOUT(nSTATUS) pins and put it as a byte ((DATAOUT<<1)|TDO) in the
+// output FIFO _to_ the host (the code here reads TDO only and assumes
+// DATAOUT=1)
+//
+// Byte shift mode:
+//
+// 1. Load shift register with byte from host
+//
+// 2. Do 8 times (i.e. for each bit of the byte; implemented in shift.a51)
+// 2a) if nCS=1, set carry bit from TDO, else set carry bit from DATAOUT
+// 2b) Rotate shift register through carry bit
+// 2c) TDI := Carry bit
+// 2d) Raise TCK, then lower TCK.
+//
+// 3. If "Read bit" was set when switching into byte shift mode,
+// record the shift register content and put it into the FIFO
+// _to_ the host.
+//
+// Some more (minor) things to consider to emulate the FT245BM:
+//
+// a) The FT245BM seems to transmit just packets of no more than 64 bytes
+// (which perfectly matches the USB spec). Each packet starts with
+// two non-data bytes (I use 0x31,0x60 here). A USB sniffer on Windows
+// might show a number of packets to you as if it was a large transfer
+// because of the way that Windows understands it: it _is_ a large
+// transfer until terminated with an USB packet smaller than 64 byte.
+//
+// b) The Windows driver expects to get some data packets (with at least
+// the two leading bytes 0x31,0x60) immediately after "resetting" the
+// FT chip and then in regular intervals. Otherwise a blue screen may
+// appear... In the code below, I make sure that every 10ms there is
+// some packet.
+//
+// c) Vendor specific commands to configure the FT245 are mostly ignored
+// in my code. Only those for reading the EEPROM are processed. See
+// DR_GetStatus and DR_VendorCmd below for my implementation.
+//
+// All other TD_ and DR_ functions remain as provided with CY3681.
+//
+//-----------------------------------------------------------------------------
+
+void usb_jtag_activity(void) // Called repeatedly while the device is idle
+{
+ if(!Running) return;
+
+ ProgIO_Poll();
+
+ if(!(EP1INCS & bmEPBUSY)) {
+ if(Pending > 0) {
+ BYTE o, n;
+
+ AUTOPTRH2 = MSB( EP1INBUF );
+ AUTOPTRL2 = LSB( EP1INBUF );
+
+ XAUTODAT2 = 0x31;
+ XAUTODAT2 = 0x60;
+
+ if(Pending > 0x3E) { n = 0x3E; Pending -= n; }
+ else { n = Pending; Pending = 0; };
+
+ o = n;
+
+#ifdef USE_MOD256_OUTBUFFER
+ APTR1H = MSB( OutBuffer );
+ APTR1L = FirstDataInOutBuffer;
+ while(n--) {
+ XAUTODAT2 = XAUTODAT1;
+ APTR1H = MSB( OutBuffer ); // Stay within 256-Byte-Buffer
+ }
+ FirstDataInOutBuffer = APTR1L;
+#else
+ APTR1H = MSB( &(OutBuffer[FirstDataInOutBuffer]) );
+ APTR1L = LSB( &(OutBuffer[FirstDataInOutBuffer]) );
+ while(n--) {
+ XAUTODAT2 = XAUTODAT1;
+
+ if(++FirstDataInOutBuffer >= OUTBUFFER_LEN) {
+ FirstDataInOutBuffer = 0;
+ APTR1H = MSB( OutBuffer );
+ APTR1L = LSB( OutBuffer );
+ }
+ }
+#endif
+ SYNCDELAY;
+ EP1INBC = 2 + o;
+ TF2 = 1; // Make sure there will be a short transfer soon
+ } else if(TF2) {
+ EP1INBUF[0] = 0x31;
+ EP1INBUF[1] = 0x60;
+ SYNCDELAY;
+ EP1INBC = 2;
+ TF2 = 0;
+ }
+ }
+
+ if(!(EP2468STAT & bmEP2EMPTY) && (Pending < OUTBUFFER_LEN-0x3F)) {
+ //BYTE i, n = EP2BCL; // bugfix by Sune Mai (Oct 2008,
+ // https://sourceforge.net/projects/urjtag/forums/forum/682993/topic/2312452)
+ WORD i, n = EP2BCL|EP2BCH<<8;
+
+ APTR1H = MSB( EP2FIFOBUF );
+ APTR1L = LSB( EP2FIFOBUF );
+
+ for(i=0;i 0) {
+ //BYTE m; // bugfix by Sune Mai, see above
+ WORD m;
+
+ m = n-i;
+ if(ClockBytes < m) m = ClockBytes;
+ ClockBytes -= m;
+ i += m;
+
+ /* Shift out 8 bits from d */
+
+ if(WriteOnly) { /* Shift out 8 bits from d */
+ while(m--) ProgIO_ShiftOut(XAUTODAT1);
+ } else { /* Shift in 8 bits at the other end */
+ while(m--) OutputByte(ProgIO_ShiftInOut(XAUTODAT1));
+ }
+ } else {
+ BYTE d = XAUTODAT1;
+ WriteOnly = (d & bmBIT6) ? FALSE : TRUE;
+
+ if(d & bmBIT7) {
+ /* Prepare byte transfer, do nothing else yet */
+
+ ClockBytes = d & 0x3F;
+ } else {
+ if(WriteOnly)
+ ProgIO_Set_State(d);
+ else
+ OutputByte(ProgIO_Set_Get_State(d));
+ }
+ i++;
+ }
+ }
+
+ SYNCDELAY;
+ EP2BCL = 0x80; // Re-arm endpoint 2
+ };
+}
+
+//-----------------------------------------------------------------------------
+// Handler for Vendor Requests (
+//-----------------------------------------------------------------------------
+
+unsigned char app_vendor_cmd(void)
+{
+ // OUT requests. Pretend we handle them all...
+
+ if ((bRequestType & bmRT_DIR_MASK) == bmRT_DIR_OUT) {
+ if(bRequest == RQ_GET_STATUS) {
+ Running = 1;
+ }
+ return 1;
+ }
+
+ // IN requests.
+
+ if(bRequest == 0x90) {
+ BYTE addr = (wIndexL<<1) & 0x7F;
+ EP0BUF[0] = eeprom[addr];
+ EP0BUF[1] = eeprom[addr+1];
+ } else {
+ // dummy data
+ EP0BUF[0] = 0x36;
+ EP0BUF[1] = 0x83;
+ }
+
+ EP0BCH = 0;
+ EP0BCL = (wLengthL<2) ? wLengthL : 2; // Arm endpoint with # bytes to transfer
+
+ return 1;
+}
+
+//-----------------------------------------------------------------------------
+
+static void main_loop(void)
+{
+ while(1) {
+ if(usb_setup_packet_avail()) usb_handle_setup_packet();
+ usb_jtag_activity();
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+extern void usb_fifo_init(void);
+
+void main(void)
+{
+ EA = 0; // disable all interrupts
+
+ // Digilent nexys3 and atlys boards change FIFOPINPOLAR such that
+ // EE and FF are active high. In nexys2 boards they are active low
+ // All config regs should be set (even when power on defaults are
+ // use, but this one especially....
+ FIFOPINPOLAR = 0;
+
+ usb_jtag_init();
+ usb_fifo_init();
+ eeprom_init();
+ setup_autovectors ();
+ usb_install_handlers ();
+
+
+ EA = 1; // enable interrupts
+
+ fx2_renumerate(); // simulates disconnect / reconnect
+
+ main_loop();
+}
+
+
+
+
Index: src/usb_fifo_init.c
===================================================================
--- src/usb_fifo_init.c (nonexistent)
+++ src/usb_fifo_init.c (revision 26)
@@ -0,0 +1,210 @@
+/* $Id: usb_fifo_init.c 450 2012-01-05 23:21:41Z mueller $ */
+/*
+ * Copyright 2011-2012 by Walter F.J. Mueller
+ * Code was forked from ixo-jtag.svn.sourceforge.net on 2011-07-17
+ * The data fifo treatment is partially inspired by work of Marco Oster
+ * done at ZITI, Heidelberg in 2010.
+ *
+ * - original copyright and licence disclaimer (of usb_jtag_init) -------------
+ * - Code that turns a Cypress FX2 USB Controller into an USB JTAG adapter
+ * - Copyright (C) 2005..2007 Kolja Waschk, ixo.de
+ * - This code is part of usbjtag. usbjtag is free software;
+ *-----------------------------------------------------------------------------
+ *
+ * This program is free software; you may redistribute and/or modify it under
+ * the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 2, or at your option any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for complete details.
+ *
+ *-----------------------------------------------------------------------------
+ *
+ * USB FIFO setup
+ *
+ * Revision History:
+ *
+ * Date Rev Version Comment
+ * 2012-01-04 450 1.5 new FLAGS layout (D=8-FF,C=4-EF,B=6-FF,A=indexed)
+ * 2012-01-02 448 1.4 add support for sync fifo w/ int. clock (_ic)
+ * 2011-07-24 398 1.1 support 0,2, or 3 data FIFO's
+ * 2011-07-23 397 1.0 Initial version, factored out from usb_jtag_init()
+ *
+ *-----------------------------------------------------------------------------
+ */
+
+#include "fx2regs.h"
+#include "syncdelay.h"
+
+//-----------------------------------------------------------------------------
+
+void usb_fifo_init(void) // Called once at startup
+{
+ // set the CPU clock to 48MHz, enable USB clock output to FPGA
+ // Note: CLKOUT not connected on nexys2, nexys3 and atlys...
+ CPUCS = bmCLKOE | bmCLKSPD1;
+
+ // setup FIFO mode
+ // bmIFCLKSRC clock source: 0 external clock; 1 internal clock
+ // bm3048MHZ clock frequency: 0 30 MHz; 1 48 MHz
+ // bmIFCLKOE IFCLK pin output enable: 0 tri-state; 1 drive
+ // bmIFCLKPOL clock polarity: 0 rising edge active; 1 falling edge active
+ // bmASYNC fifo mode: 0 synchrounous; 1 asynchronous
+ // IFCFG interface mode: bmIFCFGMASK=11->slave fifo
+
+#if defined(USE_IC30)
+ // Use internal 30 MHz, enable output, slave sync FIFO, slave FIFO mode
+ IFCONFIG = bmIFCLKSRC | bmIFCLKOE | bmIFCFGMASK;
+#else
+ // Use internal 30 MHz, enable output, slave async FIFO, slave FIFO mode
+ IFCONFIG = bmIFCLKSRC | bmIFCLKOE | bmASYNC | bmIFCFGMASK;
+#endif
+
+ // Setup PA7 as FLAGD
+ PORTACFG = 0x80; SYNCDELAY; // 1000 0000: FLAGD=1, SLCS=0
+
+ // setup usage of FLAG pins
+ // goal is to support EP4(out) and EP6/EP8(in) synchronous slave fifos
+ // for synchronous operation usage of empty/full and almost empty/full
+ // flags is needed, the later are realized with the programmable flags.
+ // the three empty/full flags are setup as fixed flags, while the three
+ // almost (or programmable) flags are channeled over one indexed flag pin.
+ // FLAGA = indexed, PF (the default)
+ // FLAGB = EP6 FF
+ // FLAGC = EP4 EF
+ // FLAGD = EP8 FF
+
+ PINFLAGSAB = 0xE0; SYNCDELAY; // 1110 0000: B EP6 FF, A indexed
+ PINFLAGSCD = 0xF9; SYNCDELAY; // 1111 1001: D EP8 FF, C EP4 EF
+
+ // define endpoint configuration
+
+ FIFORESET = 0x80; SYNCDELAY; // From now on, NAK all
+ REVCTL = 3; SYNCDELAY; // Allow FW access to FIFO buffer
+
+ // FIFOs used for JTAG emulation
+ // EP1 IN
+ // EP2 OUT
+
+ EP1OUTCFG = 0x00; SYNCDELAY; // EP1 OUT: inactive
+ EP1INCFG = 0xA0; SYNCDELAY; // EP1 IN: active, bulk
+
+ EP2FIFOCFG = 0x00; SYNCDELAY; // EP2 slave: 0, not used as slave
+ FIFORESET = 0x02; SYNCDELAY; // EP2 reset (0x02! see comment below)
+ EP2CFG = 0xA2; SYNCDELAY; // EP2: 1010 0010: VAL,OUT,BULK,DOUBLE
+
+ // TMR (Rev *D) page 117: auto in/out initialization sequence
+ // Auto IN transfers
+ // 1. setup EPxCFG
+ // 2. reset the FIFO
+ // 3. set EPxFIFOCFG.3 = 1
+ // 4. set EPxAUTOINLENH:L
+ // Auto OUT transfers
+ // 1. setup EPxCFG
+ // 2. reset the FIFO
+ // 3. arm OUT buffers by writing OUTPKTEND N times w/ skip=1 (N=buf depth)
+ // 4. set EPxFIFOCFG.4 = 1
+
+ // 2 FIFOs used for DATA transfer:
+ // EP4 OUT DOUBLE
+ // EP6 IN QUAD
+
+#if defined(USE_2FIFO) || defined(USE_3FIFO)
+ EP4CFG = 0xA2; SYNCDELAY; // EP4: 1010 0010: VAL,OUT,BULK,DOUBLE
+#if defined(USE_3FIFO)
+ EP6CFG = 0xE2; SYNCDELAY; // EP6: 1110 0010: VAL,IN,BULK,DOUBLE
+ EP8CFG = 0xE2; SYNCDELAY; // EP8: 1110 0010: VAL,IN,BULK,DOUBLE
+#else
+ EP6CFG = 0xE0; SYNCDELAY; // EP6: 1110 0000: VAL,IN,BULK,QUAD
+ EP8CFG = 0x02; SYNCDELAY; // EP8: disabled
+#endif
+
+ // Note: the description of the FIFORESET in the TMR, Rev *D (2011) is
+ // wrong. The TMR asks to write 0x80,0x82,0x84,0x86,0x88,0x00, e.g
+ // on page 117, also in other contexts.
+ // This doesn't work, FIFO's are in fact not reset !
+ // The proper sequence is 0x80,0x02,0x04,0x06,0x08,0x00, as for
+ // example stated in http://www.cypress.com/?id=4&rID=32093
+ FIFORESET = 0x04; SYNCDELAY; // EP4 reset
+ FIFORESET = 0x06; SYNCDELAY; // EP6 reset
+ FIFORESET = 0x08; SYNCDELAY; // EP8 reset
+ FIFORESET = 0x00; SYNCDELAY; // Restore normal behaviour
+
+ // !! really needed here, before buffers are armed !!
+ REVCTL = 0; SYNCDELAY; // Reset FW access to FIFO buffer
+
+ // EP4 OUT setup ---------------------------------------------------
+ OUTPKTEND = 0x84; SYNCDELAY; // arm all EP4 buffers
+ OUTPKTEND = 0x84; SYNCDELAY;
+ // !! hardware only arms endpoint when AUTOOUT 0->1 transition seen
+ // !! --> clean AUTOOUT to handle for example back-to-back firmware loads
+ EP4FIFOCFG = 0x00; SYNCDELAY; // EP4: force AUTOOUT 0->1 transition
+ EP4FIFOCFG = 0x10; SYNCDELAY; // EP4: 0001 0000: AUTOOUT, BYTE
+ // setup programmable fifo threshold as 'almost empty' at 3 bytes to go
+ // --> keep active low logic for prgrammable flags
+ // --> set flag 1 when fill >= threshold (DECIS=1)
+ // --> almost empty thus at fill<4, effective threshold thus 3 !!
+ EP4FIFOPFH = 0x80; SYNCDELAY; // 0000 0000: DECIS=1, PFC8=0
+ EP4FIFOPFL = 0x04; SYNCDELAY; // PFC = 4 = 0 0000 0100
+
+ // EP6 IN setup ---------------------------------------------------
+ EP6FIFOCFG = 0x0C; SYNCDELAY; // EP6: 0000 1100: AUTOIN, ZEROLEN, BYTE
+ EP6AUTOINLENH = 0x02; SYNCDELAY; // 512 byte buffers
+ EP6AUTOINLENL = 0x00; SYNCDELAY;
+
+ // setup programmable fifo threshold as 'almost full' at 3 bytes to go
+ // --> keep active low logic for prgrammable flags
+ // --> set flag 1 when fill <= threshold (DECIS=0)
+ // --> use full buffer fill
+ // --> for dual buffered: (PKSTAT=0, PKTS=1) [in case 3 fifo's used]
+ // --> for quad buffered: (PKSTAT=0, PKTS=3) [in case 2 fifo's used]
+ // --> effective threshold thus 3 in both bases
+#if defined(USE_3FIFO)
+ EP6FIFOPFH = 0x09; SYNCDELAY; // 0000 1001: DECIS=0, PK=0:1, PFC8=1
+#else
+ EP6FIFOPFH = 0x19; SYNCDELAY; // 0001 1001: DECIS=0, PK=0:3, PFC8=1
+#endif
+ EP6FIFOPFL = 0xfc; SYNCDELAY; // PFC = 508 = 1 1111 1100
+
+#if defined(USE_3FIFO)
+ // EP8 IN setup ---------------------------------------------------
+ EP8FIFOCFG = 0x0C; SYNCDELAY; // EP8: 0000 1100: AUTOIN, ZEROLEN, BYTE
+ EP8AUTOINLENH = 0x02; SYNCDELAY; // 512 byte buffers
+ EP8AUTOINLENL = 0x00; SYNCDELAY;
+ // setup programmable fifo threshold as 'almost full' at 4 bytes to go
+ // like for EP6 above
+ EP8FIFOPFH = 0x41; SYNCDELAY; // 0100 0001: DECIS=0, PKSTAT=1, PFC8=1
+ EP8FIFOPFL = 0xfc; SYNCDELAY; // PFC = 508 = 1 1111 1100
+
+#else
+ // EP8 setup
+ EP8FIFOCFG = 0x00; SYNCDELAY; // EP8 slave: 0, not used as slave
+#endif
+
+#else
+ // no FIFOs used for DATA transfer
+ // EP4,6,8 inactive
+ EP4CFG = 0x02; SYNCDELAY; // EP4: disabled
+ EP6CFG = 0x02; SYNCDELAY; // EP6: disabled
+ EP8CFG = 0x02; SYNCDELAY; // EP8: disabled
+
+ FIFORESET = 0x04; SYNCDELAY; // EP4 reset
+ FIFORESET = 0x06; SYNCDELAY; // EP6 reset
+ FIFORESET = 0x08; SYNCDELAY; // EP8 reset
+ FIFORESET = 0x00; SYNCDELAY; // Restore normal behaviour
+
+ EP4FIFOCFG = 0x00; SYNCDELAY; // EP4 slave: 0, not used as slave
+ EP6FIFOCFG = 0x00; SYNCDELAY; // EP6 slave: 0, not used as slave
+ EP8FIFOCFG = 0x00; SYNCDELAY; // EP8 slave: 0, not used as slave
+
+ REVCTL = 0; SYNCDELAY; // Reset FW access to FIFO buffer
+#endif
+
+ // the EP2 endpoint does not come up armed. It is used with double buffering
+ // so write dummy byte counts twice.
+ SYNCDELAY; //
+ EP2BCL = 0x80; SYNCDELAY; // arm EP2OUT
+ EP2BCL = 0x80; SYNCDELAY; // arm EP2OUT
+}
Index: src/hardware.h
===================================================================
--- src/hardware.h (nonexistent)
+++ src/hardware.h (revision 26)
@@ -0,0 +1,35 @@
+/* $Id: hardware.h 395 2011-07-17 22:02:55Z mueller $ */
+/*-----------------------------------------------------------------------------
+ * Hardware-dependent code for usb_jtag
+ *-----------------------------------------------------------------------------
+ * Copyright (C) 2007 Kolja Waschk, ixo.de
+ *-----------------------------------------------------------------------------
+ * This code is part of usbjtag. usbjtag is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version. usbjtag is distributed in the hope
+ * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details. You should have received a
+ * copy of the GNU General Public License along with this program in the file
+ * COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin
+ * St, Fifth Floor, Boston, MA 02110-1301 USA
+ *-----------------------------------------------------------------------------
+ */
+
+#ifndef _HARDWARE_H
+#define _HARDWARE_H 1
+
+extern void ProgIO_Init(void);
+extern void ProgIO_Poll(void);
+extern void ProgIO_Enable(void);
+extern void ProgIO_Disable(void);
+extern void ProgIO_Deinit(void);
+
+extern void ProgIO_Set_State(unsigned char d);
+extern unsigned char ProgIO_Set_Get_State(unsigned char d);
+extern void ProgIO_ShiftOut(unsigned char x);
+extern unsigned char ProgIO_ShiftInOut(unsigned char x);
+
+#endif /* _HARDWARE_H */
+
Index: src/hw_nexys2.c
===================================================================
--- src/hw_nexys2.c (nonexistent)
+++ src/hw_nexys2.c (revision 26)
@@ -0,0 +1,284 @@
+/* $Id: hw_nexys2.c 447 2011-12-31 19:41:32Z mueller $ */
+/*
+ * Copyright 2011- by Walter F.J. Mueller
+ * Code was forked from ixo-jtag.svn.sourceforge.net on 2011-07-17
+ *
+ * - original copyright and licence disclaimer --------------------------------
+ * - Copyright (C) 2007 Kolja Waschk, ixo.de
+ * - This code is part of usbjtag. usbjtag is free software;
+ * - This code was copied from hw_basic.c and adapted for the Digilent Nexys(2)
+ * - boards by Sune Mai (Oct 2008) with minor cleanups by Hauke Daempfling
+ * - (May 2010). See http://www.fpga4fun.com/forum/viewtopic.php?t=483&start=50
+ * ----------------------------------------------------------------------------
+ *
+ * This program is free software; you may redistribute and/or modify it under
+ * the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 2, or at your option any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for complete details.
+ *
+ * ----------------------------------------------------------------------------
+ * Hardware-dependent code for usb_jtag
+ *
+ * Revision History:
+ *
+ * Date Rev Version Comment
+ * 2011-12-30 447 1.2.1 move JTAG pin OE intoProgIO_Set_State()
+ * 2011-12-29 446 1.2 clean-out all code not relevant for nexys2
+ * 2011-07-23 397 1.1 move IFCONFIG and CPUCS init to usb_fifo_init
+ * 2011-07-17 394 1.0 Initial version (from ixo-jtag/usb_jtag Rev 204)
+ *
+ *-----------------------------------------------------------------------------
+ */
+
+#include
+#include "hardware.h"
+#include "delay.h"
+
+//-----------------------------------------------------------------------------
+
+/* JTAG TCK, AS/PS DCLK */
+
+sbit at 0xB4 TCK; /* Port D.4 */
+#define bmTCKOE bmBIT4
+#define SetTCK(x) do{TCK=(x);}while(0)
+
+/* JTAG TDI, AS ASDI, PS DATA0 */
+
+sbit at 0xB2 TDI; /* Port D.2 */
+#define bmTDIOE bmBIT2
+#define SetTDI(x) do{TDI=(x);}while(0)
+
+/* JTAG TMS, AS/PS nCONFIG */
+
+sbit at 0xB3 TMS; /* Port D.3 */
+#define bmTMSOE bmBIT3
+#define SetTMS(x) do{TMS=(x);}while(0)
+
+/* JTAG TDO, AS/PS CONF_DONE */
+
+sbit at 0xB0 TDO; /* Port D.0 */
+#define bmTDOOE bmBIT0
+#define GetTDO(x) TDO
+
+/* USB Power-On (Nexys2 specific !!) */
+
+sbit at 0xB7 USBPOW; /* Port D.7 */
+#define bmUSBPOWOE bmBIT7
+#define SetUSBPOW(x) do{USBPOW=(x);}while(0)
+
+//-----------------------------------------------------------------------------
+
+#define bmPROGOUTOE (bmTCKOE|bmTDIOE|bmTMSOE)
+#define bmPROGINOE (bmTDOOE)
+
+//-----------------------------------------------------------------------------
+
+void ProgIO_Poll(void) {}
+void ProgIO_Enable(void) {}
+// These aren't called anywhere in usbjtag.c so far, might come...
+void ProgIO_Disable(void) {}
+void ProgIO_Deinit(void) {}
+
+
+void ProgIO_Init(void)
+{
+ /* The following code depends on your actual circuit design.
+ Make required changes _before_ you try the code! */
+
+ // power on the onboard FPGA:
+ // output enable and set to 1 the Nexys2 USB-Power-enable signal
+ SetUSBPOW(1);
+ OED=bmUSBPOWOE;
+ // Note: JTAG signal output enables are in ProgIO_Set_State() below.
+
+ mdelay(500); // wait for supply to come up
+}
+
+void ProgIO_Set_State(unsigned char d)
+{
+ /* Set state of output pins:
+ *
+ * d.0 => TCK
+ * d.1 => TMS
+ * d.4 => TDI
+ */
+
+ // JTAG signal output enables done at first request:
+ // this allows to use the JTAG connector with another JTAG cable
+ // alternatively.
+ OED=(OED&~bmPROGINOE) | bmPROGOUTOE; // Output enable
+
+ SetTCK((d & bmBIT0) ? 1 : 0);
+ SetTMS((d & bmBIT1) ? 1 : 0);
+ SetTDI((d & bmBIT4) ? 1 : 0);
+}
+
+//-----------------------------------------------------------------------------
+// dummied AS/PS code
+#define GetASDO(x) 1
+
+unsigned char ProgIO_Set_Get_State(unsigned char d)
+{
+ /* Set state of output pins (s.a.)
+ * then read state of input pins:
+ *
+ * TDO => d.0
+ * DATAOUT => d.1 (only #ifdef HAVE_AS_MODE)
+ */
+
+ ProgIO_Set_State(d);
+ return (GetASDO()<<1)|GetTDO();
+}
+
+//-----------------------------------------------------------------------------
+
+void ProgIO_ShiftOut(unsigned char c)
+{
+ /* Shift out byte C:
+ *
+ * 8x {
+ * Output least significant bit on TDI
+ * Raise TCK
+ * Shift c right
+ * Lower TCK
+ * }
+ */
+
+ (void)c; /* argument passed in DPL */
+
+ _asm
+ MOV A,DPL
+ ;; Bit0
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit1
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit2
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit3
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit4
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit5
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit6
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit7
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ NOP
+ CLR _TCK
+ ret
+ _endasm;
+}
+
+/*
+;; For ShiftInOut, the timing is a little more
+;; critical because we have to read _TDO/shift/set _TDI
+;; when _TCK is low. But 20% duty cycle at 48/4/5 MHz
+;; is just like 50% at 6 Mhz, and that's still acceptable
+*/
+
+unsigned char ProgIO_ShiftInOut(unsigned char c)
+{
+ /* Shift out byte C, shift in from TDO:
+ *
+ * 8x {
+ * Read carry from TDO
+ * Output least significant bit on TDI
+ * Raise TCK
+ * Shift c right, append carry (TDO) at left
+ * Lower TCK
+ * }
+ * Return c.
+ */
+
+ (void)c; /* argument passed in DPL */
+
+ _asm
+ MOV A,DPL
+
+ ;; Bit0
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit1
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit2
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit3
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit4
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit5
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit6
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit7
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ NOP
+ CLR _TCK
+
+ MOV DPL,A
+ ret
+ _endasm;
+
+ /* return value in DPL */
+
+ return c;
+}
+
Index: src/startup.a51
===================================================================
--- src/startup.a51 (nonexistent)
+++ src/startup.a51 (revision 26)
@@ -0,0 +1,79 @@
+;;; -*- asm -*-
+;;; $Id: startup.a51 395 2011-07-17 22:02:55Z mueller $
+;;;
+;;;-----------------------------------------------------------------------------
+;;; Startup code
+;;;-----------------------------------------------------------------------------
+;;; Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2,
+;;; Copyright 2003 Free Software Foundation, Inc.
+;;;-----------------------------------------------------------------------------
+;;; This code is part of usbjtag. usbjtag is free software; you can redistribute
+;;; it and/or modify it under the terms of the GNU General Public License as
+;;; published by the Free Software Foundation; either version 2 of the License,
+;;; or (at your option) any later version. usbjtag is distributed in the hope
+;;; that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details. You should have received a
+;;; copy of the GNU General Public License along with this program in the file
+;;; COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin
+;;; St, Fifth Floor, Boston, MA 02110-1301 USA
+;;;-----------------------------------------------------------------------------
+
+;;; The default external memory initialization provided by sdcc is not
+;;; appropriate to the FX2. This is derived from the sdcc code, but uses
+;;; the FX2 specific _MPAGE sfr.
+
+
+ ;; .area XISEG (XDATA) ; the initialized external data area
+ ;; .area XINIT (CODE) ; the code space consts to init XISEG
+ .area XSEG (XDATA) ; zero initialized xdata
+ .area USBDESCSEG (XDATA) ; usb descriptors
+
+
+ .area CSEG (CODE)
+
+ ;; sfr that sets upper address byte of MOVX using @r0 or @r1
+ _MPAGE = 0x0092
+
+__sdcc_external_startup::
+ ;; This system is now compiled with the --no-xinit-opt
+ ;; which means that any initialized XDATA is handled
+ ;; inline by code in the GSINIT segs emitted for each file.
+ ;;
+ ;; We zero XSEG and all of the internal ram to ensure
+ ;; a known good state for uninitialized variables.
+
+; _mcs51_genRAMCLEAR() start
+ mov r0,#l_XSEG
+ mov a,r0
+ orl a,#(l_XSEG >> 8)
+ jz 00002$
+ mov r1,#((l_XSEG + 255) >> 8)
+ mov dptr,#s_XSEG
+ clr a
+
+00001$: movx @dptr,a
+ inc dptr
+ djnz r0,00001$
+ djnz r1,00001$
+
+ ;; We're about to clear internal memory. This will overwrite
+ ;; the stack which contains our return address.
+ ;; Pop our return address into DPH, DPL
+00002$: pop dph
+ pop dpl
+
+ ;; R0 and A contain 0. This loop will execute 256 times.
+ ;;
+ ;; FWIW the first iteration writes direct address 0x00,
+ ;; which is the location of r0. We get lucky, we're
+ ;; writing the correct value (0)
+
+00003$: mov @r0,a
+ djnz r0,00003$
+
+ push dpl ; restore our return address
+ push dph
+
+ mov dpl,#0 ; indicate that data init is still required
+ ret
Index: src/eeprom.c
===================================================================
--- src/eeprom.c (nonexistent)
+++ src/eeprom.c (revision 26)
@@ -0,0 +1,78 @@
+/* $Id: eeprom.c 395 2011-07-17 22:02:55Z mueller $ */
+/*-----------------------------------------------------------------------------
+ * FTDI EEPROM emulation
+ *-----------------------------------------------------------------------------
+ * Copyright (C) 2007 Kolja Waschk, ixo.de
+ *-----------------------------------------------------------------------------
+ * This code is part of usbjtag. usbjtag is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version. usbjtag is distributed in the hope
+ * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details. You should have received a
+ * copy of the GNU General Public License along with this program in the file
+ * COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin
+ * St, Fifth Floor, Boston, MA 02110-1301 USA
+ *-----------------------------------------------------------------------------
+ */
+
+#include "eeprom.h"
+#include "usb_descriptors.h"
+
+xdata unsigned char eeprom[128];
+
+extern xdata char dscr_vidpidver[6];
+extern xdata char dscr_attrpow[2];
+extern xdata char dscr_usbver[2];
+extern xdata char dscr_strorder[4];
+extern xdata char str1[];
+extern xdata char str2[];
+extern xdata char str3[];
+
+static unsigned char ee_ptr;
+static unsigned short ee_cksum;
+
+void eeprom_append(unsigned char nb)
+{
+ unsigned char pree_ptr = ee_ptr & ~1;
+ if(pree_ptr != ee_ptr)
+ {
+ ee_cksum = ee_cksum ^((unsigned short)nb << 8);
+ ee_cksum = ee_cksum ^ eeprom[pree_ptr];
+ ee_cksum = (ee_cksum << 1) | (ee_cksum >> 15);
+ };
+ eeprom[ee_ptr++] = nb;
+}
+
+void eeprom_init(void)
+{
+ char j,sofs;
+ ee_ptr = 0;
+ ee_cksum = 0xAAAA;
+
+ eeprom_append(0x00);
+ eeprom_append(0x00);
+ for(j=0;j<6;j++) eeprom_append(dscr_vidpidver[j]);
+ for(j=0;j<2;j++) eeprom_append(dscr_attrpow[j]);
+ eeprom_append(0x1C);
+ eeprom_append(0x00);
+ for(j=0;j<2;j++) eeprom_append(dscr_usbver[j]);
+ sofs = 0x80 + ee_ptr + 6;
+ eeprom_append(sofs);
+ eeprom_append(str1[0]);
+ sofs += str1[0];
+ eeprom_append(sofs);
+ eeprom_append(str2[0]);
+ sofs += str2[0];
+ eeprom_append(sofs);
+ eeprom_append(str3[0]);
+ for(j=0;j>8)&0xFF;
+}
+
Index: src/hw_nexys3.c
===================================================================
--- src/hw_nexys3.c (nonexistent)
+++ src/hw_nexys3.c (revision 26)
@@ -0,0 +1,274 @@
+/* $Id: hw_nexys3.c 447 2011-12-31 19:41:32Z mueller $ */
+/*
+ * Copyright 2011- by Walter F.J. Mueller
+ * Code was forked from ixo-jtag.svn.sourceforge.net on 2011-07-17
+ *
+ * - original copyright and licence disclaimer --------------------------------
+ * - Copyright (C) 2007 Kolja Waschk, ixo.de
+ * - This code is part of usbjtag. usbjtag is free software;
+ * - This code was copied from hw_basic.c and adapted for the Digilent Nexys(2)
+ * - boards by Sune Mai (Oct 2008) with minor cleanups by Hauke Daempfling
+ * - (May 2010). See http://www.fpga4fun.com/forum/viewtopic.php?t=483&start=50
+ * ----------------------------------------------------------------------------
+ *
+ * This program is free software; you may redistribute and/or modify it under
+ * the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 2, or at your option any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for complete details.
+ *
+ * ----------------------------------------------------------------------------
+ * Hardware-dependent code for usb_jtag
+ *
+ * Revision History:
+ *
+ * Date Rev Version Comment
+ * 2011-12-30 447 1.0.1 move JTAG pin OE intoProgIO_Set_State()
+ * 2011-12-29 446 1.0 Initial version (adapt&cleanup from hw_nexys2.c)
+ *
+ *-----------------------------------------------------------------------------
+ */
+
+#include
+#include "hardware.h"
+#include "delay.h"
+
+//-----------------------------------------------------------------------------
+
+/* JTAG TCK, AS/PS DCLK */
+
+sbit at 0xB4 TCK; /* Port D.4 */
+#define bmTCKOE bmBIT4
+#define SetTCK(x) do{TCK=(x);}while(0)
+
+/* JTAG TDI, AS ASDI, PS DATA0 */
+
+sbit at 0xB2 TDI; /* Port D.2 */
+#define bmTDIOE bmBIT2
+#define SetTDI(x) do{TDI=(x);}while(0)
+
+/* JTAG TMS, AS/PS nCONFIG */
+
+sbit at 0xB3 TMS; /* Port D.3 */
+#define bmTMSOE bmBIT3
+#define SetTMS(x) do{TMS=(x);}while(0)
+
+/* JTAG TDO, AS/PS CONF_DONE */
+
+sbit at 0xB0 TDO; /* Port D.0 */
+#define bmTDOOE bmBIT0
+#define GetTDO(x) TDO
+
+//-----------------------------------------------------------------------------
+
+#define bmPROGOUTOE (bmTCKOE|bmTDIOE|bmTMSOE)
+#define bmPROGINOE (bmTDOOE)
+
+//-----------------------------------------------------------------------------
+
+void ProgIO_Poll(void) {}
+void ProgIO_Enable(void) {}
+// These aren't called anywhere in usbjtag.c so far, might come...
+void ProgIO_Disable(void) {}
+void ProgIO_Deinit(void) {}
+
+
+void ProgIO_Init(void)
+{
+ /* The following code depends on your actual circuit design.
+ Make required changes _before_ you try the code! */
+
+ // Note: JTAG signal output enables are in ProgIO_Set_State() below.
+
+ mdelay(500); // wait for supply to come up
+
+}
+
+void ProgIO_Set_State(unsigned char d)
+{
+ /* Set state of output pins:
+ *
+ * d.0 => TCK
+ * d.1 => TMS
+ * d.4 => TDI
+ */
+
+ // JTAG signal output enables done at first request:
+ // this allows to use the JTAG connector with another JTAG cable
+ // alternatively.
+ OED=(OED&~bmPROGINOE) | bmPROGOUTOE; // Output enable
+
+ SetTCK((d & bmBIT0) ? 1 : 0);
+ SetTMS((d & bmBIT1) ? 1 : 0);
+ SetTDI((d & bmBIT4) ? 1 : 0);
+}
+
+//-----------------------------------------------------------------------------
+// dummied AS/PS code
+#define GetASDO(x) 1
+
+unsigned char ProgIO_Set_Get_State(unsigned char d)
+{
+ /* Set state of output pins (s.a.)
+ * then read state of input pins:
+ *
+ * TDO => d.0
+ * DATAOUT => d.1 (only #ifdef HAVE_AS_MODE)
+ */
+
+ ProgIO_Set_State(d);
+ return (GetASDO()<<1)|GetTDO();
+}
+
+//-----------------------------------------------------------------------------
+
+void ProgIO_ShiftOut(unsigned char c)
+{
+ /* Shift out byte C:
+ *
+ * 8x {
+ * Output least significant bit on TDI
+ * Raise TCK
+ * Shift c right
+ * Lower TCK
+ * }
+ */
+
+ (void)c; /* argument passed in DPL */
+
+ _asm
+ MOV A,DPL
+ ;; Bit0
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit1
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit2
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit3
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit4
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit5
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit6
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ ;; Bit7
+ RRC A
+ CLR _TCK
+ MOV _TDI,C
+ SETB _TCK
+ NOP
+ CLR _TCK
+ ret
+ _endasm;
+}
+
+/*
+;; For ShiftInOut, the timing is a little more
+;; critical because we have to read _TDO/shift/set _TDI
+;; when _TCK is low. But 20% duty cycle at 48/4/5 MHz
+;; is just like 50% at 6 Mhz, and that's still acceptable
+*/
+
+unsigned char ProgIO_ShiftInOut(unsigned char c)
+{
+ /* Shift out byte C, shift in from TDO:
+ *
+ * 8x {
+ * Read carry from TDO
+ * Output least significant bit on TDI
+ * Raise TCK
+ * Shift c right, append carry (TDO) at left
+ * Lower TCK
+ * }
+ * Return c.
+ */
+
+ (void)c; /* argument passed in DPL */
+
+ _asm
+ MOV A,DPL
+
+ ;; Bit0
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit1
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit2
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit3
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit4
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit5
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit6
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ CLR _TCK
+ ;; Bit7
+ MOV C,_TDO
+ RRC A
+ MOV _TDI,C
+ SETB _TCK
+ NOP
+ CLR _TCK
+
+ MOV DPL,A
+ ret
+ _endasm;
+
+ /* return value in DPL */
+
+ return c;
+}
+
+
Index: src/dscr_gen.A51
===================================================================
--- src/dscr_gen.A51 (nonexistent)
+++ src/dscr_gen.A51 (revision 26)
@@ -0,0 +1,455 @@
+;;; -*- asm -*-
+;;; $Id: dscr_gen.A51 457 2012-02-12 22:34:20Z mueller $
+;;;
+;;; Copyright 2011-2012 by Walter F.J. Mueller
+;;; Code was forked from ixo-jtag.svn.sourceforge.net on 2011-07-17
+;;;
+;;;- original copyright and licence disclaimer ---------------------------------
+;;;- Copyright 2005..2007 Kolja Waschk, ixo.de
+;;;- Code based on USRP2 firmware (GNU Radio Project), version 3.0.2,
+;;;- Copyright 2003 Free Software Foundation, Inc.
+;;;- This code is part of usbjtag. usbjtag is free software;
+;;;- ---------------------------------------------------------------------------
+;;;
+;;; This program is free software; you may redistribute and/or modify it under
+;;; the terms of the GNU General Public License as published by the Free
+;;; Software Foundation, either version 2, or at your option any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
+;;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+;;; for complete details.
+;;;
+;;;-----------------------------------------------------------------------------
+;;; USB Descriptor, common source for jtag + 0, 2, or 3 hardware fifo interface
+;;;
+;;; Use C preprocessor to create an assembler source for the configurations:
+;;;
+;;; Endpoint Usage Comment
+;;; EP1 IN jtag always defined
+;;; EP2 OUT jtag always defined
+;;; EP4 OUT data defined if USE_2FIFO or USE_3FIFO
+;;; EP6 IN data defined if USE_2FIFO or USE_3FIFO
+;;; EP8 IN data defined if USE_3FIFO
+;;;
+;;; Available preprocessor options
+;;;
+;;; USE_VID USB Vendor ID
+;;; USE_PID USB Product ID
+;;;
+;;; USE_2FIFO if given EP4 OUT and EP6 IN created
+;;; USE_3FIFO if given EP4 OUT, EP6 IN and EP8 IN created
+;;; USE_DID=0xhhhh for product version (default 0x0004)
+;;; USE_MAXPOWER=nnn for USB max current (in units of 2 mA; default 250)
+;;;
+;;; USE_NEXYS2 prefix 'nexys2_' in iProduct string
+;;; USE_NEXYS3 prefix 'nexys3_' in iProduct string
+;;; USE_AS suffix '_as' in iProduct string
+;;; USE_IC suffix '_ic' in iProduct string
+;;;
+;;; Usage
+;;; cpp -P -x assembler-with-cpp dscr_gen.A51 > ...
+;;; cpp -P -x assembler-with-cpp dscr_gen.A51 -DUSE_2FIFO > ...
+;;; cpp -P -x assembler-with-cpp dscr_gen.A51 -DUSE_3FIFO > ...
+;;;
+;;;
+;;; Revision History:
+;;;
+;;; Date Rev Version Comment
+;;; 2012-02-11 457 2.1 iVendor string now reflects firmware file name;
+;;; iSerial string now 00000000;
+;;; VID/PID now via USE_VID/USE_PID defines
+;;; 2011-07-24 398 2.0 Convert all *.a51 to one common source
+;;; 2011-07-17 395 1.1 Use USB 2.0; New string values; use 512 byte for
+;;; all high speed endpoints
+;;; 2011-07-17 395 1.0 Initial version (derived from dscr_jtag.a51)
+;;;-----------------------------------------------------------------------------
+
+#ifndef USE_DID
+#define USE_DID 0x0004
+#endif
+
+#ifndef USE_MAXPOWER
+#define USE_MAXPOWER 250
+#endif
+
+#ifdef USE_3FIFO
+#define NUM_EPS 5
+#elif USE_2FIFO
+#define NUM_EPS 4
+#else
+#define NUM_EPS 2
+#endif
+
+ .module usb_descriptors
+
+ VID = USE_VID ; Vendor ID
+ PID = USE_PID ; Product ID
+ VERSION = USE_DID ; Version
+
+ USB_VER = 0x0200 ; Support USB version 2.00
+ USB_ATTR = 0x80 ; Bus powered, no remote wakeup
+ FTD_ATTR = 0x001C ; Set USB version, use version string, enable suspend PD
+ MAX_POWER = USE_MAXPOWER
+
+ DSCR_DEVICE = 1 ; Descriptor type: Device
+ DSCR_CONFIG = 2 ; Descriptor type: Configuration
+ DSCR_STRING = 3 ; Descriptor type: String
+ DSCR_INTRFC = 4 ; Descriptor type: Interface
+ DSCR_ENDPNT = 5 ; Descriptor type: Endpoint
+ DSCR_DEVQUAL = 6 ; Descriptor type: Device Qualifier
+
+ DSCR_DEVICE_LEN = 18
+ DSCR_CONFIG_LEN = 9
+ DSCR_INTRFC_LEN = 9
+ DSCR_ENDPNT_LEN = 7
+ DSCR_DEVQUAL_LEN = 10
+
+ ET_CONTROL = 0 ; Endpoint type: Control
+ ET_ISO = 1 ; Endpoint type: Isochronous
+ ET_BULK = 2 ; Endpoint type: Bulk
+ ET_INT = 3 ; Endpoint type: Interrupt
+
+;;; --------------------------------------------------------
+;;; external ram data
+;;;--------------------------------------------------------
+
+ .area USBDESCSEG (XDATA)
+
+ .even ; descriptors must be 2-byte aligned for SUDPTR{H,L} to work
+
+ ;; The .even directive isn't really honored by the linker. Bummer!
+ ;; (There's no way to specify an alignment requirement for a given area,
+ ;; hence when they're concatenated together, even doesn't work.)
+ ;;
+ ;; We work around this by telling the linker to put USBDESCSEG
+ ;; at absolute address 0xE100 (see LDFLAGS in Makefile).
+
+;;; ----------------------------------------------------------------
+;;; descriptors used when operating at high speed (480Mbps)
+;;; ----------------------------------------------------------------
+
+_high_speed_device_descr::
+ .db DSCR_DEVICE_LEN
+ .db DSCR_DEVICE
+_dscr_usbver::
+ .db USB_VER ; Specification version (MSB)
+ .db 0x00 ; device class (vendor specific)
+ .db 0x00 ; device subclass (vendor specific)
+ .db 0x00 ; device protocol (vendor specific)
+ .db 64 ; bMaxPacketSize0 for endpoint 0
+_dscr_vidpidver::
+ .db VID ; idVendor
+ .db PID ; idProduct
+ .db VERSION ; bcdDevice
+_dscr_strorder::
+ .db SI_VENDOR ; iManufacturer (string index)
+ .db SI_PRODUCT ; iProduct (string index)
+ .db SI_SERIAL ; iSerial number (string index)
+ .db 1 ; bNumConfigurations
+
+ .even
+_high_speed_devqual_descr::
+ .db DSCR_DEVQUAL_LEN
+ .db DSCR_DEVQUAL
+ .db USB_VER ; bcdUSB (MSB)
+ .db 0xFF ; bDeviceClass
+ .db 0xFF ; bDeviceSubClass
+ .db 0xFF ; bDeviceProtocol
+ .db 64 ; bMaxPacketSize0
+ .db 1 ; bNumConfigurations (one config at 12Mbps)
+ .db 0 ; bReserved
+
+ .even
+_high_speed_config_descr::
+ .db DSCR_CONFIG_LEN
+ .db DSCR_CONFIG
+ .db <(_high_speed_config_descr_end - _high_speed_config_descr)
+ .db >(_high_speed_config_descr_end - _high_speed_config_descr)
+ .db 1 ; bNumInterfaces
+ .db 1 ; bConfigurationValue
+ .db 0 ; iConfiguration
+_dscr_attrpow::
+ .db USB_ATTR ; bmAttributes
+ .db MAX_POWER ; bMaxPower [Unit: 2 mA]
+
+ ;; interface descriptor
+
+ .db DSCR_INTRFC_LEN
+ .db DSCR_INTRFC
+ .db 0 ; bInterfaceNumber (zero based)
+ .db 0 ; bAlternateSetting
+ .db NUM_EPS ; bNumEndpoints
+ .db 0xFF ; bInterfaceClass (vendor specific)
+ .db 0xFF ; bInterfaceSubClass (vendor specific)
+ .db 0xFF ; bInterfaceProtocol (vendor specific)
+ .db SI_PRODUCT ; iInterface (description)
+
+ ;; endpoint descriptor (jtag response)
+
+ .db DSCR_ENDPNT_LEN
+ .db DSCR_ENDPNT
+ .db 0x81 ; bEndpointAddress (EP 1 IN)
+ .db ET_BULK ; bmAttributes
+ .db <512 ; wMaxPacketSize (LSB) !! use only 64 byte
+ .db >512 ; wMaxPacketSize (MSB) !! use only 64 byte
+ .db 0 ; bInterval (iso only)
+
+ ;; endpoint descriptor (jtag request)
+
+ .db DSCR_ENDPNT_LEN
+ .db DSCR_ENDPNT
+ .db 0x02 ; bEndpointAddress (EP 2 OUT)
+ .db ET_BULK ; bmAttributes
+ .db <512 ; wMaxPacketSize (LSB) !! use only 64 byte
+ .db >512 ; wMaxPacketSize (MSB) !! use only 64 byte
+ .db 0 ; bInterval (iso only)
+
+#if defined(USE_2FIFO) || defined(USE_3FIFO)
+
+ ;; endpoint descriptor (RXFIFO HOST->FPGA)
+
+ .db DSCR_ENDPNT_LEN
+ .db DSCR_ENDPNT
+ .db 0x04 ; bEndpointAddress (EP 4 OUT)
+ .db ET_BULK ; bmAttributes
+ .db <512 ; wMaxPacketSize (LSB)
+ .db >512 ; wMaxPacketSize (MSB)
+ .db 0 ; bInterval (iso only)
+
+ ;; endpoint descriptor (TXFIFO FPGA->HOST)
+
+ .db DSCR_ENDPNT_LEN
+ .db DSCR_ENDPNT
+ .db 0x86 ; bEndpointAddress (EP 6 IN)
+ .db ET_BULK ; bmAttributes
+ .db <512 ; wMaxPacketSize (LSB)
+ .db >512 ; wMaxPacketSize (MSB)
+ .db 0 ; bInterval (iso only)
+
+#endif
+
+#if defined(USE_3FIFO)
+
+ ;; endpoint descriptor (extra FIFO FPGA->HOST)
+
+ .db DSCR_ENDPNT_LEN
+ .db DSCR_ENDPNT
+ .db 0x88 ; bEndpointAddress (EP 8 IN)
+ .db ET_BULK ; bmAttributes
+ .db <512 ; wMaxPacketSize (LSB)
+ .db >512 ; wMaxPacketSize (MSB)
+ .db 0 ; bInterval (iso only)
+
+#endif
+
+_high_speed_config_descr_end:
+
+;;; ----------------------------------------------------------------
+;;; descriptors used when operating at full speed (12Mbps)
+;;; no data fifo endpoints defined, if we are in full speed mode this will be no
+;;; fun anyway. Shouldn't happen anyway, unless stone age USB hubs interfere...
+;;; ----------------------------------------------------------------
+
+ .even
+_full_speed_device_descr::
+ .db DSCR_DEVICE_LEN
+ .db DSCR_DEVICE
+ .db USB_VER ; Specification version (MSB)
+ .db 0x00 ; device class (vendor specific)
+ .db 0x00 ; device subclass (vendor specific)
+ .db 0x00 ; device protocol (vendor specific)
+ .db 64 ; bMaxPacketSize0 for endpoint 0
+ .db VID ; idVendor
+ .db PID ; idProduct
+ .db VERSION ; bcdDevice
+ .db SI_VENDOR ; iManufacturer (string index)
+ .db SI_PRODUCT ; iProduct (string index)
+ .db SI_SERIAL ; iSerial number (string index)
+ .db 1 ; bNumConfigurations
+
+;;; describes the other speed (480Mbps)
+ .even
+_full_speed_devqual_descr::
+ .db DSCR_DEVQUAL_LEN
+ .db DSCR_DEVQUAL
+ .db USB_VER ; bcdUSB
+ .db 0xFF ; bDeviceClass
+ .db 0xFF ; bDeviceSubClass
+ .db 0xFF ; bDeviceProtocol
+ .db 64 ; bMaxPacketSize0
+ .db 1 ; bNumConfigurations (one config at 480Mbps)
+ .db 0 ; bReserved
+
+ .even
+_full_speed_config_descr::
+ .db DSCR_CONFIG_LEN
+ .db DSCR_CONFIG
+ .db <(_full_speed_config_descr_end - _full_speed_config_descr)
+ .db >(_full_speed_config_descr_end - _full_speed_config_descr)
+ .db 1 ; bNumInterfaces
+ .db 1 ; bConfigurationValue
+ .db 0 ; iConfiguration
+ .db USB_ATTR ; bmAttributes
+ .db MAX_POWER ; bMaxPower [Unit: 2 mA]
+
+ ;; interface descriptor
+
+ .db DSCR_INTRFC_LEN
+ .db DSCR_INTRFC
+ .db 0 ; bInterfaceNumber (zero based)
+ .db 0 ; bAlternateSetting
+ .db 2 ; bNumEndpoints
+ .db 0xFF ; bInterfaceClass (vendor specific)
+ .db 0xFF ; bInterfaceSubClass (vendor specific)
+ .db 0xFF ; bInterfaceProtocol (vendor specific)
+ .db SI_PRODUCT ; iInterface (description)
+
+ ;; endpoint descriptor
+
+ .db DSCR_ENDPNT_LEN
+ .db DSCR_ENDPNT
+ .db 0x81 ; bEndpointAddress (EP 1 IN)
+ .db ET_BULK ; bmAttributes
+ .db <64 ; wMaxPacketSize (LSB)
+ .db >64 ; wMaxPacketSize (MSB)
+ .db 0 ; bInterval (iso only)
+
+ ;; endpoint descriptor
+
+ .db DSCR_ENDPNT_LEN
+ .db DSCR_ENDPNT
+ .db 0x02 ; bEndpointAddress (EP 2 OUT)
+ .db ET_BULK ; bmAttributes
+ .db <64 ; wMaxPacketSize (LSB)
+ .db >64 ; wMaxPacketSize (MSB)
+ .db 0 ; bInterval (iso only)
+
+_full_speed_config_descr_end:
+
+;;; ----------------------------------------------------------------
+;;; string descriptors
+;;; ----------------------------------------------------------------
+
+_nstring_descriptors::
+ .db (_string_descriptors_end - _string_descriptors) / 2
+
+_string_descriptors::
+ .db str0
+ .db str1
+ .db str2
+ .db str3
+_string_descriptors_end:
+
+ SI_NONE = 0
+ ;; str0 contains the language ID's.
+ .even
+_str0::
+str0: .db str0_end - str0
+ .db DSCR_STRING
+ .db 0
+ .db 0
+ .db <0x0409 ; magic code for US English (LSB)
+ .db >0x0409 ; magic code for US English (MSB)
+str0_end:
+
+ SI_VENDOR = 1
+ .even
+_str1::
+str1: .db str1_end - str1
+ .db DSCR_STRING
+ .db 'w, 0 ; 16-bit unicode
+ .db 'w, 0
+ .db 'w, 0
+ .db '., 0
+ .db 'r, 0
+ .db 'e, 0
+ .db 't, 0
+ .db 'r, 0
+ .db 'o, 0
+ .db '1, 0
+ .db '1, 0
+ .db '., 0
+ .db 'd, 0
+ .db 'e, 0
+str1_end:
+
+ SI_PRODUCT = 2
+ .even
+_str2::
+str2: .db str2_end - str2
+ .db DSCR_STRING
+#if defined(USE_NEXYS2)
+ .db 'n, 0
+ .db 'e, 0
+ .db 'x, 0
+ .db 'y, 0
+ .db 's, 0
+ .db '2, 0
+ .db '_, 0
+#endif
+#if defined(USE_NEXYS3)
+ .db 'n, 0
+ .db 'e, 0
+ .db 'x, 0
+ .db 'y, 0
+ .db 's, 0
+ .db '3, 0
+ .db '_, 0
+#endif
+ .db 'j, 0
+ .db 't, 0
+ .db 'a, 0
+ .db 'g, 0
+#if defined(USE_2FIFO)
+ .db '_, 0
+ .db '2, 0
+ .db 'f, 0
+ .db 'i, 0
+ .db 'f, 0
+ .db 'o, 0
+#endif
+#if defined(USE_3FIFO)
+ .db '_, 0
+ .db '3, 0
+ .db 'f, 0
+ .db 'i, 0
+ .db 'f, 0
+ .db 'o, 0
+#endif
+#if defined(USE_AS)
+ .db '_, 0
+ .db 'a, 0
+ .db 's, 0
+#endif
+#if defined(USE_IC)
+ .db '_, 0
+ .db 'i, 0
+ .db 'c, 0
+#endif
+str2_end:
+
+ SI_SERIAL = 3
+ .even
+_str3::
+str3: .db str3_end - str3
+ .db DSCR_STRING
+ .db '0, 0
+ .db '0, 0
+ .db '0, 0
+ .db '0, 0
+ .db '0, 0
+ .db '0, 0
+ .db '0, 0
+ .db '0, 0
+str3_end:
Index: src/vectors.a51
===================================================================
--- src/vectors.a51 (nonexistent)
+++ src/vectors.a51 (revision 26)
@@ -0,0 +1,177 @@
+;;; -*- asm -*-
+;;; $Id: vectors.a51 395 2011-07-17 22:02:55Z mueller $
+;;;
+;;;-----------------------------------------------------------------------------
+;;; Interrupt vectors
+;;;-----------------------------------------------------------------------------
+;;; Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2,
+;;; Copyright 2003 Free Software Foundation, Inc.
+;;;-----------------------------------------------------------------------------
+;;; This code is part of usbjtag. usbjtag is free software; you can redistribute
+;;; it and/or modify it under the terms of the GNU General Public License as
+;;; published by the Free Software Foundation; either version 2 of the License,
+;;; or (at your option) any later version. usbjtag is distributed in the hope
+;;; that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details. You should have received a
+;;; copy of the GNU General Public License along with this program in the file
+;;; COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin
+;;; St, Fifth Floor, Boston, MA 02110-1301 USA
+;;;-----------------------------------------------------------------------------
+
+;;; N.B. This object module must come first in the list of modules
+
+ .module vectors
+
+;;; ----------------------------------------------------------------
+;;; standard FX2 interrupt vectors
+;;; ----------------------------------------------------------------
+
+ .area CSEG (CODE)
+ .area GSINIT (CODE)
+ .area CSEG (CODE)
+__standard_interrupt_vector::
+__reset_vector::
+ ljmp s_GSINIT
+
+ ;; 13 8-byte entries. We point them all at __isr_nop
+ ljmp __isr_nop ; 3 bytes
+ .ds 5 ; + 5 = 8 bytes for vector slot
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+ ljmp __isr_nop
+ .ds 5
+
+__isr_nop::
+ reti
+
+;;; ----------------------------------------------------------------
+;;; the FIFO/GPIF autovector. 14 4-byte entries.
+;;; must start on a 128 byte boundary.
+;;; ----------------------------------------------------------------
+
+ . = __reset_vector + 0x0080
+
+__fifo_gpif_autovector::
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+
+
+;;; ----------------------------------------------------------------
+;;; the USB autovector. 32 4-byte entries.
+;;; must start on a 256 byte boundary.
+;;; ----------------------------------------------------------------
+
+ . = __reset_vector + 0x0100
+
+__usb_autovector::
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
+ ljmp __isr_nop
+ nop
Index: src/README.txt
===================================================================
--- src/README.txt (nonexistent)
+++ src/README.txt (revision 26)
@@ -0,0 +1,25 @@
+# $Id: README.txt 395 2011-07-17 22:02:55Z mueller $
+#
+
+The FX2 software is based on the Sourceforge project ixo-jtag
+
+ http://sourceforge.net/projects/ixo-jtag/
+
+The usb_jtag sub project was checked out on 2011-07-17 (Rev 204)
+from Sourceforge and take as the basis for the further developement.
+The original README.txt is preserved under README_iso_jtag.txt.
+Only the hw_nexys.c branch is kept on the import.
+
+Change log:
+
+2011-07-17 (Rev 395)
+ - Makefile: reorganized to support multiple target/fifo configs
+ - renames:
+ dscr.a51->dscr_jtag.a51
+ hw_nexys.c->hw_nexys2.c
+ usbjtag.c->main.c
+ - dscr_jtag.a51
+ - Use USB 2.0; New string values
+ - use 512 byte for all high speed endpoints
+ - dscr_jtag_2fifo.a51
+ - dscr with EP4 as HOST->FPGA and EP6 as FPGA->HOST hardware fifo
Index: src/Makefile
===================================================================
--- src/Makefile (nonexistent)
+++ src/Makefile (revision 26)
@@ -0,0 +1,219 @@
+# $Id: Makefile 461 2012-04-09 21:17:54Z mueller $
+#
+# Copyright 2011-2012 by Walter F.J. Mueller
+# Code was forked from ixo-jtag.svn.sourceforge.net on 2011-07-17
+#
+# - original copyright and licence disclaimer --------------------------------
+# - Copyright 2007 Kolja Waschk, ixo.de
+# - This code is part of usbjtag. usbjtag is free software;
+#-----------------------------------------------------------------------------
+#
+# This program is free software; you may redistribute and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 2, or at your option any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for complete details.
+#-----------------------------------------------------------------------------
+#
+# Makefile for FX2 Firmware on Digilent Nexys2, Nexys3, and Atlys boards
+#
+# Revision History:
+# Date Rev Version Comment
+# 2012-04-09 461 1.5.1 fixed nexys3_jtag_3fifo_ic.ihx rule,used _2fifo code
+# 2012-02-11 457 1.5 re-organize VID/PID and descriptor handling
+# 2012-01-02 448 1.4 add support for sync fifo w/ int. clock (_ic)
+# 2011-12-29 446 1.3 add nexys3 support
+# 2011-07-23 397 1.2 add usb_fifo_init.c
+# 2011-07-17 395 1.1 reorganized to support multiple target/fifo configs
+# 2011-07-17 394 1.0 Initial version (from ixo-jtag/usb_jtag Rev 204)
+#-----------------------------------------------------------------------------
+#
+# handle USB VID/PID
+# - normaly given via the environment variables (as 4 digit hex number)
+# RETRO_FX2_VID
+# RETRO_FX2_PID
+#
+# - in the retro11 project the default is:
+# VID: 16c0 (VOTI)
+# PID: 03ef (VOTI free for internal lab use 1007)
+#
+# !! Important Note on Usage of this USB VID/PID !!
+# This VID/PID is owned by VOTI, a small dutch company. Usage is granted
+# for 'internal lab use only' by VOTI under the conditions:
+# - the gadgets in which you use those PIDs do not leave your desk
+# - you won't complain to VOTI if you get in trouble with duplicate PIDs
+# (for instance because someone else did not follow the previous rule).
+# See also http://www.voti.nl/pids/pidfaq.html
+#
+ifndef RETRO_FX2_VID
+RETRO_FX2_VID = 16c0
+endif
+ifndef RETRO_FX2_PID
+RETRO_FX2_PID = 03ef
+endif
+#
+DEFVIDPID=-DUSE_VID=0x${RETRO_FX2_VID} -DUSE_PID=0x${RETRO_FX2_PID}
+#
+# compiler and assembler flags
+#
+LIBDIR=lib
+LIB=libfx2.lib
+
+CC=sdcc
+CFLAGS+=-mmcs51 --no-xinit-opt -I${LIBDIR}
+
+AS=asx8051
+ASFLAGS+=-plosgff
+
+LDFLAGS=--code-loc 0x0000 --code-size 0x1800
+LDFLAGS+=--xram-loc 0x1800 --xram-size 0x0800
+LDFLAGS+=-Wl '-b USBDESCSEG = 0xE100'
+LDFLAGS+=-L ${LIBDIR}
+#
+# compile rules
+#
+%.rel : %.a51
+ $(AS) $(ASFLAGS) $<
+
+%.rel : %.c
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
+#
+# link rule
+#
+%.ihx :
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $+
+#
+# primary target rules
+#
+ALLIHX =nexys2_jtag.ihx
+ALLIHX +=nexys2_jtag_2fifo_as.ihx
+ALLIHX +=nexys2_jtag_3fifo_as.ihx
+ALLIHX +=nexys2_jtag_2fifo_ic.ihx
+ALLIHX +=nexys2_jtag_3fifo_ic.ihx
+ALLIHX +=nexys3_jtag.ihx
+ALLIHX +=nexys3_jtag_2fifo_as.ihx
+ALLIHX +=nexys3_jtag_3fifo_as.ihx
+ALLIHX +=nexys3_jtag_2fifo_ic.ihx
+ALLIHX +=nexys3_jtag_3fifo_ic.ihx
+
+.PHONY: all install
+
+all: $(ALLIHX)
+
+install: $(ALLIHX)
+ cp -p $(ALLIHX) ../bin
+#
+# rules to create USB descriptor sources
+#
+CPPA51=cpp -P -x assembler-with-cpp
+
+dscr_nexys2_jtag.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS2 $< > $@
+dscr_nexys2_jtag_2fifo_as.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS2 -DUSE_2FIFO -DUSE_AS $< > $@
+dscr_nexys2_jtag_3fifo_as.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS2 -DUSE_3FIFO -DUSE_AS $< > $@
+dscr_nexys2_jtag_2fifo_ic.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS2 -DUSE_2FIFO -DUSE_IC $< > $@
+dscr_nexys2_jtag_3fifo_ic.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS2 -DUSE_3FIFO -DUSE_IC $< > $@
+
+dscr_nexys3_jtag.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS3 $< > $@
+dscr_nexys3_jtag_2fifo_as.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS3 -DUSE_2FIFO -DUSE_AS $< > $@
+dscr_nexys3_jtag_3fifo_as.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS3 -DUSE_3FIFO -DUSE_AS $< > $@
+dscr_nexys3_jtag_2fifo_ic.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS3 -DUSE_2FIFO -DUSE_IC $< > $@
+dscr_nexys3_jtag_3fifo_ic.a51 : dscr_gen.A51
+ $(CPPA51) $(DEFVIDPID) -DUSE_NEXYS3 -DUSE_3FIFO -DUSE_IC $< > $@
+#
+# rules to create usb_fifo_init variants
+#
+usb_fifo_init_jtag.rel : usb_fifo_init.c
+ $(CC) -c $(CFLAGS) $< -o $@
+#
+usb_fifo_init_jtag_2fifo_as.rel : usb_fifo_init.c
+ $(CC) -c $(CFLAGS) -DUSE_2FIFO $< -o $@
+usb_fifo_init_jtag_3fifo_as.rel : usb_fifo_init.c
+ $(CC) -c $(CFLAGS) -DUSE_3FIFO $< -o $@
+#
+usb_fifo_init_jtag_2fifo_ic.rel : usb_fifo_init.c
+ $(CC) -c $(CFLAGS) -DUSE_2FIFO -DUSE_IC30 $< -o $@
+usb_fifo_init_jtag_3fifo_ic.rel : usb_fifo_init.c
+ $(CC) -c $(CFLAGS) -DUSE_3FIFO -DUSE_IC30 $< -o $@
+#
+COM_REL=vectors.rel main.rel eeprom.rel startup.rel
+#
+I0_REL=usb_fifo_init_jtag.rel
+#
+IAS2_REL=usb_fifo_init_jtag_2fifo_as.rel
+IAS3_REL=usb_fifo_init_jtag_3fifo_as.rel
+#
+IIC2_REL=usb_fifo_init_jtag_2fifo_ic.rel
+IIC3_REL=usb_fifo_init_jtag_3fifo_ic.rel
+#
+N2_REL=hw_nexys2.rel
+N3_REL=hw_nexys3.rel
+#
+LIB_REL=$(LIBDIR)/$(LIB)
+#
+# rules to compile all code
+#
+$(LIBDIR)/$(LIB) :
+ make -C $(LIBDIR)
+
+eeprom.rel : eeprom.c eeprom.h
+main.rel : main.c hardware.h eeprom.h
+
+$(N2_REL) : hw_nexys2.c hardware.h
+$(N3_REL) : hw_nexys3.c hardware.h
+
+#
+# rules to build Nexys2 firmware images
+#
+nexys2_jtag.ihx : $(COM_REL) dscr_nexys2_jtag.rel \
+ $(N2_REL) $(I0_REL) $(LIB_REL)
+#
+nexys2_jtag_2fifo_as.ihx : $(COM_REL) dscr_nexys2_jtag_2fifo_as.rel \
+ $(N2_REL) $(IAS2_REL) $(LIB_REL)
+nexys2_jtag_3fifo_as.ihx : $(COM_REL) dscr_nexys2_jtag_3fifo_as.rel \
+ $(N2_REL) $(IAS3_REL) $(LIB_REL)
+#
+nexys2_jtag_2fifo_ic.ihx : $(COM_REL) dscr_nexys2_jtag_2fifo_ic.rel \
+ $(N2_REL) $(IIC2_REL) $(LIB_REL)
+nexys2_jtag_3fifo_ic.ihx : $(COM_REL) dscr_nexys2_jtag_3fifo_ic.rel \
+ $(N2_REL) $(IIC3_REL) $(LIB_REL)
+#
+# rules to build Nexys3 firmware images
+#
+nexys3_jtag.ihx : $(COM_REL) dscr_nexys3_jtag.rel \
+ $(N3_REL) $(I0_REL) $(LIB_REL)
+#
+nexys3_jtag_2fifo_as.ihx : $(COM_REL) dscr_nexys3_jtag_2fifo_as.rel \
+ $(N3_REL) $(IAS2_REL) $(LIB_REL)
+nexys3_jtag_3fifo_as.ihx : $(COM_REL) dscr_nexys3_jtag_3fifo_as.rel \
+ $(N3_REL) $(IAS3_REL) $(LIB_REL)
+#
+nexys3_jtag_2fifo_ic.ihx : $(COM_REL) dscr_nexys3_jtag_2fifo_ic.rel \
+ $(N3_REL) $(IIC2_REL) $(LIB_REL)
+nexys3_jtag_3fifo_ic.ihx : $(COM_REL) dscr_nexys3_jtag_3fifo_ic.rel \
+ $(N3_REL) $(IIC3_REL) $(LIB_REL)
+#
+# cleanup phony's
+#
+.PHONY : clean distclean
+
+clean :
+ make -C ${LIBDIR} clean
+ rm -f *.lst *.asm *.lib *.sym *.rel *.mem *.map *.rst *.lnk
+ rm -f dscr_*.a51
+
+distclean : clean
+ rm -f *.ihx
+
+
Index: src/eeprom.h
===================================================================
--- src/eeprom.h (nonexistent)
+++ src/eeprom.h (revision 26)
@@ -0,0 +1,27 @@
+/* $Id: eeprom.h 395 2011-07-17 22:02:55Z mueller $ */
+/*-----------------------------------------------------------------------------
+ * FTDI EEPROM emulation
+ *-----------------------------------------------------------------------------
+ * Copyright (C) 2007 Kolja Waschk, ixo.de
+ *-----------------------------------------------------------------------------
+ * This code is part of usbjtag. usbjtag is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version. usbjtag is distributed in the hope
+ * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details. You should have received a
+ * copy of the GNU General Public License along with this program in the file
+ * COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin
+ * St, Fifth Floor, Boston, MA 02110-1301 USA
+ *-----------------------------------------------------------------------------
+ */
+
+#ifndef _EEPROM_H
+#define _EEPROM_H 1
+
+extern xdata unsigned char eeprom[128];
+extern void eeprom_init(void);
+
+#endif /* _EEPROM_H */
+
Index: src/.cvsignore
===================================================================
--- src/.cvsignore (nonexistent)
+++ src/.cvsignore (revision 26)
@@ -0,0 +1,10 @@
+*.asm
+*.ihx
+*.lnk
+*.lst
+*.map
+*.mem
+*.rel
+*.rst
+*.sym
+dscr_*.a51
Index: src
===================================================================
--- src (nonexistent)
+++ src (revision 26)
src
Property changes :
Added: svn:ignore
## -0,0 +1,43 ##
+*.dep_ghdl
+*.dep_isim
+*.dep_xst
+work-obj93.cf
+*.vcd
+*.ghw
+*.sav
+*.tmp
+*.exe
+ise
+xflow.his
+*.ngc
+*.ncd
+*.pcf
+*.bit
+*.msk
+isim
+isim.log
+isim.wdb
+fuse.log
+*_[sft]sim.vhd
+*_tsim.sdf
+*_xst.log
+*_tra.log
+*_twr.log
+*_map.log
+*_par.log
+*_tsi.log
+*_pad.log
+*_bgn.log
+*_svn.log
+*_sum.log
+*_[dsft]sim.log
+*.asm
+*.ihx
+*.lnk
+*.lst
+*.map
+*.mem
+*.rel
+*.rst
+*.sym
+dscr_*.a51
Index: bin/nexys2_jtag.ihx
===================================================================
--- bin/nexys2_jtag.ihx (nonexistent)
+++ bin/nexys2_jtag.ihx (revision 26)
@@ -0,0 +1,437 @@
+:06000000020DB102006BCD
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030DB700020DBF6B
+:030DD200020DBA55
+:050DBA001203F180FEB0
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120637D001D000D005D0F4
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C0051206741201AAD005D00462
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C00512060BB9
+:06034C00D005D004801072
+:0E0352008A82C004C0051206291201AAD00535
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E600300203120914AD
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206C312BA
+:0603FF000455120CE4128B
+:08040500087ED2AF12078D0240
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E188E0F58212040FD0029034
+:0D04F100E188E02AFAF582C00212040F90A3
+:0B04FE00E1A6E0F58212040FD002908E
+:0A050900E1A6E02AF58212040F902B
+:0A051300E1BEE0F58212040F7A0049
+:0E051D0090E188E0FBC3EA64808BF063F0801D
+:0B052B0095F05017EA2488F582E434B4
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1A6E0FBC3EA64808BF063F080D4
+:0B05560095F05017EA24A6F582E4346B
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1BEE0FBC3EA64808BF063F08091
+:0B05810095F05017EA24BEF582E43428
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009022000010100CF
+:0EE1230080FA0904000002FFFFFF02070581D9
+:0BE131000200020007050202000200CD
+:0EE13C001201000200000040C016EF030400B4
+:04E14A0001020301CA
+:0AE14E000A060002FFFFFF40010077
+:0EE158000902200001010080FA090400000203
+:0EE16600FFFFFF0207058102400000070502CF
+:04E174000240000065
+:01E1780004A2
+:02E1790082E141
+:02E17B0088E139
+:02E17D00A6E119
+:02E17F00BEE1FF
+:06E1820006030000090481
+:0EE188001E037700770077002E0072006500FE
+:0EE19600740072006F00310031002E00640032
+:02E1A400650014
+:0EE1A60018036E0065007800790073003200E7
+:0AE1B4005F006A007400610067005C
+:0EE1BE0012033000300030003000300030001E
+:04E1CC0030003000EF
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:0B060000D2B775B5809001F4020DA088
+:0E060B00AA82ABB574FE5BF5F0741C45F0F5E9
+:0E061900B5EA1392B4EAA2E192B3EAA2E49227
+:02062700B222FD
+:0E06290012060BA2B0E433FA74024AF58222E4
+:0E063700E5821392B2D2B413C2B492B2D2B41E
+:0E06450013C2B492B2D2B413C2B492B2D2B401
+:0E06530013C2B492B2D2B413C2B492B2D2B4F3
+:0E06610013C2B492B2D2B413C2B492B2D2B4E5
+:05066F0000C2B42222CC
+:0E067400E582A2B01392B2D2B4C2B4A2B01307
+:0E06820092B2D2B4C2B4A2B01392B2D2B4C239
+:0E069000B4A2B01392B2D2B4C2B4A2B013920C
+:0E069E00B2D2B4C2B4A2B01392B2D2B4C2B4FB
+:0E06AC00A2B01392B2D2B4C2B4A2B01392B2F2
+:0906BA00D2B400C2B4F582222280
+:0D06C30090E6007412F090E60174ABF09028
+:0E06D000E6707480F00090E60274E0F0009096
+:0E06DE00E60374F9F00090E6047480F00090DA
+:0D06EC00E60B7403F00090E610E4F00090BF
+:0D06F900E61174A0F00090E618E4F0009007
+:0E070600E6047402F00090E61274A2F0009077
+:0E071400E6137402F00090E6147402F00090F8
+:0E072200E6157402F00090E6047404F00090F6
+:0E073000E6047406F00090E6047408F00090F1
+:0E073E00E604E4F00090E619E4F00090E61AFC
+:0E074C00E4F00090E61BE4F00090E60BE4F011
+:0E075A00000090E6917480F00090E6917480AB
+:03076800F000227C
+:08076B0090E6A0E04401F02239
+:0E077300AA8274805AC423541FFB740F5A903C
+:0C078100E6834BF090E683E04420F02279
+:0E078D0090E680E0440AF09000FA120DA09071
+:0E079B00E65D74FFF090E65F74FFF05391EF9F
+:0807A90090E680E054F7F02215
+:060DCC00E478FFF6D8FDFB
+:060DB1007512007513002D
+:0A07B10090E680E0FA30E7197514B5
+:0307BB00007515B1
+:0307BE00E17516CC
+:0307C10012751797
+:0307C400E17518C4
+:0307C7001C751985
+:0307CA00E1751ABC
+:0307CD0058751B41
+:0207D000E12224
+:0407D20075143C75E9
+:0307D60015E175B5
+:0307D900164E7544
+:0307DC0017E175AD
+:0307DF0018587532
+:0307E20019E175A5
+:0307E5001A1C7566
+:0307E8001BE122F0
+:0907EB005391EF75A100D2023216
+:0C07F400C021C0E0C0F0C082C083C00281
+:0E080000C003C004C005C006C007C000C00190
+:0E080E00C0D075D0005391EF75A1001207B154
+:0E081C00D0D0D001D000D007D006D005D00437
+:0D082A00D003D002D083D082D0F0D0E0D037
+:0208370021326C
+:0C083900C021C0E0C0F0C082C083C0023B
+:0E084500C003C004C005C006C007C000C0014B
+:0E085300C0D075D0005391EF75A1001207B10F
+:0E086100D0D0D001D000D007D006D005D004F2
+:0D086F00D003D002D083D082D0F0D0E0D0F2
+:02087C00213227
+:05087E001207B1751C1A
+:03088300EB751DF5
+:0808860007758200120C3D759C
+:03088E001CF475E2
+:060891001D077582101224
+:040897000C3D751C83
+:03089B0039751D8F
+:0C089E0008758214120C3D90E65C743169
+:0208AA00F0223A
+:0D08AC00E582547FFA24F750047582002283
+:0708B900BA0104758201225F
+:0808C000530201E4BA00010437
+:0308C800F5822294
+:0E08CB00AA82BA010C90E6A1E0FB7C008B82B1
+:0308D9008C8322EB
+:0E08DC00BA810C90E6A2E0FB7C008B828C833C
+:0108EA0022EB
+:0E08EB0053027FEA700C90E6A0E0FB7C008BCD
+:0408F900828C832248
+:0E08FD0090E6A3E0FB7C00EAC313FA7D00EA5C
+:09090B002BFBED3C8B82F58322ED
+:0C091400C20290E6B8E0FA530260BA009C
+:030920000280282A
+:05092300BA2002800D66
+:05092800BA4002800E40
+:05092D00BA6002800326
+:03093200020BD2E3
+:0609350012076B020BD259
+:0A093B00120372E5826003020BD282
+:0609450012076B020BD249
+:0D094B0090E6B8E0FA530280BA8002800303
+:03095800020AD3BD
+:0B095B0090E6B9E0FABA0003020A4C73
+:05096600BA0602803515
+:05096B00BA080280083B
+:05097000BA0A02801725
+:03097500020ACDA6
+:0C09780090E740E512F090E68AE4F09071
+:08098400E68B7401F0020BD2B6
+:0C098C0090E740E513F090E68AE4F0905C
+:08099800E68B7401F0020BD2A2
+:0A09A00090E6BBE0FABA01028017EE
+:0509AA00BA02028038D2
+:0509AF00BA03028059AB
+:0509B400BA0602801BE1
+:0509B900BA0702803CBA
+:0309BE00020A46E4
+:0A09C100AA14AB1590E6B3EBF07B2F
+:0909CB000090E6B4EAF0020BD240
+:0A09D400AA16AB1790E6B3EBF07B18
+:0909DE000090E6B4EAF0020BD22D
+:0A09E700AA18AB1990E6B3EBF07B01
+:0909F1000090E6B4EAF0020BD21A
+:0A09FA00AA1AAB1B90E6B3EBF07BEA
+:090A04000090E6B4EAF0020BD206
+:0E0A0D0090E6BAE0FA90E178E0FBC3EA9B4085
+:070A1B000612076B020BD26B
+:0C0A220090E6BAE075F002A42479F58299
+:0B0A2E0074E135F0F583E0FAA3E090DE
+:0D0A3900E6B3F07B0090E6B4EAF0020BD2C9
+:060A460012076B020BD247
+:0D0A4C0090E6B8E0FA53021FBA0002800ADB
+:050A5900BA0102801B40
+:050A5E00BA0266802CC5
+:0E0A630090E740E4F090E741F090E68AF090D2
+:080A7100E68B7402F0020BD2C7
+:0E0A790090E740E4F090E741F090E68AF090BC
+:080A8700E68B7402F0020BD2B1
+:0E0A8F0090E6BCE0F5821208ACE5826025908E
+:0E0A9D00E6BCE0F5821208CBE0FA53020190AD
+:0E0AAB00E740EAF090E741E4F090E68AF09030
+:080AB900E68B7402F0020BD27F
+:060AC10012076B020BD2CC
+:060AC70012076B020BD2C6
+:060ACD0012076B020BD2C0
+:0C0AD30090E6B9E0FA24F45003020BCFC7
+:070ADF00EA2A2A900AE673DF
+:070AE600020BCF020B1C0202
+:060AED000B97020B7802DA
+:060AF3000BCF020BCF0245
+:060AF9000BCF020BCF023F
+:060AFF000BCF020B0A02FE
+:050B05000BCF020B13F1
+:090B0A0090E6BAE0F512020BD2EC
+:090B130090E6BAE0F513020BD2E2
+:0D0B1C0090E6B8E0FA53021FBA000280050F
+:050B2900BA0247800A3A
+:0A0B2E0090E6BAE012076B020BD24A
+:0D0B380090E6BAE0703090E6BCE0F5821265
+:0D0B450008ACE582602390E6BCE0F582126A
+:0E0B520008CBAA82AB83E0FC5304FE8A828BA0
+:0E0B600083ECF090E6BCE0F58212077380642F
+:050B6E0012076B805F1F
+:050B730012076B805A1F
+:0E0B780090E6B8E0FA53021FBA004F90E6BABA
+:070B8600E0FABA010280054C
+:050B8D00BA02028040E5
+:050B920012076B803B1F
+:0E0B970090E6BAE0FA702C90E6BCE0F582120F
+:0D0BA50008ACE582601A90E6BCE0F5821213
+:0E0BB20008CBAA82AB83E0FC4304018A828B4D
+:050BC00083ECF0800D44
+:050BC50012076B80081F
+:050BCA0012076B80031F
+:030BCF0012076B9F
+:080BD20090E6A0E04480F0224F
+:050BDA00AA82BA03002D
+:070BDF004005EA249C5001CF
+:010BE60022EC
+:090BE700740F5AFBBB03028007E6
+:070BF000740F5AFBBB0B451B
+:0A0BF700A2AF9203C2AFEA2400F59A
+:0C0C010082E43400F5837402F07B007480
+:0C0C0D00012AFCE43BFDEC2400F582ED24
+:0A0C19003400F583E51DFCF07402C1
+:0C0C23002AFAE43BFBEA2400F582EB34E3
+:0A0C2F0000F583AA1C7B00EAF0A286
+:030C39000392AF74
+:010C3C002295
+:080C3D00E582FA248350012234
+:060C4500EA5403600122E5
+:0A0C4B00A2AF9204C2AFEA2400F544
+:0C0C550082E43401F5837402F07B00742B
+:0C0C6100012AFCE43BFDEC2400F582EDD0
+:0A0C6D003401F583E51DF074022A3E
+:0B0C7700FAE43BFBEA2400F582EB34BA
+:080C820001F583AA1CEAF0A2AF
+:040C8A000492AF22FF
+:050C8E00AA82BA8000FB
+:070C93004005EA244B50016B
+:010C9A002237
+:060C9B00EA54036001228F
+:0A0CA100A2AF9205C2AFEA2480F56D
+:0C0CAB0082E43400F5837402F07B0074D6
+:0C0CB700012AFCE43BFDEC2480F582EDFA
+:0A0CC3003400F583E51DF074022AE9
+:0B0CCD00FAE43BFBEA2480F582EB34E4
+:080CD80000F583AA1CEAF0A25A
+:040CE0000592AF22A8
+:080CE400C2E8C2EA751C0075AC
+:060CEC001D017582431298
+:040CF2000BDA751C88
+:030CF60080751DE9
+:0C0CF90000758253120BDA0090E650E404
+:0E0D0500F00090E652E4F00090E654E4F000B6
+:0E0D130090E656E4F00090E65174FFF0009078
+:0E0D2100E65374FFF00090E65574FFF000906A
+:0E0D2F00E65774FFF00090E658E4F090E659A5
+:0E0D3D0074FFF090E65AE4F090E65B74FFF06D
+:0E0D4B0090E65CE4F090E65D74FFF090E65EEA
+:0E0D5900E4F090E65F74FFF00090E660E4F0D6
+:0D0D67000090E66174FFF090E662E4F09009
+:0E0D7400E66374FFF090E665E4F090E66874C4
+:0A0D82000BF05391AFD2E8D2EA2241
+:010D8C002244
+:020D8D00AA8238
+:060D8F00120D8CDAFB22BC
+:030D950090FB5080
+:080D9800A3E582458370F922F6
+:040DA000AA82AB83F5
+:080DA400120D951ABAFF011BA4
+:050DAC00EA4B70F42287
+:030DBF007581211A
+:0A0DC2001205DAE5826003020DBAA3
+:00000001FF
Index: bin/nexys2_jtag_2fifo_ic.ihx
===================================================================
--- bin/nexys2_jtag_2fifo_ic.ihx (nonexistent)
+++ bin/nexys2_jtag_2fifo_ic.ihx (revision 26)
@@ -0,0 +1,443 @@
+:06000000020DF002006B8E
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030DF600020DFEED
+:030E1100020DF9D6
+:050DF9001203F180FE71
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120637D001D000D005D0F4
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C0051206741201AAD005D00462
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C00512060BB9
+:06034C00D005D004801072
+:0E0352008A82C004C0051206291201AAD00535
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E6003002031209536E
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206C312BA
+:0603FF000455120D23124B
+:0804050008BDD2AF1207CC02C2
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E196E0F58212040FD0029026
+:0D04F100E196E02AFAF582C00212040F9095
+:0B04FE00E1B4E0F58212040FD0029080
+:0A050900E1B4E02AF58212040F901D
+:0A051300E1DEE0F58212040F7A0029
+:0E051D0090E196E0FBC3EA64808BF063F0800F
+:0B052B0095F05017EA2496F582E434A6
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1B4E0FBC3EA64808BF063F080C6
+:0B05560095F05017EA24B4F582E4345D
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1DEE0FBC3EA64808BF063F08071
+:0B05810095F05017EA24DEF582E43408
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009022E00010100C1
+:0EE1230080FA0904000004FFFFFF02070581D7
+:0EE131000200020007050202000200070504BA
+:0BE13F0002000200070586020002003B
+:0EE14A001201000200000040C016EF030400A6
+:04E1580001020301BC
+:0AE15C000A060002FFFFFF40010069
+:0EE166000902200001010080FA0904000002F5
+:0EE17400FFFFFF0207058102400000070502C1
+:04E182000240000057
+:01E186000494
+:02E1870090E125
+:02E1890096E11D
+:02E18B00B4E1FD
+:02E18D00DEE1D1
+:06E1900006030000090473
+:0EE196001E037700770077002E0072006500F0
+:0EE1A400740072006F00310031002E00640024
+:02E1B200650006
+:0EE1B4002A036E0065007800790073003200C7
+:0EE1C2005F006A007400610067005F003200B9
+:0EE1D0006600690066006F005F006900630072
+:0EE1DE001203300030003000300030003000FE
+:04E1EC0030003000CF
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:0B060000D2B775B5809001F4020DDF49
+:0E060B00AA82ABB574FE5BF5F0741C45F0F5E9
+:0E061900B5EA1392B4EAA2E192B3EAA2E49227
+:02062700B222FD
+:0E06290012060BA2B0E433FA74024AF58222E4
+:0E063700E5821392B2D2B413C2B492B2D2B41E
+:0E06450013C2B492B2D2B413C2B492B2D2B401
+:0E06530013C2B492B2D2B413C2B492B2D2B4F3
+:0E06610013C2B492B2D2B413C2B492B2D2B4E5
+:05066F0000C2B42222CC
+:0E067400E582A2B01392B2D2B4C2B4A2B01307
+:0E06820092B2D2B4C2B4A2B01392B2D2B4C239
+:0E069000B4A2B01392B2D2B4C2B4A2B013920C
+:0E069E00B2D2B4C2B4A2B01392B2D2B4C2B4FB
+:0E06AC00A2B01392B2D2B4C2B4A2B01392B2F2
+:0906BA00D2B400C2B4F582222280
+:0D06C30090E6007412F090E60174A3F09030
+:0E06D000E6707480F00090E60274E0F0009096
+:0E06DE00E60374F9F00090E6047480F00090DA
+:0D06EC00E60B7403F00090E610E4F00090BF
+:0D06F900E61174A0F00090E618E4F0009007
+:0E070600E6047402F00090E61274A2F0009077
+:0E071400E61374A2F00090E61474E0F000907A
+:0E072200E6157402F00090E6047404F00090F6
+:0E073000E6047406F00090E6047408F00090F1
+:0E073E00E604E4F00090E60BE4F00090E649DB
+:0E074C007484F00090E6497484F00090E61981
+:0E075A00E4F00090E6197410F00090E632749E
+:0E07680080F00090E6337404F00090E61A74FE
+:0E0776000CF00090E6247402F00090E625E4FA
+:0E078400F00090E6347419F00090E63574FC35
+:0E079200F00090E61BE4F0000090E691748009
+:0A07A000F00090E6917480F0002252
+:0807AA0090E6A0E04401F022FA
+:0E07B200AA8274805AC423541FFB740F5A90FD
+:0C07C000E6834BF090E683E04420F0223A
+:0E07CC0090E680E0440AF09000FA120DDF90F3
+:0E07DA00E65D74FFF090E65F74FFF05391EF60
+:0807E80090E680E054F7F022D6
+:060E0B00E478FFF6D8FDBB
+:060DF000751200751300EE
+:0A07F00090E680E0FA30E719751476
+:0307FA0000751572
+:0307FD00E175168D
+:0308000012751757
+:03080300E1751884
+:030806001C751945
+:03080900E1751A7C
+:03080C0066751BF3
+:02080F00E122E4
+:0408110075144A759B
+:0308150015E17575
+:03081800165C75F6
+:03081B0017E1756D
+:03081E00186675E4
+:0308210019E17565
+:030824001A1C7526
+:030827001BE122B0
+:09082A005391EF75A100D20232D6
+:0C083300C021C0E0C0F0C082C083C00241
+:0E083F00C003C004C005C006C007C000C00151
+:0E084D00C0D075D0005391EF75A1001207F0D6
+:0E085B00D0D0D001D000D007D006D005D004F8
+:0D086900D003D002D083D082D0F0D0E0D0F8
+:0208760021322D
+:0C087800C021C0E0C0F0C082C083C002FC
+:0E088400C003C004C005C006C007C000C0010C
+:0E089200C0D075D0005391EF75A1001207F091
+:0E08A000D0D0D001D000D007D006D005D004B3
+:0D08AE00D003D002D083D082D0F0D0E0D0B3
+:0208BB002132E8
+:0508BD001207F0751C9C
+:0308C2002A751D77
+:0808C50008758200120C7C751D
+:0308CD001C337564
+:0608D0001D0875821012E4
+:0408D6000C7C751C05
+:0308DA0078751D11
+:0C08DD0008758214120C7C90E65C7431EB
+:0208E900F022FB
+:0D08EB00E582547FFA24F750047582002244
+:0708F800BA01047582012220
+:0808FF00530201E4BA000104F8
+:03090700F5822254
+:0E090A00AA82BA010C90E6A1E0FB7C008B8271
+:030918008C8322AB
+:0E091B00BA810C90E6A2E0FB7C008B828C83FC
+:0109290022AB
+:0E092A0053027FEA700C90E6A0E0FB7C008B8D
+:04093800828C832208
+:0E093C0090E6A3E0FB7C00EAC313FA7D00EA1C
+:09094A002BFBED3C8B82F58322AE
+:0C095300C20290E6B8E0FA530260BA005D
+:03095F00028028EB
+:05096200BA2002800D27
+:05096700BA4002800E01
+:05096C00BA60028003E7
+:03097100020C1164
+:060974001207AA020C119B
+:0A097A00120372E5826003020C1103
+:060984001207AA020C118B
+:0D098A0090E6B8E0FA530280BA80028003C4
+:03099700020B123E
+:0B099A0090E6B9E0FABA0003020A8BF5
+:0509A500BA06028035D6
+:0509AA00BA08028008FC
+:0509AF00BA0A028017E6
+:0309B400020B0C27
+:0C09B70090E740E512F090E68AE4F09032
+:0809C300E68B7401F0020C1137
+:0C09CB0090E740E513F090E68AE4F0901D
+:0809D700E68B7401F0020C1123
+:0A09DF0090E6BBE0FABA01028017AF
+:0509E900BA0202803893
+:0509EE00BA030280596C
+:0509F300BA0602801BA2
+:0509F800BA0702803C7B
+:0309FD00020A8566
+:0A0A0000AA14AB1590E6B3EBF07BEF
+:090A0A000090E6B4EAF0020C11C0
+:0A0A1300AA16AB1790E6B3EBF07BD8
+:090A1D000090E6B4EAF0020C11AD
+:0A0A2600AA18AB1990E6B3EBF07BC1
+:090A30000090E6B4EAF0020C119A
+:0A0A3900AA1AAB1B90E6B3EBF07BAA
+:090A43000090E6B4EAF0020C1187
+:0E0A4C0090E6BAE0FA90E186E0FBC3EA9B4038
+:070A5A00061207AA020C11AD
+:0C0A610090E6BAE075F002A42487F5824C
+:0B0A6D0074E135F0F583E0FAA3E0909F
+:0D0A7800E6B3F07B0090E6B4EAF0020C114A
+:060A85001207AA020C1189
+:0D0A8B0090E6B8E0FA53021FBA0002800A9C
+:050A9800BA0102801B01
+:050A9D00BA0266802C86
+:0E0AA20090E740E4F090E741F090E68AF09093
+:080AB000E68B7402F0020C1148
+:0E0AB80090E740E4F090E741F090E68AF0907D
+:080AC600E68B7402F0020C1132
+:0E0ACE0090E6BCE0F5821208EBE58260259010
+:0E0ADC00E6BCE0F58212090AE0FA530201902E
+:0E0AEA00E740EAF090E741E4F090E68AF090F1
+:080AF800E68B7402F0020C1100
+:060B00001207AA020C110D
+:060B06001207AA020C1107
+:060B0C001207AA020C1101
+:0C0B120090E6B9E0FA24F45003020C0E47
+:070B1E00EA2A2A900B25735F
+:070B2500020C0E020B5B0243
+:060B2C000BD6020BB7021C
+:060B32000C0E020C0E0285
+:060B38000C0E020C0E027F
+:060B3E000C0E020B49023F
+:050B44000C0E020B5233
+:090B490090E6BAE0F512020C116D
+:090B520090E6BAE0F513020C1163
+:0D0B5B0090E6B8E0FA53021FBA00028005D0
+:050B6800BA0247800AFB
+:0A0B6D0090E6BAE01207AA020C118C
+:0D0B770090E6BAE0703090E6BCE0F5821226
+:0D0B840008EBE582602390E6BCE0F58212EC
+:0E0B9100090AAA82AB83E0FC5304FE8A828B21
+:0E0B9F0083ECF090E6BCE0F5821207B28064B1
+:050BAD001207AA805FA1
+:050BB2001207AA805AA1
+:0E0BB70090E6B8E0FA53021FBA004F90E6BA7B
+:070BC500E0FABA010280050D
+:050BCC00BA02028040A6
+:050BD1001207AA803BA1
+:0E0BD60090E6BAE0FA702C90E6BCE0F58212D0
+:0D0BE40008EBE582601A90E6BCE0F5821295
+:0E0BF100090AAA82AB83E0FC4304018A828BCE
+:050BFF0083ECF0800D05
+:050C04001207AA8008A0
+:050C09001207AA8003A0
+:030C0E001207AA20
+:080C110090E6A0E04480F0220F
+:050C1900AA82BA0300ED
+:070C1E004005EA249C50018F
+:010C250022AC
+:090C2600740F5AFBBB03028007A6
+:070C2F00740F5AFBBB0B45DB
+:0A0C3600A2AF9203C2AFEA2400F55A
+:0C0C400082E43400F5837402F07B007441
+:0C0C4C00012AFCE43BFDEC2400F582EDE5
+:0A0C58003400F583E51DFCF0740282
+:0C0C62002AFAE43BFBEA2400F582EB34A4
+:0A0C6E0000F583AA1C7B00EAF0A247
+:030C78000392AF35
+:010C7B002256
+:080C7C00E582FA2483500122F5
+:060C8400EA5403600122A6
+:0A0C8A00A2AF9204C2AFEA2400F505
+:0C0C940082E43401F5837402F07B0074EC
+:0C0CA000012AFCE43BFDEC2400F582ED91
+:0A0CAC003401F583E51DF074022AFF
+:0B0CB600FAE43BFBEA2400F582EB347B
+:080CC10001F583AA1CEAF0A270
+:040CC9000492AF22C0
+:050CCD00AA82BA8000BC
+:070CD2004005EA244B50012C
+:010CD90022F8
+:060CDA00EA540360012250
+:0A0CE000A2AF9205C2AFEA2480F52E
+:0C0CEA0082E43400F5837402F07B007497
+:0C0CF600012AFCE43BFDEC2480F582EDBB
+:0A0D02003400F583E51DF074022AA9
+:0B0D0C00FAE43BFBEA2480F582EB34A4
+:080D170000F583AA1CEAF0A21A
+:040D1F000592AF2268
+:080D2300C2E8C2EA751C00756C
+:060D2B001D017582431258
+:040D31000C19751C08
+:030D350080751DA9
+:0C0D380000758253120C190090E650E484
+:0E0D4400F00090E652E4F00090E654E4F00077
+:0E0D520090E656E4F00090E65174FFF0009039
+:0E0D6000E65374FFF00090E65574FFF000902B
+:0E0D6E00E65774FFF00090E658E4F090E65966
+:0E0D7C0074FFF090E65AE4F090E65B74FFF02E
+:0E0D8A0090E65CE4F090E65D74FFF090E65EAB
+:0E0D9800E4F090E65F74FFF00090E660E4F097
+:0D0DA6000090E66174FFF090E662E4F090CA
+:0E0DB300E66374FFF090E665E4F090E6687485
+:0A0DC1000BF05391AFD2E8D2EA2202
+:010DCB002205
+:020DCC00AA82F9
+:060DCE00120DCBDAFB223E
+:030DD40090FB5041
+:080DD700A3E582458370F922B7
+:040DDF00AA82AB83B6
+:080DE300120DD41ABAFF011B26
+:050DEB00EA4B70F42248
+:030DFE00758121DB
+:0A0E01001205DAE5826003020DF924
+:00000001FF
Index: bin/nexys2_jtag_3fifo_ic.ihx
===================================================================
--- bin/nexys2_jtag_3fifo_ic.ihx (nonexistent)
+++ bin/nexys2_jtag_3fifo_ic.ihx (revision 26)
@@ -0,0 +1,446 @@
+:06000000020E0C02006B71
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030E1200020E1AB3
+:030E2D00020E159D
+:050E15001203F180FE54
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120637D001D000D005D0F4
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C0051206741201AAD005D00462
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C00512060BB9
+:06034C00D005D004801072
+:0E0352008A82C004C0051206291201AAD00535
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E60030020312096F52
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206C312BA
+:0603FF000455120D3F122F
+:0804050008D9D2AF1207E8028A
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E19EE0F58212040FD002901E
+:0D04F100E19EE02AFAF582C00212040F908D
+:0B04FE00E1BCE0F58212040FD0029078
+:0A050900E1BCE02AF58212040F9015
+:0A051300E1E6E0F58212040F7A0021
+:0E051D0090E19EE0FBC3EA64808BF063F08007
+:0B052B0095F05017EA249EF582E4349E
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1BCE0FBC3EA64808BF063F080BE
+:0B05560095F05017EA24BCF582E43455
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1E6E0FBC3EA64808BF063F08069
+:0B05810095F05017EA24E6F582E43400
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009023500010100BA
+:0EE1230080FA0904000005FFFFFF02070581D6
+:0EE131000200020007050202000200070504BA
+:0EE13F000200020007058602000200070588A4
+:04E14D0002000200CA
+:0EE152001201000200000040C016EF0304009E
+:04E1600001020301B4
+:0AE164000A060002FFFFFF40010061
+:0EE16E000902200001010080FA0904000002ED
+:0EE17C00FFFFFF0207058102400000070502B9
+:04E18A00024000004F
+:01E18E00048C
+:02E18F0098E115
+:02E191009EE10D
+:02E19300BCE1ED
+:02E19500E6E1C1
+:06E198000603000009046B
+:0EE19E001E037700770077002E0072006500E8
+:0EE1AC00740072006F00310031002E0064001C
+:02E1BA006500FE
+:0EE1BC002A036E0065007800790073003200BF
+:0EE1CA005F006A007400610067005F003300B0
+:0EE1D8006600690066006F005F00690063006A
+:0EE1E6001203300030003000300030003000F6
+:04E1F40030003000C7
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:0B060000D2B775B5809001F4020DFB2D
+:0E060B00AA82ABB574FE5BF5F0741C45F0F5E9
+:0E061900B5EA1392B4EAA2E192B3EAA2E49227
+:02062700B222FD
+:0E06290012060BA2B0E433FA74024AF58222E4
+:0E063700E5821392B2D2B413C2B492B2D2B41E
+:0E06450013C2B492B2D2B413C2B492B2D2B401
+:0E06530013C2B492B2D2B413C2B492B2D2B4F3
+:0E06610013C2B492B2D2B413C2B492B2D2B4E5
+:05066F0000C2B42222CC
+:0E067400E582A2B01392B2D2B4C2B4A2B01307
+:0E06820092B2D2B4C2B4A2B01392B2D2B4C239
+:0E069000B4A2B01392B2D2B4C2B4A2B013920C
+:0E069E00B2D2B4C2B4A2B01392B2D2B4C2B4FB
+:0E06AC00A2B01392B2D2B4C2B4A2B01392B2F2
+:0906BA00D2B400C2B4F582222280
+:0D06C30090E6007412F090E60174A3F09030
+:0E06D000E6707480F00090E60274E0F0009096
+:0E06DE00E60374F9F00090E6047480F00090DA
+:0D06EC00E60B7403F00090E610E4F00090BF
+:0D06F900E61174A0F00090E618E4F0009007
+:0E070600E6047402F00090E61274A2F0009077
+:0E071400E61374A2F00090E61474E2F0009078
+:0E072200E61574E2F00090E6047404F0009016
+:0E073000E6047406F00090E6047408F00090F1
+:0E073E00E604E4F00090E60BE4F00090E649DB
+:0E074C007484F00090E6497484F00090E61981
+:0E075A00E4F00090E6197410F00090E632749E
+:0E07680080F00090E6337404F00090E61A74FE
+:0E0776000CF00090E6247402F00090E625E4FA
+:0E078400F00090E6347409F00090E63574FC45
+:0E079200F00090E61B740CF00090E626740256
+:0E07A000F00090E627E4F00090E6367441F099
+:0E07AE000090E63774FCF0000090E691748035
+:0A07BC00F00090E6917480F0002236
+:0807C60090E6A0E04401F022DE
+:0E07CE00AA8274805AC423541FFB740F5A90E1
+:0C07DC00E6834BF090E683E04420F0221E
+:0E07E80090E680E0440AF09000FA120DFB90BB
+:0E07F600E65D74FFF090E65F74FFF05391EF44
+:0808040090E680E054F7F022B9
+:060E2700E478FFF6D8FD9F
+:060E0C00751200751300D1
+:0A080C0090E680E0FA30E719751459
+:0308160000751555
+:03081900E1751670
+:03081C001275173B
+:03081F00E1751868
+:030822001C751929
+:03082500E1751A60
+:030828006E751BCF
+:02082B00E122C8
+:04082D007514527577
+:0308310015E17559
+:03083400166475D2
+:0308370017E17551
+:03083A00186E75C0
+:03083D0019E17549
+:030840001A1C750A
+:030843001BE12294
+:090846005391EF75A100D20232BA
+:0C084F00C021C0E0C0F0C082C083C00225
+:0E085B00C003C004C005C006C007C000C00135
+:0E086900C0D075D0005391EF75A10012080C9D
+:0E087700D0D0D001D000D007D006D005D004DC
+:0D088500D003D002D083D082D0F0D0E0D0DC
+:02089200213211
+:0C089400C021C0E0C0F0C082C083C002E0
+:0E08A000C003C004C005C006C007C000C001F0
+:0E08AE00C0D075D0005391EF75A10012080C58
+:0E08BC00D0D0D001D000D007D006D005D00497
+:0D08CA00D003D002D083D082D0F0D0E0D097
+:0208D7002132CC
+:0508D90012080C751C63
+:0308DE0046751D3F
+:0808E10008758200120C9875E5
+:0308E9001C4F752C
+:0608EC001D0875821012C8
+:0408F2000C98751CCD
+:0308F60094751DD9
+:0C08F90008758214120C9890E65C7431B3
+:02090500F022DE
+:0D090700E582547FFA24F750047582002227
+:07091400BA01047582012203
+:08091B00530201E4BA000104DB
+:03092300F5822238
+:0E092600AA82BA010C90E6A1E0FB7C008B8255
+:030934008C83228F
+:0E093700BA810C90E6A2E0FB7C008B828C83E0
+:01094500228F
+:0E09460053027FEA700C90E6A0E0FB7C008B71
+:04095400828C8322EC
+:0E09580090E6A3E0FB7C00EAC313FA7D00EA00
+:090966002BFBED3C8B82F5832292
+:0C096F00C20290E6B8E0FA530260BA0041
+:03097B00028028CF
+:05097E00BA2002800D0B
+:05098300BA4002800EE5
+:05098800BA60028003CB
+:03098D00020C2D2C
+:060990001207C6020C2D47
+:0A099600120372E5826003020C2DCB
+:0609A0001207C6020C2D37
+:0D09A60090E6B8E0FA530280BA80028003A8
+:0309B300020B2E06
+:0B09B60090E6B9E0FABA0003020AA7BD
+:0509C100BA06028035BA
+:0509C600BA08028008E0
+:0509CB00BA0A028017CA
+:0309D000020B28EF
+:0C09D30090E740E512F090E68AE4F09016
+:0809DF00E68B7401F0020C2DFF
+:0C09E70090E740E513F090E68AE4F09001
+:0809F300E68B7401F0020C2DEB
+:0A09FB0090E6BBE0FABA0102801793
+:050A0500BA0202803876
+:050A0A00BA030280594F
+:050A0F00BA0602801B85
+:050A1400BA0702803C5E
+:030A1900020AA12D
+:0A0A1C00AA14AB1590E6B3EBF07BD3
+:090A26000090E6B4EAF0020C2D88
+:0A0A2F00AA16AB1790E6B3EBF07BBC
+:090A39000090E6B4EAF0020C2D75
+:0A0A4200AA18AB1990E6B3EBF07BA5
+:090A4C000090E6B4EAF0020C2D62
+:0A0A5500AA1AAB1B90E6B3EBF07B8E
+:090A5F000090E6B4EAF0020C2D4F
+:0E0A680090E6BAE0FA90E18EE0FBC3EA9B4014
+:070A7600061207C6020C2D59
+:0C0A7D0090E6BAE075F002A4248FF58228
+:0B0A890074E135F0F583E0FAA3E09083
+:0D0A9400E6B3F07B0090E6B4EAF0020C2D12
+:060AA1001207C6020C2D35
+:0D0AA70090E6B8E0FA53021FBA0002800A80
+:050AB400BA0102801BE5
+:050AB900BA0266802C6A
+:0E0ABE0090E740E4F090E741F090E68AF09077
+:080ACC00E68B7402F0020C2D10
+:0E0AD40090E740E4F090E741F090E68AF09061
+:080AE200E68B7402F0020C2DFA
+:0E0AEA0090E6BCE0F582120907E582602590D7
+:0E0AF800E6BCE0F582120926E0FA53020190F6
+:0E0B0600E740EAF090E741E4F090E68AF090D4
+:080B1400E68B7402F0020C2DC7
+:060B1C001207C6020C2DB9
+:060B22001207C6020C2DB3
+:060B28001207C6020C2DAD
+:0C0B2E0090E6B9E0FA24F45003020C2A0F
+:070B3A00EA2A2A900B417327
+:070B4100020C2A020B7702EF
+:060B48000BF2020BD302C8
+:060B4E000C2A020C2A0231
+:060B54000C2A020C2A022B
+:060B5A000C2A020B6502EB
+:050B60000C2A020B6EDF
+:090B650090E6BAE0F512020C2D35
+:090B6E0090E6BAE0F513020C2D2B
+:0D0B770090E6B8E0FA53021FBA00028005B4
+:050B8400BA0247800ADF
+:0A0B890090E6BAE01207C6020C2D38
+:0D0B930090E6BAE0703090E6BCE0F582120A
+:0D0BA0000907E582602390E6BCE0F58212B3
+:0E0BAD000926AA82AB83E0FC5304FE8A828BE9
+:0E0BBB0083ECF090E6BCE0F5821207CE806479
+:050BC9001207C6805F69
+:050BCE001207C6805A69
+:0E0BD30090E6B8E0FA53021FBA004F90E6BA5F
+:070BE100E0FABA01028005F1
+:050BE800BA020280408A
+:050BED001207C6803B69
+:0E0BF20090E6BAE0FA702C90E6BCE0F58212B4
+:0D0C00000907E582601A90E6BCE0F582125B
+:0E0C0D000926AA82AB83E0FC4304018A828B95
+:050C1B0083ECF0800DE8
+:050C20001207C6800868
+:050C25001207C6800368
+:030C2A001207C6E8
+:080C2D0090E6A0E04480F022F3
+:050C3500AA82BA0300D1
+:070C3A004005EA249C500173
+:010C41002290
+:090C4200740F5AFBBB030280078A
+:070C4B00740F5AFBBB0B45BF
+:0A0C5200A2AF9203C2AFEA2400F53E
+:0C0C5C0082E43400F5837402F07B007425
+:0C0C6800012AFCE43BFDEC2400F582EDC9
+:0A0C74003400F583E51DFCF0740266
+:0C0C7E002AFAE43BFBEA2400F582EB3488
+:0A0C8A0000F583AA1C7B00EAF0A22B
+:030C94000392AF19
+:010C9700223A
+:080C9800E582FA2483500122D9
+:060CA000EA54036001228A
+:0A0CA600A2AF9204C2AFEA2400F5E9
+:0C0CB00082E43401F5837402F07B0074D0
+:0C0CBC00012AFCE43BFDEC2400F582ED75
+:0A0CC8003401F583E51DF074022AE3
+:0B0CD200FAE43BFBEA2400F582EB345F
+:080CDD0001F583AA1CEAF0A254
+:040CE5000492AF22A4
+:050CE900AA82BA8000A0
+:070CEE004005EA244B500110
+:010CF50022DC
+:060CF600EA540360012234
+:0A0CFC00A2AF9205C2AFEA2480F512
+:0C0D060082E43400F5837402F07B00747A
+:0C0D1200012AFCE43BFDEC2480F582ED9E
+:0A0D1E003400F583E51DF074022A8D
+:0B0D2800FAE43BFBEA2480F582EB3488
+:080D330000F583AA1CEAF0A2FE
+:040D3B000592AF224C
+:080D3F00C2E8C2EA751C007550
+:060D47001D01758243123C
+:040D4D000C35751CD0
+:030D510080751D8D
+:0C0D540000758253120C350090E650E44C
+:0E0D6000F00090E652E4F00090E654E4F0005B
+:0E0D6E0090E656E4F00090E65174FFF000901D
+:0E0D7C00E65374FFF00090E65574FFF000900F
+:0E0D8A00E65774FFF00090E658E4F090E6594A
+:0E0D980074FFF090E65AE4F090E65B74FFF012
+:0E0DA60090E65CE4F090E65D74FFF090E65E8F
+:0E0DB400E4F090E65F74FFF00090E660E4F07B
+:0D0DC2000090E66174FFF090E662E4F090AE
+:0E0DCF00E66374FFF090E665E4F090E6687469
+:0A0DDD000BF05391AFD2E8D2EA22E6
+:010DE70022E9
+:020DE800AA82DD
+:060DEA00120DE7DAFB2206
+:030DF00090FB5025
+:080DF300A3E582458370F9229B
+:040DFB00AA82AB839A
+:080DFF00120DF01ABAFF011BEE
+:050E0700EA4B70F4222B
+:030E1A00758121BE
+:0A0E1D001205DAE5826003020E15EB
+:00000001FF
Index: bin/nexys3_jtag.ihx
===================================================================
--- bin/nexys3_jtag.ihx (nonexistent)
+++ bin/nexys3_jtag.ihx (revision 26)
@@ -0,0 +1,437 @@
+:06000000020DAC02006BD2
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030DB200020DBA75
+:030DCD00020DB55F
+:050DB5001203F180FEB5
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120632D001D000D005D0F9
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C00512066F1201AAD005D00467
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C005120606BE
+:06034C00D005D004801072
+:0E0352008A82C004C0051206241201AAD0053A
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E60030020312090FB2
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206BE12BF
+:0603FF000455120CDF1290
+:080405000879D2AF120788024A
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E188E0F58212040FD0029034
+:0D04F100E188E02AFAF582C00212040F90A3
+:0B04FE00E1A6E0F58212040FD002908E
+:0A050900E1A6E02AF58212040F902B
+:0A051300E1BEE0F58212040F7A0049
+:0E051D0090E188E0FBC3EA64808BF063F0801D
+:0B052B0095F05017EA2488F582E434B4
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1A6E0FBC3EA64808BF063F080D4
+:0B05560095F05017EA24A6F582E4346B
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1BEE0FBC3EA64808BF063F08091
+:0B05810095F05017EA24BEF582E43428
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009022000010100CF
+:0EE1230080FA0904000002FFFFFF02070581D9
+:0BE131000200020007050202000200CD
+:0EE13C001201000200000040C016EF030400B4
+:04E14A0001020301CA
+:0AE14E000A060002FFFFFF40010077
+:0EE158000902200001010080FA090400000203
+:0EE16600FFFFFF0207058102400000070502CF
+:04E174000240000065
+:01E1780004A2
+:02E1790082E141
+:02E17B0088E139
+:02E17D00A6E119
+:02E17F00BEE1FF
+:06E1820006030000090481
+:0EE188001E037700770077002E0072006500FE
+:0EE19600740072006F00310031002E00640032
+:02E1A400650014
+:0EE1A60018036E0065007800790073003300E6
+:0AE1B4005F006A007400610067005C
+:0EE1BE0012033000300030003000300030001E
+:04E1CC0030003000EF
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:060600009001F4020D9BC5
+:0E060600AA82ABB574FE5BF5F0741C45F0F5EE
+:0E061400B5EA1392B4EAA2E192B3EAA2E4922C
+:02062200B22202
+:0E062400120606A2B0E433FA74024AF58222EE
+:0E063200E5821392B2D2B413C2B492B2D2B423
+:0E06400013C2B492B2D2B413C2B492B2D2B406
+:0E064E0013C2B492B2D2B413C2B492B2D2B4F8
+:0E065C0013C2B492B2D2B413C2B492B2D2B4EA
+:05066A0000C2B42222D1
+:0E066F00E582A2B01392B2D2B4C2B4A2B0130C
+:0E067D0092B2D2B4C2B4A2B01392B2D2B4C23E
+:0E068B00B4A2B01392B2D2B4C2B4A2B0139211
+:0E069900B2D2B4C2B4A2B01392B2D2B4C2B400
+:0E06A700A2B01392B2D2B4C2B4A2B01392B2F7
+:0906B500D2B400C2B4F582222285
+:0D06BE0090E6007412F090E60174ABF0902D
+:0E06CB00E6707480F00090E60274E0F000909B
+:0E06D900E60374F9F00090E6047480F00090DF
+:0D06E700E60B7403F00090E610E4F00090C4
+:0D06F400E61174A0F00090E618E4F000900C
+:0E070100E6047402F00090E61274A2F000907C
+:0E070F00E6137402F00090E6147402F00090FD
+:0E071D00E6157402F00090E6047404F00090FB
+:0E072B00E6047406F00090E6047408F00090F6
+:0E073900E604E4F00090E619E4F00090E61A01
+:0E074700E4F00090E61BE4F00090E60BE4F016
+:0E075500000090E6917480F00090E6917480B0
+:03076300F0002281
+:0807660090E6A0E04401F0223E
+:0E076E00AA8274805AC423541FFB740F5A9041
+:0C077C00E6834BF090E683E04420F0227E
+:0E07880090E680E0440AF09000FA120D9B907B
+:0E079600E65D74FFF090E65F74FFF05391EFA4
+:0807A40090E680E054F7F0221A
+:060DC700E478FFF6D8FD00
+:060DAC0075120075130032
+:0A07AC0090E680E0FA30E7197514BA
+:0307B600007515B6
+:0307B900E17516D1
+:0307BC001275179C
+:0307BF00E17518C9
+:0307C2001C75198A
+:0307C500E1751AC1
+:0307C80058751B46
+:0207CB00E12229
+:0407CD0075143C75EE
+:0307D10015E175BA
+:0307D400164E7549
+:0307D70017E175B2
+:0307DA0018587537
+:0307DD0019E175AA
+:0307E0001A1C756B
+:0307E3001BE122F5
+:0907E6005391EF75A100D202321B
+:0C07EF00C021C0E0C0F0C082C083C00286
+:0E07FB00C003C004C005C006C007C000C00196
+:0E080900C0D075D0005391EF75A1001207AC5E
+:0E081700D0D0D001D000D007D006D005D0043C
+:0D082500D003D002D083D082D0F0D0E0D03C
+:02083200213271
+:0C083400C021C0E0C0F0C082C083C00240
+:0E084000C003C004C005C006C007C000C00150
+:0E084E00C0D075D0005391EF75A1001207AC19
+:0E085C00D0D0D001D000D007D006D005D004F7
+:0D086A00D003D002D083D082D0F0D0E0D0F7
+:0208770021322C
+:050879001207AC751C24
+:03087E00E6751DFF
+:0808810007758200120C3875A6
+:030889001CEF75EC
+:06088C001D077582101229
+:040892000C38751C8D
+:0308960034751D99
+:0C08990008758214120C3890E65C743173
+:0208A500F0223F
+:0D08A700E582547FFA24F750047582002288
+:0708B400BA01047582012264
+:0808BB00530201E4BA0001043C
+:0308C300F5822299
+:0E08C600AA82BA010C90E6A1E0FB7C008B82B6
+:0308D4008C8322F0
+:0E08D700BA810C90E6A2E0FB7C008B828C8341
+:0108E50022F0
+:0E08E60053027FEA700C90E6A0E0FB7C008BD2
+:0408F400828C83224D
+:0E08F80090E6A3E0FB7C00EAC313FA7D00EA61
+:090906002BFBED3C8B82F58322F2
+:0C090F00C20290E6B8E0FA530260BA00A1
+:03091B000280282F
+:05091E00BA2002800D6B
+:05092300BA4002800E45
+:05092800BA600280032B
+:03092D00020BCDED
+:06093000120766020BCD68
+:0A093600120372E5826003020BCD8C
+:06094000120766020BCD58
+:0D09460090E6B8E0FA530280BA8002800308
+:03095300020ACEC7
+:0B09560090E6B9E0FABA0003020A477D
+:05096100BA060280351A
+:05096600BA0802800840
+:05096B00BA0A0280172A
+:03097000020AC8B0
+:0C09730090E740E512F090E68AE4F09076
+:08097F00E68B7401F0020BCDC0
+:0C09870090E740E513F090E68AE4F09061
+:08099300E68B7401F0020BCDAC
+:0A099B0090E6BBE0FABA01028017F3
+:0509A500BA02028038D7
+:0509AA00BA03028059B0
+:0509AF00BA0602801BE6
+:0509B400BA0702803CBF
+:0309B900020A41EE
+:0A09BC00AA14AB1590E6B3EBF07B34
+:0909C6000090E6B4EAF0020BCD4A
+:0A09CF00AA16AB1790E6B3EBF07B1D
+:0909D9000090E6B4EAF0020BCD37
+:0A09E200AA18AB1990E6B3EBF07B06
+:0909EC000090E6B4EAF0020BCD24
+:0A09F500AA1AAB1B90E6B3EBF07BEF
+:0909FF000090E6B4EAF0020BCD11
+:0E0A080090E6BAE0FA90E178E0FBC3EA9B408A
+:070A160006120766020BCD7A
+:0C0A1D0090E6BAE075F002A42479F5829E
+:0B0A290074E135F0F583E0FAA3E090E3
+:0D0A3400E6B3F07B0090E6B4EAF0020BCDD3
+:060A4100120766020BCD56
+:0D0A470090E6B8E0FA53021FBA0002800AE0
+:050A5400BA0102801B45
+:050A5900BA0266802CCA
+:0E0A5E0090E740E4F090E741F090E68AF090D7
+:080A6C00E68B7402F0020BCDD1
+:0E0A740090E740E4F090E741F090E68AF090C1
+:080A8200E68B7402F0020BCDBB
+:0E0A8A0090E6BCE0F5821208A7E58260259098
+:0E0A9800E6BCE0F5821208C6E0FA53020190B7
+:0E0AA600E740EAF090E741E4F090E68AF09035
+:080AB400E68B7402F0020BCD89
+:060ABC00120766020BCDDB
+:060AC200120766020BCDD5
+:060AC800120766020BCDCF
+:0C0ACE0090E6B9E0FA24F45003020BCAD1
+:070ADA00EA2A2A900AE173E9
+:070AE100020BCA020B170211
+:060AE8000B92020B7302E9
+:060AEE000BCA020BCA0254
+:060AF4000BCA020BCA024E
+:060AFA000BCA020B05020D
+:050B00000BCA020B0E00
+:090B050090E6BAE0F512020BCDF6
+:090B0E0090E6BAE0F513020BCDEC
+:0D0B170090E6B8E0FA53021FBA0002800514
+:050B2400BA0247800A3F
+:0A0B290090E6BAE0120766020BCD59
+:0D0B330090E6BAE0703090E6BCE0F582126A
+:0D0B400008A7E582602390E6BCE0F5821274
+:0E0B4D0008C6AA82AB83E0FC5304FE8A828BAA
+:0E0B5B0083ECF090E6BCE0F58212076E806439
+:050B6900120766805F29
+:050B6E00120766805A29
+:0E0B730090E6B8E0FA53021FBA004F90E6BABF
+:070B8100E0FABA0102800551
+:050B8800BA02028040EA
+:050B8D00120766803B29
+:0E0B920090E6BAE0FA702C90E6BCE0F5821214
+:0D0BA00008A7E582601A90E6BCE0F582121D
+:0E0BAD0008C6AA82AB83E0FC4304018A828B57
+:050BBB0083ECF0800D49
+:050BC000120766800829
+:050BC500120766800329
+:030BCA00120766A9
+:080BCD0090E6A0E04480F02254
+:050BD500AA82BA030032
+:070BDA004005EA249C5001D4
+:010BE10022F1
+:090BE200740F5AFBBB03028007EB
+:070BEB00740F5AFBBB0B4520
+:0A0BF200A2AF9203C2AFEA2400F59F
+:0C0BFC0082E43400F5837402F07B007486
+:0C0C0800012AFCE43BFDEC2400F582ED29
+:0A0C14003400F583E51DFCF07402C6
+:0C0C1E002AFAE43BFBEA2400F582EB34E8
+:0A0C2A0000F583AA1C7B00EAF0A28B
+:030C34000392AF79
+:010C3700229A
+:080C3800E582FA248350012239
+:060C4000EA5403600122EA
+:0A0C4600A2AF9204C2AFEA2400F549
+:0C0C500082E43401F5837402F07B007430
+:0C0C5C00012AFCE43BFDEC2400F582EDD5
+:0A0C68003401F583E51DF074022A43
+:0B0C7200FAE43BFBEA2400F582EB34BF
+:080C7D0001F583AA1CEAF0A2B4
+:040C85000492AF2204
+:050C8900AA82BA800000
+:070C8E004005EA244B500170
+:010C9500223C
+:060C9600EA540360012294
+:0A0C9C00A2AF9205C2AFEA2480F572
+:0C0CA60082E43400F5837402F07B0074DB
+:0C0CB200012AFCE43BFDEC2480F582EDFF
+:0A0CBE003400F583E51DF074022AEE
+:0B0CC800FAE43BFBEA2480F582EB34E9
+:080CD30000F583AA1CEAF0A25F
+:040CDB000592AF22AD
+:080CDF00C2E8C2EA751C0075B1
+:060CE7001D01758243129D
+:040CED000BD5751C92
+:030CF10080751DEE
+:0C0CF40000758253120BD50090E650E40E
+:0E0D0000F00090E652E4F00090E654E4F000BB
+:0E0D0E0090E656E4F00090E65174FFF000907D
+:0E0D1C00E65374FFF00090E65574FFF000906F
+:0E0D2A00E65774FFF00090E658E4F090E659AA
+:0E0D380074FFF090E65AE4F090E65B74FFF072
+:0E0D460090E65CE4F090E65D74FFF090E65EEF
+:0E0D5400E4F090E65F74FFF00090E660E4F0DB
+:0D0D62000090E66174FFF090E662E4F0900E
+:0E0D6F00E66374FFF090E665E4F090E66874C9
+:0A0D7D000BF05391AFD2E8D2EA2246
+:010D87002249
+:020D8800AA823D
+:060D8A00120D87DAFB22C6
+:030D900090FB5085
+:080D9300A3E582458370F922FB
+:040D9B00AA82AB83FA
+:080D9F00120D901ABAFF011BAE
+:050DA700EA4B70F4228C
+:030DBA007581211F
+:0A0DBD001205DAE5826003020DB5AD
+:00000001FF
Index: bin/nexys3_jtag_2fifo_ic.ihx
===================================================================
--- bin/nexys3_jtag_2fifo_ic.ihx (nonexistent)
+++ bin/nexys3_jtag_2fifo_ic.ihx (revision 26)
@@ -0,0 +1,443 @@
+:06000000020DEB02006B93
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030DF100020DF9F7
+:030E0C00020DF4E0
+:050DF4001203F180FE76
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120632D001D000D005D0F9
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C00512066F1201AAD005D00467
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C005120606BE
+:06034C00D005D004801072
+:0E0352008A82C004C0051206241201AAD0053A
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E60030020312094E73
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206BE12BF
+:0603FF000455120D1E1250
+:0804050008B8D2AF1207C702CC
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E196E0F58212040FD0029026
+:0D04F100E196E02AFAF582C00212040F9095
+:0B04FE00E1B4E0F58212040FD0029080
+:0A050900E1B4E02AF58212040F901D
+:0A051300E1DEE0F58212040F7A0029
+:0E051D0090E196E0FBC3EA64808BF063F0800F
+:0B052B0095F05017EA2496F582E434A6
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1B4E0FBC3EA64808BF063F080C6
+:0B05560095F05017EA24B4F582E4345D
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1DEE0FBC3EA64808BF063F08071
+:0B05810095F05017EA24DEF582E43408
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009022E00010100C1
+:0EE1230080FA0904000004FFFFFF02070581D7
+:0EE131000200020007050202000200070504BA
+:0BE13F0002000200070586020002003B
+:0EE14A001201000200000040C016EF030400A6
+:04E1580001020301BC
+:0AE15C000A060002FFFFFF40010069
+:0EE166000902200001010080FA0904000002F5
+:0EE17400FFFFFF0207058102400000070502C1
+:04E182000240000057
+:01E186000494
+:02E1870090E125
+:02E1890096E11D
+:02E18B00B4E1FD
+:02E18D00DEE1D1
+:06E1900006030000090473
+:0EE196001E037700770077002E0072006500F0
+:0EE1A400740072006F00310031002E00640024
+:02E1B200650006
+:0EE1B4002A036E0065007800790073003300C6
+:0EE1C2005F006A007400610067005F003200B9
+:0EE1D0006600690066006F005F006900630072
+:0EE1DE001203300030003000300030003000FE
+:04E1EC0030003000CF
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:060600009001F4020DDA86
+:0E060600AA82ABB574FE5BF5F0741C45F0F5EE
+:0E061400B5EA1392B4EAA2E192B3EAA2E4922C
+:02062200B22202
+:0E062400120606A2B0E433FA74024AF58222EE
+:0E063200E5821392B2D2B413C2B492B2D2B423
+:0E06400013C2B492B2D2B413C2B492B2D2B406
+:0E064E0013C2B492B2D2B413C2B492B2D2B4F8
+:0E065C0013C2B492B2D2B413C2B492B2D2B4EA
+:05066A0000C2B42222D1
+:0E066F00E582A2B01392B2D2B4C2B4A2B0130C
+:0E067D0092B2D2B4C2B4A2B01392B2D2B4C23E
+:0E068B00B4A2B01392B2D2B4C2B4A2B0139211
+:0E069900B2D2B4C2B4A2B01392B2D2B4C2B400
+:0E06A700A2B01392B2D2B4C2B4A2B01392B2F7
+:0906B500D2B400C2B4F582222285
+:0D06BE0090E6007412F090E60174A3F09035
+:0E06CB00E6707480F00090E60274E0F000909B
+:0E06D900E60374F9F00090E6047480F00090DF
+:0D06E700E60B7403F00090E610E4F00090C4
+:0D06F400E61174A0F00090E618E4F000900C
+:0E070100E6047402F00090E61274A2F000907C
+:0E070F00E61374A2F00090E61474E0F000907F
+:0E071D00E6157402F00090E6047404F00090FB
+:0E072B00E6047406F00090E6047408F00090F6
+:0E073900E604E4F00090E60BE4F00090E649E0
+:0E0747007484F00090E6497484F00090E61986
+:0E075500E4F00090E6197410F00090E63274A3
+:0E07630080F00090E6337404F00090E61A7403
+:0E0771000CF00090E6247402F00090E625E4FF
+:0E077F00F00090E6347419F00090E63574FC3A
+:0E078D00F00090E61BE4F0000090E69174800E
+:0A079B00F00090E6917480F0002257
+:0807A50090E6A0E04401F022FF
+:0E07AD00AA8274805AC423541FFB740F5A9002
+:0C07BB00E6834BF090E683E04420F0223F
+:0E07C70090E680E0440AF09000FA120DDA90FD
+:0E07D500E65D74FFF090E65F74FFF05391EF65
+:0807E30090E680E054F7F022DB
+:060E0600E478FFF6D8FDC0
+:060DEB00751200751300F3
+:0A07EB0090E680E0FA30E71975147B
+:0307F50000751577
+:0307F800E1751692
+:0307FB001275175D
+:0307FE00E175188A
+:030801001C75194A
+:03080400E1751A81
+:0308070066751BF8
+:02080A00E122E9
+:04080C0075144A75A0
+:0308100015E1757A
+:03081300165C75FB
+:0308160017E17572
+:03081900186675E9
+:03081C0019E1756A
+:03081F001A1C752B
+:030822001BE122B5
+:090825005391EF75A100D20232DB
+:0C082E00C021C0E0C0F0C082C083C00246
+:0E083A00C003C004C005C006C007C000C00156
+:0E084800C0D075D0005391EF75A1001207EBE0
+:0E085600D0D0D001D000D007D006D005D004FD
+:0D086400D003D002D083D082D0F0D0E0D0FD
+:02087100213232
+:0C087300C021C0E0C0F0C082C083C00201
+:0E087F00C003C004C005C006C007C000C00111
+:0E088D00C0D075D0005391EF75A1001207EB9B
+:0E089B00D0D0D001D000D007D006D005D004B8
+:0D08A900D003D002D083D082D0F0D0E0D0B8
+:0208B6002132ED
+:0508B8001207EB751CA6
+:0308BD0025751D81
+:0808C00008758200120C777527
+:0308C8001C2E756E
+:0608CB001D0875821012E9
+:0408D1000C77751C0F
+:0308D50073751D1B
+:0C08D80008758214120C7790E65C7431F5
+:0208E400F02200
+:0D08E600E582547FFA24F750047582002249
+:0708F300BA01047582012225
+:0808FA00530201E4BA000104FD
+:03090200F5822259
+:0E090500AA82BA010C90E6A1E0FB7C008B8276
+:030913008C8322B0
+:0E091600BA810C90E6A2E0FB7C008B828C8301
+:0109240022B0
+:0E09250053027FEA700C90E6A0E0FB7C008B92
+:04093300828C83220D
+:0E09370090E6A3E0FB7C00EAC313FA7D00EA21
+:090945002BFBED3C8B82F58322B3
+:0C094E00C20290E6B8E0FA530260BA0062
+:03095A00028028F0
+:05095D00BA2002800D2C
+:05096200BA4002800E06
+:05096700BA60028003EC
+:03096C00020C0C6E
+:06096F001207A5020C0CAA
+:0A097500120372E5826003020C0C0D
+:06097F001207A5020C0C9A
+:0D09850090E6B8E0FA530280BA80028003C9
+:03099200020B0D48
+:0B09950090E6B9E0FABA0003020A86FF
+:0509A000BA06028035DB
+:0509A500BA0802800801
+:0509AA00BA0A028017EB
+:0309AF00020B0731
+:0C09B20090E740E512F090E68AE4F09037
+:0809BE00E68B7401F0020C0C41
+:0C09C60090E740E513F090E68AE4F09022
+:0809D200E68B7401F0020C0C2D
+:0A09DA0090E6BBE0FABA01028017B4
+:0509E400BA0202803898
+:0509E900BA0302805971
+:0509EE00BA0602801BA7
+:0509F300BA0702803C80
+:0309F800020A8070
+:0A09FB00AA14AB1590E6B3EBF07BF5
+:090A05000090E6B4EAF0020C0CCA
+:0A0A0E00AA16AB1790E6B3EBF07BDD
+:090A18000090E6B4EAF0020C0CB7
+:0A0A2100AA18AB1990E6B3EBF07BC6
+:090A2B000090E6B4EAF0020C0CA4
+:0A0A3400AA1AAB1B90E6B3EBF07BAF
+:090A3E000090E6B4EAF0020C0C91
+:0E0A470090E6BAE0FA90E186E0FBC3EA9B403D
+:070A5500061207A5020C0CBC
+:0C0A5C0090E6BAE075F002A42487F58251
+:0B0A680074E135F0F583E0FAA3E090A4
+:0D0A7300E6B3F07B0090E6B4EAF0020C0C54
+:060A80001207A5020C0C98
+:0D0A860090E6B8E0FA53021FBA0002800AA1
+:050A9300BA0102801B06
+:050A9800BA0266802C8B
+:0E0A9D0090E740E4F090E741F090E68AF09098
+:080AAB00E68B7402F0020C0C52
+:0E0AB30090E740E4F090E741F090E68AF09082
+:080AC100E68B7402F0020C0C3C
+:0E0AC90090E6BCE0F5821208E6E5826025901A
+:0E0AD700E6BCE0F582120905E0FA5302019038
+:0E0AE500E740EAF090E741E4F090E68AF090F6
+:080AF300E68B7402F0020C0C0A
+:060AFB001207A5020C0C1D
+:060B01001207A5020C0C16
+:060B07001207A5020C0C10
+:0C0B0D0090E6B9E0FA24F45003020C0951
+:070B1900EA2A2A900B207369
+:070B2000020C09020B560252
+:060B27000BD1020BB2022B
+:060B2D000C09020C090294
+:060B33000C09020C09028E
+:060B39000C09020B44024E
+:050B3F000C09020B4D42
+:090B440090E6BAE0F512020C0C77
+:090B4D0090E6BAE0F513020C0C6D
+:0D0B560090E6B8E0FA53021FBA00028005D5
+:050B6300BA0247800A00
+:0A0B680090E6BAE01207A5020C0C9B
+:0D0B720090E6BAE0703090E6BCE0F582122B
+:0D0B7F0008E6E582602390E6BCE0F58212F6
+:0E0B8C000905AA82AB83E0FC5304FE8A828B2B
+:0E0B9A0083ECF090E6BCE0F5821207AD8064BB
+:050BA8001207A5805FAB
+:050BAD001207A5805AAB
+:0E0BB20090E6B8E0FA53021FBA004F90E6BA80
+:070BC000E0FABA0102800512
+:050BC700BA02028040AB
+:050BCC001207A5803BAB
+:0E0BD10090E6BAE0FA702C90E6BCE0F58212D5
+:0D0BDF0008E6E582601A90E6BCE0F582129F
+:0E0BEC000905AA82AB83E0FC4304018A828BD8
+:050BFA0083ECF0800D0A
+:050BFF001207A58008AB
+:050C04001207A58003AA
+:030C09001207A52A
+:080C0C0090E6A0E04480F02214
+:050C1400AA82BA0300F2
+:070C19004005EA249C500194
+:010C200022B1
+:090C2100740F5AFBBB03028007AB
+:070C2A00740F5AFBBB0B45E0
+:0A0C3100A2AF9203C2AFEA2400F55F
+:0C0C3B0082E43400F5837402F07B007446
+:0C0C4700012AFCE43BFDEC2400F582EDEA
+:0A0C53003400F583E51DFCF0740287
+:0C0C5D002AFAE43BFBEA2400F582EB34A9
+:0A0C690000F583AA1C7B00EAF0A24C
+:030C73000392AF3A
+:010C7600225B
+:080C7700E582FA2483500122FA
+:060C7F00EA5403600122AB
+:0A0C8500A2AF9204C2AFEA2400F50A
+:0C0C8F0082E43401F5837402F07B0074F1
+:0C0C9B00012AFCE43BFDEC2400F582ED96
+:0A0CA7003401F583E51DF074022A04
+:0B0CB100FAE43BFBEA2400F582EB3480
+:080CBC0001F583AA1CEAF0A275
+:040CC4000492AF22C5
+:050CC800AA82BA8000C1
+:070CCD004005EA244B500131
+:010CD40022FD
+:060CD500EA540360012255
+:0A0CDB00A2AF9205C2AFEA2480F533
+:0C0CE50082E43400F5837402F07B00749C
+:0C0CF100012AFCE43BFDEC2480F582EDC0
+:0A0CFD003400F583E51DF074022AAF
+:0B0D0700FAE43BFBEA2480F582EB34A9
+:080D120000F583AA1CEAF0A21F
+:040D1A000592AF226D
+:080D1E00C2E8C2EA751C007571
+:060D26001D01758243125D
+:040D2C000C14751C12
+:030D300080751DAE
+:0C0D330000758253120C140090E650E48E
+:0E0D3F00F00090E652E4F00090E654E4F0007C
+:0E0D4D0090E656E4F00090E65174FFF000903E
+:0E0D5B00E65374FFF00090E65574FFF0009030
+:0E0D6900E65774FFF00090E658E4F090E6596B
+:0E0D770074FFF090E65AE4F090E65B74FFF033
+:0E0D850090E65CE4F090E65D74FFF090E65EB0
+:0E0D9300E4F090E65F74FFF00090E660E4F09C
+:0D0DA1000090E66174FFF090E662E4F090CF
+:0E0DAE00E66374FFF090E665E4F090E668748A
+:0A0DBC000BF05391AFD2E8D2EA2207
+:010DC600220A
+:020DC700AA82FE
+:060DC900120DC6DAFB2248
+:030DCF0090FB5046
+:080DD200A3E582458370F922BC
+:040DDA00AA82AB83BB
+:080DDE00120DCF1ABAFF011B30
+:050DE600EA4B70F4224D
+:030DF900758121E0
+:0A0DFC001205DAE5826003020DF42F
+:00000001FF
Index: bin/nexys3_jtag_3fifo_ic.ihx
===================================================================
--- bin/nexys3_jtag_3fifo_ic.ihx (nonexistent)
+++ bin/nexys3_jtag_3fifo_ic.ihx (revision 26)
@@ -0,0 +1,446 @@
+:06000000020E0702006B76
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030E0D00020E15BD
+:030E2800020E10A7
+:050E10001203F180FE59
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120632D001D000D005D0F9
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C00512066F1201AAD005D00467
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C005120606BE
+:06034C00D005D004801072
+:0E0352008A82C004C0051206241201AAD0053A
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E60030020312096A57
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206BE12BF
+:0603FF000455120D3A1234
+:0804050008D4D2AF1207E30294
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E19EE0F58212040FD002901E
+:0D04F100E19EE02AFAF582C00212040F908D
+:0B04FE00E1BCE0F58212040FD0029078
+:0A050900E1BCE02AF58212040F9015
+:0A051300E1E6E0F58212040F7A0021
+:0E051D0090E19EE0FBC3EA64808BF063F08007
+:0B052B0095F05017EA249EF582E4349E
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1BCE0FBC3EA64808BF063F080BE
+:0B05560095F05017EA24BCF582E43455
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1E6E0FBC3EA64808BF063F08069
+:0B05810095F05017EA24E6F582E43400
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009023500010100BA
+:0EE1230080FA0904000005FFFFFF02070581D6
+:0EE131000200020007050202000200070504BA
+:0EE13F000200020007058602000200070588A4
+:04E14D0002000200CA
+:0EE152001201000200000040C016EF0304009E
+:04E1600001020301B4
+:0AE164000A060002FFFFFF40010061
+:0EE16E000902200001010080FA0904000002ED
+:0EE17C00FFFFFF0207058102400000070502B9
+:04E18A00024000004F
+:01E18E00048C
+:02E18F0098E115
+:02E191009EE10D
+:02E19300BCE1ED
+:02E19500E6E1C1
+:06E198000603000009046B
+:0EE19E001E037700770077002E0072006500E8
+:0EE1AC00740072006F00310031002E0064001C
+:02E1BA006500FE
+:0EE1BC002A036E0065007800790073003300BE
+:0EE1CA005F006A007400610067005F003300B0
+:0EE1D8006600690066006F005F00690063006A
+:0EE1E6001203300030003000300030003000F6
+:04E1F40030003000C7
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:060600009001F4020DF66A
+:0E060600AA82ABB574FE5BF5F0741C45F0F5EE
+:0E061400B5EA1392B4EAA2E192B3EAA2E4922C
+:02062200B22202
+:0E062400120606A2B0E433FA74024AF58222EE
+:0E063200E5821392B2D2B413C2B492B2D2B423
+:0E06400013C2B492B2D2B413C2B492B2D2B406
+:0E064E0013C2B492B2D2B413C2B492B2D2B4F8
+:0E065C0013C2B492B2D2B413C2B492B2D2B4EA
+:05066A0000C2B42222D1
+:0E066F00E582A2B01392B2D2B4C2B4A2B0130C
+:0E067D0092B2D2B4C2B4A2B01392B2D2B4C23E
+:0E068B00B4A2B01392B2D2B4C2B4A2B0139211
+:0E069900B2D2B4C2B4A2B01392B2D2B4C2B400
+:0E06A700A2B01392B2D2B4C2B4A2B01392B2F7
+:0906B500D2B400C2B4F582222285
+:0D06BE0090E6007412F090E60174A3F09035
+:0E06CB00E6707480F00090E60274E0F000909B
+:0E06D900E60374F9F00090E6047480F00090DF
+:0D06E700E60B7403F00090E610E4F00090C4
+:0D06F400E61174A0F00090E618E4F000900C
+:0E070100E6047402F00090E61274A2F000907C
+:0E070F00E61374A2F00090E61474E2F000907D
+:0E071D00E61574E2F00090E6047404F000901B
+:0E072B00E6047406F00090E6047408F00090F6
+:0E073900E604E4F00090E60BE4F00090E649E0
+:0E0747007484F00090E6497484F00090E61986
+:0E075500E4F00090E6197410F00090E63274A3
+:0E07630080F00090E6337404F00090E61A7403
+:0E0771000CF00090E6247402F00090E625E4FF
+:0E077F00F00090E6347409F00090E63574FC4A
+:0E078D00F00090E61B740CF00090E62674025B
+:0E079B00F00090E627E4F00090E6367441F09E
+:0E07A9000090E63774FCF0000090E69174803A
+:0A07B700F00090E6917480F000223B
+:0807C10090E6A0E04401F022E3
+:0E07C900AA8274805AC423541FFB740F5A90E6
+:0C07D700E6834BF090E683E04420F02223
+:0E07E30090E680E0440AF09000FA120DF690C5
+:0E07F100E65D74FFF090E65F74FFF05391EF49
+:0807FF0090E680E054F7F022BF
+:060E2200E478FFF6D8FDA4
+:060E0700751200751300D6
+:0A08070090E680E0FA30E71975145E
+:030811000075155A
+:03081400E1751675
+:0308170012751740
+:03081A00E175186D
+:03081D001C75192E
+:03082000E1751A65
+:030823006E751BD4
+:02082600E122CD
+:04082800751452757C
+:03082C0015E1755E
+:03082F00166475D7
+:0308320017E17556
+:03083500186E75C5
+:0308380019E1754E
+:03083B001A1C750F
+:03083E001BE12299
+:090841005391EF75A100D20232BF
+:0C084A00C021C0E0C0F0C082C083C0022A
+:0E085600C003C004C005C006C007C000C0013A
+:0E086400C0D075D0005391EF75A100120807A7
+:0E087200D0D0D001D000D007D006D005D004E1
+:0D088000D003D002D083D082D0F0D0E0D0E1
+:02088D00213216
+:0C088F00C021C0E0C0F0C082C083C002E5
+:0E089B00C003C004C005C006C007C000C001F5
+:0E08A900C0D075D0005391EF75A10012080762
+:0E08B700D0D0D001D000D007D006D005D0049C
+:0D08C500D003D002D083D082D0F0D0E0D09C
+:0208D2002132D1
+:0508D400120807751C6D
+:0308D90041751D49
+:0808DC0008758200120C9375EF
+:0308E4001C4A7536
+:0608E7001D0875821012CD
+:0408ED000C93751CD7
+:0308F1008F751DE3
+:0C08F40008758214120C9390E65C7431BD
+:02090000F022E3
+:0D090200E582547FFA24F75004758200222C
+:07090F00BA01047582012208
+:08091600530201E4BA000104E0
+:03091E00F582223D
+:0E092100AA82BA010C90E6A1E0FB7C008B825A
+:03092F008C832294
+:0E093200BA810C90E6A2E0FB7C008B828C83E5
+:010940002294
+:0E09410053027FEA700C90E6A0E0FB7C008B76
+:04094F00828C8322F1
+:0E09530090E6A3E0FB7C00EAC313FA7D00EA05
+:090961002BFBED3C8B82F5832297
+:0C096A00C20290E6B8E0FA530260BA0046
+:03097600028028D4
+:05097900BA2002800D10
+:05097E00BA4002800EEA
+:05098300BA60028003D0
+:03098800020C2836
+:06098B001207C1020C2856
+:0A099100120372E5826003020C28D5
+:06099B001207C1020C2846
+:0D09A10090E6B8E0FA530280BA80028003AD
+:0309AE00020B2910
+:0B09B10090E6B9E0FABA0003020AA2C7
+:0509BC00BA06028035BF
+:0509C100BA08028008E5
+:0509C600BA0A028017CF
+:0309CB00020B23F9
+:0C09CE0090E740E512F090E68AE4F0901B
+:0809DA00E68B7401F0020C2809
+:0C09E20090E740E513F090E68AE4F09006
+:0809EE00E68B7401F0020C28F5
+:0A09F60090E6BBE0FABA0102801798
+:050A0000BA020280387B
+:050A0500BA0302805954
+:050A0A00BA0602801B8A
+:050A0F00BA0702803C63
+:030A1400020A9C37
+:0A0A1700AA14AB1590E6B3EBF07BD8
+:090A21000090E6B4EAF0020C2892
+:0A0A2A00AA16AB1790E6B3EBF07BC1
+:090A34000090E6B4EAF0020C287F
+:0A0A3D00AA18AB1990E6B3EBF07BAA
+:090A47000090E6B4EAF0020C286C
+:0A0A5000AA1AAB1B90E6B3EBF07B93
+:090A5A000090E6B4EAF0020C2859
+:0E0A630090E6BAE0FA90E18EE0FBC3EA9B4019
+:070A7100061207C1020C2868
+:0C0A780090E6BAE075F002A4248FF5822D
+:0B0A840074E135F0F583E0FAA3E09088
+:0D0A8F00E6B3F07B0090E6B4EAF0020C281C
+:060A9C001207C1020C2844
+:0D0AA20090E6B8E0FA53021FBA0002800A85
+:050AAF00BA0102801BEA
+:050AB400BA0266802C6F
+:0E0AB90090E740E4F090E741F090E68AF0907C
+:080AC700E68B7402F0020C281A
+:0E0ACF0090E740E4F090E741F090E68AF09066
+:080ADD00E68B7402F0020C2804
+:0E0AE50090E6BCE0F582120902E582602590E1
+:0E0AF300E6BCE0F582120921E0FA5302019000
+:0E0B0100E740EAF090E741E4F090E68AF090D9
+:080B0F00E68B7402F0020C28D1
+:060B17001207C1020C28C8
+:060B1D001207C1020C28C2
+:060B23001207C1020C28BC
+:0C0B290090E6B9E0FA24F45003020C2519
+:070B3500EA2A2A900B3C7331
+:070B3C00020C25020B7202FE
+:060B43000BED020BCE02D7
+:060B49000C25020C250240
+:060B4F000C25020C25023A
+:060B55000C25020B6002FA
+:050B5B000C25020B69EE
+:090B600090E6BAE0F512020C283F
+:090B690090E6BAE0F513020C2835
+:0D0B720090E6B8E0FA53021FBA00028005B9
+:050B7F00BA0247800AE4
+:0A0B840090E6BAE01207C1020C2847
+:0D0B8E0090E6BAE0703090E6BCE0F582120F
+:0D0B9B000902E582602390E6BCE0F58212BD
+:0E0BA8000921AA82AB83E0FC5304FE8A828BF3
+:0E0BB60083ECF090E6BCE0F5821207C9806483
+:050BC4001207C1805F73
+:050BC9001207C1805A73
+:0E0BCE0090E6B8E0FA53021FBA004F90E6BA64
+:070BDC00E0FABA01028005F6
+:050BE300BA020280408F
+:050BE8001207C1803B73
+:0E0BED0090E6BAE0FA702C90E6BCE0F58212B9
+:0D0BFB000902E582601A90E6BCE0F5821266
+:0E0C08000921AA82AB83E0FC4304018A828B9F
+:050C160083ECF0800DED
+:050C1B001207C1800872
+:050C20001207C1800372
+:030C25001207C1F2
+:080C280090E6A0E04480F022F8
+:050C3000AA82BA0300D6
+:070C35004005EA249C500178
+:010C3C002295
+:090C3D00740F5AFBBB030280078F
+:070C4600740F5AFBBB0B45C4
+:0A0C4D00A2AF9203C2AFEA2400F543
+:0C0C570082E43400F5837402F07B00742A
+:0C0C6300012AFCE43BFDEC2400F582EDCE
+:0A0C6F003400F583E51DFCF074026B
+:0C0C79002AFAE43BFBEA2400F582EB348D
+:0A0C850000F583AA1C7B00EAF0A230
+:030C8F000392AF1E
+:010C9200223F
+:080C9300E582FA2483500122DE
+:060C9B00EA54036001228F
+:0A0CA100A2AF9204C2AFEA2400F5EE
+:0C0CAB0082E43401F5837402F07B0074D5
+:0C0CB700012AFCE43BFDEC2400F582ED7A
+:0A0CC3003401F583E51DF074022AE8
+:0B0CCD00FAE43BFBEA2400F582EB3464
+:080CD80001F583AA1CEAF0A259
+:040CE0000492AF22A9
+:050CE400AA82BA8000A5
+:070CE9004005EA244B500115
+:010CF00022E1
+:060CF100EA540360012239
+:0A0CF700A2AF9205C2AFEA2480F517
+:0C0D010082E43400F5837402F07B00747F
+:0C0D0D00012AFCE43BFDEC2480F582EDA3
+:0A0D19003400F583E51DF074022A92
+:0B0D2300FAE43BFBEA2480F582EB348D
+:080D2E0000F583AA1CEAF0A203
+:040D36000592AF2251
+:080D3A00C2E8C2EA751C007555
+:060D42001D017582431241
+:040D48000C30751CDA
+:030D4C0080751D92
+:0C0D4F0000758253120C300090E650E456
+:0E0D5B00F00090E652E4F00090E654E4F00060
+:0E0D690090E656E4F00090E65174FFF0009022
+:0E0D7700E65374FFF00090E65574FFF0009014
+:0E0D8500E65774FFF00090E658E4F090E6594F
+:0E0D930074FFF090E65AE4F090E65B74FFF017
+:0E0DA10090E65CE4F090E65D74FFF090E65E94
+:0E0DAF00E4F090E65F74FFF00090E660E4F080
+:0D0DBD000090E66174FFF090E662E4F090B3
+:0E0DCA00E66374FFF090E665E4F090E668746E
+:0A0DD8000BF05391AFD2E8D2EA22EB
+:010DE20022EE
+:020DE300AA82E2
+:060DE500120DE2DAFB2210
+:030DEB0090FB502A
+:080DEE00A3E582458370F922A0
+:040DF600AA82AB839F
+:080DFA00120DEB1ABAFF011BF8
+:050E0200EA4B70F42230
+:030E1500758121C3
+:0A0E18001205DAE5826003020E10F5
+:00000001FF
Index: bin/nexys2_jtag_2fifo_as.ihx
===================================================================
--- bin/nexys2_jtag_2fifo_as.ihx (nonexistent)
+++ bin/nexys2_jtag_2fifo_as.ihx (revision 26)
@@ -0,0 +1,443 @@
+:06000000020DF002006B8E
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030DF600020DFEED
+:030E1100020DF9D6
+:050DF9001203F180FE71
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120637D001D000D005D0F4
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C0051206741201AAD005D00462
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C00512060BB9
+:06034C00D005D004801072
+:0E0352008A82C004C0051206291201AAD00535
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E6003002031209536E
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206C312BA
+:0603FF000455120D23124B
+:0804050008BDD2AF1207CC02C2
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E196E0F58212040FD0029026
+:0D04F100E196E02AFAF582C00212040F9095
+:0B04FE00E1B4E0F58212040FD0029080
+:0A050900E1B4E02AF58212040F901D
+:0A051300E1DEE0F58212040F7A0029
+:0E051D0090E196E0FBC3EA64808BF063F0800F
+:0B052B0095F05017EA2496F582E434A6
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1B4E0FBC3EA64808BF063F080C6
+:0B05560095F05017EA24B4F582E4345D
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1DEE0FBC3EA64808BF063F08071
+:0B05810095F05017EA24DEF582E43408
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009022E00010100C1
+:0EE1230080FA0904000004FFFFFF02070581D7
+:0EE131000200020007050202000200070504BA
+:0BE13F0002000200070586020002003B
+:0EE14A001201000200000040C016EF030400A6
+:04E1580001020301BC
+:0AE15C000A060002FFFFFF40010069
+:0EE166000902200001010080FA0904000002F5
+:0EE17400FFFFFF0207058102400000070502C1
+:04E182000240000057
+:01E186000494
+:02E1870090E125
+:02E1890096E11D
+:02E18B00B4E1FD
+:02E18D00DEE1D1
+:06E1900006030000090473
+:0EE196001E037700770077002E0072006500F0
+:0EE1A400740072006F00310031002E00640024
+:02E1B200650006
+:0EE1B4002A036E0065007800790073003200C7
+:0EE1C2005F006A007400610067005F003200B9
+:0EE1D0006600690066006F005F00610073006A
+:0EE1DE001203300030003000300030003000FE
+:04E1EC0030003000CF
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:0B060000D2B775B5809001F4020DDF49
+:0E060B00AA82ABB574FE5BF5F0741C45F0F5E9
+:0E061900B5EA1392B4EAA2E192B3EAA2E49227
+:02062700B222FD
+:0E06290012060BA2B0E433FA74024AF58222E4
+:0E063700E5821392B2D2B413C2B492B2D2B41E
+:0E06450013C2B492B2D2B413C2B492B2D2B401
+:0E06530013C2B492B2D2B413C2B492B2D2B4F3
+:0E06610013C2B492B2D2B413C2B492B2D2B4E5
+:05066F0000C2B42222CC
+:0E067400E582A2B01392B2D2B4C2B4A2B01307
+:0E06820092B2D2B4C2B4A2B01392B2D2B4C239
+:0E069000B4A2B01392B2D2B4C2B4A2B013920C
+:0E069E00B2D2B4C2B4A2B01392B2D2B4C2B4FB
+:0E06AC00A2B01392B2D2B4C2B4A2B01392B2F2
+:0906BA00D2B400C2B4F582222280
+:0D06C30090E6007412F090E60174ABF09028
+:0E06D000E6707480F00090E60274E0F0009096
+:0E06DE00E60374F9F00090E6047480F00090DA
+:0D06EC00E60B7403F00090E610E4F00090BF
+:0D06F900E61174A0F00090E618E4F0009007
+:0E070600E6047402F00090E61274A2F0009077
+:0E071400E61374A2F00090E61474E0F000907A
+:0E072200E6157402F00090E6047404F00090F6
+:0E073000E6047406F00090E6047408F00090F1
+:0E073E00E604E4F00090E60BE4F00090E649DB
+:0E074C007484F00090E6497484F00090E61981
+:0E075A00E4F00090E6197410F00090E632749E
+:0E07680080F00090E6337404F00090E61A74FE
+:0E0776000CF00090E6247402F00090E625E4FA
+:0E078400F00090E6347419F00090E63574FC35
+:0E079200F00090E61BE4F0000090E691748009
+:0A07A000F00090E6917480F0002252
+:0807AA0090E6A0E04401F022FA
+:0E07B200AA8274805AC423541FFB740F5A90FD
+:0C07C000E6834BF090E683E04420F0223A
+:0E07CC0090E680E0440AF09000FA120DDF90F3
+:0E07DA00E65D74FFF090E65F74FFF05391EF60
+:0807E80090E680E054F7F022D6
+:060E0B00E478FFF6D8FDBB
+:060DF000751200751300EE
+:0A07F00090E680E0FA30E719751476
+:0307FA0000751572
+:0307FD00E175168D
+:0308000012751757
+:03080300E1751884
+:030806001C751945
+:03080900E1751A7C
+:03080C0066751BF3
+:02080F00E122E4
+:0408110075144A759B
+:0308150015E17575
+:03081800165C75F6
+:03081B0017E1756D
+:03081E00186675E4
+:0308210019E17565
+:030824001A1C7526
+:030827001BE122B0
+:09082A005391EF75A100D20232D6
+:0C083300C021C0E0C0F0C082C083C00241
+:0E083F00C003C004C005C006C007C000C00151
+:0E084D00C0D075D0005391EF75A1001207F0D6
+:0E085B00D0D0D001D000D007D006D005D004F8
+:0D086900D003D002D083D082D0F0D0E0D0F8
+:0208760021322D
+:0C087800C021C0E0C0F0C082C083C002FC
+:0E088400C003C004C005C006C007C000C0010C
+:0E089200C0D075D0005391EF75A1001207F091
+:0E08A000D0D0D001D000D007D006D005D004B3
+:0D08AE00D003D002D083D082D0F0D0E0D0B3
+:0208BB002132E8
+:0508BD001207F0751C9C
+:0308C2002A751D77
+:0808C50008758200120C7C751D
+:0308CD001C337564
+:0608D0001D0875821012E4
+:0408D6000C7C751C05
+:0308DA0078751D11
+:0C08DD0008758214120C7C90E65C7431EB
+:0208E900F022FB
+:0D08EB00E582547FFA24F750047582002244
+:0708F800BA01047582012220
+:0808FF00530201E4BA000104F8
+:03090700F5822254
+:0E090A00AA82BA010C90E6A1E0FB7C008B8271
+:030918008C8322AB
+:0E091B00BA810C90E6A2E0FB7C008B828C83FC
+:0109290022AB
+:0E092A0053027FEA700C90E6A0E0FB7C008B8D
+:04093800828C832208
+:0E093C0090E6A3E0FB7C00EAC313FA7D00EA1C
+:09094A002BFBED3C8B82F58322AE
+:0C095300C20290E6B8E0FA530260BA005D
+:03095F00028028EB
+:05096200BA2002800D27
+:05096700BA4002800E01
+:05096C00BA60028003E7
+:03097100020C1164
+:060974001207AA020C119B
+:0A097A00120372E5826003020C1103
+:060984001207AA020C118B
+:0D098A0090E6B8E0FA530280BA80028003C4
+:03099700020B123E
+:0B099A0090E6B9E0FABA0003020A8BF5
+:0509A500BA06028035D6
+:0509AA00BA08028008FC
+:0509AF00BA0A028017E6
+:0309B400020B0C27
+:0C09B70090E740E512F090E68AE4F09032
+:0809C300E68B7401F0020C1137
+:0C09CB0090E740E513F090E68AE4F0901D
+:0809D700E68B7401F0020C1123
+:0A09DF0090E6BBE0FABA01028017AF
+:0509E900BA0202803893
+:0509EE00BA030280596C
+:0509F300BA0602801BA2
+:0509F800BA0702803C7B
+:0309FD00020A8566
+:0A0A0000AA14AB1590E6B3EBF07BEF
+:090A0A000090E6B4EAF0020C11C0
+:0A0A1300AA16AB1790E6B3EBF07BD8
+:090A1D000090E6B4EAF0020C11AD
+:0A0A2600AA18AB1990E6B3EBF07BC1
+:090A30000090E6B4EAF0020C119A
+:0A0A3900AA1AAB1B90E6B3EBF07BAA
+:090A43000090E6B4EAF0020C1187
+:0E0A4C0090E6BAE0FA90E186E0FBC3EA9B4038
+:070A5A00061207AA020C11AD
+:0C0A610090E6BAE075F002A42487F5824C
+:0B0A6D0074E135F0F583E0FAA3E0909F
+:0D0A7800E6B3F07B0090E6B4EAF0020C114A
+:060A85001207AA020C1189
+:0D0A8B0090E6B8E0FA53021FBA0002800A9C
+:050A9800BA0102801B01
+:050A9D00BA0266802C86
+:0E0AA20090E740E4F090E741F090E68AF09093
+:080AB000E68B7402F0020C1148
+:0E0AB80090E740E4F090E741F090E68AF0907D
+:080AC600E68B7402F0020C1132
+:0E0ACE0090E6BCE0F5821208EBE58260259010
+:0E0ADC00E6BCE0F58212090AE0FA530201902E
+:0E0AEA00E740EAF090E741E4F090E68AF090F1
+:080AF800E68B7402F0020C1100
+:060B00001207AA020C110D
+:060B06001207AA020C1107
+:060B0C001207AA020C1101
+:0C0B120090E6B9E0FA24F45003020C0E47
+:070B1E00EA2A2A900B25735F
+:070B2500020C0E020B5B0243
+:060B2C000BD6020BB7021C
+:060B32000C0E020C0E0285
+:060B38000C0E020C0E027F
+:060B3E000C0E020B49023F
+:050B44000C0E020B5233
+:090B490090E6BAE0F512020C116D
+:090B520090E6BAE0F513020C1163
+:0D0B5B0090E6B8E0FA53021FBA00028005D0
+:050B6800BA0247800AFB
+:0A0B6D0090E6BAE01207AA020C118C
+:0D0B770090E6BAE0703090E6BCE0F5821226
+:0D0B840008EBE582602390E6BCE0F58212EC
+:0E0B9100090AAA82AB83E0FC5304FE8A828B21
+:0E0B9F0083ECF090E6BCE0F5821207B28064B1
+:050BAD001207AA805FA1
+:050BB2001207AA805AA1
+:0E0BB70090E6B8E0FA53021FBA004F90E6BA7B
+:070BC500E0FABA010280050D
+:050BCC00BA02028040A6
+:050BD1001207AA803BA1
+:0E0BD60090E6BAE0FA702C90E6BCE0F58212D0
+:0D0BE40008EBE582601A90E6BCE0F5821295
+:0E0BF100090AAA82AB83E0FC4304018A828BCE
+:050BFF0083ECF0800D05
+:050C04001207AA8008A0
+:050C09001207AA8003A0
+:030C0E001207AA20
+:080C110090E6A0E04480F0220F
+:050C1900AA82BA0300ED
+:070C1E004005EA249C50018F
+:010C250022AC
+:090C2600740F5AFBBB03028007A6
+:070C2F00740F5AFBBB0B45DB
+:0A0C3600A2AF9203C2AFEA2400F55A
+:0C0C400082E43400F5837402F07B007441
+:0C0C4C00012AFCE43BFDEC2400F582EDE5
+:0A0C58003400F583E51DFCF0740282
+:0C0C62002AFAE43BFBEA2400F582EB34A4
+:0A0C6E0000F583AA1C7B00EAF0A247
+:030C78000392AF35
+:010C7B002256
+:080C7C00E582FA2483500122F5
+:060C8400EA5403600122A6
+:0A0C8A00A2AF9204C2AFEA2400F505
+:0C0C940082E43401F5837402F07B0074EC
+:0C0CA000012AFCE43BFDEC2400F582ED91
+:0A0CAC003401F583E51DF074022AFF
+:0B0CB600FAE43BFBEA2400F582EB347B
+:080CC10001F583AA1CEAF0A270
+:040CC9000492AF22C0
+:050CCD00AA82BA8000BC
+:070CD2004005EA244B50012C
+:010CD90022F8
+:060CDA00EA540360012250
+:0A0CE000A2AF9205C2AFEA2480F52E
+:0C0CEA0082E43400F5837402F07B007497
+:0C0CF600012AFCE43BFDEC2480F582EDBB
+:0A0D02003400F583E51DF074022AA9
+:0B0D0C00FAE43BFBEA2480F582EB34A4
+:080D170000F583AA1CEAF0A21A
+:040D1F000592AF2268
+:080D2300C2E8C2EA751C00756C
+:060D2B001D017582431258
+:040D31000C19751C08
+:030D350080751DA9
+:0C0D380000758253120C190090E650E484
+:0E0D4400F00090E652E4F00090E654E4F00077
+:0E0D520090E656E4F00090E65174FFF0009039
+:0E0D6000E65374FFF00090E65574FFF000902B
+:0E0D6E00E65774FFF00090E658E4F090E65966
+:0E0D7C0074FFF090E65AE4F090E65B74FFF02E
+:0E0D8A0090E65CE4F090E65D74FFF090E65EAB
+:0E0D9800E4F090E65F74FFF00090E660E4F097
+:0D0DA6000090E66174FFF090E662E4F090CA
+:0E0DB300E66374FFF090E665E4F090E6687485
+:0A0DC1000BF05391AFD2E8D2EA2202
+:010DCB002205
+:020DCC00AA82F9
+:060DCE00120DCBDAFB223E
+:030DD40090FB5041
+:080DD700A3E582458370F922B7
+:040DDF00AA82AB83B6
+:080DE300120DD41ABAFF011B26
+:050DEB00EA4B70F42248
+:030DFE00758121DB
+:0A0E01001205DAE5826003020DF924
+:00000001FF
Index: bin/nexys2_jtag_3fifo_as.ihx
===================================================================
--- bin/nexys2_jtag_3fifo_as.ihx (nonexistent)
+++ bin/nexys2_jtag_3fifo_as.ihx (revision 26)
@@ -0,0 +1,446 @@
+:06000000020E0C02006B71
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030E1200020E1AB3
+:030E2D00020E159D
+:050E15001203F180FE54
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120637D001D000D005D0F4
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C0051206741201AAD005D00462
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C00512060BB9
+:06034C00D005D004801072
+:0E0352008A82C004C0051206291201AAD00535
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E60030020312096F52
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206C312BA
+:0603FF000455120D3F122F
+:0804050008D9D2AF1207E8028A
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E19EE0F58212040FD002901E
+:0D04F100E19EE02AFAF582C00212040F908D
+:0B04FE00E1BCE0F58212040FD0029078
+:0A050900E1BCE02AF58212040F9015
+:0A051300E1E6E0F58212040F7A0021
+:0E051D0090E19EE0FBC3EA64808BF063F08007
+:0B052B0095F05017EA249EF582E4349E
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1BCE0FBC3EA64808BF063F080BE
+:0B05560095F05017EA24BCF582E43455
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1E6E0FBC3EA64808BF063F08069
+:0B05810095F05017EA24E6F582E43400
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009023500010100BA
+:0EE1230080FA0904000005FFFFFF02070581D6
+:0EE131000200020007050202000200070504BA
+:0EE13F000200020007058602000200070588A4
+:04E14D0002000200CA
+:0EE152001201000200000040C016EF0304009E
+:04E1600001020301B4
+:0AE164000A060002FFFFFF40010061
+:0EE16E000902200001010080FA0904000002ED
+:0EE17C00FFFFFF0207058102400000070502B9
+:04E18A00024000004F
+:01E18E00048C
+:02E18F0098E115
+:02E191009EE10D
+:02E19300BCE1ED
+:02E19500E6E1C1
+:06E198000603000009046B
+:0EE19E001E037700770077002E0072006500E8
+:0EE1AC00740072006F00310031002E0064001C
+:02E1BA006500FE
+:0EE1BC002A036E0065007800790073003200BF
+:0EE1CA005F006A007400610067005F003300B0
+:0EE1D8006600690066006F005F006100730062
+:0EE1E6001203300030003000300030003000F6
+:04E1F40030003000C7
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:0B060000D2B775B5809001F4020DFB2D
+:0E060B00AA82ABB574FE5BF5F0741C45F0F5E9
+:0E061900B5EA1392B4EAA2E192B3EAA2E49227
+:02062700B222FD
+:0E06290012060BA2B0E433FA74024AF58222E4
+:0E063700E5821392B2D2B413C2B492B2D2B41E
+:0E06450013C2B492B2D2B413C2B492B2D2B401
+:0E06530013C2B492B2D2B413C2B492B2D2B4F3
+:0E06610013C2B492B2D2B413C2B492B2D2B4E5
+:05066F0000C2B42222CC
+:0E067400E582A2B01392B2D2B4C2B4A2B01307
+:0E06820092B2D2B4C2B4A2B01392B2D2B4C239
+:0E069000B4A2B01392B2D2B4C2B4A2B013920C
+:0E069E00B2D2B4C2B4A2B01392B2D2B4C2B4FB
+:0E06AC00A2B01392B2D2B4C2B4A2B01392B2F2
+:0906BA00D2B400C2B4F582222280
+:0D06C30090E6007412F090E60174ABF09028
+:0E06D000E6707480F00090E60274E0F0009096
+:0E06DE00E60374F9F00090E6047480F00090DA
+:0D06EC00E60B7403F00090E610E4F00090BF
+:0D06F900E61174A0F00090E618E4F0009007
+:0E070600E6047402F00090E61274A2F0009077
+:0E071400E61374A2F00090E61474E2F0009078
+:0E072200E61574E2F00090E6047404F0009016
+:0E073000E6047406F00090E6047408F00090F1
+:0E073E00E604E4F00090E60BE4F00090E649DB
+:0E074C007484F00090E6497484F00090E61981
+:0E075A00E4F00090E6197410F00090E632749E
+:0E07680080F00090E6337404F00090E61A74FE
+:0E0776000CF00090E6247402F00090E625E4FA
+:0E078400F00090E6347409F00090E63574FC45
+:0E079200F00090E61B740CF00090E626740256
+:0E07A000F00090E627E4F00090E6367441F099
+:0E07AE000090E63774FCF0000090E691748035
+:0A07BC00F00090E6917480F0002236
+:0807C60090E6A0E04401F022DE
+:0E07CE00AA8274805AC423541FFB740F5A90E1
+:0C07DC00E6834BF090E683E04420F0221E
+:0E07E80090E680E0440AF09000FA120DFB90BB
+:0E07F600E65D74FFF090E65F74FFF05391EF44
+:0808040090E680E054F7F022B9
+:060E2700E478FFF6D8FD9F
+:060E0C00751200751300D1
+:0A080C0090E680E0FA30E719751459
+:0308160000751555
+:03081900E1751670
+:03081C001275173B
+:03081F00E1751868
+:030822001C751929
+:03082500E1751A60
+:030828006E751BCF
+:02082B00E122C8
+:04082D007514527577
+:0308310015E17559
+:03083400166475D2
+:0308370017E17551
+:03083A00186E75C0
+:03083D0019E17549
+:030840001A1C750A
+:030843001BE12294
+:090846005391EF75A100D20232BA
+:0C084F00C021C0E0C0F0C082C083C00225
+:0E085B00C003C004C005C006C007C000C00135
+:0E086900C0D075D0005391EF75A10012080C9D
+:0E087700D0D0D001D000D007D006D005D004DC
+:0D088500D003D002D083D082D0F0D0E0D0DC
+:02089200213211
+:0C089400C021C0E0C0F0C082C083C002E0
+:0E08A000C003C004C005C006C007C000C001F0
+:0E08AE00C0D075D0005391EF75A10012080C58
+:0E08BC00D0D0D001D000D007D006D005D00497
+:0D08CA00D003D002D083D082D0F0D0E0D097
+:0208D7002132CC
+:0508D90012080C751C63
+:0308DE0046751D3F
+:0808E10008758200120C9875E5
+:0308E9001C4F752C
+:0608EC001D0875821012C8
+:0408F2000C98751CCD
+:0308F60094751DD9
+:0C08F90008758214120C9890E65C7431B3
+:02090500F022DE
+:0D090700E582547FFA24F750047582002227
+:07091400BA01047582012203
+:08091B00530201E4BA000104DB
+:03092300F5822238
+:0E092600AA82BA010C90E6A1E0FB7C008B8255
+:030934008C83228F
+:0E093700BA810C90E6A2E0FB7C008B828C83E0
+:01094500228F
+:0E09460053027FEA700C90E6A0E0FB7C008B71
+:04095400828C8322EC
+:0E09580090E6A3E0FB7C00EAC313FA7D00EA00
+:090966002BFBED3C8B82F5832292
+:0C096F00C20290E6B8E0FA530260BA0041
+:03097B00028028CF
+:05097E00BA2002800D0B
+:05098300BA4002800EE5
+:05098800BA60028003CB
+:03098D00020C2D2C
+:060990001207C6020C2D47
+:0A099600120372E5826003020C2DCB
+:0609A0001207C6020C2D37
+:0D09A60090E6B8E0FA530280BA80028003A8
+:0309B300020B2E06
+:0B09B60090E6B9E0FABA0003020AA7BD
+:0509C100BA06028035BA
+:0509C600BA08028008E0
+:0509CB00BA0A028017CA
+:0309D000020B28EF
+:0C09D30090E740E512F090E68AE4F09016
+:0809DF00E68B7401F0020C2DFF
+:0C09E70090E740E513F090E68AE4F09001
+:0809F300E68B7401F0020C2DEB
+:0A09FB0090E6BBE0FABA0102801793
+:050A0500BA0202803876
+:050A0A00BA030280594F
+:050A0F00BA0602801B85
+:050A1400BA0702803C5E
+:030A1900020AA12D
+:0A0A1C00AA14AB1590E6B3EBF07BD3
+:090A26000090E6B4EAF0020C2D88
+:0A0A2F00AA16AB1790E6B3EBF07BBC
+:090A39000090E6B4EAF0020C2D75
+:0A0A4200AA18AB1990E6B3EBF07BA5
+:090A4C000090E6B4EAF0020C2D62
+:0A0A5500AA1AAB1B90E6B3EBF07B8E
+:090A5F000090E6B4EAF0020C2D4F
+:0E0A680090E6BAE0FA90E18EE0FBC3EA9B4014
+:070A7600061207C6020C2D59
+:0C0A7D0090E6BAE075F002A4248FF58228
+:0B0A890074E135F0F583E0FAA3E09083
+:0D0A9400E6B3F07B0090E6B4EAF0020C2D12
+:060AA1001207C6020C2D35
+:0D0AA70090E6B8E0FA53021FBA0002800A80
+:050AB400BA0102801BE5
+:050AB900BA0266802C6A
+:0E0ABE0090E740E4F090E741F090E68AF09077
+:080ACC00E68B7402F0020C2D10
+:0E0AD40090E740E4F090E741F090E68AF09061
+:080AE200E68B7402F0020C2DFA
+:0E0AEA0090E6BCE0F582120907E582602590D7
+:0E0AF800E6BCE0F582120926E0FA53020190F6
+:0E0B0600E740EAF090E741E4F090E68AF090D4
+:080B1400E68B7402F0020C2DC7
+:060B1C001207C6020C2DB9
+:060B22001207C6020C2DB3
+:060B28001207C6020C2DAD
+:0C0B2E0090E6B9E0FA24F45003020C2A0F
+:070B3A00EA2A2A900B417327
+:070B4100020C2A020B7702EF
+:060B48000BF2020BD302C8
+:060B4E000C2A020C2A0231
+:060B54000C2A020C2A022B
+:060B5A000C2A020B6502EB
+:050B60000C2A020B6EDF
+:090B650090E6BAE0F512020C2D35
+:090B6E0090E6BAE0F513020C2D2B
+:0D0B770090E6B8E0FA53021FBA00028005B4
+:050B8400BA0247800ADF
+:0A0B890090E6BAE01207C6020C2D38
+:0D0B930090E6BAE0703090E6BCE0F582120A
+:0D0BA0000907E582602390E6BCE0F58212B3
+:0E0BAD000926AA82AB83E0FC5304FE8A828BE9
+:0E0BBB0083ECF090E6BCE0F5821207CE806479
+:050BC9001207C6805F69
+:050BCE001207C6805A69
+:0E0BD30090E6B8E0FA53021FBA004F90E6BA5F
+:070BE100E0FABA01028005F1
+:050BE800BA020280408A
+:050BED001207C6803B69
+:0E0BF20090E6BAE0FA702C90E6BCE0F58212B4
+:0D0C00000907E582601A90E6BCE0F582125B
+:0E0C0D000926AA82AB83E0FC4304018A828B95
+:050C1B0083ECF0800DE8
+:050C20001207C6800868
+:050C25001207C6800368
+:030C2A001207C6E8
+:080C2D0090E6A0E04480F022F3
+:050C3500AA82BA0300D1
+:070C3A004005EA249C500173
+:010C41002290
+:090C4200740F5AFBBB030280078A
+:070C4B00740F5AFBBB0B45BF
+:0A0C5200A2AF9203C2AFEA2400F53E
+:0C0C5C0082E43400F5837402F07B007425
+:0C0C6800012AFCE43BFDEC2400F582EDC9
+:0A0C74003400F583E51DFCF0740266
+:0C0C7E002AFAE43BFBEA2400F582EB3488
+:0A0C8A0000F583AA1C7B00EAF0A22B
+:030C94000392AF19
+:010C9700223A
+:080C9800E582FA2483500122D9
+:060CA000EA54036001228A
+:0A0CA600A2AF9204C2AFEA2400F5E9
+:0C0CB00082E43401F5837402F07B0074D0
+:0C0CBC00012AFCE43BFDEC2400F582ED75
+:0A0CC8003401F583E51DF074022AE3
+:0B0CD200FAE43BFBEA2400F582EB345F
+:080CDD0001F583AA1CEAF0A254
+:040CE5000492AF22A4
+:050CE900AA82BA8000A0
+:070CEE004005EA244B500110
+:010CF50022DC
+:060CF600EA540360012234
+:0A0CFC00A2AF9205C2AFEA2480F512
+:0C0D060082E43400F5837402F07B00747A
+:0C0D1200012AFCE43BFDEC2480F582ED9E
+:0A0D1E003400F583E51DF074022A8D
+:0B0D2800FAE43BFBEA2480F582EB3488
+:080D330000F583AA1CEAF0A2FE
+:040D3B000592AF224C
+:080D3F00C2E8C2EA751C007550
+:060D47001D01758243123C
+:040D4D000C35751CD0
+:030D510080751D8D
+:0C0D540000758253120C350090E650E44C
+:0E0D6000F00090E652E4F00090E654E4F0005B
+:0E0D6E0090E656E4F00090E65174FFF000901D
+:0E0D7C00E65374FFF00090E65574FFF000900F
+:0E0D8A00E65774FFF00090E658E4F090E6594A
+:0E0D980074FFF090E65AE4F090E65B74FFF012
+:0E0DA60090E65CE4F090E65D74FFF090E65E8F
+:0E0DB400E4F090E65F74FFF00090E660E4F07B
+:0D0DC2000090E66174FFF090E662E4F090AE
+:0E0DCF00E66374FFF090E665E4F090E6687469
+:0A0DDD000BF05391AFD2E8D2EA22E6
+:010DE70022E9
+:020DE800AA82DD
+:060DEA00120DE7DAFB2206
+:030DF00090FB5025
+:080DF300A3E582458370F9229B
+:040DFB00AA82AB839A
+:080DFF00120DF01ABAFF011BEE
+:050E0700EA4B70F4222B
+:030E1A00758121BE
+:0A0E1D001205DAE5826003020E15EB
+:00000001FF
Index: bin/nexys3_jtag_2fifo_as.ihx
===================================================================
--- bin/nexys3_jtag_2fifo_as.ihx (nonexistent)
+++ bin/nexys3_jtag_2fifo_as.ihx (revision 26)
@@ -0,0 +1,443 @@
+:06000000020DEB02006B93
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030DF100020DF9F7
+:030E0C00020DF4E0
+:050DF4001203F180FE76
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120632D001D000D005D0F9
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C00512066F1201AAD005D00467
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C005120606BE
+:06034C00D005D004801072
+:0E0352008A82C004C0051206241201AAD0053A
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E60030020312094E73
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206BE12BF
+:0603FF000455120D1E1250
+:0804050008B8D2AF1207C702CC
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E196E0F58212040FD0029026
+:0D04F100E196E02AFAF582C00212040F9095
+:0B04FE00E1B4E0F58212040FD0029080
+:0A050900E1B4E02AF58212040F901D
+:0A051300E1DEE0F58212040F7A0029
+:0E051D0090E196E0FBC3EA64808BF063F0800F
+:0B052B0095F05017EA2496F582E434A6
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1B4E0FBC3EA64808BF063F080C6
+:0B05560095F05017EA24B4F582E4345D
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1DEE0FBC3EA64808BF063F08071
+:0B05810095F05017EA24DEF582E43408
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009022E00010100C1
+:0EE1230080FA0904000004FFFFFF02070581D7
+:0EE131000200020007050202000200070504BA
+:0BE13F0002000200070586020002003B
+:0EE14A001201000200000040C016EF030400A6
+:04E1580001020301BC
+:0AE15C000A060002FFFFFF40010069
+:0EE166000902200001010080FA0904000002F5
+:0EE17400FFFFFF0207058102400000070502C1
+:04E182000240000057
+:01E186000494
+:02E1870090E125
+:02E1890096E11D
+:02E18B00B4E1FD
+:02E18D00DEE1D1
+:06E1900006030000090473
+:0EE196001E037700770077002E0072006500F0
+:0EE1A400740072006F00310031002E00640024
+:02E1B200650006
+:0EE1B4002A036E0065007800790073003300C6
+:0EE1C2005F006A007400610067005F003200B9
+:0EE1D0006600690066006F005F00610073006A
+:0EE1DE001203300030003000300030003000FE
+:04E1EC0030003000CF
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:060600009001F4020DDA86
+:0E060600AA82ABB574FE5BF5F0741C45F0F5EE
+:0E061400B5EA1392B4EAA2E192B3EAA2E4922C
+:02062200B22202
+:0E062400120606A2B0E433FA74024AF58222EE
+:0E063200E5821392B2D2B413C2B492B2D2B423
+:0E06400013C2B492B2D2B413C2B492B2D2B406
+:0E064E0013C2B492B2D2B413C2B492B2D2B4F8
+:0E065C0013C2B492B2D2B413C2B492B2D2B4EA
+:05066A0000C2B42222D1
+:0E066F00E582A2B01392B2D2B4C2B4A2B0130C
+:0E067D0092B2D2B4C2B4A2B01392B2D2B4C23E
+:0E068B00B4A2B01392B2D2B4C2B4A2B0139211
+:0E069900B2D2B4C2B4A2B01392B2D2B4C2B400
+:0E06A700A2B01392B2D2B4C2B4A2B01392B2F7
+:0906B500D2B400C2B4F582222285
+:0D06BE0090E6007412F090E60174ABF0902D
+:0E06CB00E6707480F00090E60274E0F000909B
+:0E06D900E60374F9F00090E6047480F00090DF
+:0D06E700E60B7403F00090E610E4F00090C4
+:0D06F400E61174A0F00090E618E4F000900C
+:0E070100E6047402F00090E61274A2F000907C
+:0E070F00E61374A2F00090E61474E0F000907F
+:0E071D00E6157402F00090E6047404F00090FB
+:0E072B00E6047406F00090E6047408F00090F6
+:0E073900E604E4F00090E60BE4F00090E649E0
+:0E0747007484F00090E6497484F00090E61986
+:0E075500E4F00090E6197410F00090E63274A3
+:0E07630080F00090E6337404F00090E61A7403
+:0E0771000CF00090E6247402F00090E625E4FF
+:0E077F00F00090E6347419F00090E63574FC3A
+:0E078D00F00090E61BE4F0000090E69174800E
+:0A079B00F00090E6917480F0002257
+:0807A50090E6A0E04401F022FF
+:0E07AD00AA8274805AC423541FFB740F5A9002
+:0C07BB00E6834BF090E683E04420F0223F
+:0E07C70090E680E0440AF09000FA120DDA90FD
+:0E07D500E65D74FFF090E65F74FFF05391EF65
+:0807E30090E680E054F7F022DB
+:060E0600E478FFF6D8FDC0
+:060DEB00751200751300F3
+:0A07EB0090E680E0FA30E71975147B
+:0307F50000751577
+:0307F800E1751692
+:0307FB001275175D
+:0307FE00E175188A
+:030801001C75194A
+:03080400E1751A81
+:0308070066751BF8
+:02080A00E122E9
+:04080C0075144A75A0
+:0308100015E1757A
+:03081300165C75FB
+:0308160017E17572
+:03081900186675E9
+:03081C0019E1756A
+:03081F001A1C752B
+:030822001BE122B5
+:090825005391EF75A100D20232DB
+:0C082E00C021C0E0C0F0C082C083C00246
+:0E083A00C003C004C005C006C007C000C00156
+:0E084800C0D075D0005391EF75A1001207EBE0
+:0E085600D0D0D001D000D007D006D005D004FD
+:0D086400D003D002D083D082D0F0D0E0D0FD
+:02087100213232
+:0C087300C021C0E0C0F0C082C083C00201
+:0E087F00C003C004C005C006C007C000C00111
+:0E088D00C0D075D0005391EF75A1001207EB9B
+:0E089B00D0D0D001D000D007D006D005D004B8
+:0D08A900D003D002D083D082D0F0D0E0D0B8
+:0208B6002132ED
+:0508B8001207EB751CA6
+:0308BD0025751D81
+:0808C00008758200120C777527
+:0308C8001C2E756E
+:0608CB001D0875821012E9
+:0408D1000C77751C0F
+:0308D50073751D1B
+:0C08D80008758214120C7790E65C7431F5
+:0208E400F02200
+:0D08E600E582547FFA24F750047582002249
+:0708F300BA01047582012225
+:0808FA00530201E4BA000104FD
+:03090200F5822259
+:0E090500AA82BA010C90E6A1E0FB7C008B8276
+:030913008C8322B0
+:0E091600BA810C90E6A2E0FB7C008B828C8301
+:0109240022B0
+:0E09250053027FEA700C90E6A0E0FB7C008B92
+:04093300828C83220D
+:0E09370090E6A3E0FB7C00EAC313FA7D00EA21
+:090945002BFBED3C8B82F58322B3
+:0C094E00C20290E6B8E0FA530260BA0062
+:03095A00028028F0
+:05095D00BA2002800D2C
+:05096200BA4002800E06
+:05096700BA60028003EC
+:03096C00020C0C6E
+:06096F001207A5020C0CAA
+:0A097500120372E5826003020C0C0D
+:06097F001207A5020C0C9A
+:0D09850090E6B8E0FA530280BA80028003C9
+:03099200020B0D48
+:0B09950090E6B9E0FABA0003020A86FF
+:0509A000BA06028035DB
+:0509A500BA0802800801
+:0509AA00BA0A028017EB
+:0309AF00020B0731
+:0C09B20090E740E512F090E68AE4F09037
+:0809BE00E68B7401F0020C0C41
+:0C09C60090E740E513F090E68AE4F09022
+:0809D200E68B7401F0020C0C2D
+:0A09DA0090E6BBE0FABA01028017B4
+:0509E400BA0202803898
+:0509E900BA0302805971
+:0509EE00BA0602801BA7
+:0509F300BA0702803C80
+:0309F800020A8070
+:0A09FB00AA14AB1590E6B3EBF07BF5
+:090A05000090E6B4EAF0020C0CCA
+:0A0A0E00AA16AB1790E6B3EBF07BDD
+:090A18000090E6B4EAF0020C0CB7
+:0A0A2100AA18AB1990E6B3EBF07BC6
+:090A2B000090E6B4EAF0020C0CA4
+:0A0A3400AA1AAB1B90E6B3EBF07BAF
+:090A3E000090E6B4EAF0020C0C91
+:0E0A470090E6BAE0FA90E186E0FBC3EA9B403D
+:070A5500061207A5020C0CBC
+:0C0A5C0090E6BAE075F002A42487F58251
+:0B0A680074E135F0F583E0FAA3E090A4
+:0D0A7300E6B3F07B0090E6B4EAF0020C0C54
+:060A80001207A5020C0C98
+:0D0A860090E6B8E0FA53021FBA0002800AA1
+:050A9300BA0102801B06
+:050A9800BA0266802C8B
+:0E0A9D0090E740E4F090E741F090E68AF09098
+:080AAB00E68B7402F0020C0C52
+:0E0AB30090E740E4F090E741F090E68AF09082
+:080AC100E68B7402F0020C0C3C
+:0E0AC90090E6BCE0F5821208E6E5826025901A
+:0E0AD700E6BCE0F582120905E0FA5302019038
+:0E0AE500E740EAF090E741E4F090E68AF090F6
+:080AF300E68B7402F0020C0C0A
+:060AFB001207A5020C0C1D
+:060B01001207A5020C0C16
+:060B07001207A5020C0C10
+:0C0B0D0090E6B9E0FA24F45003020C0951
+:070B1900EA2A2A900B207369
+:070B2000020C09020B560252
+:060B27000BD1020BB2022B
+:060B2D000C09020C090294
+:060B33000C09020C09028E
+:060B39000C09020B44024E
+:050B3F000C09020B4D42
+:090B440090E6BAE0F512020C0C77
+:090B4D0090E6BAE0F513020C0C6D
+:0D0B560090E6B8E0FA53021FBA00028005D5
+:050B6300BA0247800A00
+:0A0B680090E6BAE01207A5020C0C9B
+:0D0B720090E6BAE0703090E6BCE0F582122B
+:0D0B7F0008E6E582602390E6BCE0F58212F6
+:0E0B8C000905AA82AB83E0FC5304FE8A828B2B
+:0E0B9A0083ECF090E6BCE0F5821207AD8064BB
+:050BA8001207A5805FAB
+:050BAD001207A5805AAB
+:0E0BB20090E6B8E0FA53021FBA004F90E6BA80
+:070BC000E0FABA0102800512
+:050BC700BA02028040AB
+:050BCC001207A5803BAB
+:0E0BD10090E6BAE0FA702C90E6BCE0F58212D5
+:0D0BDF0008E6E582601A90E6BCE0F582129F
+:0E0BEC000905AA82AB83E0FC4304018A828BD8
+:050BFA0083ECF0800D0A
+:050BFF001207A58008AB
+:050C04001207A58003AA
+:030C09001207A52A
+:080C0C0090E6A0E04480F02214
+:050C1400AA82BA0300F2
+:070C19004005EA249C500194
+:010C200022B1
+:090C2100740F5AFBBB03028007AB
+:070C2A00740F5AFBBB0B45E0
+:0A0C3100A2AF9203C2AFEA2400F55F
+:0C0C3B0082E43400F5837402F07B007446
+:0C0C4700012AFCE43BFDEC2400F582EDEA
+:0A0C53003400F583E51DFCF0740287
+:0C0C5D002AFAE43BFBEA2400F582EB34A9
+:0A0C690000F583AA1C7B00EAF0A24C
+:030C73000392AF3A
+:010C7600225B
+:080C7700E582FA2483500122FA
+:060C7F00EA5403600122AB
+:0A0C8500A2AF9204C2AFEA2400F50A
+:0C0C8F0082E43401F5837402F07B0074F1
+:0C0C9B00012AFCE43BFDEC2400F582ED96
+:0A0CA7003401F583E51DF074022A04
+:0B0CB100FAE43BFBEA2400F582EB3480
+:080CBC0001F583AA1CEAF0A275
+:040CC4000492AF22C5
+:050CC800AA82BA8000C1
+:070CCD004005EA244B500131
+:010CD40022FD
+:060CD500EA540360012255
+:0A0CDB00A2AF9205C2AFEA2480F533
+:0C0CE50082E43400F5837402F07B00749C
+:0C0CF100012AFCE43BFDEC2480F582EDC0
+:0A0CFD003400F583E51DF074022AAF
+:0B0D0700FAE43BFBEA2480F582EB34A9
+:080D120000F583AA1CEAF0A21F
+:040D1A000592AF226D
+:080D1E00C2E8C2EA751C007571
+:060D26001D01758243125D
+:040D2C000C14751C12
+:030D300080751DAE
+:0C0D330000758253120C140090E650E48E
+:0E0D3F00F00090E652E4F00090E654E4F0007C
+:0E0D4D0090E656E4F00090E65174FFF000903E
+:0E0D5B00E65374FFF00090E65574FFF0009030
+:0E0D6900E65774FFF00090E658E4F090E6596B
+:0E0D770074FFF090E65AE4F090E65B74FFF033
+:0E0D850090E65CE4F090E65D74FFF090E65EB0
+:0E0D9300E4F090E65F74FFF00090E660E4F09C
+:0D0DA1000090E66174FFF090E662E4F090CF
+:0E0DAE00E66374FFF090E665E4F090E668748A
+:0A0DBC000BF05391AFD2E8D2EA2207
+:010DC600220A
+:020DC700AA82FE
+:060DC900120DC6DAFB2248
+:030DCF0090FB5046
+:080DD200A3E582458370F922BC
+:040DDA00AA82AB83BB
+:080DDE00120DCF1ABAFF011B30
+:050DE600EA4B70F4224D
+:030DF900758121E0
+:0A0DFC001205DAE5826003020DF42F
+:00000001FF
Index: bin/nexys3_jtag_3fifo_as.ihx
===================================================================
--- bin/nexys3_jtag_3fifo_as.ihx (nonexistent)
+++ bin/nexys3_jtag_3fifo_as.ihx (revision 26)
@@ -0,0 +1,446 @@
+:06000000020E0702006B76
+:03000B0002006B85
+:0300130002006B7D
+:03001B0002006B75
+:0300230002006B6D
+:03002B0002006B65
+:0300330002006B5D
+:03003B0002006B55
+:0300430002006B4D
+:03004B0002006B45
+:0300530002006B3D
+:03005B0002006B35
+:0300630002006B2D
+:01006B003262
+:0900800002006B0002006B00029B
+:08008900006B0002006B000295
+:08009100006B0002006B00028D
+:08009900006B0002006B000285
+:0800A100006B0002006B00027D
+:0800A900006B0002006B000275
+:0700B100006B0002006B0070
+:0901000002006B0002006B00021A
+:08010900006B0002006B000214
+:08011100006B0002006B00020C
+:08011900006B0002006B000204
+:08012100006B0002006B0002FC
+:08012900006B0002006B0002F4
+:08013100006B0002006B0002EC
+:08013900006B0002006B0002E4
+:08014100006B0002006B0002DC
+:08014900006B0002006B0002D4
+:08015100006B0002006B0002CC
+:08015900006B0002006B0002C4
+:08016100006B0002006B0002BC
+:08016900006B0002006B0002B4
+:08017100006B0002006B0002AC
+:07017900006B0002006B00A7
+:030E0D00020E15BD
+:030E2800020E10A7
+:050E10001203F180FE59
+:06018000C200E4F508F5E1
+:0401860009F50AD29B
+:05018A0001750B00757A
+:06018F000C001206001234
+:0E01950005FD75CB6375CAC0758E0075C80474
+:0701A300D2AFD2B0D2B122AD
+:0B01AA00AA82850C827583E0EAF00554
+:0501B5000C0509E4B592
+:0401BA000902050A27
+:0101BE00221E
+:0401BF0020000122F9
+:0E01C3001205FC90E6A2E0FA30E103020257BA
+:0A01D100E509450A60687AC07BE783
+:0E01DB008B9D7AC07BE77B008A9E90E67C7449
+:0C01E90031F07460F0C3743E9509E49599
+:0A01F5000A50107A3EE50924C2F515
+:0601FF0009E50A34FFF5DA
+:030205000A800765
+:06020800AA09E4F509F566
+:01020E000AE5
+:0B020F008A037C007DE08D9A850B9B2C
+:0E021A008A041AEC601090E67BE090E67CF01F
+:080228007C007DE08D9A80EA64
+:0C023000859B0B0090E68F74022BF0D22F
+:03023C00CF801858
+:0E023F0030CF1590E7C07431F090E7C17460C5
+:0A024D00F00090E68F7402F0C2CFBB
+:06025700E5AA30E00122DF
+:0A025D00C3E50994C1E50A940040CE
+:02026700012272
+:0E02690090E690E0FB7A0090E691E0FC7D00CC
+:0A027700EA4CF50DEB4DF50E7C008E
+:0E0281007DF08D9A7C007DF08C9B7C007D00D2
+:0A028F00C3EC950DED950E4003023F
+:02029900036AF6
+:07029B00E5087003020326D1
+:0A02A200E50DC39CFEE50E9DFFA8CC
+:0C02AC00087900C3E89EE99F5004880612
+:0202B8008907B4
+:0A02BA008E00E508C398F508EE2C4D
+:0B02C400FCEF3DFD30012C8E008F018F
+:0902CF008802890318B8FF011927
+:0E02D800EA4B60B390E67BE0F582C004C005FF
+:0E02E600C000C001120632D001D000D005D0F9
+:0302F4000480D8AB
+:0402F7008E028F03E1
+:0902FB008A068B071ABAFF011BE9
+:0E030400EE4F608790E67BE0F582C002C003FA
+:0E031200C004C00512066F1201AAD005D00467
+:06032000D003D00280D5DD
+:0D03260090E67BE0FA23235401FBB40100B4
+:0A0333009201EA30E707743F5AF523
+:03033D0008802213
+:0C03400030010F8A82C004C005120606BE
+:06034C00D005D004801072
+:0E0352008A82C004C0051206241201AAD0053A
+:02036000D004C7
+:050362000CBC00010DC0
+:0303670002028F00
+:08036A000090E6917480F0227E
+:0E03720090E6B8E0FA20E70C90E6B9E07002E1
+:02038000D200A9
+:04038200758201225D
+:0E03860090E6B9E0FABA902B90E6BCE025E0D4
+:0A039400547FFA2400F582E43418C7
+:0C039E00F583E0FB90E740F0EA04240047
+:0C03AA00F582E43418F583E0FA90E74196
+:0303B600F0800CC8
+:0C03B90090E7407436F090E7417483F048
+:0D03C50090E68AE4F090E6BEE0FABA02008D
+:0903D200500790E6BEE0FA80023B
+:0203DB007A02A4
+:0903DD0090E68BEAF07582012222
+:0603E60030020312096A57
+:0503EC001201BF80F5C5
+:0E03F100C2AF90E609E4F01201801206BE12BF
+:0603FF000455120D3A1234
+:0804050008D4D2AF1207E30294
+:02040D0003E604
+:0A040F00AA82E50F54FEFBB50F02B0
+:02041900802938
+:0A041B008A048C05E46210ED621102
+:0A042500EB2400F582E43418F5839F
+:0A042F00E0FB7C006210EC6211E5B6
+:060439001033C51133C5AC
+:05043F001192E0F51030
+:06044400AB0F050FEB24D5
+:0A044A0000F582E43418F583EAF0AF
+:010454002285
+:07045500750F007510AA7578
+:0C045C0011AA75820012040F75820012B4
+:04046800040F7A0003
+:0C046C00C3EA648094865017EA2408F567
+:0C04780082E434E1F583E0F582C002125A
+:07048400040FD0020A80E121
+:02048B007A00F5
+:0C048D00C3EA648094825017EA2423F52F
+:0C04990082E434E1F583E0F582C0021239
+:0704A500040FD0020A80E100
+:0E04AC0075821C12040F75820012040F7A0074
+:0C04BA00C3EA648094825017EA2402F523
+:0C04C60082E434E1F583E0F582C002120C
+:0704D200040FD0020A80E1D3
+:0C04D9007486250FFAF582C00212040F91
+:0C04E50090E19EE0F58212040FD002901E
+:0D04F100E19EE02AFAF582C00212040F908D
+:0B04FE00E1BCE0F58212040FD0029078
+:0A050900E1BCE02AF58212040F9015
+:0A051300E1E6E0F58212040F7A0021
+:0E051D0090E19EE0FBC3EA64808BF063F08007
+:0B052B0095F05017EA249EF582E4349E
+:0C053600E1F583E0F582C00212040FD052
+:04054200020A80D752
+:020546007A0039
+:0E05480090E1BCE0FBC3EA64808BF063F080BE
+:0B05560095F05017EA24BCF582E43455
+:0C056100E1F583E0F582C00212040FD027
+:04056D00020A80D727
+:020571007A000E
+:0E05730090E1E6E0FBC3EA64808BF063F08069
+:0B05810095F05017EA24E6F582E43400
+:0C058C00E1F583E0F582C00212040FD0FC
+:04059800020A80D7FC
+:02059C007A00E3
+:0C059E00C3EA648094845017EA240EF530
+:0C05AA0082E434E1F583E0F582C0021227
+:0705B600040FD0020A80E1EE
+:0C05BD007482250F400875820012040FA4
+:0205C90080F2BE
+:0805CB00AA1090187EEAF0AAC4
+:0705D3001190187FEAF022ED
+:0805DA007880E84400600C7910
+:0C05E20001901800E4F0A3D8FCD9FAD076
+:0E05EE0083D082F6D8FDC082C08375820022C1
+:02E1000012010A
+:06E10200000200000040D5
+:06E10800C016EF03040045
+:04E10E000102030106
+:0AE112000A060002FFFFFF400100B3
+:07E11C0009023500010100BA
+:0EE1230080FA0904000005FFFFFF02070581D6
+:0EE131000200020007050202000200070504BA
+:0EE13F000200020007058602000200070588A4
+:04E14D0002000200CA
+:0EE152001201000200000040C016EF0304009E
+:04E1600001020301B4
+:0AE164000A060002FFFFFF40010061
+:0EE16E000902200001010080FA0904000002ED
+:0EE17C00FFFFFF0207058102400000070502B9
+:04E18A00024000004F
+:01E18E00048C
+:02E18F0098E115
+:02E191009EE10D
+:02E19300BCE1ED
+:02E19500E6E1C1
+:06E198000603000009046B
+:0EE19E001E037700770077002E0072006500E8
+:0EE1AC00740072006F00310031002E0064001C
+:02E1BA006500FE
+:0EE1BC002A036E0065007800790073003300BE
+:0EE1CA005F006A007400610067005F003300B0
+:0EE1D8006600690066006F005F006100730062
+:0EE1E6001203300030003000300030003000F6
+:04E1F40030003000C7
+:0105FC0022DC
+:0105FD0022DB
+:0105FE0022DA
+:0105FF0022D9
+:060600009001F4020DF66A
+:0E060600AA82ABB574FE5BF5F0741C45F0F5EE
+:0E061400B5EA1392B4EAA2E192B3EAA2E4922C
+:02062200B22202
+:0E062400120606A2B0E433FA74024AF58222EE
+:0E063200E5821392B2D2B413C2B492B2D2B423
+:0E06400013C2B492B2D2B413C2B492B2D2B406
+:0E064E0013C2B492B2D2B413C2B492B2D2B4F8
+:0E065C0013C2B492B2D2B413C2B492B2D2B4EA
+:05066A0000C2B42222D1
+:0E066F00E582A2B01392B2D2B4C2B4A2B0130C
+:0E067D0092B2D2B4C2B4A2B01392B2D2B4C23E
+:0E068B00B4A2B01392B2D2B4C2B4A2B0139211
+:0E069900B2D2B4C2B4A2B01392B2D2B4C2B400
+:0E06A700A2B01392B2D2B4C2B4A2B01392B2F7
+:0906B500D2B400C2B4F582222285
+:0D06BE0090E6007412F090E60174ABF0902D
+:0E06CB00E6707480F00090E60274E0F000909B
+:0E06D900E60374F9F00090E6047480F00090DF
+:0D06E700E60B7403F00090E610E4F00090C4
+:0D06F400E61174A0F00090E618E4F000900C
+:0E070100E6047402F00090E61274A2F000907C
+:0E070F00E61374A2F00090E61474E2F000907D
+:0E071D00E61574E2F00090E6047404F000901B
+:0E072B00E6047406F00090E6047408F00090F6
+:0E073900E604E4F00090E60BE4F00090E649E0
+:0E0747007484F00090E6497484F00090E61986
+:0E075500E4F00090E6197410F00090E63274A3
+:0E07630080F00090E6337404F00090E61A7403
+:0E0771000CF00090E6247402F00090E625E4FF
+:0E077F00F00090E6347409F00090E63574FC4A
+:0E078D00F00090E61B740CF00090E62674025B
+:0E079B00F00090E627E4F00090E6367441F09E
+:0E07A9000090E63774FCF0000090E69174803A
+:0A07B700F00090E6917480F000223B
+:0807C10090E6A0E04401F022E3
+:0E07C900AA8274805AC423541FFB740F5A90E6
+:0C07D700E6834BF090E683E04420F02223
+:0E07E30090E680E0440AF09000FA120DF690C5
+:0E07F100E65D74FFF090E65F74FFF05391EF49
+:0807FF0090E680E054F7F022BF
+:060E2200E478FFF6D8FDA4
+:060E0700751200751300D6
+:0A08070090E680E0FA30E71975145E
+:030811000075155A
+:03081400E1751675
+:0308170012751740
+:03081A00E175186D
+:03081D001C75192E
+:03082000E1751A65
+:030823006E751BD4
+:02082600E122CD
+:04082800751452757C
+:03082C0015E1755E
+:03082F00166475D7
+:0308320017E17556
+:03083500186E75C5
+:0308380019E1754E
+:03083B001A1C750F
+:03083E001BE12299
+:090841005391EF75A100D20232BF
+:0C084A00C021C0E0C0F0C082C083C0022A
+:0E085600C003C004C005C006C007C000C0013A
+:0E086400C0D075D0005391EF75A100120807A7
+:0E087200D0D0D001D000D007D006D005D004E1
+:0D088000D003D002D083D082D0F0D0E0D0E1
+:02088D00213216
+:0C088F00C021C0E0C0F0C082C083C002E5
+:0E089B00C003C004C005C006C007C000C001F5
+:0E08A900C0D075D0005391EF75A10012080762
+:0E08B700D0D0D001D000D007D006D005D0049C
+:0D08C500D003D002D083D082D0F0D0E0D09C
+:0208D2002132D1
+:0508D400120807751C6D
+:0308D90041751D49
+:0808DC0008758200120C9375EF
+:0308E4001C4A7536
+:0608E7001D0875821012CD
+:0408ED000C93751CD7
+:0308F1008F751DE3
+:0C08F40008758214120C9390E65C7431BD
+:02090000F022E3
+:0D090200E582547FFA24F75004758200222C
+:07090F00BA01047582012208
+:08091600530201E4BA000104E0
+:03091E00F582223D
+:0E092100AA82BA010C90E6A1E0FB7C008B825A
+:03092F008C832294
+:0E093200BA810C90E6A2E0FB7C008B828C83E5
+:010940002294
+:0E09410053027FEA700C90E6A0E0FB7C008B76
+:04094F00828C8322F1
+:0E09530090E6A3E0FB7C00EAC313FA7D00EA05
+:090961002BFBED3C8B82F5832297
+:0C096A00C20290E6B8E0FA530260BA0046
+:03097600028028D4
+:05097900BA2002800D10
+:05097E00BA4002800EEA
+:05098300BA60028003D0
+:03098800020C2836
+:06098B001207C1020C2856
+:0A099100120372E5826003020C28D5
+:06099B001207C1020C2846
+:0D09A10090E6B8E0FA530280BA80028003AD
+:0309AE00020B2910
+:0B09B10090E6B9E0FABA0003020AA2C7
+:0509BC00BA06028035BF
+:0509C100BA08028008E5
+:0509C600BA0A028017CF
+:0309CB00020B23F9
+:0C09CE0090E740E512F090E68AE4F0901B
+:0809DA00E68B7401F0020C2809
+:0C09E20090E740E513F090E68AE4F09006
+:0809EE00E68B7401F0020C28F5
+:0A09F60090E6BBE0FABA0102801798
+:050A0000BA020280387B
+:050A0500BA0302805954
+:050A0A00BA0602801B8A
+:050A0F00BA0702803C63
+:030A1400020A9C37
+:0A0A1700AA14AB1590E6B3EBF07BD8
+:090A21000090E6B4EAF0020C2892
+:0A0A2A00AA16AB1790E6B3EBF07BC1
+:090A34000090E6B4EAF0020C287F
+:0A0A3D00AA18AB1990E6B3EBF07BAA
+:090A47000090E6B4EAF0020C286C
+:0A0A5000AA1AAB1B90E6B3EBF07B93
+:090A5A000090E6B4EAF0020C2859
+:0E0A630090E6BAE0FA90E18EE0FBC3EA9B4019
+:070A7100061207C1020C2868
+:0C0A780090E6BAE075F002A4248FF5822D
+:0B0A840074E135F0F583E0FAA3E09088
+:0D0A8F00E6B3F07B0090E6B4EAF0020C281C
+:060A9C001207C1020C2844
+:0D0AA20090E6B8E0FA53021FBA0002800A85
+:050AAF00BA0102801BEA
+:050AB400BA0266802C6F
+:0E0AB90090E740E4F090E741F090E68AF0907C
+:080AC700E68B7402F0020C281A
+:0E0ACF0090E740E4F090E741F090E68AF09066
+:080ADD00E68B7402F0020C2804
+:0E0AE50090E6BCE0F582120902E582602590E1
+:0E0AF300E6BCE0F582120921E0FA5302019000
+:0E0B0100E740EAF090E741E4F090E68AF090D9
+:080B0F00E68B7402F0020C28D1
+:060B17001207C1020C28C8
+:060B1D001207C1020C28C2
+:060B23001207C1020C28BC
+:0C0B290090E6B9E0FA24F45003020C2519
+:070B3500EA2A2A900B3C7331
+:070B3C00020C25020B7202FE
+:060B43000BED020BCE02D7
+:060B49000C25020C250240
+:060B4F000C25020C25023A
+:060B55000C25020B6002FA
+:050B5B000C25020B69EE
+:090B600090E6BAE0F512020C283F
+:090B690090E6BAE0F513020C2835
+:0D0B720090E6B8E0FA53021FBA00028005B9
+:050B7F00BA0247800AE4
+:0A0B840090E6BAE01207C1020C2847
+:0D0B8E0090E6BAE0703090E6BCE0F582120F
+:0D0B9B000902E582602390E6BCE0F58212BD
+:0E0BA8000921AA82AB83E0FC5304FE8A828BF3
+:0E0BB60083ECF090E6BCE0F5821207C9806483
+:050BC4001207C1805F73
+:050BC9001207C1805A73
+:0E0BCE0090E6B8E0FA53021FBA004F90E6BA64
+:070BDC00E0FABA01028005F6
+:050BE300BA020280408F
+:050BE8001207C1803B73
+:0E0BED0090E6BAE0FA702C90E6BCE0F58212B9
+:0D0BFB000902E582601A90E6BCE0F5821266
+:0E0C08000921AA82AB83E0FC4304018A828B9F
+:050C160083ECF0800DED
+:050C1B001207C1800872
+:050C20001207C1800372
+:030C25001207C1F2
+:080C280090E6A0E04480F022F8
+:050C3000AA82BA0300D6
+:070C35004005EA249C500178
+:010C3C002295
+:090C3D00740F5AFBBB030280078F
+:070C4600740F5AFBBB0B45C4
+:0A0C4D00A2AF9203C2AFEA2400F543
+:0C0C570082E43400F5837402F07B00742A
+:0C0C6300012AFCE43BFDEC2400F582EDCE
+:0A0C6F003400F583E51DFCF074026B
+:0C0C79002AFAE43BFBEA2400F582EB348D
+:0A0C850000F583AA1C7B00EAF0A230
+:030C8F000392AF1E
+:010C9200223F
+:080C9300E582FA2483500122DE
+:060C9B00EA54036001228F
+:0A0CA100A2AF9204C2AFEA2400F5EE
+:0C0CAB0082E43401F5837402F07B0074D5
+:0C0CB700012AFCE43BFDEC2400F582ED7A
+:0A0CC3003401F583E51DF074022AE8
+:0B0CCD00FAE43BFBEA2400F582EB3464
+:080CD80001F583AA1CEAF0A259
+:040CE0000492AF22A9
+:050CE400AA82BA8000A5
+:070CE9004005EA244B500115
+:010CF00022E1
+:060CF100EA540360012239
+:0A0CF700A2AF9205C2AFEA2480F517
+:0C0D010082E43400F5837402F07B00747F
+:0C0D0D00012AFCE43BFDEC2480F582EDA3
+:0A0D19003400F583E51DF074022A92
+:0B0D2300FAE43BFBEA2480F582EB348D
+:080D2E0000F583AA1CEAF0A203
+:040D36000592AF2251
+:080D3A00C2E8C2EA751C007555
+:060D42001D017582431241
+:040D48000C30751CDA
+:030D4C0080751D92
+:0C0D4F0000758253120C300090E650E456
+:0E0D5B00F00090E652E4F00090E654E4F00060
+:0E0D690090E656E4F00090E65174FFF0009022
+:0E0D7700E65374FFF00090E65574FFF0009014
+:0E0D8500E65774FFF00090E658E4F090E6594F
+:0E0D930074FFF090E65AE4F090E65B74FFF017
+:0E0DA10090E65CE4F090E65D74FFF090E65E94
+:0E0DAF00E4F090E65F74FFF00090E660E4F080
+:0D0DBD000090E66174FFF090E662E4F090B3
+:0E0DCA00E66374FFF090E665E4F090E668746E
+:0A0DD8000BF05391AFD2E8D2EA22EB
+:010DE20022EE
+:020DE300AA82E2
+:060DE500120DE2DAFB2210
+:030DEB0090FB502A
+:080DEE00A3E582458370F922A0
+:040DF600AA82AB839F
+:080DFA00120DEB1ABAFF011BF8
+:050E0200EA4B70F42230
+:030E1500758121C3
+:0A0E18001205DAE5826003020E10F5
+:00000001FF
Index: bin
===================================================================
--- bin (nonexistent)
+++ bin (revision 26)
bin
Property changes :
Added: svn:ignore
## -0,0 +1,33 ##
+*.dep_ghdl
+*.dep_isim
+*.dep_xst
+work-obj93.cf
+*.vcd
+*.ghw
+*.sav
+*.tmp
+*.exe
+ise
+xflow.his
+*.ngc
+*.ncd
+*.pcf
+*.bit
+*.msk
+isim
+isim.log
+isim.wdb
+fuse.log
+*_[sft]sim.vhd
+*_tsim.sdf
+*_xst.log
+*_tra.log
+*_twr.log
+*_map.log
+*_par.log
+*_tsi.log
+*_pad.log
+*_bgn.log
+*_svn.log
+*_sum.log
+*_[dsft]sim.log
Index: sys/99-retro-usb-permissions.rules
===================================================================
--- sys/99-retro-usb-permissions.rules (nonexistent)
+++ sys/99-retro-usb-permissions.rules (revision 26)
@@ -0,0 +1,26 @@
+# $Id: 99-retro-usb-permissions.rules 467 2013-01-02 19:49:05Z mueller $
+#
+# udev rules to make some USB adaptors writable to group plugdev
+#
+# copy into /etc/udev/rules.d
+#
+ACTION!="add", GOTO="special_usb_rules_end"
+SUBSYSTEM!="usb", GOTO="special_usb_rules_end"
+#
+# Cypress FX2 based systems ------------------------------------------
+# - Digilent Nexys2
+ATTR{idVendor}=="1443", ATTR{idProduct}=="0005", MODE="660", GROUP="plugdev"
+# - Digilent Nexys3 and Atlys
+ATTR{idVendor}=="1443", ATTR{idProduct}=="0007", MODE="660", GROUP="plugdev"
+#
+# - Cypress - EZ-USB FX2 USB 2.0 default
+ATTR{idVendor}=="04b4", ATTR{idProduct}=="8613", MODE="660", GROUP="plugdev"
+#
+# - ixo.de - USB-JTAG-IF (used by ixo_jtag firmware)
+ATTR{idVendor}=="16c0", ATTR{idProduct}=="06ad", MODE="660", GROUP="plugdev"
+# - VOTI - free for internal lab use 1007 (used by retro11 firmware; primary)
+ATTR{idVendor}=="16c0", ATTR{idProduct}=="03ef", MODE="660", GROUP="plugdev"
+# - VOTI - free for internal lab use 1008 (used by retro11 firmware; alternate)
+ATTR{idVendor}=="16c0", ATTR{idProduct}=="03f0", MODE="660", GROUP="plugdev"
+#
+LABEL="special_usb_rules_end"
Index: sys/README.txt
===================================================================
--- sys/README.txt (nonexistent)
+++ sys/README.txt (revision 26)
@@ -0,0 +1,17 @@
+# $Id: README.txt 446 2011-12-29 23:27:48Z mueller $
+
+to setup udev rules do
+
+ sudo cp -a 99-retro-usb-permissions.rules /etc/udev/rules.d/
+ sudo chown root:root /etc/udev/rules.d/99-retro-usb-permissions.rules
+ dir /etc/udev/rules.d/
+
+ sudo udevadm control --reload-rules
+
+to verify whether usb device was really put into group 'plugdev'
+
+ lsusb
+ --> look for bus/dev of interest
+
+ find /dev/bus/usb -type c | sort| xargs ls -l
+ --> check whether bus/dev of interest is in group plugdev
Index: sys
===================================================================
--- sys (nonexistent)
+++ sys (revision 26)
sys
Property changes :
Added: svn:ignore
## -0,0 +1,33 ##
+*.dep_ghdl
+*.dep_isim
+*.dep_xst
+work-obj93.cf
+*.vcd
+*.ghw
+*.sav
+*.tmp
+*.exe
+ise
+xflow.his
+*.ngc
+*.ncd
+*.pcf
+*.bit
+*.msk
+isim
+isim.log
+isim.wdb
+fuse.log
+*_[sft]sim.vhd
+*_tsim.sdf
+*_xst.log
+*_tra.log
+*_twr.log
+*_map.log
+*_par.log
+*_tsi.log
+*_pad.log
+*_bgn.log
+*_svn.log
+*_sum.log
+*_[dsft]sim.log
Index: .
===================================================================
--- . (nonexistent)
+++ . (revision 26)
.
Property changes :
Added: svn:ignore
## -0,0 +1,33 ##
+*.dep_ghdl
+*.dep_isim
+*.dep_xst
+work-obj93.cf
+*.vcd
+*.ghw
+*.sav
+*.tmp
+*.exe
+ise
+xflow.his
+*.ngc
+*.ncd
+*.pcf
+*.bit
+*.msk
+isim
+isim.log
+isim.wdb
+fuse.log
+*_[sft]sim.vhd
+*_tsim.sdf
+*_xst.log
+*_tra.log
+*_twr.log
+*_map.log
+*_par.log
+*_tsi.log
+*_pad.log
+*_bgn.log
+*_svn.log
+*_sum.log
+*_[dsft]sim.log