The FX2 firmware 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 taken as basis for the further developement.
The original `README.txt` is preserved under 
[README_iso_jtag.txt](README_iso_jtag.txt).
Only the `hw_nexys.c` branch was kept on the import.

### Change log:

#### 2014-11-16 (Rev 604)
- ported to sdcc 3.3
  - all prior development was done with sdcc 2.x, latest sdcc 2.9 was bundled
    with Ubuntu 12.04 LTS.
  - now switching to sdcc 3.3 as bundled with Ubuntu 14.04 LTS.
  - mayor changes:
    - assembler now named `sdas8051` (was `asx8051`)
    - all special reserved keywords start now with a double underscore

            at        --> __at
            bit       --> __bit
            interrupt --> __interrupt
            sbit      --> __sbit
            sfr       --> __sfr
            xdata     --> __xdata
            _asm      --> __asm
            _endasm   --> __endasm
            _naked    --> __naked

    - in general sources stayed untouched in the sdcc 2.9 form, all keyword
      mappings are done with the preprocessor and defs like `-Dat=__at`
    - make usage now
      - default is now sdcc 3.x, in this case simply use

             make clean && make

      - on systems with sdcc 2.x use

             make clean && make SDCC29=1

  - detected and fixed BUG inherted from ixo-jtag and GNU Radio in `SYNCDELAY`
    The macro `SYNCDELAY` (defined in lib/syncdelay.h) inserts 'nop' needed
    to resolve some timing issues in the FX2. The old implementation was

          #define SYNCDELAY _asm nop; nop; nop; _endasm
          #define NOP       _asm nop; _endasm

    This inserts into the assembler output a single line

          nop; nop; nop;

    Since `';'` is the comment delimiter for the assember the 2nd and 3rd nop
    are simply ignored.

    This wrong implementation was changed to

          #define SYNCDELAY   NOP; NOP; NOP

    That created three lines in the assembler output

          nop;
          nop;
          nop;

    and generated the three desired nops in the binary.

    > This was definitively broken from the very beginning.  
    > The code ran alway. Reason is mosu likely that the `SYNCDELAY`  
    > macros were only used in the setup phase and never is a  
    > really time critical context.

#### 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
