mbed port of FFT routines from STM32 DSP library and Ivan Mellen's implementation. Tested on LPC2368 mbed but should work on 1768 too (original code was written for Cortex-M3)

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
igorsk
Date:
Sun Dec 13 07:14:57 2009 +0000
Commit message:

Changed in this revision

FFTCM3.s Show annotated file Show diff for this revision Revisions of this file
cr4_fft_1024_stm32.s Show annotated file Show diff for this revision Revisions of this file
cr4_fft_256_stm32.s Show annotated file Show diff for this revision Revisions of this file
cr4_fft_64_stm32.s Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 90ade34a3b71 FFTCM3.s
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FFTCM3.s	Sun Dec 13 07:14:57 2009 +0000
@@ -0,0 +1,1767 @@
+;* Complex 16 bit Radix 4 FFT and Inverse FFT for Cortex-M3    version 1.0
+;--------------------------------------------------------------------------
+;(c) 2008 Ivan Mellen   
+; adapted for ARM7 (mbed) and ARM assembler syntax by Igor Skochinsky
+;--------------------------------------------------------------------------
+;Free Personal, Non-Commercial Use License. 
+;The Software is licensed to you for your personal, NON-COMMERCIAL USE.
+;If you have questions about this license or would like a different license
+;please email : imellen(at)embeddedsignals(dot)com
+
+; - Radix 4 FFT - supported sizes: N=4,16,64,256,1024,4096
+; - N>4096 possible with custom coefficients  
+; - 16 bit complex arithmetic, 1Q15 coefficients
+; - input data remains unmodified
+; - decimation-in-time with auto scale after each stage - no overflow 
+; - GCC version (Code Sourcery G++ Lite 2007q3-53), requires C preprocessor
+; - hand optimized THUMB2 assembly for Cortex-M3 (e.g. STM32)
+; - code optimized with 64 bit flash prefetch and branch speculation in mind
+; - single function for multiple FFT sizes
+; - functions are both "C" and assembly callable
+
+;Modifications in version 2.0:
+; - Constant size FFT (faster execution, but N is constant)
+; - purely real input (almost 2x faster)
+; - radix 2 stage (for N= 8, 32, 128, 512, 2048, 8192...)
+; - RAM based coefficients with size optimized generator (for high flash latency)
+; - speed optimized windowing function(Bartlett,Blackman, Hamming, Hanning, Kaiser)
+
+
+;STM32 FFT benchmarks in CPU cycles based on real hardware measurements:
+
+; N - FFT size
+; L - Flash latency
+; F,R - coefficients in Flash or RAM
+
+;    N    L=0 F/R    L=1 F   L=1 r*   L=2 F*     L=2 r*   ARM7TDMI  ARM9E  dsPIC
+;   64     3575      3797     3636     4588      4007       -        2701   3739
+;  256    19425     20685    19743    25144     21685  38461-43920  13740  19055
+; 1024    98541    105113   100074   128070    109634       -       68534    N/A
+
+;Notes:ARM9E - DSP enhanced arm9 core, based on STR910 @96 MHz, RAM coefficients
+;      dsPIC - dsPIC30x / dsPIC33x - results based on Microchip's DSP library 
+;      ARM7TDMI - 3rd party, web based benchmark results
+;      *STM32 results for latency L=2 or  - source compiled with LATENCY2 defined
+
+;IFFT benchmarks (calculated and verified by measurement):
+;  add 6+N/4 to FFT benchmark {22,70,262} for N={64,256,1024}
+
+;Code size:
+;FFT only:  480 bytes
+;FFT+IFFT:  682 bytes
+
+;Coefficient size (Flash or RAM):
+;   N: 16  64  256  1024  4096
+;size: 48 240 1008  4080 16368  bytes
+
+;------------------------------------------------------------------------------
+;Usage example: add this file to your project. In C code:
+
+;//declare functions
+;void fftR4(short *y, short *x, int N);
+;void ifftR4(short *y, short *x, int N);
+
+;// prepare test input data
+;short x[512]; // input data 16 bit, 4 byte aligned  x0r,x0i,x1r,x1i,....
+;short y[512]; // output data 16 bit,4 byte aligned  y0r,y0i,y1r,y1i,....
+;short z[512]; // same format...
+
+;for (i=0;i<512;i++) x[i]=0;
+;for (i=0;i<512;i=i+8)
+;  { x[i+0]=16384; x[i+2]=16384;    x[i+4]=-16384;  x[i+6]=-16384;}
+;// x = [ 16384,16384,-16384,-16384,16384,...]  1/4 Fsampling
+
+;//call functions
+;fftR4(y, x, 256);   // y is in frequency domain y[128]=
+;ifftR4(z, y, 256);  // z should be x/N + noise introduced by 16 bit truncating 
+ 
+
+;// expected results:
+;//y[128]is 8191; y[129] is -8190   y[384]is 8191; y[385]is 8191 rest 0 + noise
+;//z[2n] is 64 64 -64 -64 ..  z[2n+1] is 0    all +- 1 (noise)
+;------------------------------------------------------------------------------
+;*/
+
+; // This file contains two functions :
+
+; // void fftR4(short *y, short *x, int N);   // radix 4 FFT
+; // void ifftR4(short *y, short *x, int N);  // radix 4 inverse FFT
+         
+;        .syntax unified
+;//    .thumb
+    EXPORT fftR4  
+    EXPORT ifftR4   
+
+    AREA FFT, CODE, READONLY
+
+;//#define LATENCY2  //comment this line if flash latency lower than 2
+
+y      RN    R0    ;/ short *y -output complex array  
+x      RN    R1    ;/ short *x -input complex array  
+N      RN    R2    ;/ int N - number of samples 4,16,64,256,1024,4096
+
+c      RN    R0    ;/ short *c - coefficient array
+Bl     RN    R2    ;/ the number of blocks
+R      RN    R3    ;/ the number of samples in each block
+x0r    RN    R4
+x0i    RN    R5
+x1r    RN    R6
+x1i    RN    R7
+x2r    RN    R8
+x2i    RN    R9
+x3r    RN    R10
+x3i    RN    R11
+y3r    RN    R11
+y3i    RN    R10
+tmp0   RN    R12   ;/ temporary0
+tmp1   RN    R14   ;/ temporary1
+
+;       // complex load, x=[a], a+=offset in register data from RAM (0 wait states)
+
+      MACRO    
+      LOADC   $dr, $di, $a, $offset   ;//5 cycles
+        ldrsh   $di, [$a, #2]
+        ldrsh   $dr, [$a]      ;//ldrsh   $x._r, [$a], $offset
+        adds     $a, $offset
+      MEND
+
+;        // cofficient complex load, c=[a], a=a+ 4  ;Wk from FLASH (1-4 wait states)
+      macro
+      LOADCF   $xr, $xi, $a  ;              //4 cycles
+        ldr   $xr, [$a], #4    ;    //read 2 shorts as 32 bits
+        asr   $xi, $xr, #16    ;    //im extract
+    IF :DEF:TARGET_LPC1768
+        sxth  $xr, $xr        ;    //re extract
+    ELSE        
+        lsl $xr, #16
+        asr $xr, #16
+    ENDIF        
+      mend
+   
+;        // coefficient complex load, c=[a], a=a+ 4   ; Wk  from RAM (0 wait states)
+;//    .macro  LOADCF  xr,xi, a   //4 (or 3?) cycles
+;//          ldrsh   \xi, [$a, #2]
+;//        ldrsh   \xr, [$a],#4  //ldrsh not pipelined in STM32, macro not used
+;//    .endm
+  
+;  // complex load, xc=[a], a=a-register offset
+       macro   
+       LOADCMi   $xr, $xi, $a, $offset   ;//5 cycles
+        ldrsh   $xi, [$a, #2]
+        ldrsh   $xr, [$a]
+        subs     $a, $offset       ;//ldrsh   \xr, [$a], \offset
+       mend
+
+;        // complex store, [a]=x,c a=a+ immediate offset 
+      macro   
+      STRC   $xr, $xi, $a, $offset   ;//2 cycles
+        strh    $xi, [$a, #2]
+        strh    $xr, [$a], $offset
+      mend        
+
+;       // complex store, [a]=x, a+=offset in register
+      macro  
+      STRCR   $xr, $xi, $a, $offset   ;//3 cycles
+        strh    $xi, [$a, #2]
+        strh    $xr, [$a]
+        adds     $a, $offset
+      mend 
+
+
+;        // Multiply Complex Conjugate a=(xr+i*xi)*(cr-i*ci)
+;        //  x = xr + i*xi 
+;        //  c = cr + i*ci  ;6 cycles
+      macro   
+      MULCC1 $ar, $ai, $xr, $xi, $cr, $ci
+        mul  tmp0, $xi, $cr           ; // tmp0=xi*cr
+        mul  tmp1, $xi, $ci            ;// tmp1=xi*ci        
+    IF :DEF:TARGET_LPC1768
+        mls  $ai, $xr, $ci, tmp0   ;    // ai=tmp0-xr*ci  =  xi*cr - xr*ci
+    ELSE
+        mul  $ai, $xr, $ci         ;    // ai=xr*ci
+        sub  $ai, tmp0, $ai        ;    // ai=tmp0-ai  =  xi*cr - xr*ci
+    ENDIF
+        mla  $ar, $xr, $cr, tmp1       ;// ar=tmp1+xr*cr  =  xr*cr + xi*ci
+      mend
+
+        
+;        // complex Fast Fourier Transform - Four point; scale with shift s
+       macro    
+       BFFT4  $s
+       
+        add     x2r, x2r, x3r   ;// (x2,x3) = (x2+x3, x2-x3)
+        add     x2i, x2i, x3i
+        sub     x3r, x2r, x3r, lsl#1
+        sub     x3i, x2i, x3i, lsl#1
+       
+        mov     x0r, x0r, asr#2   ;// (x0,x1) = (x0+(x1>>s), x0-(x1>>s))/4
+        mov     x0i, x0i, asr#2
+        add     x0r, x0r, x1r, asr#(2+$s)
+        add     x0i, x0i, x1i, asr#(2+$s)
+        sub     x1r, x0r, x1r, asr#(1+$s)
+        sub     x1i, x0i, x1i, asr#(1+$s)
+       
+        add     x0r, x0r, x2r, asr#(2+$s)   ;// (x0,x2) = (x0+(x2>>s)/4, x0-(x2>>s)/4)
+        add     x0i, x0i, x2i, asr#(2+$s) 
+        sub     x2r, x0r, x2r, asr#(1+$s)
+        sub     x2i, x0i, x2i, asr#(1+$s)
+        
+        add     x1r, x1r, x3i, asr#(2+$s)  ;// (x1,y3)=(x1-i*(x3>>s)/4, x1+i*(x3>>s)/4)
+        sub     x1i, x1i, x3r, asr#(2+$s)
+        sub     y3r, x1r, x3i, asr#(1+$s)
+        add     y3i, x1i, x3r, asr#(1+$s)
+       mend
+        
+; we can't use RBIT on ARM7 thus this macro
+; it can probably be optimized for common cases (x < 64, 256, 1024)...
+;unsigned int RBIT(unsigned int x)
+;{
+;    x = (((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1)); 
+;    x = (((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2)); 
+;    x = (((x >> 4) & 0x0f0f0f0f) | ((x & 0x0f0f0f0f) << 4)); 
+;    x = (((x >> 8) & 0x00ff00ff) | ((x & 0x00ff00ff) << 8)); 
+;    return ((x >> 16) | (x << 16)); 
+;}
+     MACRO 
+        MYRBIT  $rd, $rs
+     IF :DEF:TARGET_LPC1768
+        RBIT $rd, $rs
+     ELSE
+        PUSH {R0}
+        PUSH {R1-R3}
+        IF R0 != $rs
+          MOV R0, $rs
+        ENDIF
+        ADR     R3, TableRBIT_V1
+        LDR     R1, [R3], #4
+        AND     R2, R1, R0,LSR#1
+        AND     R0, R0, R1
+        LDR     R1, [R3], #4
+        ORR     R0, R2, R0,LSL#1
+        AND     R2, R1, R0,LSR#2
+        AND     R0, R0, R1
+        LDR     R1, [R3], #4
+        ORR     R0, R2, R0,LSL#2
+        AND     R2, R1, R0,LSR#4
+        AND     R0, R0, R1
+        ORR     R0, R2, R0,LSL#4
+        LDR     R1, [R3], #4
+        AND     R1, R1, R0,LSR#8
+        BIC     R0, R0, #0xFF00
+        ORR     R0, R1, R0,LSL#8
+        MOV     R0, R0,ROR#16
+        POP     {R1-R3}
+        IF R0 != $rd
+          MOV $rd, R0
+        ENDIF
+        POP     {R0}
+        ENDIF   
+        MEND
+
+TableRBIT_V1
+        DCD  0x55555555,0x33333333,0xFF0F0F0F,0xFFFF00FF
+ 
+;//----------------------------------------------------------------------------
+;// inverse FFT 
+;// void ifftR4(short *y, short *x, int N) 
+;// custom first stage reorders input data: x(n)=x(N-n) n=0:N-1  x(N)=x(0)
+;// extra cost to fft: 6+N/4 cycles
+;        .thumb_func
+;        align 8  //speed optimization in STM32
+;        nop.n //alignment optimization
+
+ifftR4 
+        push {r4-r11, lr}
+        mov      tmp0, #0  ;// bit reversed counter
+        movs     tmp1, N    ; //; first tmp1=N  
+        MYRBIT   R, N
+        lsl      R, #3
+
+        adds    tmp1,  x, tmp1, lsl#2 ;// tmp1=&x[tmp1==N] 
+        ldrsh   x0i, [x, #2] ;  // replaces  C_LDRmi x[N] by _LDRmi x[0] 
+        ldrsh   x0r, [x]
+        subs  tmp1, N    ; //tmp1 still needs to be decremented for 2nd C_LDRmi
+        b L2 ; // continue with second load
+
+ifirstStage
+        ;// first stage load and bit reverse
+        adds    tmp1,  x, tmp1, lsl#2 ;// tmp1=&x[tmp1] 
+        LOADCMi   x0r,x0i, tmp1, N
+L2     
+        LOADCMi   x2r,x2i, tmp1, N
+        LOADCMi   x1r,x1i, tmp1, N
+        LOADCMi   x3r,x3i, tmp1, N
+         BFFT4  0
+        STRC   x0r,x0i, y, #4
+        STRC   x1r,x1i, y, #4
+        STRC   x2r,x2i, y, #4
+        STRC   y3r,y3i, y, #4
+           
+       adds tmp0,R
+       MYRBIT tmp1, tmp0
+       sub tmp1, N, tmp1  ;//tmp1=N-tmp1    
+       bne     ifirstStage ;// loop if count non zero  
+       b firstStageFinished
+        ;// rest same as normal fft
+ 
+ ;//----------------------------------------------------------------------------
+; // void fftR4(short *y, short *x, int N)
+;      .thumb_func
+fftR4
+        push {r4-r11, lr}
+        mov     tmp0, #0 ;           // bit reversed counter
+        mov     tmp1, #0
+        MYRBIT  R, N
+        lsl     R,#3
+
+firstStage
+       ; // first stage load and bit reverse
+        adds    tmp1,  x, tmp1, lsl#2; // tmp1=&x[tmp1] and clear carry
+        LOADC   x0r, x0i, tmp1, N
+        LOADC   x2r,x2i, tmp1, N
+        LOADC   x1r,x1i, tmp1, N
+        LOADC   x3r,x3i, tmp1, N
+        BFFT4  0
+        STRC   x0r,x0i, y, #4
+        STRC   x1r,x1i, y, #4
+        STRC   x2r,x2i, y, #4
+        STRC   y3r,y3i, y, #4
+           
+       adds tmp0,R
+       MYRBIT tmp1, tmp0
+       bne     firstStage ;// loop if count non zero
+   
+firstStageFinished        ;// finished the first stage
+        sub     x, y, N, lsl #2  ; // x = working buffer
+        mov     R, #16
+        lsrs Bl,N, #4  
+        popeq  {r4-r11, pc}     ;// for N==4 return from function
+        adr     c, coef_table    ;//change if table in RAM 
+                
+nextStage
+        ;// Bl = the number of blocks
+        ;// R = the number of samples in each block
+ 
+;#ifdef LATENCY2      ; // narrow/wide versions to optimize flash pre-fetch
+;        stm   sp!, {x, Bl}   
+;        add     tmp0, R, R, lsl#1
+;        add.n     x, x, tmp0    
+;#else
+        push      {x, Bl}  
+        add       tmp0, R, R, lsl#1
+        add       x, x, tmp0   
+;#endif
+        sub     Bl, Bl, #1<<16
+nextBlock
+        add     Bl, Bl, R, lsl#(16-2)
+
+nextButterfly
+        ;// Bl=((number butterflies left-1)<<16) + (number of blocks left)
+        LOADCMi   x0r,x0i, x, R
+        LOADCF   x3r,x3i, c
+        MULCC1   x3r,x3i, x0r,x0i, x3r,x3i
+        LOADCMi   x0r,x0i, x, R
+        LOADCF   x2r,x2i, c
+        MULCC1   x2r,x2i, x0r,x0i, x2r,x2i
+        LOADCMi   x0r,x0i, x, R
+        LOADCF   x1r,x1i, c
+        MULCC1 x1r,x1i, x0r,x0i, x1r,x1i
+        LOADC   x0r,x0i, x, #0
+        BFFT4  15             ; // coefficients are 1Q15
+        STRCR  x0r,x0i, x, R
+        STRCR  x1r,x1i, x, R
+        STRCR  x2r,x2i, x, R
+        STRC   y3r,y3i, x, #4
+        subs    Bl, Bl, #1<<16
+        bge     nextButterfly
+        add     tmp0, R, R, lsl#1
+        add     x, x, tmp0
+        sub     Bl, Bl, #1
+        movs    tmp1, Bl, lsl#16
+        subne   c, c, tmp0
+        bne     nextBlock
+        
+        pop {r1-r2}   ;//LDM sp!, {x, Bl}
+        mov     R, R, lsl#2     ;// block size *=4
+        lsrs Bl,Bl, #2            ;//# of blocks /=4
+        bne     nextStage
+        pop    {r4-r11, pc}     ;//return
+      
+        align 4 ;//32 bit access acceleration
+
+;// Note: unused portion of coef_table can be commented to reduce size
+coef_table
+        ;// FFT twiddle table of triplets E(3t), E(t), E(2t)
+        ;// Where E(t)=cos(t)+i*sin(t) at 1Q15
+        ;// N=16 t=2*PI*k/N for k=0,1,2,..,N/4-1
+        DCW 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
+        DCW 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
+        DCW 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff
+        DCW 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82
+        ;// N=64 t=2*PI*k/N for k=0,1,2,..,N/4-1
+        DCW 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
+        DCW 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9
+        DCW 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc
+        DCW 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d
+        DCW 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
+        DCW 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e
+        DCW 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642
+        DCW 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a
+        DCW 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff
+        DCW 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a
+        DCW 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642
+        DCW 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e
+        DCW 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82
+        DCW 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d
+        DCW 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc
+        DCW 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9
+        ;// N=256 t=2*PI*k/N for k=0,1,2,..,N/4-1
+        DCW 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
+        DCW 0x7fa7,0x096b, 0x7ff6,0x0324, 0x7fd9,0x0648
+        DCW 0x7e9d,0x12c8, 0x7fd9,0x0648, 0x7f62,0x0c8c
+        DCW 0x7ce4,0x1c0c, 0x7fa7,0x096b, 0x7e9d,0x12c8
+        DCW 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9
+        DCW 0x776c,0x2e11, 0x7f0a,0x0fab, 0x7c2a,0x1f1a
+        DCW 0x73b6,0x36ba, 0x7e9d,0x12c8, 0x7a7d,0x2528
+        DCW 0x6f5f,0x3f17, 0x7e1e,0x15e2, 0x7885,0x2b1f
+        DCW 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc
+        DCW 0x64e9,0x4ec0, 0x7ce4,0x1c0c, 0x73b6,0x36ba
+        DCW 0x5ed7,0x55f6, 0x7c2a,0x1f1a, 0x70e3,0x3c57
+        DCW 0x5843,0x5cb4, 0x7b5d,0x2224, 0x6dca,0x41ce
+        DCW 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d
+        DCW 0x49b4,0x68a7, 0x798a,0x2827, 0x66d0,0x4c40
+        DCW 0x41ce,0x6dca, 0x7885,0x2b1f, 0x62f2,0x5134
+        DCW 0x398d,0x7255, 0x776c,0x2e11, 0x5ed7,0x55f6
+        DCW 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
+        DCW 0x2827,0x798a, 0x7505,0x33df, 0x55f6,0x5ed7
+        DCW 0x1f1a,0x7c2a, 0x73b6,0x36ba, 0x5134,0x62f2
+        DCW 0x15e2,0x7e1e, 0x7255,0x398d, 0x4c40,0x66d0
+        DCW 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e
+        DCW 0x0324,0x7ff6, 0x6f5f,0x3f17, 0x41ce,0x6dca
+        DCW 0xf9b8,0x7fd9, 0x6dca,0x41ce, 0x3c57,0x70e3
+        DCW 0xf055,0x7f0a, 0x6c24,0x447b, 0x36ba,0x73b6
+        DCW 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642
+        DCW 0xdddc,0x7b5d, 0x68a7,0x49b4, 0x2b1f,0x7885
+        DCW 0xd4e1,0x7885, 0x66d0,0x4c40, 0x2528,0x7a7d
+        DCW 0xcc21,0x7505, 0x64e9,0x4ec0, 0x1f1a,0x7c2a
+        DCW 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a
+        DCW 0xbb85,0x6c24, 0x60ec,0x539b, 0x12c8,0x7e9d
+        DCW 0xb3c0,0x66d0, 0x5ed7,0x55f6, 0x0c8c,0x7f62
+        DCW 0xac65,0x60ec, 0x5cb4,0x5843, 0x0648,0x7fd9
+        DCW 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff
+        DCW 0x9f14,0x539b, 0x5843,0x5cb4, 0xf9b8,0x7fd9
+        DCW 0x9930,0x4c40, 0x55f6,0x5ed7, 0xf374,0x7f62
+        DCW 0x93dc,0x447b, 0x539b,0x60ec, 0xed38,0x7e9d
+        DCW 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a
+        DCW 0x8afb,0x33df, 0x4ec0,0x64e9, 0xe0e6,0x7c2a
+        DCW 0x877b,0x2b1f, 0x4c40,0x66d0, 0xdad8,0x7a7d
+        DCW 0x84a3,0x2224, 0x49b4,0x68a7, 0xd4e1,0x7885
+        DCW 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642
+        DCW 0x80f6,0x0fab, 0x447b,0x6c24, 0xc946,0x73b6
+        DCW 0x8027,0x0648, 0x41ce,0x6dca, 0xc3a9,0x70e3
+        DCW 0x800a,0xfcdc, 0x3f17,0x6f5f, 0xbe32,0x6dca
+        DCW 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e
+        DCW 0x81e2,0xea1e, 0x398d,0x7255, 0xb3c0,0x66d0
+        DCW 0x83d6,0xe0e6, 0x36ba,0x73b6, 0xaecc,0x62f2
+        DCW 0x8676,0xd7d9, 0x33df,0x7505, 0xaa0a,0x5ed7
+        DCW 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82
+        DCW 0x8dab,0xc673, 0x2e11,0x776c, 0xa129,0x55f6
+        DCW 0x9236,0xbe32, 0x2b1f,0x7885, 0x9d0e,0x5134
+        DCW 0x9759,0xb64c, 0x2827,0x798a, 0x9930,0x4c40
+        DCW 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d
+        DCW 0xa34c,0xa7bd, 0x2224,0x7b5d, 0x9236,0x41ce
+        DCW 0xaa0a,0xa129, 0x1f1a,0x7c2a, 0x8f1d,0x3c57
+        DCW 0xb140,0x9b17, 0x1c0c,0x7ce4, 0x8c4a,0x36ba
+        DCW 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc
+        DCW 0xc0e9,0x90a1, 0x15e2,0x7e1e, 0x877b,0x2b1f
+        DCW 0xc946,0x8c4a, 0x12c8,0x7e9d, 0x8583,0x2528
+        DCW 0xd1ef,0x8894, 0x0fab,0x7f0a, 0x83d6,0x1f1a
+        DCW 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9
+        DCW 0xe3f4,0x831c, 0x096b,0x7fa7, 0x8163,0x12c8
+        DCW 0xed38,0x8163, 0x0648,0x7fd9, 0x809e,0x0c8c
+        DCW 0xf695,0x8059, 0x0324,0x7ff6, 0x8027,0x0648
+        ;// N=1024 t=2*PI*k/N for k=0,1,2,..,N/4-1
+        DCW 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
+        DCW 0x7ffa,0x025b, 0x7fff,0x00c9, 0x7ffe,0x0192
+        DCW 0x7fea,0x04b6, 0x7ffe,0x0192, 0x7ff6,0x0324
+        DCW 0x7fce,0x0711, 0x7ffa,0x025b, 0x7fea,0x04b6
+        DCW 0x7fa7,0x096b, 0x7ff6,0x0324, 0x7fd9,0x0648
+        DCW 0x7f75,0x0bc4, 0x7ff1,0x03ed, 0x7fc2,0x07d9
+        DCW 0x7f38,0x0e1c, 0x7fea,0x04b6, 0x7fa7,0x096b
+        DCW 0x7ef0,0x1073, 0x7fe2,0x057f, 0x7f87,0x0afb
+        DCW 0x7e9d,0x12c8, 0x7fd9,0x0648, 0x7f62,0x0c8c
+        DCW 0x7e3f,0x151c, 0x7fce,0x0711, 0x7f38,0x0e1c
+        DCW 0x7dd6,0x176e, 0x7fc2,0x07d9, 0x7f0a,0x0fab
+        DCW 0x7d63,0x19be, 0x7fb5,0x08a2, 0x7ed6,0x113a
+        DCW 0x7ce4,0x1c0c, 0x7fa7,0x096b, 0x7e9d,0x12c8
+        DCW 0x7c5a,0x1e57, 0x7f98,0x0a33, 0x7e60,0x1455
+        DCW 0x7bc6,0x209f, 0x7f87,0x0afb, 0x7e1e,0x15e2
+        DCW 0x7b27,0x22e5, 0x7f75,0x0bc4, 0x7dd6,0x176e
+        DCW 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9
+        DCW 0x79c9,0x2768, 0x7f4e,0x0d54, 0x7d3a,0x1a83
+        DCW 0x790a,0x29a4, 0x7f38,0x0e1c, 0x7ce4,0x1c0c
+        DCW 0x7840,0x2bdc, 0x7f22,0x0ee4, 0x7c89,0x1d93
+        DCW 0x776c,0x2e11, 0x7f0a,0x0fab, 0x7c2a,0x1f1a
+        DCW 0x768e,0x3042, 0x7ef0,0x1073, 0x7bc6,0x209f
+        DCW 0x75a6,0x326e, 0x7ed6,0x113a, 0x7b5d,0x2224
+        DCW 0x74b3,0x3497, 0x7eba,0x1201, 0x7aef,0x23a7
+        DCW 0x73b6,0x36ba, 0x7e9d,0x12c8, 0x7a7d,0x2528
+        DCW 0x72af,0x38d9, 0x7e7f,0x138f, 0x7a06,0x26a8
+        DCW 0x719e,0x3af3, 0x7e60,0x1455, 0x798a,0x2827
+        DCW 0x7083,0x3d08, 0x7e3f,0x151c, 0x790a,0x29a4
+        DCW 0x6f5f,0x3f17, 0x7e1e,0x15e2, 0x7885,0x2b1f
+        DCW 0x6e31,0x4121, 0x7dfb,0x16a8, 0x77fb,0x2c99
+        DCW 0x6cf9,0x4326, 0x7dd6,0x176e, 0x776c,0x2e11
+        DCW 0x6bb8,0x4524, 0x7db1,0x1833, 0x76d9,0x2f87
+        DCW 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc
+        DCW 0x691a,0x490f, 0x7d63,0x19be, 0x75a6,0x326e
+        DCW 0x67bd,0x4afb, 0x7d3a,0x1a83, 0x7505,0x33df
+        DCW 0x6657,0x4ce1, 0x7d0f,0x1b47, 0x7460,0x354e
+        DCW 0x64e9,0x4ec0, 0x7ce4,0x1c0c, 0x73b6,0x36ba
+        DCW 0x6371,0x5098, 0x7cb7,0x1cd0, 0x7308,0x3825
+        DCW 0x61f1,0x5269, 0x7c89,0x1d93, 0x7255,0x398d
+        DCW 0x6068,0x5433, 0x7c5a,0x1e57, 0x719e,0x3af3
+        DCW 0x5ed7,0x55f6, 0x7c2a,0x1f1a, 0x70e3,0x3c57
+        DCW 0x5d3e,0x57b1, 0x7bf9,0x1fdd, 0x7023,0x3db8
+        DCW 0x5b9d,0x5964, 0x7bc6,0x209f, 0x6f5f,0x3f17
+        DCW 0x59f4,0x5b10, 0x7b92,0x2162, 0x6e97,0x4074
+        DCW 0x5843,0x5cb4, 0x7b5d,0x2224, 0x6dca,0x41ce
+        DCW 0x568a,0x5e50, 0x7b27,0x22e5, 0x6cf9,0x4326
+        DCW 0x54ca,0x5fe4, 0x7aef,0x23a7, 0x6c24,0x447b
+        DCW 0x5303,0x616f, 0x7ab7,0x2467, 0x6b4b,0x45cd
+        DCW 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d
+        DCW 0x4f5e,0x646c, 0x7a42,0x25e8, 0x698c,0x486a
+        DCW 0x4d81,0x65de, 0x7a06,0x26a8, 0x68a7,0x49b4
+        DCW 0x4b9e,0x6747, 0x79c9,0x2768, 0x67bd,0x4afb
+        DCW 0x49b4,0x68a7, 0x798a,0x2827, 0x66d0,0x4c40
+        DCW 0x47c4,0x69fd, 0x794a,0x28e5, 0x65de,0x4d81
+        DCW 0x45cd,0x6b4b, 0x790a,0x29a4, 0x64e9,0x4ec0
+        DCW 0x43d1,0x6c8f, 0x78c8,0x2a62, 0x63ef,0x4ffb
+        DCW 0x41ce,0x6dca, 0x7885,0x2b1f, 0x62f2,0x5134
+        DCW 0x3fc6,0x6efb, 0x7840,0x2bdc, 0x61f1,0x5269
+        DCW 0x3db8,0x7023, 0x77fb,0x2c99, 0x60ec,0x539b
+        DCW 0x3ba5,0x7141, 0x77b4,0x2d55, 0x5fe4,0x54ca
+        DCW 0x398d,0x7255, 0x776c,0x2e11, 0x5ed7,0x55f6
+        DCW 0x3770,0x735f, 0x7723,0x2ecc, 0x5dc8,0x571e
+        DCW 0x354e,0x7460, 0x76d9,0x2f87, 0x5cb4,0x5843
+        DCW 0x3327,0x7556, 0x768e,0x3042, 0x5b9d,0x5964
+        DCW 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
+        DCW 0x2ecc,0x7723, 0x75f4,0x31b5, 0x5964,0x5b9d
+        DCW 0x2c99,0x77fb, 0x75a6,0x326e, 0x5843,0x5cb4
+        DCW 0x2a62,0x78c8, 0x7556,0x3327, 0x571e,0x5dc8
+        DCW 0x2827,0x798a, 0x7505,0x33df, 0x55f6,0x5ed7
+        DCW 0x25e8,0x7a42, 0x74b3,0x3497, 0x54ca,0x5fe4
+        DCW 0x23a7,0x7aef, 0x7460,0x354e, 0x539b,0x60ec
+        DCW 0x2162,0x7b92, 0x740b,0x3604, 0x5269,0x61f1
+        DCW 0x1f1a,0x7c2a, 0x73b6,0x36ba, 0x5134,0x62f2
+        DCW 0x1cd0,0x7cb7, 0x735f,0x3770, 0x4ffb,0x63ef
+        DCW 0x1a83,0x7d3a, 0x7308,0x3825, 0x4ec0,0x64e9
+        DCW 0x1833,0x7db1, 0x72af,0x38d9, 0x4d81,0x65de
+        DCW 0x15e2,0x7e1e, 0x7255,0x398d, 0x4c40,0x66d0
+        DCW 0x138f,0x7e7f, 0x71fa,0x3a40, 0x4afb,0x67bd
+        DCW 0x113a,0x7ed6, 0x719e,0x3af3, 0x49b4,0x68a7
+        DCW 0x0ee4,0x7f22, 0x7141,0x3ba5, 0x486a,0x698c
+        DCW 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e
+        DCW 0x0a33,0x7f98, 0x7083,0x3d08, 0x45cd,0x6b4b
+        DCW 0x07d9,0x7fc2, 0x7023,0x3db8, 0x447b,0x6c24
+        DCW 0x057f,0x7fe2, 0x6fc2,0x3e68, 0x4326,0x6cf9
+        DCW 0x0324,0x7ff6, 0x6f5f,0x3f17, 0x41ce,0x6dca
+        DCW 0x00c9,0x7fff, 0x6efb,0x3fc6, 0x4074,0x6e97
+        DCW 0xfe6e,0x7ffe, 0x6e97,0x4074, 0x3f17,0x6f5f
+        DCW 0xfc13,0x7ff1, 0x6e31,0x4121, 0x3db8,0x7023
+        DCW 0xf9b8,0x7fd9, 0x6dca,0x41ce, 0x3c57,0x70e3
+        DCW 0xf75e,0x7fb5, 0x6d62,0x427a, 0x3af3,0x719e
+        DCW 0xf505,0x7f87, 0x6cf9,0x4326, 0x398d,0x7255
+        DCW 0xf2ac,0x7f4e, 0x6c8f,0x43d1, 0x3825,0x7308
+        DCW 0xf055,0x7f0a, 0x6c24,0x447b, 0x36ba,0x73b6
+        DCW 0xedff,0x7eba, 0x6bb8,0x4524, 0x354e,0x7460
+        DCW 0xebab,0x7e60, 0x6b4b,0x45cd, 0x33df,0x7505
+        DCW 0xe958,0x7dfb, 0x6add,0x4675, 0x326e,0x75a6
+        DCW 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642
+        DCW 0xe4b9,0x7d0f, 0x69fd,0x47c4, 0x2f87,0x76d9
+        DCW 0xe26d,0x7c89, 0x698c,0x486a, 0x2e11,0x776c
+        DCW 0xe023,0x7bf9, 0x691a,0x490f, 0x2c99,0x77fb
+        DCW 0xdddc,0x7b5d, 0x68a7,0x49b4, 0x2b1f,0x7885
+        DCW 0xdb99,0x7ab7, 0x6832,0x4a58, 0x29a4,0x790a
+        DCW 0xd958,0x7a06, 0x67bd,0x4afb, 0x2827,0x798a
+        DCW 0xd71b,0x794a, 0x6747,0x4b9e, 0x26a8,0x7a06
+        DCW 0xd4e1,0x7885, 0x66d0,0x4c40, 0x2528,0x7a7d
+        DCW 0xd2ab,0x77b4, 0x6657,0x4ce1, 0x23a7,0x7aef
+        DCW 0xd079,0x76d9, 0x65de,0x4d81, 0x2224,0x7b5d
+        DCW 0xce4b,0x75f4, 0x6564,0x4e21, 0x209f,0x7bc6
+        DCW 0xcc21,0x7505, 0x64e9,0x4ec0, 0x1f1a,0x7c2a
+        DCW 0xc9fc,0x740b, 0x646c,0x4f5e, 0x1d93,0x7c89
+        DCW 0xc7db,0x7308, 0x63ef,0x4ffb, 0x1c0c,0x7ce4
+        DCW 0xc5c0,0x71fa, 0x6371,0x5098, 0x1a83,0x7d3a
+        DCW 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a
+        DCW 0xc198,0x6fc2, 0x6272,0x51cf, 0x176e,0x7dd6
+        DCW 0xbf8c,0x6e97, 0x61f1,0x5269, 0x15e2,0x7e1e
+        DCW 0xbd86,0x6d62, 0x616f,0x5303, 0x1455,0x7e60
+        DCW 0xbb85,0x6c24, 0x60ec,0x539b, 0x12c8,0x7e9d
+        DCW 0xb98b,0x6add, 0x6068,0x5433, 0x113a,0x7ed6
+        DCW 0xb796,0x698c, 0x5fe4,0x54ca, 0x0fab,0x7f0a
+        DCW 0xb5a8,0x6832, 0x5f5e,0x5560, 0x0e1c,0x7f38
+        DCW 0xb3c0,0x66d0, 0x5ed7,0x55f6, 0x0c8c,0x7f62
+        DCW 0xb1df,0x6564, 0x5e50,0x568a, 0x0afb,0x7f87
+        DCW 0xb005,0x63ef, 0x5dc8,0x571e, 0x096b,0x7fa7
+        DCW 0xae31,0x6272, 0x5d3e,0x57b1, 0x07d9,0x7fc2
+        DCW 0xac65,0x60ec, 0x5cb4,0x5843, 0x0648,0x7fd9
+        DCW 0xaaa0,0x5f5e, 0x5c29,0x58d4, 0x04b6,0x7fea
+        DCW 0xa8e2,0x5dc8, 0x5b9d,0x5964, 0x0324,0x7ff6
+        DCW 0xa72c,0x5c29, 0x5b10,0x59f4, 0x0192,0x7ffe
+        DCW 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff
+        DCW 0xa3d7,0x58d4, 0x59f4,0x5b10, 0xfe6e,0x7ffe
+        DCW 0xa238,0x571e, 0x5964,0x5b9d, 0xfcdc,0x7ff6
+        DCW 0xa0a2,0x5560, 0x58d4,0x5c29, 0xfb4a,0x7fea
+        DCW 0x9f14,0x539b, 0x5843,0x5cb4, 0xf9b8,0x7fd9
+        DCW 0x9d8e,0x51cf, 0x57b1,0x5d3e, 0xf827,0x7fc2
+        DCW 0x9c11,0x4ffb, 0x571e,0x5dc8, 0xf695,0x7fa7
+        DCW 0x9a9c,0x4e21, 0x568a,0x5e50, 0xf505,0x7f87
+        DCW 0x9930,0x4c40, 0x55f6,0x5ed7, 0xf374,0x7f62
+        DCW 0x97ce,0x4a58, 0x5560,0x5f5e, 0xf1e4,0x7f38
+        DCW 0x9674,0x486a, 0x54ca,0x5fe4, 0xf055,0x7f0a
+        DCW 0x9523,0x4675, 0x5433,0x6068, 0xeec6,0x7ed6
+        DCW 0x93dc,0x447b, 0x539b,0x60ec, 0xed38,0x7e9d
+        DCW 0x929e,0x427a, 0x5303,0x616f, 0xebab,0x7e60
+        DCW 0x9169,0x4074, 0x5269,0x61f1, 0xea1e,0x7e1e
+        DCW 0x903e,0x3e68, 0x51cf,0x6272, 0xe892,0x7dd6
+        DCW 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a
+        DCW 0x8e06,0x3a40, 0x5098,0x6371, 0xe57d,0x7d3a
+        DCW 0x8cf8,0x3825, 0x4ffb,0x63ef, 0xe3f4,0x7ce4
+        DCW 0x8bf5,0x3604, 0x4f5e,0x646c, 0xe26d,0x7c89
+        DCW 0x8afb,0x33df, 0x4ec0,0x64e9, 0xe0e6,0x7c2a
+        DCW 0x8a0c,0x31b5, 0x4e21,0x6564, 0xdf61,0x7bc6
+        DCW 0x8927,0x2f87, 0x4d81,0x65de, 0xdddc,0x7b5d
+        DCW 0x884c,0x2d55, 0x4ce1,0x6657, 0xdc59,0x7aef
+        DCW 0x877b,0x2b1f, 0x4c40,0x66d0, 0xdad8,0x7a7d
+        DCW 0x86b6,0x28e5, 0x4b9e,0x6747, 0xd958,0x7a06
+        DCW 0x85fa,0x26a8, 0x4afb,0x67bd, 0xd7d9,0x798a
+        DCW 0x8549,0x2467, 0x4a58,0x6832, 0xd65c,0x790a
+        DCW 0x84a3,0x2224, 0x49b4,0x68a7, 0xd4e1,0x7885
+        DCW 0x8407,0x1fdd, 0x490f,0x691a, 0xd367,0x77fb
+        DCW 0x8377,0x1d93, 0x486a,0x698c, 0xd1ef,0x776c
+        DCW 0x82f1,0x1b47, 0x47c4,0x69fd, 0xd079,0x76d9
+        DCW 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642
+        DCW 0x8205,0x16a8, 0x4675,0x6add, 0xcd92,0x75a6
+        DCW 0x81a0,0x1455, 0x45cd,0x6b4b, 0xcc21,0x7505
+        DCW 0x8146,0x1201, 0x4524,0x6bb8, 0xcab2,0x7460
+        DCW 0x80f6,0x0fab, 0x447b,0x6c24, 0xc946,0x73b6
+        DCW 0x80b2,0x0d54, 0x43d1,0x6c8f, 0xc7db,0x7308
+        DCW 0x8079,0x0afb, 0x4326,0x6cf9, 0xc673,0x7255
+        DCW 0x804b,0x08a2, 0x427a,0x6d62, 0xc50d,0x719e
+        DCW 0x8027,0x0648, 0x41ce,0x6dca, 0xc3a9,0x70e3
+        DCW 0x800f,0x03ed, 0x4121,0x6e31, 0xc248,0x7023
+        DCW 0x8002,0x0192, 0x4074,0x6e97, 0xc0e9,0x6f5f
+        DCW 0x8001,0xff37, 0x3fc6,0x6efb, 0xbf8c,0x6e97
+        DCW 0x800a,0xfcdc, 0x3f17,0x6f5f, 0xbe32,0x6dca
+        DCW 0x801e,0xfa81, 0x3e68,0x6fc2, 0xbcda,0x6cf9
+        DCW 0x803e,0xf827, 0x3db8,0x7023, 0xbb85,0x6c24
+        DCW 0x8068,0xf5cd, 0x3d08,0x7083, 0xba33,0x6b4b
+        DCW 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e
+        DCW 0x80de,0xf11c, 0x3ba5,0x7141, 0xb796,0x698c
+        DCW 0x812a,0xeec6, 0x3af3,0x719e, 0xb64c,0x68a7
+        DCW 0x8181,0xec71, 0x3a40,0x71fa, 0xb505,0x67bd
+        DCW 0x81e2,0xea1e, 0x398d,0x7255, 0xb3c0,0x66d0
+        DCW 0x824f,0xe7cd, 0x38d9,0x72af, 0xb27f,0x65de
+        DCW 0x82c6,0xe57d, 0x3825,0x7308, 0xb140,0x64e9
+        DCW 0x8349,0xe330, 0x3770,0x735f, 0xb005,0x63ef
+        DCW 0x83d6,0xe0e6, 0x36ba,0x73b6, 0xaecc,0x62f2
+        DCW 0x846e,0xde9e, 0x3604,0x740b, 0xad97,0x61f1
+        DCW 0x8511,0xdc59, 0x354e,0x7460, 0xac65,0x60ec
+        DCW 0x85be,0xda18, 0x3497,0x74b3, 0xab36,0x5fe4
+        DCW 0x8676,0xd7d9, 0x33df,0x7505, 0xaa0a,0x5ed7
+        DCW 0x8738,0xd59e, 0x3327,0x7556, 0xa8e2,0x5dc8
+        DCW 0x8805,0xd367, 0x326e,0x75a6, 0xa7bd,0x5cb4
+        DCW 0x88dd,0xd134, 0x31b5,0x75f4, 0xa69c,0x5b9d
+        DCW 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82
+        DCW 0x8aaa,0xccd9, 0x3042,0x768e, 0xa463,0x5964
+        DCW 0x8ba0,0xcab2, 0x2f87,0x76d9, 0xa34c,0x5843
+        DCW 0x8ca1,0xc890, 0x2ecc,0x7723, 0xa238,0x571e
+        DCW 0x8dab,0xc673, 0x2e11,0x776c, 0xa129,0x55f6
+        DCW 0x8ebf,0xc45b, 0x2d55,0x77b4, 0xa01c,0x54ca
+        DCW 0x8fdd,0xc248, 0x2c99,0x77fb, 0x9f14,0x539b
+        DCW 0x9105,0xc03a, 0x2bdc,0x7840, 0x9e0f,0x5269
+        DCW 0x9236,0xbe32, 0x2b1f,0x7885, 0x9d0e,0x5134
+        DCW 0x9371,0xbc2f, 0x2a62,0x78c8, 0x9c11,0x4ffb
+        DCW 0x94b5,0xba33, 0x29a4,0x790a, 0x9b17,0x4ec0
+        DCW 0x9603,0xb83c, 0x28e5,0x794a, 0x9a22,0x4d81
+        DCW 0x9759,0xb64c, 0x2827,0x798a, 0x9930,0x4c40
+        DCW 0x98b9,0xb462, 0x2768,0x79c9, 0x9843,0x4afb
+        DCW 0x9a22,0xb27f, 0x26a8,0x7a06, 0x9759,0x49b4
+        DCW 0x9b94,0xb0a2, 0x25e8,0x7a42, 0x9674,0x486a
+        DCW 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d
+        DCW 0x9e91,0xacfd, 0x2467,0x7ab7, 0x94b5,0x45cd
+        DCW 0xa01c,0xab36, 0x23a7,0x7aef, 0x93dc,0x447b
+        DCW 0xa1b0,0xa976, 0x22e5,0x7b27, 0x9307,0x4326
+        DCW 0xa34c,0xa7bd, 0x2224,0x7b5d, 0x9236,0x41ce
+        DCW 0xa4f0,0xa60c, 0x2162,0x7b92, 0x9169,0x4074
+        DCW 0xa69c,0xa463, 0x209f,0x7bc6, 0x90a1,0x3f17
+        DCW 0xa84f,0xa2c2, 0x1fdd,0x7bf9, 0x8fdd,0x3db8
+        DCW 0xaa0a,0xa129, 0x1f1a,0x7c2a, 0x8f1d,0x3c57
+        DCW 0xabcd,0x9f98, 0x1e57,0x7c5a, 0x8e62,0x3af3
+        DCW 0xad97,0x9e0f, 0x1d93,0x7c89, 0x8dab,0x398d
+        DCW 0xaf68,0x9c8f, 0x1cd0,0x7cb7, 0x8cf8,0x3825
+        DCW 0xb140,0x9b17, 0x1c0c,0x7ce4, 0x8c4a,0x36ba
+        DCW 0xb31f,0x99a9, 0x1b47,0x7d0f, 0x8ba0,0x354e
+        DCW 0xb505,0x9843, 0x1a83,0x7d3a, 0x8afb,0x33df
+        DCW 0xb6f1,0x96e6, 0x19be,0x7d63, 0x8a5a,0x326e
+        DCW 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc
+        DCW 0xbadc,0x9448, 0x1833,0x7db1, 0x8927,0x2f87
+        DCW 0xbcda,0x9307, 0x176e,0x7dd6, 0x8894,0x2e11
+        DCW 0xbedf,0x91cf, 0x16a8,0x7dfb, 0x8805,0x2c99
+        DCW 0xc0e9,0x90a1, 0x15e2,0x7e1e, 0x877b,0x2b1f
+        DCW 0xc2f8,0x8f7d, 0x151c,0x7e3f, 0x86f6,0x29a4
+        DCW 0xc50d,0x8e62, 0x1455,0x7e60, 0x8676,0x2827
+        DCW 0xc727,0x8d51, 0x138f,0x7e7f, 0x85fa,0x26a8
+        DCW 0xc946,0x8c4a, 0x12c8,0x7e9d, 0x8583,0x2528
+        DCW 0xcb69,0x8b4d, 0x1201,0x7eba, 0x8511,0x23a7
+        DCW 0xcd92,0x8a5a, 0x113a,0x7ed6, 0x84a3,0x2224
+        DCW 0xcfbe,0x8972, 0x1073,0x7ef0, 0x843a,0x209f
+        DCW 0xd1ef,0x8894, 0x0fab,0x7f0a, 0x83d6,0x1f1a
+        DCW 0xd424,0x87c0, 0x0ee4,0x7f22, 0x8377,0x1d93
+        DCW 0xd65c,0x86f6, 0x0e1c,0x7f38, 0x831c,0x1c0c
+        DCW 0xd898,0x8637, 0x0d54,0x7f4e, 0x82c6,0x1a83
+        DCW 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9
+        DCW 0xdd1b,0x84d9, 0x0bc4,0x7f75, 0x822a,0x176e
+        DCW 0xdf61,0x843a, 0x0afb,0x7f87, 0x81e2,0x15e2
+        DCW 0xe1a9,0x83a6, 0x0a33,0x7f98, 0x81a0,0x1455
+        DCW 0xe3f4,0x831c, 0x096b,0x7fa7, 0x8163,0x12c8
+        DCW 0xe642,0x829d, 0x08a2,0x7fb5, 0x812a,0x113a
+        DCW 0xe892,0x822a, 0x07d9,0x7fc2, 0x80f6,0x0fab
+        DCW 0xeae4,0x81c1, 0x0711,0x7fce, 0x80c8,0x0e1c
+        DCW 0xed38,0x8163, 0x0648,0x7fd9, 0x809e,0x0c8c
+        DCW 0xef8d,0x8110, 0x057f,0x7fe2, 0x8079,0x0afb
+        DCW 0xf1e4,0x80c8, 0x04b6,0x7fea, 0x8059,0x096b
+        DCW 0xf43c,0x808b, 0x03ed,0x7ff1, 0x803e,0x07d9
+        DCW 0xf695,0x8059, 0x0324,0x7ff6, 0x8027,0x0648
+        DCW 0xf8ef,0x8032, 0x025b,0x7ffa, 0x8016,0x04b6
+        DCW 0xfb4a,0x8016, 0x0192,0x7ffe, 0x800a,0x0324
+        DCW 0xfda5,0x8006, 0x00c9,0x7fff, 0x8002,0x0192
+        ;// N=4096 t=2*PI*k/N for k=0,1,2,..,N/4-1
+        DCW 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000
+        DCW 0x7fff,0x0097, 0x7fff,0x0032, 0x7fff,0x0065
+        DCW 0x7fff,0x012e, 0x7fff,0x0065, 0x7fff,0x00c9
+        DCW 0x7ffd,0x01c4, 0x7fff,0x0097, 0x7fff,0x012e
+        DCW 0x7ffa,0x025b, 0x7fff,0x00c9, 0x7ffe,0x0192
+        DCW 0x7ff7,0x02f2, 0x7fff,0x00fb, 0x7ffc,0x01f7
+        DCW 0x7ff4,0x0389, 0x7fff,0x012e, 0x7ffa,0x025b
+        DCW 0x7fef,0x041f, 0x7ffe,0x0160, 0x7ff8,0x02c0
+        DCW 0x7fea,0x04b6, 0x7ffe,0x0192, 0x7ff6,0x0324
+        DCW 0x7fe4,0x054d, 0x7ffd,0x01c4, 0x7ff4,0x0389
+        DCW 0x7fdd,0x05e3, 0x7ffc,0x01f7, 0x7ff1,0x03ed
+        DCW 0x7fd6,0x067a, 0x7ffb,0x0229, 0x7fed,0x0452
+        DCW 0x7fce,0x0711, 0x7ffa,0x025b, 0x7fea,0x04b6
+        DCW 0x7fc5,0x07a7, 0x7ff9,0x028d, 0x7fe6,0x051b
+        DCW 0x7fbc,0x083e, 0x7ff8,0x02c0, 0x7fe2,0x057f
+        DCW 0x7fb2,0x08d4, 0x7ff7,0x02f2, 0x7fdd,0x05e3
+        DCW 0x7fa7,0x096b, 0x7ff6,0x0324, 0x7fd9,0x0648
+        DCW 0x7f9c,0x0a01, 0x7ff5,0x0356, 0x7fd3,0x06ac
+        DCW 0x7f90,0x0a97, 0x7ff4,0x0389, 0x7fce,0x0711
+        DCW 0x7f83,0x0b2d, 0x7ff2,0x03bb, 0x7fc8,0x0775
+        DCW 0x7f75,0x0bc4, 0x7ff1,0x03ed, 0x7fc2,0x07d9
+        DCW 0x7f67,0x0c5a, 0x7fef,0x041f, 0x7fbc,0x083e
+        DCW 0x7f58,0x0cf0, 0x7fed,0x0452, 0x7fb5,0x08a2
+        DCW 0x7f49,0x0d86, 0x7fec,0x0484, 0x7fae,0x0906
+        DCW 0x7f38,0x0e1c, 0x7fea,0x04b6, 0x7fa7,0x096b
+        DCW 0x7f27,0x0eb2, 0x7fe8,0x04e8, 0x7fa0,0x09cf
+        DCW 0x7f16,0x0f47, 0x7fe6,0x051b, 0x7f98,0x0a33
+        DCW 0x7f03,0x0fdd, 0x7fe4,0x054d, 0x7f90,0x0a97
+        DCW 0x7ef0,0x1073, 0x7fe2,0x057f, 0x7f87,0x0afb
+        DCW 0x7edd,0x1108, 0x7fe0,0x05b1, 0x7f7e,0x0b60
+        DCW 0x7ec8,0x119e, 0x7fdd,0x05e3, 0x7f75,0x0bc4
+        DCW 0x7eb3,0x1233, 0x7fdb,0x0616, 0x7f6c,0x0c28
+        DCW 0x7e9d,0x12c8, 0x7fd9,0x0648, 0x7f62,0x0c8c
+        DCW 0x7e87,0x135d, 0x7fd6,0x067a, 0x7f58,0x0cf0
+        DCW 0x7e70,0x13f2, 0x7fd3,0x06ac, 0x7f4e,0x0d54
+        DCW 0x7e58,0x1487, 0x7fd1,0x06de, 0x7f43,0x0db8
+        DCW 0x7e3f,0x151c, 0x7fce,0x0711, 0x7f38,0x0e1c
+        DCW 0x7e26,0x15b1, 0x7fcb,0x0743, 0x7f2d,0x0e80
+        DCW 0x7e0c,0x1645, 0x7fc8,0x0775, 0x7f22,0x0ee4
+        DCW 0x7df2,0x16da, 0x7fc5,0x07a7, 0x7f16,0x0f47
+        DCW 0x7dd6,0x176e, 0x7fc2,0x07d9, 0x7f0a,0x0fab
+        DCW 0x7dba,0x1802, 0x7fbf,0x080c, 0x7efd,0x100f
+        DCW 0x7d9e,0x1896, 0x7fbc,0x083e, 0x7ef0,0x1073
+        DCW 0x7d81,0x192a, 0x7fb9,0x0870, 0x7ee3,0x10d6
+        DCW 0x7d63,0x19be, 0x7fb5,0x08a2, 0x7ed6,0x113a
+        DCW 0x7d44,0x1a51, 0x7fb2,0x08d4, 0x7ec8,0x119e
+        DCW 0x7d25,0x1ae5, 0x7fae,0x0906, 0x7eba,0x1201
+        DCW 0x7d05,0x1b78, 0x7fab,0x0938, 0x7eac,0x1265
+        DCW 0x7ce4,0x1c0c, 0x7fa7,0x096b, 0x7e9d,0x12c8
+        DCW 0x7cc2,0x1c9f, 0x7fa3,0x099d, 0x7e8e,0x132b
+        DCW 0x7ca0,0x1d31, 0x7fa0,0x09cf, 0x7e7f,0x138f
+        DCW 0x7c7e,0x1dc4, 0x7f9c,0x0a01, 0x7e70,0x13f2
+        DCW 0x7c5a,0x1e57, 0x7f98,0x0a33, 0x7e60,0x1455
+        DCW 0x7c36,0x1ee9, 0x7f94,0x0a65, 0x7e50,0x14b9
+        DCW 0x7c11,0x1f7b, 0x7f90,0x0a97, 0x7e3f,0x151c
+        DCW 0x7bec,0x200e, 0x7f8b,0x0ac9, 0x7e2f,0x157f
+        DCW 0x7bc6,0x209f, 0x7f87,0x0afb, 0x7e1e,0x15e2
+        DCW 0x7b9f,0x2131, 0x7f83,0x0b2d, 0x7e0c,0x1645
+        DCW 0x7b78,0x21c3, 0x7f7e,0x0b60, 0x7dfb,0x16a8
+        DCW 0x7b50,0x2254, 0x7f7a,0x0b92, 0x7de9,0x170b
+        DCW 0x7b27,0x22e5, 0x7f75,0x0bc4, 0x7dd6,0x176e
+        DCW 0x7afd,0x2376, 0x7f71,0x0bf6, 0x7dc4,0x17d1
+        DCW 0x7ad3,0x2407, 0x7f6c,0x0c28, 0x7db1,0x1833
+        DCW 0x7aa8,0x2498, 0x7f67,0x0c5a, 0x7d9e,0x1896
+        DCW 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9
+        DCW 0x7a51,0x25b8, 0x7f5d,0x0cbe, 0x7d77,0x195b
+        DCW 0x7a24,0x2648, 0x7f58,0x0cf0, 0x7d63,0x19be
+        DCW 0x79f7,0x26d8, 0x7f53,0x0d22, 0x7d4e,0x1a20
+        DCW 0x79c9,0x2768, 0x7f4e,0x0d54, 0x7d3a,0x1a83
+        DCW 0x799a,0x27f7, 0x7f49,0x0d86, 0x7d25,0x1ae5
+        DCW 0x796a,0x2886, 0x7f43,0x0db8, 0x7d0f,0x1b47
+        DCW 0x793a,0x2915, 0x7f3e,0x0dea, 0x7cfa,0x1ba9
+        DCW 0x790a,0x29a4, 0x7f38,0x0e1c, 0x7ce4,0x1c0c
+        DCW 0x78d8,0x2a32, 0x7f33,0x0e4e, 0x7cce,0x1c6e
+        DCW 0x78a6,0x2ac1, 0x7f2d,0x0e80, 0x7cb7,0x1cd0
+        DCW 0x7874,0x2b4f, 0x7f27,0x0eb2, 0x7ca0,0x1d31
+        DCW 0x7840,0x2bdc, 0x7f22,0x0ee4, 0x7c89,0x1d93
+        DCW 0x780c,0x2c6a, 0x7f1c,0x0f15, 0x7c72,0x1df5
+        DCW 0x77d8,0x2cf7, 0x7f16,0x0f47, 0x7c5a,0x1e57
+        DCW 0x77a2,0x2d84, 0x7f10,0x0f79, 0x7c42,0x1eb8
+        DCW 0x776c,0x2e11, 0x7f0a,0x0fab, 0x7c2a,0x1f1a
+        DCW 0x7736,0x2e9e, 0x7f03,0x0fdd, 0x7c11,0x1f7b
+        DCW 0x76fe,0x2f2a, 0x7efd,0x100f, 0x7bf9,0x1fdd
+        DCW 0x76c7,0x2fb6, 0x7ef7,0x1041, 0x7bdf,0x203e
+        DCW 0x768e,0x3042, 0x7ef0,0x1073, 0x7bc6,0x209f
+        DCW 0x7655,0x30cd, 0x7eea,0x10a4, 0x7bac,0x2101
+        DCW 0x761b,0x3159, 0x7ee3,0x10d6, 0x7b92,0x2162
+        DCW 0x75e1,0x31e4, 0x7edd,0x1108, 0x7b78,0x21c3
+        DCW 0x75a6,0x326e, 0x7ed6,0x113a, 0x7b5d,0x2224
+        DCW 0x756a,0x32f9, 0x7ecf,0x116c, 0x7b42,0x2284
+        DCW 0x752d,0x3383, 0x7ec8,0x119e, 0x7b27,0x22e5
+        DCW 0x74f0,0x340d, 0x7ec1,0x11cf, 0x7b0b,0x2346
+        DCW 0x74b3,0x3497, 0x7eba,0x1201, 0x7aef,0x23a7
+        DCW 0x7475,0x3520, 0x7eb3,0x1233, 0x7ad3,0x2407
+        DCW 0x7436,0x35a9, 0x7eac,0x1265, 0x7ab7,0x2467
+        DCW 0x73f6,0x3632, 0x7ea5,0x1296, 0x7a9a,0x24c8
+        DCW 0x73b6,0x36ba, 0x7e9d,0x12c8, 0x7a7d,0x2528
+        DCW 0x7375,0x3742, 0x7e96,0x12fa, 0x7a60,0x2588
+        DCW 0x7334,0x37ca, 0x7e8e,0x132b, 0x7a42,0x25e8
+        DCW 0x72f2,0x3852, 0x7e87,0x135d, 0x7a24,0x2648
+        DCW 0x72af,0x38d9, 0x7e7f,0x138f, 0x7a06,0x26a8
+        DCW 0x726c,0x3960, 0x7e78,0x13c1, 0x79e7,0x2708
+        DCW 0x7228,0x39e7, 0x7e70,0x13f2, 0x79c9,0x2768
+        DCW 0x71e3,0x3a6d, 0x7e68,0x1424, 0x79aa,0x27c7
+        DCW 0x719e,0x3af3, 0x7e60,0x1455, 0x798a,0x2827
+        DCW 0x7158,0x3b79, 0x7e58,0x1487, 0x796a,0x2886
+        DCW 0x7112,0x3bfe, 0x7e50,0x14b9, 0x794a,0x28e5
+        DCW 0x70cb,0x3c83, 0x7e48,0x14ea, 0x792a,0x2945
+        DCW 0x7083,0x3d08, 0x7e3f,0x151c, 0x790a,0x29a4
+        DCW 0x703b,0x3d8c, 0x7e37,0x154d, 0x78e9,0x2a03
+        DCW 0x6ff2,0x3e10, 0x7e2f,0x157f, 0x78c8,0x2a62
+        DCW 0x6fa9,0x3e94, 0x7e26,0x15b1, 0x78a6,0x2ac1
+        DCW 0x6f5f,0x3f17, 0x7e1e,0x15e2, 0x7885,0x2b1f
+        DCW 0x6f14,0x3f9a, 0x7e15,0x1614, 0x7863,0x2b7e
+        DCW 0x6ec9,0x401d, 0x7e0c,0x1645, 0x7840,0x2bdc
+        DCW 0x6e7d,0x409f, 0x7e03,0x1677, 0x781e,0x2c3b
+        DCW 0x6e31,0x4121, 0x7dfb,0x16a8, 0x77fb,0x2c99
+        DCW 0x6de4,0x41a3, 0x7df2,0x16da, 0x77d8,0x2cf7
+        DCW 0x6d96,0x4224, 0x7de9,0x170b, 0x77b4,0x2d55
+        DCW 0x6d48,0x42a5, 0x7de0,0x173c, 0x7790,0x2db3
+        DCW 0x6cf9,0x4326, 0x7dd6,0x176e, 0x776c,0x2e11
+        DCW 0x6caa,0x43a6, 0x7dcd,0x179f, 0x7748,0x2e6f
+        DCW 0x6c5a,0x4426, 0x7dc4,0x17d1, 0x7723,0x2ecc
+        DCW 0x6c09,0x44a5, 0x7dba,0x1802, 0x76fe,0x2f2a
+        DCW 0x6bb8,0x4524, 0x7db1,0x1833, 0x76d9,0x2f87
+        DCW 0x6b66,0x45a3, 0x7da7,0x1865, 0x76b4,0x2fe5
+        DCW 0x6b14,0x4621, 0x7d9e,0x1896, 0x768e,0x3042
+        DCW 0x6ac1,0x469f, 0x7d94,0x18c7, 0x7668,0x309f
+        DCW 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc
+        DCW 0x6a1a,0x479a, 0x7d81,0x192a, 0x761b,0x3159
+        DCW 0x69c5,0x4817, 0x7d77,0x195b, 0x75f4,0x31b5
+        DCW 0x6970,0x4893, 0x7d6d,0x198d, 0x75cd,0x3212
+        DCW 0x691a,0x490f, 0x7d63,0x19be, 0x75a6,0x326e
+        DCW 0x68c4,0x498b, 0x7d58,0x19ef, 0x757e,0x32cb
+        DCW 0x686d,0x4a06, 0x7d4e,0x1a20, 0x7556,0x3327
+        DCW 0x6815,0x4a81, 0x7d44,0x1a51, 0x752d,0x3383
+        DCW 0x67bd,0x4afb, 0x7d3a,0x1a83, 0x7505,0x33df
+        DCW 0x6764,0x4b75, 0x7d2f,0x1ab4, 0x74dc,0x343b
+        DCW 0x670b,0x4bef, 0x7d25,0x1ae5, 0x74b3,0x3497
+        DCW 0x66b2,0x4c68, 0x7d1a,0x1b16, 0x7489,0x34f2
+        DCW 0x6657,0x4ce1, 0x7d0f,0x1b47, 0x7460,0x354e
+        DCW 0x65fc,0x4d59, 0x7d05,0x1b78, 0x7436,0x35a9
+        DCW 0x65a1,0x4dd1, 0x7cfa,0x1ba9, 0x740b,0x3604
+        DCW 0x6545,0x4e49, 0x7cef,0x1bda, 0x73e1,0x365f
+        DCW 0x64e9,0x4ec0, 0x7ce4,0x1c0c, 0x73b6,0x36ba
+        DCW 0x648b,0x4f37, 0x7cd9,0x1c3d, 0x738b,0x3715
+        DCW 0x642e,0x4fad, 0x7cce,0x1c6e, 0x735f,0x3770
+        DCW 0x63d0,0x5023, 0x7cc2,0x1c9f, 0x7334,0x37ca
+        DCW 0x6371,0x5098, 0x7cb7,0x1cd0, 0x7308,0x3825
+        DCW 0x6312,0x510d, 0x7cac,0x1d01, 0x72dc,0x387f
+        DCW 0x62b2,0x5181, 0x7ca0,0x1d31, 0x72af,0x38d9
+        DCW 0x6252,0x51f5, 0x7c95,0x1d62, 0x7282,0x3933
+        DCW 0x61f1,0x5269, 0x7c89,0x1d93, 0x7255,0x398d
+        DCW 0x6190,0x52dc, 0x7c7e,0x1dc4, 0x7228,0x39e7
+        DCW 0x612e,0x534f, 0x7c72,0x1df5, 0x71fa,0x3a40
+        DCW 0x60cb,0x53c1, 0x7c66,0x1e26, 0x71cc,0x3a9a
+        DCW 0x6068,0x5433, 0x7c5a,0x1e57, 0x719e,0x3af3
+        DCW 0x6005,0x54a4, 0x7c4e,0x1e88, 0x7170,0x3b4c
+        DCW 0x5fa1,0x5515, 0x7c42,0x1eb8, 0x7141,0x3ba5
+        DCW 0x5f3c,0x5586, 0x7c36,0x1ee9, 0x7112,0x3bfe
+        DCW 0x5ed7,0x55f6, 0x7c2a,0x1f1a, 0x70e3,0x3c57
+        DCW 0x5e72,0x5665, 0x7c1e,0x1f4b, 0x70b3,0x3caf
+        DCW 0x5e0c,0x56d4, 0x7c11,0x1f7b, 0x7083,0x3d08
+        DCW 0x5da5,0x5743, 0x7c05,0x1fac, 0x7053,0x3d60
+        DCW 0x5d3e,0x57b1, 0x7bf9,0x1fdd, 0x7023,0x3db8
+        DCW 0x5cd7,0x581e, 0x7bec,0x200e, 0x6ff2,0x3e10
+        DCW 0x5c6f,0x588c, 0x7bdf,0x203e, 0x6fc2,0x3e68
+        DCW 0x5c06,0x58f8, 0x7bd3,0x206f, 0x6f90,0x3ec0
+        DCW 0x5b9d,0x5964, 0x7bc6,0x209f, 0x6f5f,0x3f17
+        DCW 0x5b34,0x59d0, 0x7bb9,0x20d0, 0x6f2d,0x3f6f
+        DCW 0x5ac9,0x5a3b, 0x7bac,0x2101, 0x6efb,0x3fc6
+        DCW 0x5a5f,0x5aa6, 0x7b9f,0x2131, 0x6ec9,0x401d
+
+        DCW 0x59f4,0x5b10, 0x7b92,0x2162, 0x6e97,0x4074
+        DCW 0x5988,0x5b7a, 0x7b85,0x2192, 0x6e64,0x40cb
+        DCW 0x591c,0x5be3, 0x7b78,0x21c3, 0x6e31,0x4121
+        DCW 0x58b0,0x5c4c, 0x7b6a,0x21f3, 0x6dfe,0x4178
+        DCW 0x5843,0x5cb4, 0x7b5d,0x2224, 0x6dca,0x41ce
+        DCW 0x57d5,0x5d1c, 0x7b50,0x2254, 0x6d96,0x4224
+        DCW 0x5767,0x5d83, 0x7b42,0x2284, 0x6d62,0x427a
+        DCW 0x56f9,0x5dea, 0x7b34,0x22b5, 0x6d2e,0x42d0
+        DCW 0x568a,0x5e50, 0x7b27,0x22e5, 0x6cf9,0x4326
+        DCW 0x561b,0x5eb6, 0x7b19,0x2316, 0x6cc4,0x437b
+        DCW 0x55ab,0x5f1b, 0x7b0b,0x2346, 0x6c8f,0x43d1
+        DCW 0x553b,0x5f80, 0x7afd,0x2376, 0x6c5a,0x4426
+        DCW 0x54ca,0x5fe4, 0x7aef,0x23a7, 0x6c24,0x447b
+        DCW 0x5459,0x6047, 0x7ae1,0x23d7, 0x6bee,0x44d0
+        DCW 0x53e7,0x60aa, 0x7ad3,0x2407, 0x6bb8,0x4524
+        DCW 0x5375,0x610d, 0x7ac5,0x2437, 0x6b82,0x4579
+        DCW 0x5303,0x616f, 0x7ab7,0x2467, 0x6b4b,0x45cd
+        DCW 0x5290,0x61d1, 0x7aa8,0x2498, 0x6b14,0x4621
+        DCW 0x521c,0x6232, 0x7a9a,0x24c8, 0x6add,0x4675
+        DCW 0x51a8,0x6292, 0x7a8c,0x24f8, 0x6aa5,0x46c9
+        DCW 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d
+        DCW 0x50bf,0x6351, 0x7a6e,0x2558, 0x6a36,0x4770
+        DCW 0x504a,0x63b0, 0x7a60,0x2588, 0x69fd,0x47c4
+        DCW 0x4fd4,0x640f, 0x7a51,0x25b8, 0x69c5,0x4817
+        DCW 0x4f5e,0x646c, 0x7a42,0x25e8, 0x698c,0x486a
+        DCW 0x4ee8,0x64ca, 0x7a33,0x2618, 0x6953,0x48bd
+        DCW 0x4e71,0x6526, 0x7a24,0x2648, 0x691a,0x490f
+        DCW 0x4df9,0x6582, 0x7a15,0x2678, 0x68e0,0x4962
+        DCW 0x4d81,0x65de, 0x7a06,0x26a8, 0x68a7,0x49b4
+        DCW 0x4d09,0x6639, 0x79f7,0x26d8, 0x686d,0x4a06
+        DCW 0x4c91,0x6693, 0x79e7,0x2708, 0x6832,0x4a58
+        DCW 0x4c17,0x66ed, 0x79d8,0x2738, 0x67f8,0x4aaa
+        DCW 0x4b9e,0x6747, 0x79c9,0x2768, 0x67bd,0x4afb
+        DCW 0x4b24,0x67a0, 0x79b9,0x2797, 0x6782,0x4b4d
+        DCW 0x4aaa,0x67f8, 0x79aa,0x27c7, 0x6747,0x4b9e
+        DCW 0x4a2f,0x6850, 0x799a,0x27f7, 0x670b,0x4bef
+        DCW 0x49b4,0x68a7, 0x798a,0x2827, 0x66d0,0x4c40
+        DCW 0x4939,0x68fd, 0x797a,0x2856, 0x6693,0x4c91
+        DCW 0x48bd,0x6953, 0x796a,0x2886, 0x6657,0x4ce1
+        DCW 0x4840,0x69a9, 0x795b,0x28b6, 0x661b,0x4d31
+        DCW 0x47c4,0x69fd, 0x794a,0x28e5, 0x65de,0x4d81
+        DCW 0x4747,0x6a52, 0x793a,0x2915, 0x65a1,0x4dd1
+        DCW 0x46c9,0x6aa5, 0x792a,0x2945, 0x6564,0x4e21
+        DCW 0x464b,0x6af8, 0x791a,0x2974, 0x6526,0x4e71
+        DCW 0x45cd,0x6b4b, 0x790a,0x29a4, 0x64e9,0x4ec0
+        DCW 0x454f,0x6b9d, 0x78f9,0x29d3, 0x64ab,0x4f0f
+        DCW 0x44d0,0x6bee, 0x78e9,0x2a03, 0x646c,0x4f5e
+        DCW 0x4450,0x6c3f, 0x78d8,0x2a32, 0x642e,0x4fad
+        DCW 0x43d1,0x6c8f, 0x78c8,0x2a62, 0x63ef,0x4ffb
+        DCW 0x4351,0x6cdf, 0x78b7,0x2a91, 0x63b0,0x504a
+        DCW 0x42d0,0x6d2e, 0x78a6,0x2ac1, 0x6371,0x5098
+        DCW 0x424f,0x6d7c, 0x7895,0x2af0, 0x6332,0x50e6
+        DCW 0x41ce,0x6dca, 0x7885,0x2b1f, 0x62f2,0x5134
+        DCW 0x414d,0x6e17, 0x7874,0x2b4f, 0x62b2,0x5181
+        DCW 0x40cb,0x6e64, 0x7863,0x2b7e, 0x6272,0x51cf
+        DCW 0x4048,0x6eb0, 0x7851,0x2bad, 0x6232,0x521c
+        DCW 0x3fc6,0x6efb, 0x7840,0x2bdc, 0x61f1,0x5269
+        DCW 0x3f43,0x6f46, 0x782f,0x2c0c, 0x61b0,0x52b6
+        DCW 0x3ec0,0x6f90, 0x781e,0x2c3b, 0x616f,0x5303
+        DCW 0x3e3c,0x6fda, 0x780c,0x2c6a, 0x612e,0x534f
+        DCW 0x3db8,0x7023, 0x77fb,0x2c99, 0x60ec,0x539b
+        DCW 0x3d34,0x706b, 0x77e9,0x2cc8, 0x60aa,0x53e7
+        DCW 0x3caf,0x70b3, 0x77d8,0x2cf7, 0x6068,0x5433
+        DCW 0x3c2a,0x70fa, 0x77c6,0x2d26, 0x6026,0x547f
+        DCW 0x3ba5,0x7141, 0x77b4,0x2d55, 0x5fe4,0x54ca
+        DCW 0x3b20,0x7187, 0x77a2,0x2d84, 0x5fa1,0x5515
+        DCW 0x3a9a,0x71cc, 0x7790,0x2db3, 0x5f5e,0x5560
+        DCW 0x3a13,0x7211, 0x777e,0x2de2, 0x5f1b,0x55ab
+        DCW 0x398d,0x7255, 0x776c,0x2e11, 0x5ed7,0x55f6
+        DCW 0x3906,0x7299, 0x775a,0x2e40, 0x5e94,0x5640
+        DCW 0x387f,0x72dc, 0x7748,0x2e6f, 0x5e50,0x568a
+        DCW 0x37f7,0x731e, 0x7736,0x2e9e, 0x5e0c,0x56d4
+        DCW 0x3770,0x735f, 0x7723,0x2ecc, 0x5dc8,0x571e
+        DCW 0x36e8,0x73a0, 0x7711,0x2efb, 0x5d83,0x5767
+        DCW 0x365f,0x73e1, 0x76fe,0x2f2a, 0x5d3e,0x57b1
+        DCW 0x35d7,0x7421, 0x76ec,0x2f59, 0x5cf9,0x57fa
+        DCW 0x354e,0x7460, 0x76d9,0x2f87, 0x5cb4,0x5843
+        DCW 0x34c4,0x749e, 0x76c7,0x2fb6, 0x5c6f,0x588c
+        DCW 0x343b,0x74dc, 0x76b4,0x2fe5, 0x5c29,0x58d4
+        DCW 0x33b1,0x7519, 0x76a1,0x3013, 0x5be3,0x591c
+        DCW 0x3327,0x7556, 0x768e,0x3042, 0x5b9d,0x5964
+        DCW 0x329d,0x7592, 0x767b,0x3070, 0x5b57,0x59ac
+        DCW 0x3212,0x75cd, 0x7668,0x309f, 0x5b10,0x59f4
+        DCW 0x3187,0x7608, 0x7655,0x30cd, 0x5ac9,0x5a3b
+        DCW 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82
+        DCW 0x3070,0x767b, 0x762e,0x312a, 0x5a3b,0x5ac9
+        DCW 0x2fe5,0x76b4, 0x761b,0x3159, 0x59f4,0x5b10
+        DCW 0x2f59,0x76ec, 0x7608,0x3187, 0x59ac,0x5b57
+        DCW 0x2ecc,0x7723, 0x75f4,0x31b5, 0x5964,0x5b9d
+        DCW 0x2e40,0x775a, 0x75e1,0x31e4, 0x591c,0x5be3
+        DCW 0x2db3,0x7790, 0x75cd,0x3212, 0x58d4,0x5c29
+        DCW 0x2d26,0x77c6, 0x75b9,0x3240, 0x588c,0x5c6f
+        DCW 0x2c99,0x77fb, 0x75a6,0x326e, 0x5843,0x5cb4
+        DCW 0x2c0c,0x782f, 0x7592,0x329d, 0x57fa,0x5cf9
+        DCW 0x2b7e,0x7863, 0x757e,0x32cb, 0x57b1,0x5d3e
+        DCW 0x2af0,0x7895, 0x756a,0x32f9, 0x5767,0x5d83
+        DCW 0x2a62,0x78c8, 0x7556,0x3327, 0x571e,0x5dc8
+        DCW 0x29d3,0x78f9, 0x7542,0x3355, 0x56d4,0x5e0c
+        DCW 0x2945,0x792a, 0x752d,0x3383, 0x568a,0x5e50
+        DCW 0x28b6,0x795b, 0x7519,0x33b1, 0x5640,0x5e94
+        DCW 0x2827,0x798a, 0x7505,0x33df, 0x55f6,0x5ed7
+        DCW 0x2797,0x79b9, 0x74f0,0x340d, 0x55ab,0x5f1b
+        DCW 0x2708,0x79e7, 0x74dc,0x343b, 0x5560,0x5f5e
+        DCW 0x2678,0x7a15, 0x74c7,0x3469, 0x5515,0x5fa1
+        DCW 0x25e8,0x7a42, 0x74b3,0x3497, 0x54ca,0x5fe4
+        DCW 0x2558,0x7a6e, 0x749e,0x34c4, 0x547f,0x6026
+        DCW 0x24c8,0x7a9a, 0x7489,0x34f2, 0x5433,0x6068
+        DCW 0x2437,0x7ac5, 0x7475,0x3520, 0x53e7,0x60aa
+        DCW 0x23a7,0x7aef, 0x7460,0x354e, 0x539b,0x60ec
+        DCW 0x2316,0x7b19, 0x744b,0x357b, 0x534f,0x612e
+        DCW 0x2284,0x7b42, 0x7436,0x35a9, 0x5303,0x616f
+        DCW 0x21f3,0x7b6a, 0x7421,0x35d7, 0x52b6,0x61b0
+        DCW 0x2162,0x7b92, 0x740b,0x3604, 0x5269,0x61f1
+        DCW 0x20d0,0x7bb9, 0x73f6,0x3632, 0x521c,0x6232
+        DCW 0x203e,0x7bdf, 0x73e1,0x365f, 0x51cf,0x6272
+        DCW 0x1fac,0x7c05, 0x73cb,0x368d, 0x5181,0x62b2
+        DCW 0x1f1a,0x7c2a, 0x73b6,0x36ba, 0x5134,0x62f2
+        DCW 0x1e88,0x7c4e, 0x73a0,0x36e8, 0x50e6,0x6332
+        DCW 0x1df5,0x7c72, 0x738b,0x3715, 0x5098,0x6371
+        DCW 0x1d62,0x7c95, 0x7375,0x3742, 0x504a,0x63b0
+        DCW 0x1cd0,0x7cb7, 0x735f,0x3770, 0x4ffb,0x63ef
+        DCW 0x1c3d,0x7cd9, 0x734a,0x379d, 0x4fad,0x642e
+        DCW 0x1ba9,0x7cfa, 0x7334,0x37ca, 0x4f5e,0x646c
+        DCW 0x1b16,0x7d1a, 0x731e,0x37f7, 0x4f0f,0x64ab
+        DCW 0x1a83,0x7d3a, 0x7308,0x3825, 0x4ec0,0x64e9
+        DCW 0x19ef,0x7d58, 0x72f2,0x3852, 0x4e71,0x6526
+        DCW 0x195b,0x7d77, 0x72dc,0x387f, 0x4e21,0x6564
+        DCW 0x18c7,0x7d94, 0x72c5,0x38ac, 0x4dd1,0x65a1
+        DCW 0x1833,0x7db1, 0x72af,0x38d9, 0x4d81,0x65de
+        DCW 0x179f,0x7dcd, 0x7299,0x3906, 0x4d31,0x661b
+        DCW 0x170b,0x7de9, 0x7282,0x3933, 0x4ce1,0x6657
+        DCW 0x1677,0x7e03, 0x726c,0x3960, 0x4c91,0x6693
+        DCW 0x15e2,0x7e1e, 0x7255,0x398d, 0x4c40,0x66d0
+        DCW 0x154d,0x7e37, 0x723f,0x39ba, 0x4bef,0x670b
+        DCW 0x14b9,0x7e50, 0x7228,0x39e7, 0x4b9e,0x6747
+        DCW 0x1424,0x7e68, 0x7211,0x3a13, 0x4b4d,0x6782
+        DCW 0x138f,0x7e7f, 0x71fa,0x3a40, 0x4afb,0x67bd
+        DCW 0x12fa,0x7e96, 0x71e3,0x3a6d, 0x4aaa,0x67f8
+        DCW 0x1265,0x7eac, 0x71cc,0x3a9a, 0x4a58,0x6832
+        DCW 0x11cf,0x7ec1, 0x71b5,0x3ac6, 0x4a06,0x686d
+        DCW 0x113a,0x7ed6, 0x719e,0x3af3, 0x49b4,0x68a7
+        DCW 0x10a4,0x7eea, 0x7187,0x3b20, 0x4962,0x68e0
+        DCW 0x100f,0x7efd, 0x7170,0x3b4c, 0x490f,0x691a
+        DCW 0x0f79,0x7f10, 0x7158,0x3b79, 0x48bd,0x6953
+        DCW 0x0ee4,0x7f22, 0x7141,0x3ba5, 0x486a,0x698c
+        DCW 0x0e4e,0x7f33, 0x712a,0x3bd2, 0x4817,0x69c5
+        DCW 0x0db8,0x7f43, 0x7112,0x3bfe, 0x47c4,0x69fd
+        DCW 0x0d22,0x7f53, 0x70fa,0x3c2a, 0x4770,0x6a36
+        DCW 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e
+        DCW 0x0bf6,0x7f71, 0x70cb,0x3c83, 0x46c9,0x6aa5
+        DCW 0x0b60,0x7f7e, 0x70b3,0x3caf, 0x4675,0x6add
+        DCW 0x0ac9,0x7f8b, 0x709b,0x3cdc, 0x4621,0x6b14
+        DCW 0x0a33,0x7f98, 0x7083,0x3d08, 0x45cd,0x6b4b
+        DCW 0x099d,0x7fa3, 0x706b,0x3d34, 0x4579,0x6b82
+        DCW 0x0906,0x7fae, 0x7053,0x3d60, 0x4524,0x6bb8
+        DCW 0x0870,0x7fb9, 0x703b,0x3d8c, 0x44d0,0x6bee
+        DCW 0x07d9,0x7fc2, 0x7023,0x3db8, 0x447b,0x6c24
+        DCW 0x0743,0x7fcb, 0x700b,0x3de4, 0x4426,0x6c5a
+        DCW 0x06ac,0x7fd3, 0x6ff2,0x3e10, 0x43d1,0x6c8f
+        DCW 0x0616,0x7fdb, 0x6fda,0x3e3c, 0x437b,0x6cc4
+        DCW 0x057f,0x7fe2, 0x6fc2,0x3e68, 0x4326,0x6cf9
+        DCW 0x04e8,0x7fe8, 0x6fa9,0x3e94, 0x42d0,0x6d2e
+        DCW 0x0452,0x7fed, 0x6f90,0x3ec0, 0x427a,0x6d62
+        DCW 0x03bb,0x7ff2, 0x6f78,0x3eec, 0x4224,0x6d96
+        DCW 0x0324,0x7ff6, 0x6f5f,0x3f17, 0x41ce,0x6dca
+        DCW 0x028d,0x7ff9, 0x6f46,0x3f43, 0x4178,0x6dfe
+        DCW 0x01f7,0x7ffc, 0x6f2d,0x3f6f, 0x4121,0x6e31
+        DCW 0x0160,0x7ffe, 0x6f14,0x3f9a, 0x40cb,0x6e64
+        DCW 0x00c9,0x7fff, 0x6efb,0x3fc6, 0x4074,0x6e97
+        DCW 0x0032,0x7fff, 0x6ee2,0x3ff1, 0x401d,0x6ec9
+        DCW 0xff9b,0x7fff, 0x6ec9,0x401d, 0x3fc6,0x6efb
+        DCW 0xff05,0x7fff, 0x6eb0,0x4048, 0x3f6f,0x6f2d
+        DCW 0xfe6e,0x7ffe, 0x6e97,0x4074, 0x3f17,0x6f5f
+        DCW 0xfdd7,0x7ffb, 0x6e7d,0x409f, 0x3ec0,0x6f90
+        DCW 0xfd40,0x7ff8, 0x6e64,0x40cb, 0x3e68,0x6fc2
+        DCW 0xfcaa,0x7ff5, 0x6e4a,0x40f6, 0x3e10,0x6ff2
+        DCW 0xfc13,0x7ff1, 0x6e31,0x4121, 0x3db8,0x7023
+        DCW 0xfb7c,0x7fec, 0x6e17,0x414d, 0x3d60,0x7053
+        DCW 0xfae5,0x7fe6, 0x6dfe,0x4178, 0x3d08,0x7083
+        DCW 0xfa4f,0x7fe0, 0x6de4,0x41a3, 0x3caf,0x70b3
+        DCW 0xf9b8,0x7fd9, 0x6dca,0x41ce, 0x3c57,0x70e3
+        DCW 0xf922,0x7fd1, 0x6db0,0x41f9, 0x3bfe,0x7112
+        DCW 0xf88b,0x7fc8, 0x6d96,0x4224, 0x3ba5,0x7141
+        DCW 0xf7f4,0x7fbf, 0x6d7c,0x424f, 0x3b4c,0x7170
+        DCW 0xf75e,0x7fb5, 0x6d62,0x427a, 0x3af3,0x719e
+        DCW 0xf6c8,0x7fab, 0x6d48,0x42a5, 0x3a9a,0x71cc
+        DCW 0xf631,0x7fa0, 0x6d2e,0x42d0, 0x3a40,0x71fa
+        DCW 0xf59b,0x7f94, 0x6d14,0x42fb, 0x39e7,0x7228
+        DCW 0xf505,0x7f87, 0x6cf9,0x4326, 0x398d,0x7255
+        DCW 0xf46e,0x7f7a, 0x6cdf,0x4351, 0x3933,0x7282
+        DCW 0xf3d8,0x7f6c, 0x6cc4,0x437b, 0x38d9,0x72af
+        DCW 0xf342,0x7f5d, 0x6caa,0x43a6, 0x387f,0x72dc
+        DCW 0xf2ac,0x7f4e, 0x6c8f,0x43d1, 0x3825,0x7308
+        DCW 0xf216,0x7f3e, 0x6c75,0x43fb, 0x37ca,0x7334
+        DCW 0xf180,0x7f2d, 0x6c5a,0x4426, 0x3770,0x735f
+        DCW 0xf0eb,0x7f1c, 0x6c3f,0x4450, 0x3715,0x738b
+        DCW 0xf055,0x7f0a, 0x6c24,0x447b, 0x36ba,0x73b6
+        DCW 0xefbf,0x7ef7, 0x6c09,0x44a5, 0x365f,0x73e1
+        DCW 0xef2a,0x7ee3, 0x6bee,0x44d0, 0x3604,0x740b
+        DCW 0xee94,0x7ecf, 0x6bd3,0x44fa, 0x35a9,0x7436
+        DCW 0xedff,0x7eba, 0x6bb8,0x4524, 0x354e,0x7460
+        DCW 0xed6a,0x7ea5, 0x6b9d,0x454f, 0x34f2,0x7489
+        DCW 0xecd5,0x7e8e, 0x6b82,0x4579, 0x3497,0x74b3
+        DCW 0xec3f,0x7e78, 0x6b66,0x45a3, 0x343b,0x74dc
+        DCW 0xebab,0x7e60, 0x6b4b,0x45cd, 0x33df,0x7505
+        DCW 0xeb16,0x7e48, 0x6b30,0x45f7, 0x3383,0x752d
+        DCW 0xea81,0x7e2f, 0x6b14,0x4621, 0x3327,0x7556
+        DCW 0xe9ec,0x7e15, 0x6af8,0x464b, 0x32cb,0x757e
+        DCW 0xe958,0x7dfb, 0x6add,0x4675, 0x326e,0x75a6
+        DCW 0xe8c4,0x7de0, 0x6ac1,0x469f, 0x3212,0x75cd
+        DCW 0xe82f,0x7dc4, 0x6aa5,0x46c9, 0x31b5,0x75f4
+        DCW 0xe79b,0x7da7, 0x6a89,0x46f3, 0x3159,0x761b
+        DCW 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642
+        DCW 0xe673,0x7d6d, 0x6a52,0x4747, 0x309f,0x7668
+        DCW 0xe5e0,0x7d4e, 0x6a36,0x4770, 0x3042,0x768e
+        DCW 0xe54c,0x7d2f, 0x6a1a,0x479a, 0x2fe5,0x76b4
+        DCW 0xe4b9,0x7d0f, 0x69fd,0x47c4, 0x2f87,0x76d9
+        DCW 0xe426,0x7cef, 0x69e1,0x47ed, 0x2f2a,0x76fe
+        DCW 0xe392,0x7cce, 0x69c5,0x4817, 0x2ecc,0x7723
+        DCW 0xe2ff,0x7cac, 0x69a9,0x4840, 0x2e6f,0x7748
+        DCW 0xe26d,0x7c89, 0x698c,0x486a, 0x2e11,0x776c
+        DCW 0xe1da,0x7c66, 0x6970,0x4893, 0x2db3,0x7790
+        DCW 0xe148,0x7c42, 0x6953,0x48bd, 0x2d55,0x77b4
+        DCW 0xe0b5,0x7c1e, 0x6937,0x48e6, 0x2cf7,0x77d8
+        DCW 0xe023,0x7bf9, 0x691a,0x490f, 0x2c99,0x77fb
+        DCW 0xdf91,0x7bd3, 0x68fd,0x4939, 0x2c3b,0x781e
+        DCW 0xdeff,0x7bac, 0x68e0,0x4962, 0x2bdc,0x7840
+        DCW 0xde6e,0x7b85, 0x68c4,0x498b, 0x2b7e,0x7863
+        DCW 0xdddc,0x7b5d, 0x68a7,0x49b4, 0x2b1f,0x7885
+        DCW 0xdd4b,0x7b34, 0x688a,0x49dd, 0x2ac1,0x78a6
+        DCW 0xdcba,0x7b0b, 0x686d,0x4a06, 0x2a62,0x78c8
+        DCW 0xdc29,0x7ae1, 0x6850,0x4a2f, 0x2a03,0x78e9
+        DCW 0xdb99,0x7ab7, 0x6832,0x4a58, 0x29a4,0x790a
+        DCW 0xdb08,0x7a8c, 0x6815,0x4a81, 0x2945,0x792a
+        DCW 0xda78,0x7a60, 0x67f8,0x4aaa, 0x28e5,0x794a
+        DCW 0xd9e8,0x7a33, 0x67da,0x4ad3, 0x2886,0x796a
+        DCW 0xd958,0x7a06, 0x67bd,0x4afb, 0x2827,0x798a
+        DCW 0xd8c8,0x79d8, 0x67a0,0x4b24, 0x27c7,0x79aa
+        DCW 0xd839,0x79aa, 0x6782,0x4b4d, 0x2768,0x79c9
+        DCW 0xd7aa,0x797a, 0x6764,0x4b75, 0x2708,0x79e7
+        DCW 0xd71b,0x794a, 0x6747,0x4b9e, 0x26a8,0x7a06
+        DCW 0xd68c,0x791a, 0x6729,0x4bc7, 0x2648,0x7a24
+        DCW 0xd5fd,0x78e9, 0x670b,0x4bef, 0x25e8,0x7a42
+        DCW 0xd56f,0x78b7, 0x66ed,0x4c17, 0x2588,0x7a60
+        DCW 0xd4e1,0x7885, 0x66d0,0x4c40, 0x2528,0x7a7d
+        DCW 0xd453,0x7851, 0x66b2,0x4c68, 0x24c8,0x7a9a
+        DCW 0xd3c5,0x781e, 0x6693,0x4c91, 0x2467,0x7ab7
+        DCW 0xd338,0x77e9, 0x6675,0x4cb9, 0x2407,0x7ad3
+        DCW 0xd2ab,0x77b4, 0x6657,0x4ce1, 0x23a7,0x7aef
+        DCW 0xd21e,0x777e, 0x6639,0x4d09, 0x2346,0x7b0b
+        DCW 0xd191,0x7748, 0x661b,0x4d31, 0x22e5,0x7b27
+        DCW 0xd105,0x7711, 0x65fc,0x4d59, 0x2284,0x7b42
+        DCW 0xd079,0x76d9, 0x65de,0x4d81, 0x2224,0x7b5d
+        DCW 0xcfed,0x76a1, 0x65c0,0x4da9, 0x21c3,0x7b78
+        DCW 0xcf61,0x7668, 0x65a1,0x4dd1, 0x2162,0x7b92
+        DCW 0xced6,0x762e, 0x6582,0x4df9, 0x2101,0x7bac
+        DCW 0xce4b,0x75f4, 0x6564,0x4e21, 0x209f,0x7bc6
+        DCW 0xcdc0,0x75b9, 0x6545,0x4e49, 0x203e,0x7bdf
+        DCW 0xcd35,0x757e, 0x6526,0x4e71, 0x1fdd,0x7bf9
+        DCW 0xccab,0x7542, 0x6507,0x4e98, 0x1f7b,0x7c11
+        DCW 0xcc21,0x7505, 0x64e9,0x4ec0, 0x1f1a,0x7c2a
+        DCW 0xcb97,0x74c7, 0x64ca,0x4ee8, 0x1eb8,0x7c42
+        DCW 0xcb0e,0x7489, 0x64ab,0x4f0f, 0x1e57,0x7c5a
+        DCW 0xca85,0x744b, 0x648b,0x4f37, 0x1df5,0x7c72
+        DCW 0xc9fc,0x740b, 0x646c,0x4f5e, 0x1d93,0x7c89
+        DCW 0xc973,0x73cb, 0x644d,0x4f85, 0x1d31,0x7ca0
+        DCW 0xc8eb,0x738b, 0x642e,0x4fad, 0x1cd0,0x7cb7
+        DCW 0xc863,0x734a, 0x640f,0x4fd4, 0x1c6e,0x7cce
+        DCW 0xc7db,0x7308, 0x63ef,0x4ffb, 0x1c0c,0x7ce4
+        DCW 0xc754,0x72c5, 0x63d0,0x5023, 0x1ba9,0x7cfa
+        DCW 0xc6cd,0x7282, 0x63b0,0x504a, 0x1b47,0x7d0f
+        DCW 0xc646,0x723f, 0x6391,0x5071, 0x1ae5,0x7d25
+        DCW 0xc5c0,0x71fa, 0x6371,0x5098, 0x1a83,0x7d3a
+        DCW 0xc53a,0x71b5, 0x6351,0x50bf, 0x1a20,0x7d4e
+        DCW 0xc4b4,0x7170, 0x6332,0x50e6, 0x19be,0x7d63
+        DCW 0xc42e,0x712a, 0x6312,0x510d, 0x195b,0x7d77
+        DCW 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a
+        DCW 0xc324,0x709b, 0x62d2,0x515b, 0x1896,0x7d9e
+        DCW 0xc2a0,0x7053, 0x62b2,0x5181, 0x1833,0x7db1
+        DCW 0xc21c,0x700b, 0x6292,0x51a8, 0x17d1,0x7dc4
+        DCW 0xc198,0x6fc2, 0x6272,0x51cf, 0x176e,0x7dd6
+        DCW 0xc114,0x6f78, 0x6252,0x51f5, 0x170b,0x7de9
+        DCW 0xc091,0x6f2d, 0x6232,0x521c, 0x16a8,0x7dfb
+        DCW 0xc00f,0x6ee2, 0x6211,0x5243, 0x1645,0x7e0c
+        DCW 0xbf8c,0x6e97, 0x61f1,0x5269, 0x15e2,0x7e1e
+        DCW 0xbf0a,0x6e4a, 0x61d1,0x5290, 0x157f,0x7e2f
+        DCW 0xbe88,0x6dfe, 0x61b0,0x52b6, 0x151c,0x7e3f
+        DCW 0xbe07,0x6db0, 0x6190,0x52dc, 0x14b9,0x7e50
+        DCW 0xbd86,0x6d62, 0x616f,0x5303, 0x1455,0x7e60
+        DCW 0xbd05,0x6d14, 0x614e,0x5329, 0x13f2,0x7e70
+        DCW 0xbc85,0x6cc4, 0x612e,0x534f, 0x138f,0x7e7f
+        DCW 0xbc05,0x6c75, 0x610d,0x5375, 0x132b,0x7e8e
+        DCW 0xbb85,0x6c24, 0x60ec,0x539b, 0x12c8,0x7e9d
+        DCW 0xbb06,0x6bd3, 0x60cb,0x53c1, 0x1265,0x7eac
+        DCW 0xba87,0x6b82, 0x60aa,0x53e7, 0x1201,0x7eba
+        DCW 0xba09,0x6b30, 0x6089,0x540d, 0x119e,0x7ec8
+        DCW 0xb98b,0x6add, 0x6068,0x5433, 0x113a,0x7ed6
+        DCW 0xb90d,0x6a89, 0x6047,0x5459, 0x10d6,0x7ee3
+        DCW 0xb890,0x6a36, 0x6026,0x547f, 0x1073,0x7ef0
+        DCW 0xb813,0x69e1, 0x6005,0x54a4, 0x100f,0x7efd
+        DCW 0xb796,0x698c, 0x5fe4,0x54ca, 0x0fab,0x7f0a
+        DCW 0xb71a,0x6937, 0x5fc2,0x54f0, 0x0f47,0x7f16
+        DCW 0xb69e,0x68e0, 0x5fa1,0x5515, 0x0ee4,0x7f22
+        DCW 0xb623,0x688a, 0x5f80,0x553b, 0x0e80,0x7f2d
+        DCW 0xb5a8,0x6832, 0x5f5e,0x5560, 0x0e1c,0x7f38
+        DCW 0xb52d,0x67da, 0x5f3c,0x5586, 0x0db8,0x7f43
+        DCW 0xb4b3,0x6782, 0x5f1b,0x55ab, 0x0d54,0x7f4e
+        DCW 0xb439,0x6729, 0x5ef9,0x55d0, 0x0cf0,0x7f58
+        DCW 0xb3c0,0x66d0, 0x5ed7,0x55f6, 0x0c8c,0x7f62
+        DCW 0xb347,0x6675, 0x5eb6,0x561b, 0x0c28,0x7f6c
+        DCW 0xb2cf,0x661b, 0x5e94,0x5640, 0x0bc4,0x7f75
+        DCW 0xb257,0x65c0, 0x5e72,0x5665, 0x0b60,0x7f7e
+        DCW 0xb1df,0x6564, 0x5e50,0x568a, 0x0afb,0x7f87
+        DCW 0xb168,0x6507, 0x5e2e,0x56af, 0x0a97,0x7f90
+        DCW 0xb0f1,0x64ab, 0x5e0c,0x56d4, 0x0a33,0x7f98
+        DCW 0xb07b,0x644d, 0x5dea,0x56f9, 0x09cf,0x7fa0
+        DCW 0xb005,0x63ef, 0x5dc8,0x571e, 0x096b,0x7fa7
+        DCW 0xaf8f,0x6391, 0x5da5,0x5743, 0x0906,0x7fae
+        DCW 0xaf1a,0x6332, 0x5d83,0x5767, 0x08a2,0x7fb5
+        DCW 0xaea5,0x62d2, 0x5d61,0x578c, 0x083e,0x7fbc
+        DCW 0xae31,0x6272, 0x5d3e,0x57b1, 0x07d9,0x7fc2
+        DCW 0xadbd,0x6211, 0x5d1c,0x57d5, 0x0775,0x7fc8
+        DCW 0xad4a,0x61b0, 0x5cf9,0x57fa, 0x0711,0x7fce
+        DCW 0xacd7,0x614e, 0x5cd7,0x581e, 0x06ac,0x7fd3
+        DCW 0xac65,0x60ec, 0x5cb4,0x5843, 0x0648,0x7fd9
+        DCW 0xabf3,0x6089, 0x5c91,0x5867, 0x05e3,0x7fdd
+        DCW 0xab81,0x6026, 0x5c6f,0x588c, 0x057f,0x7fe2
+        DCW 0xab10,0x5fc2, 0x5c4c,0x58b0, 0x051b,0x7fe6
+        DCW 0xaaa0,0x5f5e, 0x5c29,0x58d4, 0x04b6,0x7fea
+        DCW 0xaa30,0x5ef9, 0x5c06,0x58f8, 0x0452,0x7fed
+        DCW 0xa9c0,0x5e94, 0x5be3,0x591c, 0x03ed,0x7ff1
+        DCW 0xa951,0x5e2e, 0x5bc0,0x5940, 0x0389,0x7ff4
+        DCW 0xa8e2,0x5dc8, 0x5b9d,0x5964, 0x0324,0x7ff6
+        DCW 0xa874,0x5d61, 0x5b7a,0x5988, 0x02c0,0x7ff8
+        DCW 0xa806,0x5cf9, 0x5b57,0x59ac, 0x025b,0x7ffa
+        DCW 0xa799,0x5c91, 0x5b34,0x59d0, 0x01f7,0x7ffc
+        DCW 0xa72c,0x5c29, 0x5b10,0x59f4, 0x0192,0x7ffe
+        DCW 0xa6c0,0x5bc0, 0x5aed,0x5a18, 0x012e,0x7fff
+        DCW 0xa654,0x5b57, 0x5ac9,0x5a3b, 0x00c9,0x7fff
+        DCW 0xa5e8,0x5aed, 0x5aa6,0x5a5f, 0x0065,0x7fff
+        DCW 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff
+        DCW 0xa513,0x5a18, 0x5a5f,0x5aa6, 0xff9b,0x7fff
+        DCW 0xa4a9,0x59ac, 0x5a3b,0x5ac9, 0xff37,0x7fff
+        DCW 0xa440,0x5940, 0x5a18,0x5aed, 0xfed2,0x7fff
+        DCW 0xa3d7,0x58d4, 0x59f4,0x5b10, 0xfe6e,0x7ffe
+        DCW 0xa36f,0x5867, 0x59d0,0x5b34, 0xfe09,0x7ffc
+        DCW 0xa307,0x57fa, 0x59ac,0x5b57, 0xfda5,0x7ffa
+        DCW 0xa29f,0x578c, 0x5988,0x5b7a, 0xfd40,0x7ff8
+        DCW 0xa238,0x571e, 0x5964,0x5b9d, 0xfcdc,0x7ff6
+        DCW 0xa1d2,0x56af, 0x5940,0x5bc0, 0xfc77,0x7ff4
+        DCW 0xa16c,0x5640, 0x591c,0x5be3, 0xfc13,0x7ff1
+        DCW 0xa107,0x55d0, 0x58f8,0x5c06, 0xfbae,0x7fed
+        DCW 0xa0a2,0x5560, 0x58d4,0x5c29, 0xfb4a,0x7fea
+        DCW 0xa03e,0x54f0, 0x58b0,0x5c4c, 0xfae5,0x7fe6
+        DCW 0x9fda,0x547f, 0x588c,0x5c6f, 0xfa81,0x7fe2
+        DCW 0x9f77,0x540d, 0x5867,0x5c91, 0xfa1d,0x7fdd
+        DCW 0x9f14,0x539b, 0x5843,0x5cb4, 0xf9b8,0x7fd9
+        DCW 0x9eb2,0x5329, 0x581e,0x5cd7, 0xf954,0x7fd3
+        DCW 0x9e50,0x52b6, 0x57fa,0x5cf9, 0xf8ef,0x7fce
+        DCW 0x9def,0x5243, 0x57d5,0x5d1c, 0xf88b,0x7fc8
+        DCW 0x9d8e,0x51cf, 0x57b1,0x5d3e, 0xf827,0x7fc2
+        DCW 0x9d2e,0x515b, 0x578c,0x5d61, 0xf7c2,0x7fbc
+        DCW 0x9cce,0x50e6, 0x5767,0x5d83, 0xf75e,0x7fb5
+        DCW 0x9c6f,0x5071, 0x5743,0x5da5, 0xf6fa,0x7fae
+        DCW 0x9c11,0x4ffb, 0x571e,0x5dc8, 0xf695,0x7fa7
+        DCW 0x9bb3,0x4f85, 0x56f9,0x5dea, 0xf631,0x7fa0
+        DCW 0x9b55,0x4f0f, 0x56d4,0x5e0c, 0xf5cd,0x7f98
+        DCW 0x9af9,0x4e98, 0x56af,0x5e2e, 0xf569,0x7f90
+        DCW 0x9a9c,0x4e21, 0x568a,0x5e50, 0xf505,0x7f87
+        DCW 0x9a40,0x4da9, 0x5665,0x5e72, 0xf4a0,0x7f7e
+        DCW 0x99e5,0x4d31, 0x5640,0x5e94, 0xf43c,0x7f75
+        DCW 0x998b,0x4cb9, 0x561b,0x5eb6, 0xf3d8,0x7f6c
+        DCW 0x9930,0x4c40, 0x55f6,0x5ed7, 0xf374,0x7f62
+        DCW 0x98d7,0x4bc7, 0x55d0,0x5ef9, 0xf310,0x7f58
+        DCW 0x987e,0x4b4d, 0x55ab,0x5f1b, 0xf2ac,0x7f4e
+        DCW 0x9826,0x4ad3, 0x5586,0x5f3c, 0xf248,0x7f43
+        DCW 0x97ce,0x4a58, 0x5560,0x5f5e, 0xf1e4,0x7f38
+        DCW 0x9776,0x49dd, 0x553b,0x5f80, 0xf180,0x7f2d
+        DCW 0x9720,0x4962, 0x5515,0x5fa1, 0xf11c,0x7f22
+        DCW 0x96c9,0x48e6, 0x54f0,0x5fc2, 0xf0b9,0x7f16
+        DCW 0x9674,0x486a, 0x54ca,0x5fe4, 0xf055,0x7f0a
+        DCW 0x961f,0x47ed, 0x54a4,0x6005, 0xeff1,0x7efd
+        DCW 0x95ca,0x4770, 0x547f,0x6026, 0xef8d,0x7ef0
+        DCW 0x9577,0x46f3, 0x5459,0x6047, 0xef2a,0x7ee3
+        DCW 0x9523,0x4675, 0x5433,0x6068, 0xeec6,0x7ed6
+        DCW 0x94d0,0x45f7, 0x540d,0x6089, 0xee62,0x7ec8
+        DCW 0x947e,0x4579, 0x53e7,0x60aa, 0xedff,0x7eba
+        DCW 0x942d,0x44fa, 0x53c1,0x60cb, 0xed9b,0x7eac
+        DCW 0x93dc,0x447b, 0x539b,0x60ec, 0xed38,0x7e9d
+        DCW 0x938b,0x43fb, 0x5375,0x610d, 0xecd5,0x7e8e
+        DCW 0x933c,0x437b, 0x534f,0x612e, 0xec71,0x7e7f
+        DCW 0x92ec,0x42fb, 0x5329,0x614e, 0xec0e,0x7e70
+        DCW 0x929e,0x427a, 0x5303,0x616f, 0xebab,0x7e60
+        DCW 0x9250,0x41f9, 0x52dc,0x6190, 0xeb47,0x7e50
+        DCW 0x9202,0x4178, 0x52b6,0x61b0, 0xeae4,0x7e3f
+        DCW 0x91b6,0x40f6, 0x5290,0x61d1, 0xea81,0x7e2f
+        DCW 0x9169,0x4074, 0x5269,0x61f1, 0xea1e,0x7e1e
+        DCW 0x911e,0x3ff1, 0x5243,0x6211, 0xe9bb,0x7e0c
+        DCW 0x90d3,0x3f6f, 0x521c,0x6232, 0xe958,0x7dfb
+        DCW 0x9088,0x3eec, 0x51f5,0x6252, 0xe8f5,0x7de9
+        DCW 0x903e,0x3e68, 0x51cf,0x6272, 0xe892,0x7dd6
+        DCW 0x8ff5,0x3de4, 0x51a8,0x6292, 0xe82f,0x7dc4
+        DCW 0x8fad,0x3d60, 0x5181,0x62b2, 0xe7cd,0x7db1
+        DCW 0x8f65,0x3cdc, 0x515b,0x62d2, 0xe76a,0x7d9e
+        DCW 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a
+        DCW 0x8ed6,0x3bd2, 0x510d,0x6312, 0xe6a5,0x7d77
+        DCW 0x8e90,0x3b4c, 0x50e6,0x6332, 0xe642,0x7d63
+        DCW 0x8e4b,0x3ac6, 0x50bf,0x6351, 0xe5e0,0x7d4e
+        DCW 0x8e06,0x3a40, 0x5098,0x6371, 0xe57d,0x7d3a
+        DCW 0x8dc1,0x39ba, 0x5071,0x6391, 0xe51b,0x7d25
+        DCW 0x8d7e,0x3933, 0x504a,0x63b0, 0xe4b9,0x7d0f
+        DCW 0x8d3b,0x38ac, 0x5023,0x63d0, 0xe457,0x7cfa
+        DCW 0x8cf8,0x3825, 0x4ffb,0x63ef, 0xe3f4,0x7ce4
+        DCW 0x8cb6,0x379d, 0x4fd4,0x640f, 0xe392,0x7cce
+        DCW 0x8c75,0x3715, 0x4fad,0x642e, 0xe330,0x7cb7
+        DCW 0x8c35,0x368d, 0x4f85,0x644d, 0xe2cf,0x7ca0
+        DCW 0x8bf5,0x3604, 0x4f5e,0x646c, 0xe26d,0x7c89
+        DCW 0x8bb5,0x357b, 0x4f37,0x648b, 0xe20b,0x7c72
+        DCW 0x8b77,0x34f2, 0x4f0f,0x64ab, 0xe1a9,0x7c5a
+        DCW 0x8b39,0x3469, 0x4ee8,0x64ca, 0xe148,0x7c42
+        DCW 0x8afb,0x33df, 0x4ec0,0x64e9, 0xe0e6,0x7c2a
+        DCW 0x8abe,0x3355, 0x4e98,0x6507, 0xe085,0x7c11
+        DCW 0x8a82,0x32cb, 0x4e71,0x6526, 0xe023,0x7bf9
+        DCW 0x8a47,0x3240, 0x4e49,0x6545, 0xdfc2,0x7bdf
+        DCW 0x8a0c,0x31b5, 0x4e21,0x6564, 0xdf61,0x7bc6
+        DCW 0x89d2,0x312a, 0x4df9,0x6582, 0xdeff,0x7bac
+        DCW 0x8998,0x309f, 0x4dd1,0x65a1, 0xde9e,0x7b92
+        DCW 0x895f,0x3013, 0x4da9,0x65c0, 0xde3d,0x7b78
+        DCW 0x8927,0x2f87, 0x4d81,0x65de, 0xdddc,0x7b5d
+        DCW 0x88ef,0x2efb, 0x4d59,0x65fc, 0xdd7c,0x7b42
+        DCW 0x88b8,0x2e6f, 0x4d31,0x661b, 0xdd1b,0x7b27
+        DCW 0x8882,0x2de2, 0x4d09,0x6639, 0xdcba,0x7b0b
+        DCW 0x884c,0x2d55, 0x4ce1,0x6657, 0xdc59,0x7aef
+        DCW 0x8817,0x2cc8, 0x4cb9,0x6675, 0xdbf9,0x7ad3
+        DCW 0x87e2,0x2c3b, 0x4c91,0x6693, 0xdb99,0x7ab7
+        DCW 0x87af,0x2bad, 0x4c68,0x66b2, 0xdb38,0x7a9a
+        DCW 0x877b,0x2b1f, 0x4c40,0x66d0, 0xdad8,0x7a7d
+        DCW 0x8749,0x2a91, 0x4c17,0x66ed, 0xda78,0x7a60
+        DCW 0x8717,0x2a03, 0x4bef,0x670b, 0xda18,0x7a42
+        DCW 0x86e6,0x2974, 0x4bc7,0x6729, 0xd9b8,0x7a24
+        DCW 0x86b6,0x28e5, 0x4b9e,0x6747, 0xd958,0x7a06
+        DCW 0x8686,0x2856, 0x4b75,0x6764, 0xd8f8,0x79e7
+        DCW 0x8656,0x27c7, 0x4b4d,0x6782, 0xd898,0x79c9
+        DCW 0x8628,0x2738, 0x4b24,0x67a0, 0xd839,0x79aa
+        DCW 0x85fa,0x26a8, 0x4afb,0x67bd, 0xd7d9,0x798a
+        DCW 0x85cd,0x2618, 0x4ad3,0x67da, 0xd77a,0x796a
+        DCW 0x85a0,0x2588, 0x4aaa,0x67f8, 0xd71b,0x794a
+        DCW 0x8574,0x24f8, 0x4a81,0x6815, 0xd6bb,0x792a
+        DCW 0x8549,0x2467, 0x4a58,0x6832, 0xd65c,0x790a
+        DCW 0x851f,0x23d7, 0x4a2f,0x6850, 0xd5fd,0x78e9
+        DCW 0x84f5,0x2346, 0x4a06,0x686d, 0xd59e,0x78c8
+        DCW 0x84cc,0x22b5, 0x49dd,0x688a, 0xd53f,0x78a6
+        DCW 0x84a3,0x2224, 0x49b4,0x68a7, 0xd4e1,0x7885
+        DCW 0x847b,0x2192, 0x498b,0x68c4, 0xd482,0x7863
+        DCW 0x8454,0x2101, 0x4962,0x68e0, 0xd424,0x7840
+        DCW 0x842d,0x206f, 0x4939,0x68fd, 0xd3c5,0x781e
+        DCW 0x8407,0x1fdd, 0x490f,0x691a, 0xd367,0x77fb
+        DCW 0x83e2,0x1f4b, 0x48e6,0x6937, 0xd309,0x77d8
+        DCW 0x83be,0x1eb8, 0x48bd,0x6953, 0xd2ab,0x77b4
+        DCW 0x839a,0x1e26, 0x4893,0x6970, 0xd24d,0x7790
+        DCW 0x8377,0x1d93, 0x486a,0x698c, 0xd1ef,0x776c
+        DCW 0x8354,0x1d01, 0x4840,0x69a9, 0xd191,0x7748
+        DCW 0x8332,0x1c6e, 0x4817,0x69c5, 0xd134,0x7723
+        DCW 0x8311,0x1bda, 0x47ed,0x69e1, 0xd0d6,0x76fe
+        DCW 0x82f1,0x1b47, 0x47c4,0x69fd, 0xd079,0x76d9
+        DCW 0x82d1,0x1ab4, 0x479a,0x6a1a, 0xd01b,0x76b4
+        DCW 0x82b2,0x1a20, 0x4770,0x6a36, 0xcfbe,0x768e
+        DCW 0x8293,0x198d, 0x4747,0x6a52, 0xcf61,0x7668
+        DCW 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642
+        DCW 0x8259,0x1865, 0x46f3,0x6a89, 0xcea7,0x761b
+        DCW 0x823c,0x17d1, 0x46c9,0x6aa5, 0xce4b,0x75f4
+        DCW 0x8220,0x173c, 0x469f,0x6ac1, 0xcdee,0x75cd
+        DCW 0x8205,0x16a8, 0x4675,0x6add, 0xcd92,0x75a6
+        DCW 0x81eb,0x1614, 0x464b,0x6af8, 0xcd35,0x757e
+        DCW 0x81d1,0x157f, 0x4621,0x6b14, 0xccd9,0x7556
+        DCW 0x81b8,0x14ea, 0x45f7,0x6b30, 0xcc7d,0x752d
+        DCW 0x81a0,0x1455, 0x45cd,0x6b4b, 0xcc21,0x7505
+        DCW 0x8188,0x13c1, 0x45a3,0x6b66, 0xcbc5,0x74dc
+        DCW 0x8172,0x132b, 0x4579,0x6b82, 0xcb69,0x74b3
+        DCW 0x815b,0x1296, 0x454f,0x6b9d, 0xcb0e,0x7489
+        DCW 0x8146,0x1201, 0x4524,0x6bb8, 0xcab2,0x7460
+        DCW 0x8131,0x116c, 0x44fa,0x6bd3, 0xca57,0x7436
+        DCW 0x811d,0x10d6, 0x44d0,0x6bee, 0xc9fc,0x740b
+        DCW 0x8109,0x1041, 0x44a5,0x6c09, 0xc9a1,0x73e1
+        DCW 0x80f6,0x0fab, 0x447b,0x6c24, 0xc946,0x73b6
+        DCW 0x80e4,0x0f15, 0x4450,0x6c3f, 0xc8eb,0x738b
+        DCW 0x80d3,0x0e80, 0x4426,0x6c5a, 0xc890,0x735f
+        DCW 0x80c2,0x0dea, 0x43fb,0x6c75, 0xc836,0x7334
+        DCW 0x80b2,0x0d54, 0x43d1,0x6c8f, 0xc7db,0x7308
+        DCW 0x80a3,0x0cbe, 0x43a6,0x6caa, 0xc781,0x72dc
+        DCW 0x8094,0x0c28, 0x437b,0x6cc4, 0xc727,0x72af
+        DCW 0x8086,0x0b92, 0x4351,0x6cdf, 0xc6cd,0x7282
+        DCW 0x8079,0x0afb, 0x4326,0x6cf9, 0xc673,0x7255
+        DCW 0x806c,0x0a65, 0x42fb,0x6d14, 0xc619,0x7228
+        DCW 0x8060,0x09cf, 0x42d0,0x6d2e, 0xc5c0,0x71fa
+        DCW 0x8055,0x0938, 0x42a5,0x6d48, 0xc566,0x71cc
+        DCW 0x804b,0x08a2, 0x427a,0x6d62, 0xc50d,0x719e
+        DCW 0x8041,0x080c, 0x424f,0x6d7c, 0xc4b4,0x7170
+        DCW 0x8038,0x0775, 0x4224,0x6d96, 0xc45b,0x7141
+        DCW 0x802f,0x06de, 0x41f9,0x6db0, 0xc402,0x7112
+        DCW 0x8027,0x0648, 0x41ce,0x6dca, 0xc3a9,0x70e3
+        DCW 0x8020,0x05b1, 0x41a3,0x6de4, 0xc351,0x70b3
+        DCW 0x801a,0x051b, 0x4178,0x6dfe, 0xc2f8,0x7083
+        DCW 0x8014,0x0484, 0x414d,0x6e17, 0xc2a0,0x7053
+        DCW 0x800f,0x03ed, 0x4121,0x6e31, 0xc248,0x7023
+        DCW 0x800b,0x0356, 0x40f6,0x6e4a, 0xc1f0,0x6ff2
+        DCW 0x8008,0x02c0, 0x40cb,0x6e64, 0xc198,0x6fc2
+        DCW 0x8005,0x0229, 0x409f,0x6e7d, 0xc140,0x6f90
+        DCW 0x8002,0x0192, 0x4074,0x6e97, 0xc0e9,0x6f5f
+        DCW 0x8001,0x00fb, 0x4048,0x6eb0, 0xc091,0x6f2d
+        DCW 0x8000,0x0065, 0x401d,0x6ec9, 0xc03a,0x6efb
+        DCW 0x8000,0xffce, 0x3ff1,0x6ee2, 0xbfe3,0x6ec9
+        DCW 0x8001,0xff37, 0x3fc6,0x6efb, 0xbf8c,0x6e97
+        DCW 0x8002,0xfea0, 0x3f9a,0x6f14, 0xbf35,0x6e64
+        DCW 0x8004,0xfe09, 0x3f6f,0x6f2d, 0xbedf,0x6e31
+        DCW 0x8007,0xfd73, 0x3f43,0x6f46, 0xbe88,0x6dfe
+        DCW 0x800a,0xfcdc, 0x3f17,0x6f5f, 0xbe32,0x6dca
+        DCW 0x800e,0xfc45, 0x3eec,0x6f78, 0xbddc,0x6d96
+        DCW 0x8013,0xfbae, 0x3ec0,0x6f90, 0xbd86,0x6d62
+        DCW 0x8018,0xfb18, 0x3e94,0x6fa9, 0xbd30,0x6d2e
+        DCW 0x801e,0xfa81, 0x3e68,0x6fc2, 0xbcda,0x6cf9
+        DCW 0x8025,0xf9ea, 0x3e3c,0x6fda, 0xbc85,0x6cc4
+        DCW 0x802d,0xf954, 0x3e10,0x6ff2, 0xbc2f,0x6c8f
+        DCW 0x8035,0xf8bd, 0x3de4,0x700b, 0xbbda,0x6c5a
+        DCW 0x803e,0xf827, 0x3db8,0x7023, 0xbb85,0x6c24
+        DCW 0x8047,0xf790, 0x3d8c,0x703b, 0xbb30,0x6bee
+        DCW 0x8052,0xf6fa, 0x3d60,0x7053, 0xbadc,0x6bb8
+        DCW 0x805d,0xf663, 0x3d34,0x706b, 0xba87,0x6b82
+        DCW 0x8068,0xf5cd, 0x3d08,0x7083, 0xba33,0x6b4b
+        DCW 0x8075,0xf537, 0x3cdc,0x709b, 0xb9df,0x6b14
+        DCW 0x8082,0xf4a0, 0x3caf,0x70b3, 0xb98b,0x6add
+        DCW 0x808f,0xf40a, 0x3c83,0x70cb, 0xb937,0x6aa5
+        DCW 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e
+        DCW 0x80ad,0xf2de, 0x3c2a,0x70fa, 0xb890,0x6a36
+        DCW 0x80bd,0xf248, 0x3bfe,0x7112, 0xb83c,0x69fd
+        DCW 0x80cd,0xf1b2, 0x3bd2,0x712a, 0xb7e9,0x69c5
+        DCW 0x80de,0xf11c, 0x3ba5,0x7141, 0xb796,0x698c
+        DCW 0x80f0,0xf087, 0x3b79,0x7158, 0xb743,0x6953
+        DCW 0x8103,0xeff1, 0x3b4c,0x7170, 0xb6f1,0x691a
+        DCW 0x8116,0xef5c, 0x3b20,0x7187, 0xb69e,0x68e0
+        DCW 0x812a,0xeec6, 0x3af3,0x719e, 0xb64c,0x68a7
+        DCW 0x813f,0xee31, 0x3ac6,0x71b5, 0xb5fa,0x686d
+        DCW 0x8154,0xed9b, 0x3a9a,0x71cc, 0xb5a8,0x6832
+        DCW 0x816a,0xed06, 0x3a6d,0x71e3, 0xb556,0x67f8
+        DCW 0x8181,0xec71, 0x3a40,0x71fa, 0xb505,0x67bd
+        DCW 0x8198,0xebdc, 0x3a13,0x7211, 0xb4b3,0x6782
+        DCW 0x81b0,0xeb47, 0x39e7,0x7228, 0xb462,0x6747
+        DCW 0x81c9,0xeab3, 0x39ba,0x723f, 0xb411,0x670b
+        DCW 0x81e2,0xea1e, 0x398d,0x7255, 0xb3c0,0x66d0
+        DCW 0x81fd,0xe989, 0x3960,0x726c, 0xb36f,0x6693
+        DCW 0x8217,0xe8f5, 0x3933,0x7282, 0xb31f,0x6657
+        DCW 0x8233,0xe861, 0x3906,0x7299, 0xb2cf,0x661b
+        DCW 0x824f,0xe7cd, 0x38d9,0x72af, 0xb27f,0x65de
+        DCW 0x826c,0xe739, 0x38ac,0x72c5, 0xb22f,0x65a1
+        DCW 0x8289,0xe6a5, 0x387f,0x72dc, 0xb1df,0x6564
+        DCW 0x82a8,0xe611, 0x3852,0x72f2, 0xb18f,0x6526
+        DCW 0x82c6,0xe57d, 0x3825,0x7308, 0xb140,0x64e9
+        DCW 0x82e6,0xe4ea, 0x37f7,0x731e, 0xb0f1,0x64ab
+        DCW 0x8306,0xe457, 0x37ca,0x7334, 0xb0a2,0x646c
+        DCW 0x8327,0xe3c3, 0x379d,0x734a, 0xb053,0x642e
+        DCW 0x8349,0xe330, 0x3770,0x735f, 0xb005,0x63ef
+        DCW 0x836b,0xe29e, 0x3742,0x7375, 0xafb6,0x63b0
+        DCW 0x838e,0xe20b, 0x3715,0x738b, 0xaf68,0x6371
+        DCW 0x83b2,0xe178, 0x36e8,0x73a0, 0xaf1a,0x6332
+        DCW 0x83d6,0xe0e6, 0x36ba,0x73b6, 0xaecc,0x62f2
+        DCW 0x83fb,0xe054, 0x368d,0x73cb, 0xae7f,0x62b2
+        DCW 0x8421,0xdfc2, 0x365f,0x73e1, 0xae31,0x6272
+        DCW 0x8447,0xdf30, 0x3632,0x73f6, 0xade4,0x6232
+        DCW 0x846e,0xde9e, 0x3604,0x740b, 0xad97,0x61f1
+        DCW 0x8496,0xde0d, 0x35d7,0x7421, 0xad4a,0x61b0
+        DCW 0x84be,0xdd7c, 0x35a9,0x7436, 0xacfd,0x616f
+        DCW 0x84e7,0xdcea, 0x357b,0x744b, 0xacb1,0x612e
+        DCW 0x8511,0xdc59, 0x354e,0x7460, 0xac65,0x60ec
+        DCW 0x853b,0xdbc9, 0x3520,0x7475, 0xac19,0x60aa
+        DCW 0x8566,0xdb38, 0x34f2,0x7489, 0xabcd,0x6068
+        DCW 0x8592,0xdaa8, 0x34c4,0x749e, 0xab81,0x6026
+        DCW 0x85be,0xda18, 0x3497,0x74b3, 0xab36,0x5fe4
+        DCW 0x85eb,0xd988, 0x3469,0x74c7, 0xaaeb,0x5fa1
+        DCW 0x8619,0xd8f8, 0x343b,0x74dc, 0xaaa0,0x5f5e
+        DCW 0x8647,0xd869, 0x340d,0x74f0, 0xaa55,0x5f1b
+        DCW 0x8676,0xd7d9, 0x33df,0x7505, 0xaa0a,0x5ed7
+        DCW 0x86a5,0xd74a, 0x33b1,0x7519, 0xa9c0,0x5e94
+        DCW 0x86d6,0xd6bb, 0x3383,0x752d, 0xa976,0x5e50
+        DCW 0x8707,0xd62d, 0x3355,0x7542, 0xa92c,0x5e0c
+        DCW 0x8738,0xd59e, 0x3327,0x7556, 0xa8e2,0x5dc8
+        DCW 0x876b,0xd510, 0x32f9,0x756a, 0xa899,0x5d83
+        DCW 0x879d,0xd482, 0x32cb,0x757e, 0xa84f,0x5d3e
+        DCW 0x87d1,0xd3f4, 0x329d,0x7592, 0xa806,0x5cf9
+        DCW 0x8805,0xd367, 0x326e,0x75a6, 0xa7bd,0x5cb4
+        DCW 0x883a,0xd2da, 0x3240,0x75b9, 0xa774,0x5c6f
+        DCW 0x8870,0xd24d, 0x3212,0x75cd, 0xa72c,0x5c29
+        DCW 0x88a6,0xd1c0, 0x31e4,0x75e1, 0xa6e4,0x5be3
+        DCW 0x88dd,0xd134, 0x31b5,0x75f4, 0xa69c,0x5b9d
+        DCW 0x8914,0xd0a7, 0x3187,0x7608, 0xa654,0x5b57
+        DCW 0x894c,0xd01b, 0x3159,0x761b, 0xa60c,0x5b10
+        DCW 0x8985,0xcf90, 0x312a,0x762e, 0xa5c5,0x5ac9
+        DCW 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82
+        DCW 0x89f8,0xce79, 0x30cd,0x7655, 0xa537,0x5a3b
+        DCW 0x8a33,0xcdee, 0x309f,0x7668, 0xa4f0,0x59f4
+        DCW 0x8a6e,0xcd63, 0x3070,0x767b, 0xa4a9,0x59ac
+        DCW 0x8aaa,0xccd9, 0x3042,0x768e, 0xa463,0x5964
+        DCW 0x8ae7,0xcc4f, 0x3013,0x76a1, 0xa41d,0x591c
+        DCW 0x8b24,0xcbc5, 0x2fe5,0x76b4, 0xa3d7,0x58d4
+        DCW 0x8b62,0xcb3c, 0x2fb6,0x76c7, 0xa391,0x588c
+        DCW 0x8ba0,0xcab2, 0x2f87,0x76d9, 0xa34c,0x5843
+        DCW 0x8bdf,0xca29, 0x2f59,0x76ec, 0xa307,0x57fa
+        DCW 0x8c1f,0xc9a1, 0x2f2a,0x76fe, 0xa2c2,0x57b1
+        DCW 0x8c60,0xc918, 0x2efb,0x7711, 0xa27d,0x5767
+        DCW 0x8ca1,0xc890, 0x2ecc,0x7723, 0xa238,0x571e
+        DCW 0x8ce2,0xc809, 0x2e9e,0x7736, 0xa1f4,0x56d4
+        DCW 0x8d24,0xc781, 0x2e6f,0x7748, 0xa1b0,0x568a
+        DCW 0x8d67,0xc6fa, 0x2e40,0x775a, 0xa16c,0x5640
+        DCW 0x8dab,0xc673, 0x2e11,0x776c, 0xa129,0x55f6
+        DCW 0x8def,0xc5ed, 0x2de2,0x777e, 0xa0e5,0x55ab
+        DCW 0x8e34,0xc566, 0x2db3,0x7790, 0xa0a2,0x5560
+        DCW 0x8e79,0xc4e0, 0x2d84,0x77a2, 0xa05f,0x5515
+        DCW 0x8ebf,0xc45b, 0x2d55,0x77b4, 0xa01c,0x54ca
+        DCW 0x8f06,0xc3d6, 0x2d26,0x77c6, 0x9fda,0x547f
+        DCW 0x8f4d,0xc351, 0x2cf7,0x77d8, 0x9f98,0x5433
+        DCW 0x8f95,0xc2cc, 0x2cc8,0x77e9, 0x9f56,0x53e7
+        DCW 0x8fdd,0xc248, 0x2c99,0x77fb, 0x9f14,0x539b
+        DCW 0x9026,0xc1c4, 0x2c6a,0x780c, 0x9ed2,0x534f
+        DCW 0x9070,0xc140, 0x2c3b,0x781e, 0x9e91,0x5303
+        DCW 0x90ba,0xc0bd, 0x2c0c,0x782f, 0x9e50,0x52b6
+        DCW 0x9105,0xc03a, 0x2bdc,0x7840, 0x9e0f,0x5269
+        DCW 0x9150,0xbfb8, 0x2bad,0x7851, 0x9dce,0x521c
+        DCW 0x919c,0xbf35, 0x2b7e,0x7863, 0x9d8e,0x51cf
+        DCW 0x91e9,0xbeb3, 0x2b4f,0x7874, 0x9d4e,0x5181
+        DCW 0x9236,0xbe32, 0x2b1f,0x7885, 0x9d0e,0x5134
+        DCW 0x9284,0xbdb1, 0x2af0,0x7895, 0x9cce,0x50e6
+        DCW 0x92d2,0xbd30, 0x2ac1,0x78a6, 0x9c8f,0x5098
+        DCW 0x9321,0xbcaf, 0x2a91,0x78b7, 0x9c50,0x504a
+        DCW 0x9371,0xbc2f, 0x2a62,0x78c8, 0x9c11,0x4ffb
+        DCW 0x93c1,0xbbb0, 0x2a32,0x78d8, 0x9bd2,0x4fad
+        DCW 0x9412,0xbb30, 0x2a03,0x78e9, 0x9b94,0x4f5e
+        DCW 0x9463,0xbab1, 0x29d3,0x78f9, 0x9b55,0x4f0f
+        DCW 0x94b5,0xba33, 0x29a4,0x790a, 0x9b17,0x4ec0
+        DCW 0x9508,0xb9b5, 0x2974,0x791a, 0x9ada,0x4e71
+        DCW 0x955b,0xb937, 0x2945,0x792a, 0x9a9c,0x4e21
+        DCW 0x95ae,0xb8b9, 0x2915,0x793a, 0x9a5f,0x4dd1
+        DCW 0x9603,0xb83c, 0x28e5,0x794a, 0x9a22,0x4d81
+        DCW 0x9657,0xb7c0, 0x28b6,0x795b, 0x99e5,0x4d31
+        DCW 0x96ad,0xb743, 0x2886,0x796a, 0x99a9,0x4ce1
+        DCW 0x9703,0xb6c7, 0x2856,0x797a, 0x996d,0x4c91
+        DCW 0x9759,0xb64c, 0x2827,0x798a, 0x9930,0x4c40
+        DCW 0x97b0,0xb5d1, 0x27f7,0x799a, 0x98f5,0x4bef
+        DCW 0x9808,0xb556, 0x27c7,0x79aa, 0x98b9,0x4b9e
+        DCW 0x9860,0xb4dc, 0x2797,0x79b9, 0x987e,0x4b4d
+        DCW 0x98b9,0xb462, 0x2768,0x79c9, 0x9843,0x4afb
+        DCW 0x9913,0xb3e9, 0x2738,0x79d8, 0x9808,0x4aaa
+        DCW 0x996d,0xb36f, 0x2708,0x79e7, 0x97ce,0x4a58
+        DCW 0x99c7,0xb2f7, 0x26d8,0x79f7, 0x9793,0x4a06
+        DCW 0x9a22,0xb27f, 0x26a8,0x7a06, 0x9759,0x49b4
+        DCW 0x9a7e,0xb207, 0x2678,0x7a15, 0x9720,0x4962
+        DCW 0x9ada,0xb18f, 0x2648,0x7a24, 0x96e6,0x490f
+        DCW 0x9b36,0xb118, 0x2618,0x7a33, 0x96ad,0x48bd
+        DCW 0x9b94,0xb0a2, 0x25e8,0x7a42, 0x9674,0x486a
+        DCW 0x9bf1,0xb02c, 0x25b8,0x7a51, 0x963b,0x4817
+        DCW 0x9c50,0xafb6, 0x2588,0x7a60, 0x9603,0x47c4
+        DCW 0x9caf,0xaf41, 0x2558,0x7a6e, 0x95ca,0x4770
+        DCW 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d
+        DCW 0x9d6e,0xae58, 0x24f8,0x7a8c, 0x955b,0x46c9
+        DCW 0x9dce,0xade4, 0x24c8,0x7a9a, 0x9523,0x4675
+        DCW 0x9e2f,0xad70, 0x2498,0x7aa8, 0x94ec,0x4621
+        DCW 0x9e91,0xacfd, 0x2467,0x7ab7, 0x94b5,0x45cd
+        DCW 0x9ef3,0xac8b, 0x2437,0x7ac5, 0x947e,0x4579
+        DCW 0x9f56,0xac19, 0x2407,0x7ad3, 0x9448,0x4524
+        DCW 0x9fb9,0xaba7, 0x23d7,0x7ae1, 0x9412,0x44d0
+        DCW 0xa01c,0xab36, 0x23a7,0x7aef, 0x93dc,0x447b
+        DCW 0xa080,0xaac5, 0x2376,0x7afd, 0x93a6,0x4426
+        DCW 0xa0e5,0xaa55, 0x2346,0x7b0b, 0x9371,0x43d1
+        DCW 0xa14a,0xa9e5, 0x2316,0x7b19, 0x933c,0x437b
+        DCW 0xa1b0,0xa976, 0x22e5,0x7b27, 0x9307,0x4326
+        DCW 0xa216,0xa907, 0x22b5,0x7b34, 0x92d2,0x42d0
+        DCW 0xa27d,0xa899, 0x2284,0x7b42, 0x929e,0x427a
+        DCW 0xa2e4,0xa82b, 0x2254,0x7b50, 0x926a,0x4224
+        DCW 0xa34c,0xa7bd, 0x2224,0x7b5d, 0x9236,0x41ce
+        DCW 0xa3b4,0xa750, 0x21f3,0x7b6a, 0x9202,0x4178
+        DCW 0xa41d,0xa6e4, 0x21c3,0x7b78, 0x91cf,0x4121
+        DCW 0xa486,0xa678, 0x2192,0x7b85, 0x919c,0x40cb
+        DCW 0xa4f0,0xa60c, 0x2162,0x7b92, 0x9169,0x4074
+        DCW 0xa55a,0xa5a1, 0x2131,0x7b9f, 0x9137,0x401d
+        DCW 0xa5c5,0xa537, 0x2101,0x7bac, 0x9105,0x3fc6
+        DCW 0xa630,0xa4cc, 0x20d0,0x7bb9, 0x90d3,0x3f6f
+        DCW 0xa69c,0xa463, 0x209f,0x7bc6, 0x90a1,0x3f17
+        DCW 0xa708,0xa3fa, 0x206f,0x7bd3, 0x9070,0x3ec0
+        DCW 0xa774,0xa391, 0x203e,0x7bdf, 0x903e,0x3e68
+        DCW 0xa7e2,0xa329, 0x200e,0x7bec, 0x900e,0x3e10
+        DCW 0xa84f,0xa2c2, 0x1fdd,0x7bf9, 0x8fdd,0x3db8
+        DCW 0xa8bd,0xa25b, 0x1fac,0x7c05, 0x8fad,0x3d60
+        DCW 0xa92c,0xa1f4, 0x1f7b,0x7c11, 0x8f7d,0x3d08
+        DCW 0xa99b,0xa18e, 0x1f4b,0x7c1e, 0x8f4d,0x3caf
+        DCW 0xaa0a,0xa129, 0x1f1a,0x7c2a, 0x8f1d,0x3c57
+        DCW 0xaa7a,0xa0c4, 0x1ee9,0x7c36, 0x8eee,0x3bfe
+        DCW 0xaaeb,0xa05f, 0x1eb8,0x7c42, 0x8ebf,0x3ba5
+        DCW 0xab5c,0x9ffb, 0x1e88,0x7c4e, 0x8e90,0x3b4c
+        DCW 0xabcd,0x9f98, 0x1e57,0x7c5a, 0x8e62,0x3af3
+        DCW 0xac3f,0x9f35, 0x1e26,0x7c66, 0x8e34,0x3a9a
+        DCW 0xacb1,0x9ed2, 0x1df5,0x7c72, 0x8e06,0x3a40
+        DCW 0xad24,0x9e70, 0x1dc4,0x7c7e, 0x8dd8,0x39e7
+        DCW 0xad97,0x9e0f, 0x1d93,0x7c89, 0x8dab,0x398d
+        DCW 0xae0b,0x9dae, 0x1d62,0x7c95, 0x8d7e,0x3933
+        DCW 0xae7f,0x9d4e, 0x1d31,0x7ca0, 0x8d51,0x38d9
+        DCW 0xaef3,0x9cee, 0x1d01,0x7cac, 0x8d24,0x387f
+        DCW 0xaf68,0x9c8f, 0x1cd0,0x7cb7, 0x8cf8,0x3825
+        DCW 0xafdd,0x9c30, 0x1c9f,0x7cc2, 0x8ccc,0x37ca
+        DCW 0xb053,0x9bd2, 0x1c6e,0x7cce, 0x8ca1,0x3770
+        DCW 0xb0c9,0x9b75, 0x1c3d,0x7cd9, 0x8c75,0x3715
+        DCW 0xb140,0x9b17, 0x1c0c,0x7ce4, 0x8c4a,0x36ba
+        DCW 0xb1b7,0x9abb, 0x1bda,0x7cef, 0x8c1f,0x365f
+        DCW 0xb22f,0x9a5f, 0x1ba9,0x7cfa, 0x8bf5,0x3604
+        DCW 0xb2a7,0x9a04, 0x1b78,0x7d05, 0x8bca,0x35a9
+        DCW 0xb31f,0x99a9, 0x1b47,0x7d0f, 0x8ba0,0x354e
+        DCW 0xb398,0x994e, 0x1b16,0x7d1a, 0x8b77,0x34f2
+        DCW 0xb411,0x98f5, 0x1ae5,0x7d25, 0x8b4d,0x3497
+        DCW 0xb48b,0x989c, 0x1ab4,0x7d2f, 0x8b24,0x343b
+        DCW 0xb505,0x9843, 0x1a83,0x7d3a, 0x8afb,0x33df
+        DCW 0xb57f,0x97eb, 0x1a51,0x7d44, 0x8ad3,0x3383
+        DCW 0xb5fa,0x9793, 0x1a20,0x7d4e, 0x8aaa,0x3327
+        DCW 0xb675,0x973c, 0x19ef,0x7d58, 0x8a82,0x32cb
+        DCW 0xb6f1,0x96e6, 0x19be,0x7d63, 0x8a5a,0x326e
+        DCW 0xb76d,0x9690, 0x198d,0x7d6d, 0x8a33,0x3212
+        DCW 0xb7e9,0x963b, 0x195b,0x7d77, 0x8a0c,0x31b5
+        DCW 0xb866,0x95e6, 0x192a,0x7d81, 0x89e5,0x3159
+        DCW 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc
+        DCW 0xb961,0x953f, 0x18c7,0x7d94, 0x8998,0x309f
+        DCW 0xb9df,0x94ec, 0x1896,0x7d9e, 0x8972,0x3042
+        DCW 0xba5d,0x949a, 0x1865,0x7da7, 0x894c,0x2fe5
+        DCW 0xbadc,0x9448, 0x1833,0x7db1, 0x8927,0x2f87
+        DCW 0xbb5b,0x93f7, 0x1802,0x7dba, 0x8902,0x2f2a
+        DCW 0xbbda,0x93a6, 0x17d1,0x7dc4, 0x88dd,0x2ecc
+        DCW 0xbc5a,0x9356, 0x179f,0x7dcd, 0x88b8,0x2e6f
+        DCW 0xbcda,0x9307, 0x176e,0x7dd6, 0x8894,0x2e11
+        DCW 0xbd5b,0x92b8, 0x173c,0x7de0, 0x8870,0x2db3
+        DCW 0xbddc,0x926a, 0x170b,0x7de9, 0x884c,0x2d55
+        DCW 0xbe5d,0x921c, 0x16da,0x7df2, 0x8828,0x2cf7
+        DCW 0xbedf,0x91cf, 0x16a8,0x7dfb, 0x8805,0x2c99
+        DCW 0xbf61,0x9183, 0x1677,0x7e03, 0x87e2,0x2c3b
+        DCW 0xbfe3,0x9137, 0x1645,0x7e0c, 0x87c0,0x2bdc
+        DCW 0xc066,0x90ec, 0x1614,0x7e15, 0x879d,0x2b7e
+        DCW 0xc0e9,0x90a1, 0x15e2,0x7e1e, 0x877b,0x2b1f
+        DCW 0xc16c,0x9057, 0x15b1,0x7e26, 0x875a,0x2ac1
+        DCW 0xc1f0,0x900e, 0x157f,0x7e2f, 0x8738,0x2a62
+        DCW 0xc274,0x8fc5, 0x154d,0x7e37, 0x8717,0x2a03
+        DCW 0xc2f8,0x8f7d, 0x151c,0x7e3f, 0x86f6,0x29a4
+        DCW 0xc37d,0x8f35, 0x14ea,0x7e48, 0x86d6,0x2945
+        DCW 0xc402,0x8eee, 0x14b9,0x7e50, 0x86b6,0x28e5
+        DCW 0xc487,0x8ea8, 0x1487,0x7e58, 0x8696,0x2886
+        DCW 0xc50d,0x8e62, 0x1455,0x7e60, 0x8676,0x2827
+        DCW 0xc593,0x8e1d, 0x1424,0x7e68, 0x8656,0x27c7
+        DCW 0xc619,0x8dd8, 0x13f2,0x7e70, 0x8637,0x2768
+        DCW 0xc6a0,0x8d94, 0x13c1,0x7e78, 0x8619,0x2708
+        DCW 0xc727,0x8d51, 0x138f,0x7e7f, 0x85fa,0x26a8
+        DCW 0xc7ae,0x8d0e, 0x135d,0x7e87, 0x85dc,0x2648
+        DCW 0xc836,0x8ccc, 0x132b,0x7e8e, 0x85be,0x25e8
+        DCW 0xc8be,0x8c8b, 0x12fa,0x7e96, 0x85a0,0x2588
+        DCW 0xc946,0x8c4a, 0x12c8,0x7e9d, 0x8583,0x2528
+        DCW 0xc9ce,0x8c0a, 0x1296,0x7ea5, 0x8566,0x24c8
+        DCW 0xca57,0x8bca, 0x1265,0x7eac, 0x8549,0x2467
+        DCW 0xcae0,0x8b8b, 0x1233,0x7eb3, 0x852d,0x2407
+        DCW 0xcb69,0x8b4d, 0x1201,0x7eba, 0x8511,0x23a7
+        DCW 0xcbf3,0x8b10, 0x11cf,0x7ec1, 0x84f5,0x2346
+        DCW 0xcc7d,0x8ad3, 0x119e,0x7ec8, 0x84d9,0x22e5
+        DCW 0xcd07,0x8a96, 0x116c,0x7ecf, 0x84be,0x2284
+        DCW 0xcd92,0x8a5a, 0x113a,0x7ed6, 0x84a3,0x2224
+        DCW 0xce1c,0x8a1f, 0x1108,0x7edd, 0x8488,0x21c3
+        DCW 0xcea7,0x89e5, 0x10d6,0x7ee3, 0x846e,0x2162
+        DCW 0xcf33,0x89ab, 0x10a4,0x7eea, 0x8454,0x2101
+        DCW 0xcfbe,0x8972, 0x1073,0x7ef0, 0x843a,0x209f
+        DCW 0xd04a,0x8939, 0x1041,0x7ef7, 0x8421,0x203e
+        DCW 0xd0d6,0x8902, 0x100f,0x7efd, 0x8407,0x1fdd
+        DCW 0xd162,0x88ca, 0x0fdd,0x7f03, 0x83ef,0x1f7b
+        DCW 0xd1ef,0x8894, 0x0fab,0x7f0a, 0x83d6,0x1f1a
+        DCW 0xd27c,0x885e, 0x0f79,0x7f10, 0x83be,0x1eb8
+        DCW 0xd309,0x8828, 0x0f47,0x7f16, 0x83a6,0x1e57
+        DCW 0xd396,0x87f4, 0x0f15,0x7f1c, 0x838e,0x1df5
+        DCW 0xd424,0x87c0, 0x0ee4,0x7f22, 0x8377,0x1d93
+        DCW 0xd4b1,0x878c, 0x0eb2,0x7f27, 0x8360,0x1d31
+        DCW 0xd53f,0x875a, 0x0e80,0x7f2d, 0x8349,0x1cd0
+        DCW 0xd5ce,0x8728, 0x0e4e,0x7f33, 0x8332,0x1c6e
+        DCW 0xd65c,0x86f6, 0x0e1c,0x7f38, 0x831c,0x1c0c
+        DCW 0xd6eb,0x86c6, 0x0dea,0x7f3e, 0x8306,0x1ba9
+        DCW 0xd77a,0x8696, 0x0db8,0x7f43, 0x82f1,0x1b47
+        DCW 0xd809,0x8666, 0x0d86,0x7f49, 0x82db,0x1ae5
+        DCW 0xd898,0x8637, 0x0d54,0x7f4e, 0x82c6,0x1a83
+        DCW 0xd928,0x8609, 0x0d22,0x7f53, 0x82b2,0x1a20
+        DCW 0xd9b8,0x85dc, 0x0cf0,0x7f58, 0x829d,0x19be
+        DCW 0xda48,0x85af, 0x0cbe,0x7f5d, 0x8289,0x195b
+        DCW 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9
+        DCW 0xdb68,0x8558, 0x0c5a,0x7f67, 0x8262,0x1896
+        DCW 0xdbf9,0x852d, 0x0c28,0x7f6c, 0x824f,0x1833
+        DCW 0xdc8a,0x8503, 0x0bf6,0x7f71, 0x823c,0x17d1
+        DCW 0xdd1b,0x84d9, 0x0bc4,0x7f75, 0x822a,0x176e
+        DCW 0xddac,0x84b0, 0x0b92,0x7f7a, 0x8217,0x170b
+        DCW 0xde3d,0x8488, 0x0b60,0x7f7e, 0x8205,0x16a8
+        DCW 0xdecf,0x8461, 0x0b2d,0x7f83, 0x81f4,0x1645
+        DCW 0xdf61,0x843a, 0x0afb,0x7f87, 0x81e2,0x15e2
+        DCW 0xdff2,0x8414, 0x0ac9,0x7f8b, 0x81d1,0x157f
+        DCW 0xe085,0x83ef, 0x0a97,0x7f90, 0x81c1,0x151c
+        DCW 0xe117,0x83ca, 0x0a65,0x7f94, 0x81b0,0x14b9
+        DCW 0xe1a9,0x83a6, 0x0a33,0x7f98, 0x81a0,0x1455
+        DCW 0xe23c,0x8382, 0x0a01,0x7f9c, 0x8190,0x13f2
+        DCW 0xe2cf,0x8360, 0x09cf,0x7fa0, 0x8181,0x138f
+        DCW 0xe361,0x833e, 0x099d,0x7fa3, 0x8172,0x132b
+        DCW 0xe3f4,0x831c, 0x096b,0x7fa7, 0x8163,0x12c8
+        DCW 0xe488,0x82fb, 0x0938,0x7fab, 0x8154,0x1265
+        DCW 0xe51b,0x82db, 0x0906,0x7fae, 0x8146,0x1201
+        DCW 0xe5af,0x82bc, 0x08d4,0x7fb2, 0x8138,0x119e
+        DCW 0xe642,0x829d, 0x08a2,0x7fb5, 0x812a,0x113a
+        DCW 0xe6d6,0x827f, 0x0870,0x7fb9, 0x811d,0x10d6
+        DCW 0xe76a,0x8262, 0x083e,0x7fbc, 0x8110,0x1073
+        DCW 0xe7fe,0x8246, 0x080c,0x7fbf, 0x8103,0x100f
+        DCW 0xe892,0x822a, 0x07d9,0x7fc2, 0x80f6,0x0fab
+        DCW 0xe926,0x820e, 0x07a7,0x7fc5, 0x80ea,0x0f47
+        DCW 0xe9bb,0x81f4, 0x0775,0x7fc8, 0x80de,0x0ee4
+        DCW 0xea4f,0x81da, 0x0743,0x7fcb, 0x80d3,0x0e80
+        DCW 0xeae4,0x81c1, 0x0711,0x7fce, 0x80c8,0x0e1c
+        DCW 0xeb79,0x81a8, 0x06de,0x7fd1, 0x80bd,0x0db8
+        DCW 0xec0e,0x8190, 0x06ac,0x7fd3, 0x80b2,0x0d54
+        DCW 0xeca3,0x8179, 0x067a,0x7fd6, 0x80a8,0x0cf0
+        DCW 0xed38,0x8163, 0x0648,0x7fd9, 0x809e,0x0c8c
+        DCW 0xedcd,0x814d, 0x0616,0x7fdb, 0x8094,0x0c28
+        DCW 0xee62,0x8138, 0x05e3,0x7fdd, 0x808b,0x0bc4
+        DCW 0xeef8,0x8123, 0x05b1,0x7fe0, 0x8082,0x0b60
+        DCW 0xef8d,0x8110, 0x057f,0x7fe2, 0x8079,0x0afb
+        DCW 0xf023,0x80fd, 0x054d,0x7fe4, 0x8070,0x0a97
+        DCW 0xf0b9,0x80ea, 0x051b,0x7fe6, 0x8068,0x0a33
+        DCW 0xf14e,0x80d9, 0x04e8,0x7fe8, 0x8060,0x09cf
+        DCW 0xf1e4,0x80c8, 0x04b6,0x7fea, 0x8059,0x096b
+        DCW 0xf27a,0x80b7, 0x0484,0x7fec, 0x8052,0x0906
+        DCW 0xf310,0x80a8, 0x0452,0x7fed, 0x804b,0x08a2
+        DCW 0xf3a6,0x8099, 0x041f,0x7fef, 0x8044,0x083e
+        DCW 0xf43c,0x808b, 0x03ed,0x7ff1, 0x803e,0x07d9
+        DCW 0xf4d3,0x807d, 0x03bb,0x7ff2, 0x8038,0x0775
+        DCW 0xf569,0x8070, 0x0389,0x7ff4, 0x8032,0x0711
+        DCW 0xf5ff,0x8064, 0x0356,0x7ff5, 0x802d,0x06ac
+        DCW 0xf695,0x8059, 0x0324,0x7ff6, 0x8027,0x0648
+        DCW 0xf72c,0x804e, 0x02f2,0x7ff7, 0x8023,0x05e3
+        DCW 0xf7c2,0x8044, 0x02c0,0x7ff8, 0x801e,0x057f
+        DCW 0xf859,0x803b, 0x028d,0x7ff9, 0x801a,0x051b
+        DCW 0xf8ef,0x8032, 0x025b,0x7ffa, 0x8016,0x04b6
+        DCW 0xf986,0x802a, 0x0229,0x7ffb, 0x8013,0x0452
+        DCW 0xfa1d,0x8023, 0x01f7,0x7ffc, 0x800f,0x03ed
+        DCW 0xfab3,0x801c, 0x01c4,0x7ffd, 0x800c,0x0389
+        DCW 0xfb4a,0x8016, 0x0192,0x7ffe, 0x800a,0x0324
+        DCW 0xfbe1,0x8011, 0x0160,0x7ffe, 0x8008,0x02c0
+        DCW 0xfc77,0x800c, 0x012e,0x7fff, 0x8006,0x025b
+        DCW 0xfd0e,0x8009, 0x00fb,0x7fff, 0x8004,0x01f7
+        DCW 0xfda5,0x8006, 0x00c9,0x7fff, 0x8002,0x0192
+        DCW 0xfe3c,0x8003, 0x0097,0x7fff, 0x8001,0x012e
+        DCW 0xfed2,0x8001, 0x0065,0x7fff, 0x8001,0x00c9
+        DCW 0xff69,0x8000, 0x0032,0x7fff, 0x8000,0x0065
+        end
+
diff -r 000000000000 -r 90ade34a3b71 cr4_fft_1024_stm32.s
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cr4_fft_1024_stm32.s	Sun Dec 13 07:14:57 2009 +0000
@@ -0,0 +1,651 @@
+;******************** (C) COPYRIGHT 2009  STMicroelectronics ********************
+;* File Name          : cr4_fft_1024_stm32.s
+;* Author             : MCD Application Team
+;* Version            : V2.0.0
+;* Date               : 04/27/2009
+;* Description        : Optimized 1024-point radix-4 complex FFT for Cortex-M3
+;********************************************************************************
+;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+;* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+;*******************************************************************************/
+
+;    THUMB
+      REQUIRE8
+    PRESERVE8
+
+    AREA |.text|, CODE, READONLY, ALIGN=2
+                
+    EXPORT cr4_fft_1024_stm32      
+    EXTERN TableFFT
+
+
+pssK          RN R0
+pssOUT        RN R0
+pssX          RN R1
+pssIN         RN R1
+butternbr     RN R2
+Nbin          RN R2
+index         RN R3
+Ar            RN R4
+Ai            RN R5
+Br            RN R6
+Bi            RN R7
+Cr            RN R8
+Ci            RN R9
+Dr            RN R10
+Di            RN R11
+cntrbitrev     RN R12
+tmp           RN R12
+pssIN2        RN R14
+tmp2          RN R14
+
+NPT EQU 1024
+
+;----------------------------- MACROS ----------------------------------------
+     
+         MACRO
+         DEC  $reg
+         SUB  $reg,$reg,#1
+         MEND
+
+         MACRO
+         INC  $reg
+         ADD  $reg,$reg,#1
+         MEND
+
+
+          MACRO
+         QUAD  $reg
+         MOV  $reg,$reg,LSL#2
+         MEND
+
+;sXi = *(PssX+1); sXr = *PssX; PssX += offset; PssX= R1
+
+          MACRO
+          LDR2Q  $sXr,$sXi, $PssX, $offset
+          LDRSH $sXi, [$PssX, #2]
+          LDRSH $sXr, [$PssX]
+          ADD $PssX, $PssX, $offset
+          MEND
+
+;!! Same macro, to be used when passing negative offset value !!
+        MACRO
+        LDR2Qm  $sXr, $sXi, $PssX, $offset
+        LDRSH $sXi, [$PssX, #2]
+        LDRSH $sXr, [$PssX]
+        SUB $PssX, $PssX, $offset
+        MEND
+
+;(PssX+1)= sXi;  *PssX=sXr; PssX += offset;
+        MACRO
+        STR2Q  $sXr, $sXi, $PssX, $offset
+        STRH  $sXi, [$PssX, #2]
+        STRH  $sXr, [$PssX]
+        ADD $PssX, $PssX, $offset
+        MEND
+
+; YY = Cplx_conjugate_mul(Y,K)
+;  Y = YYr + i*YYi
+; use the following trick
+;  K = (Kr-Ki) + i*Ki
+        MACRO
+        CXMUL_V7  $YYr, $YYi, $Yr, $Yi, $Kr, $Ki,$tmp,$tmp2
+        SUB  $tmp2, $Yi, $Yr         ; sYi-sYr
+        MUL  $tmp, $tmp2, $Ki        ; (sYi-sYr)*sKi
+        ADD  $tmp2, $Kr, $Ki, LSL#1  ; (sKr+sKi)
+        MLA  $YYi, $Yi, $Kr, $tmp     ; lYYi = sYi*sKr-sYr*sKi
+        MLA  $YYr, $Yr, $tmp2, $tmp   ; lYYr = sYr*sKr+sYi*sKi
+        MEND
+
+; Four point complex Fast Fourier Transform        
+        MACRO
+        CXADDA4  $s
+        ; (C,D) = (C+D, C-D)
+        ADD     Cr, Cr, Dr
+        ADD     Ci, Ci, Di
+        SUB     Dr, Cr, Dr, LSL#1
+        SUB     Di, Ci, Di, LSL#1
+        ; (A,B) = (A+(B>>s), A-(B>>s))/4
+        MOV     Ar, Ar, ASR#2
+        MOV     Ai, Ai, ASR#2
+        ADD     Ar, Ar, Br, ASR#(2+$s)
+        ADD     Ai, Ai, Bi, ASR#(2+$s)
+        SUB     Br, Ar, Br, ASR#(1+$s)
+        SUB     Bi, Ai, Bi, ASR#(1+$s)
+        ; (A,C) = (A+(C>>s)/4, A-(C>>s)/4)
+        ADD     Ar, Ar, Cr, ASR#(2+$s)
+        ADD     Ai, Ai, Ci, ASR#(2+$s)
+        SUB     Cr, Ar, Cr, ASR#(1+$s)
+        SUB     Ci, Ai, Ci, ASR#(1+$s)
+        ; (B,D) = (B-i*(D>>s)/4, B+i*(D>>s)/4)
+        ADD     Br, Br, Di, ASR#(2+$s)
+        SUB     Bi, Bi, Dr, ASR#(2+$s)
+        SUB     Di, Br, Di, ASR#(1+$s)
+        ADD     Dr, Bi, Dr, ASR#(1+$s)
+        MEND
+
+        
+        MACRO
+        BUTFLY4ZERO_OPT  $pIN,$offset, $pOUT
+        LDRSH Ai, [$pIN, #2]
+        LDRSH Ar, [$pIN]
+        ADD   $pIN, #NPT
+        LDRSH Ci, [$pIN, #2]
+        LDRSH Cr, [$pIN]
+        ADD   $pIN, #NPT
+        LDRSH Bi, [$pIN, #2]
+        LDRSH Br, [$pIN]
+        ADD   $pIN, #NPT
+        LDRSH Di, [$pIN, #2]
+        LDRSH Dr, [$pIN]
+        ADD   $pIN, #NPT
+
+        ; (C,D) = (C+D, C-D)
+        ADD     Cr, Cr, Dr
+        ADD     Ci, Ci, Di
+        SUB     Dr, Cr, Dr, LSL#1  ; trick
+        SUB     Di, Ci, Di, LSL#1  ;trick
+        ; (A,B) = (A+B)/4, (A-B)/4
+        MOV     Ar, Ar, ASR#2
+        MOV     Ai, Ai, ASR#2
+        ADD     Ar, Ar, Br, ASR#2
+        ADD     Ai, Ai, Bi, ASR#2
+        SUB     Br, Ar, Br, ASR#1
+        SUB     Bi, Ai, Bi, ASR#1
+        ; (A,C) = (A+C)/4, (A-C)/4
+        ADD     Ar, Ar, Cr, ASR#2
+        ADD     Ai, Ai, Ci, ASR#2
+        SUB     Cr, Ar, Cr, ASR#1
+        SUB     Ci, Ai, Ci, ASR#1
+        ; (B,D) = (B-i*D)/4, (B+i*D)/4
+        ADD     Br, Br, Di, ASR#2
+        SUB     Bi, Bi, Dr, ASR#2
+        SUB     Di, Br, Di, ASR#1
+        ADD     Dr, Bi, Dr, ASR#1
+        ;
+        STRH    Ai, [$pOUT, #2]
+        STRH    Ar, [$pOUT], #4
+        STRH    Bi, [$pOUT, #2]
+        STRH    Br, [$pOUT], #4
+        STRH    Ci, [$pOUT, #2]
+        STRH    Cr, [$pOUT], #4
+        STRH    Dr, [$pOUT, #2]  ; inversion here
+        STRH    Di, [$pOUT], #4
+        MEND
+
+        MACRO
+        BUTFLY4_V7   $pssDin,$offset,$pssDout,$qformat,$pssK
+        LDR2Qm   Ar,Ai,$pssDin, $offset;-$offset
+        LDR2Q    Dr,Di,$pssK, #4
+        ; format CXMUL_V7 YYr, YYi, Yr, Yi, Kr, Ki,tmp,tmp2
+        CXMUL_V7 Dr,Di,Ar,Ai,Dr,Di,tmp,tmp2
+        LDR2Qm   Ar,Ai,$pssDin,$offset;-$offset
+        LDR2Q    Cr,Ci,$pssK,#4
+        CXMUL_V7 Cr,Ci,Ar,Ai,Cr,Ci,tmp,tmp2
+        LDR2Qm    Ar,Ai, $pssDin, $offset;-$offset
+        LDR2Q    Br,Bi, $pssK, #4
+        CXMUL_V7  Br,Bi,Ar,Ai,Br,Bi,tmp,tmp2
+        LDR2Q    Ar,Ai, $pssDin, #0
+        CXADDA4  $qformat
+        STRH    Ai, [$pssDout, #2]
+        STRH    Ar, [$pssDout]
+        ADD     $pssDout, $pssDout, $offset
+        STRH    Bi, [$pssDout, #2]
+        STRH    Br, [$pssDout]
+        ADD     $pssDout, $pssDout, $offset
+        STRH    Ci, [$pssDout, #2]
+        STRH    Cr, [$pssDout]
+        ADD     $pssDout, $pssDout, $offset
+        STRH    Dr, [$pssDout, #2]  ; inversion here
+        STRH    Di, [$pssDout], #4
+        MEND
+
+;-------------------             CODE             --------------------------------
+;===============================================================================
+;*******************************************************************************
+;* Function Name  : cr4_fft_1024_stm32
+;* Description    : complex radix-4 1024 points FFT
+;* Input          : - R0 = pssOUT: Output array .
+;*                  - R1 = pssIN: Input array 
+;*                  - R2 = Nbin: =1024 number of points, this optimized FFT function  
+;*                    can only convert 1024 points.
+;* Output         : None 
+;* Return         : None
+;*******************************************************************************
+cr4_fft_1024_stm32
+
+        STMFD   SP!, {R4-R11, LR}
+        
+        MOV cntrbitrev, #0
+        MOV index,#0
+        
+preloop_v7
+        ADD     pssIN2, pssIN, cntrbitrev, LSR#22 ;1024-pts
+        BUTFLY4ZERO_OPT pssIN2,Nbin,pssOUT
+        INC index
+     IF :DEF:TARGET_LPC1768        
+        RBIT cntrbitrev,index
+     ELSE
+        ; add 1 to cntrbitrev "backwards"
+        ; start looking from top, toggling all bits until we hit a 0,
+        ; which we toggle to 1 and then stop
+        ; tmp2 = 0x80000000;
+        ; bit1 = true;
+        ; while ( bit1 ) {
+        ;    bit1 = (cntrbitrev & tmp2) != 0;
+        ;    cntrbitrev ^= tmp2;
+        ;    if ( bit1 ) tmp2 <= 1;
+        ; }
+        MOV   tmp2, #(1<<31)
+Lrev        
+        TST   cntrbitrev, tmp2  ; is the current bit set?
+        EOR   cntrbitrev, tmp2  ; toggle it regardless of result
+        MOVNE tmp2, tmp2, LSR#1 ; if set, shift mask
+        BNE   Lrev              ; and loop again        
+     ENDIF
+        CMP index,#256  ;1024-pts
+        BNE  preloop_v7
+
+
+        SUB     pssX, pssOUT, Nbin, LSL#2
+        MOV     index, #16
+        MOVS    butternbr, Nbin, LSR#4   ;dual use of register 
+        
+;------------------------------------------------------------------------------
+;   The FFT coefficients table can be stored into Flash or RAM. 
+;   The following two lines of code allow selecting the method for coefficients 
+;   storage. 
+;   In the case of choosing coefficients in RAM, you have to:
+;   1. Include the file table_fft.h, which is a part of the DSP library, 
+;      in your main file.
+;   2. Decomment the line LDR.W pssK, =TableFFT and comment the line 
+;      ADRL    pssK, TableFFT_V7
+;   3. Comment all the TableFFT_V7 data.
+;------------------------------------------------------------------------------
+        ADR    pssK, TableFFT_V7    ; Coeff in Flash 
+        ;LDR.W pssK, =TableFFT      ; Coeff in RAM 
+
+;................................
+passloop_v7
+        STMFD   SP!, {pssX,butternbr}
+        ADD     tmp, index, index, LSL#1
+        ADD     pssX, pssX, tmp
+        SUB     butternbr, butternbr, #1<<16
+;................
+grouploop_v7
+        ADD     butternbr,butternbr,index,LSL#(16-2)
+;.......
+butterloop_v7
+        BUTFLY4_V7  pssX,index,pssX,14,pssK
+        SUBS        butternbr,butternbr, #1<<16
+        BGE     butterloop_v7
+;.......
+        ADD     tmp, index, index, LSL#1
+        ADD     pssX, pssX, tmp
+        DEC     butternbr
+        MOVS    tmp2, butternbr, LSL#16
+        IT      NE
+        SUBNE   pssK, pssK, tmp
+        BNE     grouploop_v7
+;................
+        LDMFD   sp!, {pssX, butternbr}
+        QUAD    index
+        MOVS    butternbr, butternbr, LSR#2    ; loop nbr /= radix 
+        BNE     passloop_v7
+;................................
+       LDMFD   SP!, {R4-R11, PC}
+
+;=============================================================================
+
+TableFFT_V7
+        ;N=16
+        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
+        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
+        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
+        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
+        ; N=64
+        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
+        DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
+        DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
+        DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
+        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
+        DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
+        DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
+        DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
+        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
+        DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
+        DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
+        DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
+        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
+        DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
+        DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
+        DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
+        ; N=256
+        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
+        DCW 0x3b1e,0x04b5, 0x3e69,0x0192, 0x3cc8,0x0324
+        DCW 0x35eb,0x0964, 0x3cc8,0x0324, 0x396b,0x0646
+        DCW 0x306c,0x0e06, 0x3b1e,0x04b5, 0x35eb,0x0964
+        DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
+        DCW 0x24ae,0x1709, 0x37af,0x07d6, 0x2e88,0x0f8d
+        DCW 0x1e7e,0x1b5d, 0x35eb,0x0964, 0x2aaa,0x1294
+        DCW 0x1824,0x1f8c, 0x341e,0x0af1, 0x26b3,0x1590
+        DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
+        DCW 0x0b14,0x2760, 0x306c,0x0e06, 0x1e7e,0x1b5d
+        DCW 0x0471,0x2afb, 0x2e88,0x0f8d, 0x1a46,0x1e2b
+        DCW 0xfdc7,0x2e5a, 0x2c9d,0x1112, 0x15fe,0x20e7
+        DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
+        DCW 0xf087,0x3453, 0x28b2,0x1413, 0x0d48,0x2620
+        DCW 0xea02,0x36e5, 0x26b3,0x1590, 0x08df,0x289a
+        DCW 0xe39c,0x392b, 0x24ae,0x1709, 0x0471,0x2afb
+        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
+        DCW 0xd74e,0x3cc5, 0x2093,0x19ef, 0xfb8f,0x2f6c
+        DCW 0xd178,0x3e15, 0x1e7e,0x1b5d, 0xf721,0x3179
+        DCW 0xcbe2,0x3f0f, 0x1c64,0x1cc6, 0xf2b8,0x3368
+        DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
+        DCW 0xc197,0x3ffb, 0x1824,0x1f8c, 0xea02,0x36e5
+        DCW 0xbcf0,0x3fec, 0x15fe,0x20e7, 0xe5ba,0x3871
+        DCW 0xb8a6,0x3f85, 0x13d5,0x223d, 0xe182,0x39db
+        DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
+        DCW 0xb140,0x3daf, 0x0f79,0x24da, 0xd94d,0x3c42
+        DCW 0xae2e,0x3c42, 0x0d48,0x2620, 0xd556,0x3d3f
+        DCW 0xab8e,0x3a82, 0x0b14,0x2760, 0xd178,0x3e15
+        DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
+        DCW 0xa7b1,0x3612, 0x06a9,0x29ce, 0xca15,0x3f4f
+        DCW 0xa678,0x3368, 0x0471,0x2afb, 0xc695,0x3fb1
+        DCW 0xa5bc,0x3076, 0x0239,0x2c21, 0xc338,0x3fec
+        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
+        DCW 0xa5bc,0x29ce, 0xfdc7,0x2e5a, 0xbcf0,0x3fec
+        DCW 0xa678,0x2620, 0xfb8f,0x2f6c, 0xba09,0x3fb1
+        DCW 0xa7b1,0x223d, 0xf957,0x3076, 0xb74d,0x3f4f
+        DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
+        DCW 0xab8e,0x19ef, 0xf4ec,0x3274, 0xb25e,0x3e15
+        DCW 0xae2e,0x1590, 0xf2b8,0x3368, 0xb02d,0x3d3f
+        DCW 0xb140,0x1112, 0xf087,0x3453, 0xae2e,0x3c42
+        DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
+        DCW 0xb8a6,0x07d6, 0xec2b,0x3612, 0xaac8,0x39db
+        DCW 0xbcf0,0x0324, 0xea02,0x36e5, 0xa963,0x3871
+        DCW 0xc197,0xfe6e, 0xe7dc,0x37b0, 0xa834,0x36e5
+        DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
+        DCW 0xcbe2,0xf50f, 0xe39c,0x392b, 0xa678,0x3368
+        DCW 0xd178,0xf073, 0xe182,0x39db, 0xa5ed,0x3179
+        DCW 0xd74e,0xebed, 0xdf6d,0x3a82, 0xa599,0x2f6c
+        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
+        DCW 0xe39c,0xe33a, 0xdb52,0x3bb6, 0xa599,0x2afb
+        DCW 0xea02,0xdf19, 0xd94d,0x3c42, 0xa5ed,0x289a
+        DCW 0xf087,0xdb26, 0xd74e,0x3cc5, 0xa678,0x2620
+        DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
+        DCW 0xfdc7,0xd3df, 0xd363,0x3daf, 0xa834,0x20e7
+        DCW 0x0471,0xd094, 0xd178,0x3e15, 0xa963,0x1e2b
+        DCW 0x0b14,0xcd8c, 0xcf94,0x3e72, 0xaac8,0x1b5d
+        DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
+        DCW 0x1824,0xc850, 0xcbe2,0x3f0f, 0xae2e,0x1590
+        DCW 0x1e7e,0xc625, 0xca15,0x3f4f, 0xb02d,0x1294
+        DCW 0x24ae,0xc44a, 0xc851,0x3f85, 0xb25e,0x0f8d
+        DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
+        DCW 0x306c,0xc18e, 0xc4e2,0x3fd4, 0xb74d,0x0964
+        DCW 0x35eb,0xc0b1, 0xc338,0x3fec, 0xba09,0x0646
+        DCW 0x3b1e,0xc02c, 0xc197,0x3ffb, 0xbcf0,0x0324
+        ; N=1024
+        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
+        DCW 0x3ed0,0x012e, 0x3f9b,0x0065, 0x3f36,0x00c9
+        DCW 0x3d9a,0x025b, 0x3f36,0x00c9, 0x3e69,0x0192
+        DCW 0x3c5f,0x0388, 0x3ed0,0x012e, 0x3d9a,0x025b
+        DCW 0x3b1e,0x04b5, 0x3e69,0x0192, 0x3cc8,0x0324
+        DCW 0x39d9,0x05e2, 0x3e02,0x01f7, 0x3bf4,0x03ed
+        DCW 0x388e,0x070e, 0x3d9a,0x025b, 0x3b1e,0x04b5
+        DCW 0x373f,0x0839, 0x3d31,0x02c0, 0x3a46,0x057e
+        DCW 0x35eb,0x0964, 0x3cc8,0x0324, 0x396b,0x0646
+        DCW 0x3492,0x0a8e, 0x3c5f,0x0388, 0x388e,0x070e
+        DCW 0x3334,0x0bb7, 0x3bf4,0x03ed, 0x37af,0x07d6
+        DCW 0x31d2,0x0cdf, 0x3b8a,0x0451, 0x36ce,0x089d
+        DCW 0x306c,0x0e06, 0x3b1e,0x04b5, 0x35eb,0x0964
+        DCW 0x2f02,0x0f2b, 0x3ab2,0x051a, 0x3505,0x0a2b
+        DCW 0x2d93,0x1050, 0x3a46,0x057e, 0x341e,0x0af1
+        DCW 0x2c21,0x1173, 0x39d9,0x05e2, 0x3334,0x0bb7
+        DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
+        DCW 0x2931,0x13b4, 0x38fd,0x06aa, 0x315b,0x0d41
+        DCW 0x27b3,0x14d2, 0x388e,0x070e, 0x306c,0x0e06
+        DCW 0x2632,0x15ee, 0x381f,0x0772, 0x2f7b,0x0eca
+        DCW 0x24ae,0x1709, 0x37af,0x07d6, 0x2e88,0x0f8d
+        DCW 0x2326,0x1821, 0x373f,0x0839, 0x2d93,0x1050
+        DCW 0x219c,0x1937, 0x36ce,0x089d, 0x2c9d,0x1112
+        DCW 0x200e,0x1a4b, 0x365d,0x0901, 0x2ba4,0x11d3
+        DCW 0x1e7e,0x1b5d, 0x35eb,0x0964, 0x2aaa,0x1294
+        DCW 0x1ceb,0x1c6c, 0x3578,0x09c7, 0x29af,0x1354
+        DCW 0x1b56,0x1d79, 0x3505,0x0a2b, 0x28b2,0x1413
+        DCW 0x19be,0x1e84, 0x3492,0x0a8e, 0x27b3,0x14d2
+        DCW 0x1824,0x1f8c, 0x341e,0x0af1, 0x26b3,0x1590
+        DCW 0x1688,0x2091, 0x33a9,0x0b54, 0x25b1,0x164c
+        DCW 0x14ea,0x2193, 0x3334,0x0bb7, 0x24ae,0x1709
+        DCW 0x134a,0x2292, 0x32bf,0x0c1a, 0x23a9,0x17c4
+        DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
+        DCW 0x1005,0x2488, 0x31d2,0x0cdf, 0x219c,0x1937
+        DCW 0x0e61,0x257e, 0x315b,0x0d41, 0x2093,0x19ef
+        DCW 0x0cbb,0x2671, 0x30e4,0x0da4, 0x1f89,0x1aa7
+        DCW 0x0b14,0x2760, 0x306c,0x0e06, 0x1e7e,0x1b5d
+        DCW 0x096d,0x284c, 0x2ff4,0x0e68, 0x1d72,0x1c12
+        DCW 0x07c4,0x2935, 0x2f7b,0x0eca, 0x1c64,0x1cc6
+        DCW 0x061b,0x2a1a, 0x2f02,0x0f2b, 0x1b56,0x1d79
+        DCW 0x0471,0x2afb, 0x2e88,0x0f8d, 0x1a46,0x1e2b
+        DCW 0x02c7,0x2bd8, 0x2e0e,0x0fee, 0x1935,0x1edc
+        DCW 0x011c,0x2cb2, 0x2d93,0x1050, 0x1824,0x1f8c
+        DCW 0xff72,0x2d88, 0x2d18,0x10b1, 0x1711,0x203a
+        DCW 0xfdc7,0x2e5a, 0x2c9d,0x1112, 0x15fe,0x20e7
+        DCW 0xfc1d,0x2f28, 0x2c21,0x1173, 0x14ea,0x2193
+        DCW 0xfa73,0x2ff2, 0x2ba4,0x11d3, 0x13d5,0x223d
+        DCW 0xf8ca,0x30b8, 0x2b28,0x1234, 0x12bf,0x22e7
+        DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
+        DCW 0xf579,0x3236, 0x2a2d,0x12f4, 0x1091,0x2435
+        DCW 0xf3d2,0x32ef, 0x29af,0x1354, 0x0f79,0x24da
+        DCW 0xf22c,0x33a3, 0x2931,0x13b4, 0x0e61,0x257e
+        DCW 0xf087,0x3453, 0x28b2,0x1413, 0x0d48,0x2620
+        DCW 0xeee3,0x34ff, 0x2833,0x1473, 0x0c2e,0x26c1
+        DCW 0xed41,0x35a5, 0x27b3,0x14d2, 0x0b14,0x2760
+        DCW 0xeba1,0x3648, 0x2733,0x1531, 0x09fa,0x27fe
+        DCW 0xea02,0x36e5, 0x26b3,0x1590, 0x08df,0x289a
+        DCW 0xe865,0x377e, 0x2632,0x15ee, 0x07c4,0x2935
+        DCW 0xe6cb,0x3812, 0x25b1,0x164c, 0x06a9,0x29ce
+        DCW 0xe532,0x38a1, 0x252f,0x16ab, 0x058d,0x2a65
+        DCW 0xe39c,0x392b, 0x24ae,0x1709, 0x0471,0x2afb
+        DCW 0xe208,0x39b0, 0x242b,0x1766, 0x0355,0x2b8f
+        DCW 0xe077,0x3a30, 0x23a9,0x17c4, 0x0239,0x2c21
+        DCW 0xdee9,0x3aab, 0x2326,0x1821, 0x011c,0x2cb2
+        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
+        DCW 0xdbd5,0x3b92, 0x221f,0x18db, 0xfee4,0x2dcf
+        DCW 0xda4f,0x3bfd, 0x219c,0x1937, 0xfdc7,0x2e5a
+        DCW 0xd8cd,0x3c64, 0x2117,0x1993, 0xfcab,0x2ee4
+        DCW 0xd74e,0x3cc5, 0x2093,0x19ef, 0xfb8f,0x2f6c
+        DCW 0xd5d3,0x3d21, 0x200e,0x1a4b, 0xfa73,0x2ff2
+        DCW 0xd45c,0x3d78, 0x1f89,0x1aa7, 0xf957,0x3076
+        DCW 0xd2e8,0x3dc9, 0x1f04,0x1b02, 0xf83c,0x30f9
+        DCW 0xd178,0x3e15, 0x1e7e,0x1b5d, 0xf721,0x3179
+        DCW 0xd00c,0x3e5c, 0x1df8,0x1bb8, 0xf606,0x31f8
+        DCW 0xcea5,0x3e9d, 0x1d72,0x1c12, 0xf4ec,0x3274
+        DCW 0xcd41,0x3ed8, 0x1ceb,0x1c6c, 0xf3d2,0x32ef
+        DCW 0xcbe2,0x3f0f, 0x1c64,0x1cc6, 0xf2b8,0x3368
+        DCW 0xca88,0x3f40, 0x1bdd,0x1d20, 0xf19f,0x33df
+        DCW 0xc932,0x3f6b, 0x1b56,0x1d79, 0xf087,0x3453
+        DCW 0xc7e1,0x3f91, 0x1ace,0x1dd3, 0xef6f,0x34c6
+        DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
+        DCW 0xc54e,0x3fcc, 0x19be,0x1e84, 0xed41,0x35a5
+        DCW 0xc40c,0x3fe1, 0x1935,0x1edc, 0xec2b,0x3612
+        DCW 0xc2cf,0x3ff1, 0x18ad,0x1f34, 0xeb16,0x367d
+        DCW 0xc197,0x3ffb, 0x1824,0x1f8c, 0xea02,0x36e5
+        DCW 0xc065,0x4000, 0x179b,0x1fe3, 0xe8ef,0x374b
+        DCW 0xbf38,0x3fff, 0x1711,0x203a, 0xe7dc,0x37b0
+        DCW 0xbe11,0x3ff8, 0x1688,0x2091, 0xe6cb,0x3812
+        DCW 0xbcf0,0x3fec, 0x15fe,0x20e7, 0xe5ba,0x3871
+        DCW 0xbbd4,0x3fdb, 0x1574,0x213d, 0xe4aa,0x38cf
+        DCW 0xbabf,0x3fc4, 0x14ea,0x2193, 0xe39c,0x392b
+        DCW 0xb9af,0x3fa7, 0x145f,0x21e8, 0xe28e,0x3984
+        DCW 0xb8a6,0x3f85, 0x13d5,0x223d, 0xe182,0x39db
+        DCW 0xb7a2,0x3f5d, 0x134a,0x2292, 0xe077,0x3a30
+        DCW 0xb6a5,0x3f30, 0x12bf,0x22e7, 0xdf6d,0x3a82
+        DCW 0xb5af,0x3efd, 0x1234,0x233b, 0xde64,0x3ad3
+        DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
+        DCW 0xb3d5,0x3e88, 0x111d,0x23e2, 0xdc57,0x3b6d
+        DCW 0xb2f2,0x3e45, 0x1091,0x2435, 0xdb52,0x3bb6
+        DCW 0xb215,0x3dfc, 0x1005,0x2488, 0xda4f,0x3bfd
+        DCW 0xb140,0x3daf, 0x0f79,0x24da, 0xd94d,0x3c42
+        DCW 0xb071,0x3d5b, 0x0eed,0x252c, 0xd84d,0x3c85
+        DCW 0xafa9,0x3d03, 0x0e61,0x257e, 0xd74e,0x3cc5
+        DCW 0xaee8,0x3ca5, 0x0dd4,0x25cf, 0xd651,0x3d03
+        DCW 0xae2e,0x3c42, 0x0d48,0x2620, 0xd556,0x3d3f
+        DCW 0xad7b,0x3bda, 0x0cbb,0x2671, 0xd45c,0x3d78
+        DCW 0xacd0,0x3b6d, 0x0c2e,0x26c1, 0xd363,0x3daf
+        DCW 0xac2b,0x3afa, 0x0ba1,0x2711, 0xd26d,0x3de3
+        DCW 0xab8e,0x3a82, 0x0b14,0x2760, 0xd178,0x3e15
+        DCW 0xaaf8,0x3a06, 0x0a87,0x27af, 0xd085,0x3e45
+        DCW 0xaa6a,0x3984, 0x09fa,0x27fe, 0xcf94,0x3e72
+        DCW 0xa9e3,0x38fd, 0x096d,0x284c, 0xcea5,0x3e9d
+        DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
+        DCW 0xa8eb,0x37e1, 0x0852,0x28e7, 0xcccc,0x3eeb
+        DCW 0xa87b,0x374b, 0x07c4,0x2935, 0xcbe2,0x3f0f
+        DCW 0xa812,0x36b1, 0x0736,0x2981, 0xcafb,0x3f30
+        DCW 0xa7b1,0x3612, 0x06a9,0x29ce, 0xca15,0x3f4f
+        DCW 0xa757,0x356e, 0x061b,0x2a1a, 0xc932,0x3f6b
+        DCW 0xa705,0x34c6, 0x058d,0x2a65, 0xc851,0x3f85
+        DCW 0xa6bb,0x3419, 0x04ff,0x2ab0, 0xc772,0x3f9c
+        DCW 0xa678,0x3368, 0x0471,0x2afb, 0xc695,0x3fb1
+        DCW 0xa63e,0x32b2, 0x03e3,0x2b45, 0xc5ba,0x3fc4
+        DCW 0xa60b,0x31f8, 0x0355,0x2b8f, 0xc4e2,0x3fd4
+        DCW 0xa5e0,0x3139, 0x02c7,0x2bd8, 0xc40c,0x3fe1
+        DCW 0xa5bc,0x3076, 0x0239,0x2c21, 0xc338,0x3fec
+        DCW 0xa5a1,0x2faf, 0x01aa,0x2c6a, 0xc266,0x3ff5
+        DCW 0xa58d,0x2ee4, 0x011c,0x2cb2, 0xc197,0x3ffb
+        DCW 0xa581,0x2e15, 0x008e,0x2cfa, 0xc0ca,0x3fff
+        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
+        DCW 0xa581,0x2c6a, 0xff72,0x2d88, 0xbf38,0x3fff
+        DCW 0xa58d,0x2b8f, 0xfee4,0x2dcf, 0xbe73,0x3ffb
+        DCW 0xa5a1,0x2ab0, 0xfe56,0x2e15, 0xbdb0,0x3ff5
+        DCW 0xa5bc,0x29ce, 0xfdc7,0x2e5a, 0xbcf0,0x3fec
+        DCW 0xa5e0,0x28e7, 0xfd39,0x2e9f, 0xbc32,0x3fe1
+        DCW 0xa60b,0x27fe, 0xfcab,0x2ee4, 0xbb77,0x3fd4
+        DCW 0xa63e,0x2711, 0xfc1d,0x2f28, 0xbabf,0x3fc4
+        DCW 0xa678,0x2620, 0xfb8f,0x2f6c, 0xba09,0x3fb1
+        DCW 0xa6bb,0x252c, 0xfb01,0x2faf, 0xb956,0x3f9c
+        DCW 0xa705,0x2435, 0xfa73,0x2ff2, 0xb8a6,0x3f85
+        DCW 0xa757,0x233b, 0xf9e5,0x3034, 0xb7f8,0x3f6b
+        DCW 0xa7b1,0x223d, 0xf957,0x3076, 0xb74d,0x3f4f
+        DCW 0xa812,0x213d, 0xf8ca,0x30b8, 0xb6a5,0x3f30
+        DCW 0xa87b,0x203a, 0xf83c,0x30f9, 0xb600,0x3f0f
+        DCW 0xa8eb,0x1f34, 0xf7ae,0x3139, 0xb55e,0x3eeb
+        DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
+        DCW 0xa9e3,0x1d20, 0xf693,0x31b9, 0xb422,0x3e9d
+        DCW 0xaa6a,0x1c12, 0xf606,0x31f8, 0xb388,0x3e72
+        DCW 0xaaf8,0x1b02, 0xf579,0x3236, 0xb2f2,0x3e45
+        DCW 0xab8e,0x19ef, 0xf4ec,0x3274, 0xb25e,0x3e15
+        DCW 0xac2b,0x18db, 0xf45f,0x32b2, 0xb1cd,0x3de3
+        DCW 0xacd0,0x17c4, 0xf3d2,0x32ef, 0xb140,0x3daf
+        DCW 0xad7b,0x16ab, 0xf345,0x332c, 0xb0b5,0x3d78
+        DCW 0xae2e,0x1590, 0xf2b8,0x3368, 0xb02d,0x3d3f
+        DCW 0xaee8,0x1473, 0xf22c,0x33a3, 0xafa9,0x3d03
+        DCW 0xafa9,0x1354, 0xf19f,0x33df, 0xaf28,0x3cc5
+        DCW 0xb071,0x1234, 0xf113,0x3419, 0xaea9,0x3c85
+        DCW 0xb140,0x1112, 0xf087,0x3453, 0xae2e,0x3c42
+        DCW 0xb215,0x0fee, 0xeffb,0x348d, 0xadb6,0x3bfd
+        DCW 0xb2f2,0x0eca, 0xef6f,0x34c6, 0xad41,0x3bb6
+        DCW 0xb3d5,0x0da4, 0xeee3,0x34ff, 0xacd0,0x3b6d
+        DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
+        DCW 0xb5af,0x0b54, 0xedcc,0x356e, 0xabf6,0x3ad3
+        DCW 0xb6a5,0x0a2b, 0xed41,0x35a5, 0xab8e,0x3a82
+        DCW 0xb7a2,0x0901, 0xecb6,0x35dc, 0xab29,0x3a30
+        DCW 0xb8a6,0x07d6, 0xec2b,0x3612, 0xaac8,0x39db
+        DCW 0xb9af,0x06aa, 0xeba1,0x3648, 0xaa6a,0x3984
+        DCW 0xbabf,0x057e, 0xeb16,0x367d, 0xaa0f,0x392b
+        DCW 0xbbd4,0x0451, 0xea8c,0x36b1, 0xa9b7,0x38cf
+        DCW 0xbcf0,0x0324, 0xea02,0x36e5, 0xa963,0x3871
+        DCW 0xbe11,0x01f7, 0xe978,0x3718, 0xa912,0x3812
+        DCW 0xbf38,0x00c9, 0xe8ef,0x374b, 0xa8c5,0x37b0
+        DCW 0xc065,0xff9b, 0xe865,0x377e, 0xa87b,0x374b
+        DCW 0xc197,0xfe6e, 0xe7dc,0x37b0, 0xa834,0x36e5
+        DCW 0xc2cf,0xfd40, 0xe753,0x37e1, 0xa7f1,0x367d
+        DCW 0xc40c,0xfc13, 0xe6cb,0x3812, 0xa7b1,0x3612
+        DCW 0xc54e,0xfae6, 0xe642,0x3842, 0xa774,0x35a5
+        DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
+        DCW 0xc7e1,0xf88e, 0xe532,0x38a1, 0xa705,0x34c6
+        DCW 0xc932,0xf763, 0xe4aa,0x38cf, 0xa6d3,0x3453
+        DCW 0xca88,0xf639, 0xe423,0x38fd, 0xa6a4,0x33df
+        DCW 0xcbe2,0xf50f, 0xe39c,0x392b, 0xa678,0x3368
+        DCW 0xcd41,0xf3e6, 0xe315,0x3958, 0xa650,0x32ef
+        DCW 0xcea5,0xf2bf, 0xe28e,0x3984, 0xa62c,0x3274
+        DCW 0xd00c,0xf198, 0xe208,0x39b0, 0xa60b,0x31f8
+        DCW 0xd178,0xf073, 0xe182,0x39db, 0xa5ed,0x3179
+        DCW 0xd2e8,0xef4f, 0xe0fc,0x3a06, 0xa5d3,0x30f9
+        DCW 0xd45c,0xee2d, 0xe077,0x3a30, 0xa5bc,0x3076
+        DCW 0xd5d3,0xed0c, 0xdff2,0x3a59, 0xa5a9,0x2ff2
+        DCW 0xd74e,0xebed, 0xdf6d,0x3a82, 0xa599,0x2f6c
+        DCW 0xd8cd,0xeacf, 0xdee9,0x3aab, 0xa58d,0x2ee4
+        DCW 0xda4f,0xe9b4, 0xde64,0x3ad3, 0xa585,0x2e5a
+        DCW 0xdbd5,0xe89a, 0xdde1,0x3afa, 0xa57f,0x2dcf
+        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
+        DCW 0xdee9,0xe66d, 0xdcda,0x3b47, 0xa57f,0x2cb2
+        DCW 0xe077,0xe559, 0xdc57,0x3b6d, 0xa585,0x2c21
+        DCW 0xe208,0xe448, 0xdbd5,0x3b92, 0xa58d,0x2b8f
+        DCW 0xe39c,0xe33a, 0xdb52,0x3bb6, 0xa599,0x2afb
+        DCW 0xe532,0xe22d, 0xdad1,0x3bda, 0xa5a9,0x2a65
+        DCW 0xe6cb,0xe124, 0xda4f,0x3bfd, 0xa5bc,0x29ce
+        DCW 0xe865,0xe01d, 0xd9ce,0x3c20, 0xa5d3,0x2935
+        DCW 0xea02,0xdf19, 0xd94d,0x3c42, 0xa5ed,0x289a
+        DCW 0xeba1,0xde18, 0xd8cd,0x3c64, 0xa60b,0x27fe
+        DCW 0xed41,0xdd19, 0xd84d,0x3c85, 0xa62c,0x2760
+        DCW 0xeee3,0xdc1e, 0xd7cd,0x3ca5, 0xa650,0x26c1
+        DCW 0xf087,0xdb26, 0xd74e,0x3cc5, 0xa678,0x2620
+        DCW 0xf22c,0xda31, 0xd6cf,0x3ce4, 0xa6a4,0x257e
+        DCW 0xf3d2,0xd93f, 0xd651,0x3d03, 0xa6d3,0x24da
+        DCW 0xf579,0xd851, 0xd5d3,0x3d21, 0xa705,0x2435
+        DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
+        DCW 0xf8ca,0xd67f, 0xd4d8,0x3d5b, 0xa774,0x22e7
+        DCW 0xfa73,0xd59b, 0xd45c,0x3d78, 0xa7b1,0x223d
+        DCW 0xfc1d,0xd4bb, 0xd3df,0x3d93, 0xa7f1,0x2193
+        DCW 0xfdc7,0xd3df, 0xd363,0x3daf, 0xa834,0x20e7
+        DCW 0xff72,0xd306, 0xd2e8,0x3dc9, 0xa87b,0x203a
+        DCW 0x011c,0xd231, 0xd26d,0x3de3, 0xa8c5,0x1f8c
+        DCW 0x02c7,0xd161, 0xd1f2,0x3dfc, 0xa912,0x1edc
+        DCW 0x0471,0xd094, 0xd178,0x3e15, 0xa963,0x1e2b
+        DCW 0x061b,0xcfcc, 0xd0fe,0x3e2d, 0xa9b7,0x1d79
+        DCW 0x07c4,0xcf07, 0xd085,0x3e45, 0xaa0f,0x1cc6
+        DCW 0x096d,0xce47, 0xd00c,0x3e5c, 0xaa6a,0x1c12
+        DCW 0x0b14,0xcd8c, 0xcf94,0x3e72, 0xaac8,0x1b5d
+        DCW 0x0cbb,0xccd4, 0xcf1c,0x3e88, 0xab29,0x1aa7
+        DCW 0x0e61,0xcc21, 0xcea5,0x3e9d, 0xab8e,0x19ef
+        DCW 0x1005,0xcb73, 0xce2e,0x3eb1, 0xabf6,0x1937
+        DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
+        DCW 0x134a,0xca24, 0xcd41,0x3ed8, 0xacd0,0x17c4
+        DCW 0x14ea,0xc983, 0xcccc,0x3eeb, 0xad41,0x1709
+        DCW 0x1688,0xc8e8, 0xcc57,0x3efd, 0xadb6,0x164c
+        DCW 0x1824,0xc850, 0xcbe2,0x3f0f, 0xae2e,0x1590
+        DCW 0x19be,0xc7be, 0xcb6e,0x3f20, 0xaea9,0x14d2
+        DCW 0x1b56,0xc731, 0xcafb,0x3f30, 0xaf28,0x1413
+        DCW 0x1ceb,0xc6a8, 0xca88,0x3f40, 0xafa9,0x1354
+        DCW 0x1e7e,0xc625, 0xca15,0x3f4f, 0xb02d,0x1294
+        DCW 0x200e,0xc5a7, 0xc9a3,0x3f5d, 0xb0b5,0x11d3
+        DCW 0x219c,0xc52d, 0xc932,0x3f6b, 0xb140,0x1112
+        DCW 0x2326,0xc4b9, 0xc8c1,0x3f78, 0xb1cd,0x1050
+        DCW 0x24ae,0xc44a, 0xc851,0x3f85, 0xb25e,0x0f8d
+        DCW 0x2632,0xc3e0, 0xc7e1,0x3f91, 0xb2f2,0x0eca
+        DCW 0x27b3,0xc37b, 0xc772,0x3f9c, 0xb388,0x0e06
+        DCW 0x2931,0xc31c, 0xc703,0x3fa7, 0xb422,0x0d41
+        DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
+        DCW 0x2c21,0xc26d, 0xc627,0x3fbb, 0xb55e,0x0bb7
+        DCW 0x2d93,0xc21d, 0xc5ba,0x3fc4, 0xb600,0x0af1
+        DCW 0x2f02,0xc1d3, 0xc54e,0x3fcc, 0xb6a5,0x0a2b
+        DCW 0x306c,0xc18e, 0xc4e2,0x3fd4, 0xb74d,0x0964
+        DCW 0x31d2,0xc14f, 0xc476,0x3fdb, 0xb7f8,0x089d
+        DCW 0x3334,0xc115, 0xc40c,0x3fe1, 0xb8a6,0x07d6
+        DCW 0x3492,0xc0e0, 0xc3a1,0x3fe7, 0xb956,0x070e
+        DCW 0x35eb,0xc0b1, 0xc338,0x3fec, 0xba09,0x0646
+        DCW 0x373f,0xc088, 0xc2cf,0x3ff1, 0xbabf,0x057e
+        DCW 0x388e,0xc064, 0xc266,0x3ff5, 0xbb77,0x04b5
+        DCW 0x39d9,0xc045, 0xc1fe,0x3ff8, 0xbc32,0x03ed
+        DCW 0x3b1e,0xc02c, 0xc197,0x3ffb, 0xbcf0,0x0324
+        DCW 0x3c5f,0xc019, 0xc130,0x3ffd, 0xbdb0,0x025b
+        DCW 0x3d9a,0xc00b, 0xc0ca,0x3fff, 0xbe73,0x0192
+        DCW 0x3ed0,0xc003, 0xc065,0x4000, 0xbf38,0x00c9
+        
+       END
+;******************* (C) COPYRIGHT 2009  STMicroelectronics *****END OF FILE****
diff -r 000000000000 -r 90ade34a3b71 cr4_fft_256_stm32.s
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cr4_fft_256_stm32.s	Sun Dec 13 07:14:57 2009 +0000
@@ -0,0 +1,395 @@
+;******************** (C) COPYRIGHT 2009  STMicroelectronics ********************
+;* File Name          : cr4_fft_256_stm32.s
+;* Author             : MCD Application Team
+;* Version            : V2.0.0
+;* Date               : 04/27/2009
+;* Description        : Optimized 256-point radix-4 complex FFT for Cortex-M3
+;********************************************************************************
+;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+;* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+;*******************************************************************************/
+
+;    THUMB
+      REQUIRE8
+    PRESERVE8
+
+    AREA |.text|, CODE, READONLY, ALIGN=2
+                
+    EXPORT cr4_fft_256_stm32      
+    EXTERN TableFFT
+
+
+pssK          RN R0
+pssOUT        RN R0
+pssX          RN R1
+pssIN         RN R1
+butternbr     RN R2
+Nbin          RN R2
+index         RN R3
+Ar            RN R4
+Ai            RN R5
+Br            RN R6
+Bi            RN R7
+Cr            RN R8
+Ci            RN R9
+Dr            RN R10
+Di            RN R11
+cntrbitrev     RN R12
+tmp           RN R12
+pssIN2        RN R14
+tmp2          RN R14
+
+NPT EQU 256
+
+;----------------------------- MACROS ----------------------------------------
+     
+         MACRO
+         DEC  $reg
+         SUB  $reg,$reg,#1
+         MEND
+
+         MACRO
+         INC  $reg
+         ADD  $reg,$reg,#1
+         MEND
+
+
+          MACRO
+         QUAD  $reg
+         MOV  $reg,$reg,LSL#2
+         MEND
+
+;sXi = *(PssX+1); sXr = *PssX; PssX += offset; PssX= R1
+
+          MACRO
+          LDR2Q  $sXr,$sXi, $PssX, $offset
+          LDRSH $sXi, [$PssX, #2]
+          LDRSH $sXr, [$PssX]
+          ADD $PssX, $PssX, $offset
+          MEND
+
+;!! Same macro, to be used when passing negative offset value !!
+        MACRO
+        LDR2Qm  $sXr, $sXi, $PssX, $offset
+        LDRSH $sXi, [$PssX, #2]
+        LDRSH $sXr, [$PssX]
+        SUB $PssX, $PssX, $offset
+        MEND
+
+;(PssX+1)= sXi;  *PssX=sXr; PssX += offset;
+        MACRO
+        STR2Q  $sXr, $sXi, $PssX, $offset
+        STRH  $sXi, [$PssX, #2]
+        STRH  $sXr, [$PssX]
+        ADD $PssX, $PssX, $offset
+        MEND
+
+; YY = Cplx_conjugate_mul(Y,K)
+;  Y = YYr + i*YYi
+; use the following trick
+;  K = (Kr-Ki) + i*Ki
+        MACRO
+        CXMUL_V7  $YYr, $YYi, $Yr, $Yi, $Kr, $Ki,$tmp,$tmp2
+        SUB  $tmp2, $Yi, $Yr         ; sYi-sYr
+        MUL  $tmp, $tmp2, $Ki        ; (sYi-sYr)*sKi
+        ADD  $tmp2, $Kr, $Ki, LSL#1  ; (sKr+sKi)
+        MLA  $YYi, $Yi, $Kr, $tmp     ; lYYi = sYi*sKr-sYr*sKi
+        MLA  $YYr, $Yr, $tmp2, $tmp   ; lYYr = sYr*sKr+sYi*sKi
+        MEND
+
+; Four point complex Fast Fourier Transform        
+        MACRO
+        CXADDA4  $s
+        ; (C,D) = (C+D, C-D)
+        ADD     Cr, Cr, Dr
+        ADD     Ci, Ci, Di
+        SUB     Dr, Cr, Dr, LSL#1
+        SUB     Di, Ci, Di, LSL#1
+        ; (A,B) = (A+(B>>s), A-(B>>s))/4
+        MOV     Ar, Ar, ASR#2
+        MOV     Ai, Ai, ASR#2
+        ADD     Ar, Ar, Br, ASR#(2+$s)
+        ADD     Ai, Ai, Bi, ASR#(2+$s)
+        SUB     Br, Ar, Br, ASR#(1+$s)
+        SUB     Bi, Ai, Bi, ASR#(1+$s)
+        ; (A,C) = (A+(C>>s)/4, A-(C>>s)/4)
+        ADD     Ar, Ar, Cr, ASR#(2+$s)
+        ADD     Ai, Ai, Ci, ASR#(2+$s)
+        SUB     Cr, Ar, Cr, ASR#(1+$s)
+        SUB     Ci, Ai, Ci, ASR#(1+$s)
+        ; (B,D) = (B-i*(D>>s)/4, B+i*(D>>s)/4)
+        ADD     Br, Br, Di, ASR#(2+$s)
+        SUB     Bi, Bi, Dr, ASR#(2+$s)
+        SUB     Di, Br, Di, ASR#(1+$s)
+        ADD     Dr, Bi, Dr, ASR#(1+$s)
+        MEND
+
+        
+        MACRO
+        BUTFLY4ZERO_OPT  $pIN,$offset, $pOUT
+        LDRSH Ai, [$pIN, #2]
+        LDRSH Ar, [$pIN]
+        ADD   $pIN, #NPT
+        LDRSH Ci, [$pIN, #2]
+        LDRSH Cr, [$pIN]
+        ADD   $pIN, #NPT
+        LDRSH Bi, [$pIN, #2]
+        LDRSH Br, [$pIN]
+        ADD   $pIN, #NPT
+        LDRSH Di, [$pIN, #2]
+        LDRSH Dr, [$pIN]
+        ADD   $pIN, #NPT
+
+        ; (C,D) = (C+D, C-D)
+        ADD     Cr, Cr, Dr
+        ADD     Ci, Ci, Di
+        SUB     Dr, Cr, Dr, LSL#1  ; trick
+        SUB     Di, Ci, Di, LSL#1  ;trick
+        ; (A,B) = (A+B)/4, (A-B)/4
+        MOV     Ar, Ar, ASR#2
+        MOV     Ai, Ai, ASR#2
+        ADD     Ar, Ar, Br, ASR#2
+        ADD     Ai, Ai, Bi, ASR#2
+        SUB     Br, Ar, Br, ASR#1
+        SUB     Bi, Ai, Bi, ASR#1
+        ; (A,C) = (A+C)/4, (A-C)/4
+        ADD     Ar, Ar, Cr, ASR#2
+        ADD     Ai, Ai, Ci, ASR#2
+        SUB     Cr, Ar, Cr, ASR#1
+        SUB     Ci, Ai, Ci, ASR#1
+        ; (B,D) = (B-i*D)/4, (B+i*D)/4
+        ADD     Br, Br, Di, ASR#2
+        SUB     Bi, Bi, Dr, ASR#2
+        SUB     Di, Br, Di, ASR#1
+        ADD     Dr, Bi, Dr, ASR#1
+        ;
+        STRH    Ai, [$pOUT, #2]
+        STRH    Ar, [$pOUT], #4
+        STRH    Bi, [$pOUT, #2]
+        STRH    Br, [$pOUT], #4
+        STRH    Ci, [$pOUT, #2]
+        STRH    Cr, [$pOUT], #4
+        STRH    Dr, [$pOUT, #2]  ; inversion here
+        STRH    Di, [$pOUT], #4
+        MEND
+
+        MACRO
+        BUTFLY4_V7   $pssDin,$offset,$pssDout,$qformat,$pssK
+        LDR2Qm   Ar,Ai,$pssDin, $offset;-$offset
+        LDR2Q    Dr,Di,$pssK, #4
+        ; format CXMUL_V7 YYr, YYi, Yr, Yi, Kr, Ki,tmp,tmp2
+        CXMUL_V7 Dr,Di,Ar,Ai,Dr,Di,tmp,tmp2
+        LDR2Qm   Ar,Ai,$pssDin,$offset;-$offset
+        LDR2Q    Cr,Ci,$pssK,#4
+        CXMUL_V7 Cr,Ci,Ar,Ai,Cr,Ci,tmp,tmp2
+        LDR2Qm    Ar,Ai, $pssDin, $offset;-$offset
+        LDR2Q    Br,Bi, $pssK, #4
+        CXMUL_V7  Br,Bi,Ar,Ai,Br,Bi,tmp,tmp2
+        LDR2Q    Ar,Ai, $pssDin, #0
+        CXADDA4  $qformat
+        STRH    Ai, [$pssDout, #2]
+        STRH    Ar, [$pssDout]
+        ADD     $pssDout, $pssDout, $offset
+        STRH    Bi, [$pssDout, #2]
+        STRH    Br, [$pssDout]
+        ADD     $pssDout, $pssDout, $offset
+        STRH    Ci, [$pssDout, #2]
+        STRH    Cr, [$pssDout]
+        ADD     $pssDout, $pssDout, $offset
+        STRH    Dr, [$pssDout, #2]  ; inversion here
+        STRH    Di, [$pssDout], #4
+        MEND
+
+;-------------------             CODE             --------------------------------
+;===============================================================================
+;*******************************************************************************
+;* Function Name  : cr4_fft_256_stm32
+;* Description    : complex radix-4 256 points FFT
+;* Input          : - R0 = pssOUT: Output array .
+;*                  - R1 = pssIN: Input array 
+;*                  - R2 = Nbin: =256 number of points, this optimized FFT function  
+;*                    can only convert 256 points.
+;* Output         : None 
+;* Return         : None
+;*******************************************************************************
+cr4_fft_256_stm32
+
+        STMFD   SP!, {R4-R11, LR}
+        
+        MOV cntrbitrev, #0
+        MOV index,#0
+        
+preloop_v7
+        ADD     pssIN2, pssIN, cntrbitrev, LSR#24 ;256-pts
+        BUTFLY4ZERO_OPT pssIN2,Nbin,pssOUT
+        INC index
+     IF :DEF:TARGET_LPC1768        
+        RBIT cntrbitrev,index
+     ELSE
+        ; add 1 to cntrbitrev "backwards"
+        ; start looking from top, toggling all bits until we hit a 0,
+        ; which we toggle to 1 and then stop
+        ; tmp2 = 0x80000000;
+        ; bit1 = true;
+        ; while ( bit1 ) {
+        ;    bit1 = (cntrbitrev & tmp2) != 0;
+        ;    cntrbitrev ^= tmp2;
+        ;    if ( bit1 ) tmp2 <= 1;
+        ; }
+        MOV   tmp2, #(1<<31)
+Lrev        
+        TST   cntrbitrev, tmp2  ; is the current bit set?
+        EOR   cntrbitrev, tmp2  ; toggle it regardless of result
+        MOVNE tmp2, tmp2, LSR#1 ; if set, shift mask
+        BNE   Lrev              ; and loop again        
+     ENDIF
+     
+        CMP index,#64  ;256-pts
+        BNE  preloop_v7
+
+
+        SUB     pssX, pssOUT, Nbin, LSL#2
+        MOV     index, #16
+        MOVS    butternbr, Nbin, LSR#4   ;dual use of register 
+        
+;------------------------------------------------------------------------------
+;   The FFT coefficients table can be stored into Flash or RAM. 
+;   The following two lines of code allow selecting the method for coefficients 
+;   storage. 
+;   In the case of choosing coefficients in RAM, you have to:
+;   1. Include the file table_fft.h, which is a part of the DSP library, 
+;      in your main file.
+;   2. Decomment the line LDR.W pssK, =TableFFT and comment the line 
+;      ADRL    pssK, TableFFT_V7
+;   3. Comment all the TableFFT_V7 data.
+;------------------------------------------------------------------------------
+        ADR    pssK, TableFFT_V7    ; Coeff in Flash 
+        ;LDR.W pssK, =TableFFT      ; Coeff in RAM 
+
+;................................
+passloop_v7
+        STMFD   SP!, {pssX,butternbr}
+        ADD     tmp, index, index, LSL#1
+        ADD     pssX, pssX, tmp
+        SUB     butternbr, butternbr, #1<<16
+;................
+grouploop_v7
+        ADD     butternbr,butternbr,index,LSL#(16-2)
+;.......
+butterloop_v7
+        BUTFLY4_V7  pssX,index,pssX,14,pssK
+        SUBS        butternbr,butternbr, #1<<16
+        BGE     butterloop_v7
+;.......
+        ADD     tmp, index, index, LSL#1
+        ADD     pssX, pssX, tmp
+        DEC     butternbr
+        MOVS    tmp2, butternbr, LSL#16
+        IT      NE
+        SUBNE   pssK, pssK, tmp
+        BNE     grouploop_v7
+;................
+        LDMFD   sp!, {pssX, butternbr}
+        QUAD    index
+        MOVS    butternbr, butternbr, LSR#2    ; loop nbr /= radix 
+        BNE     passloop_v7
+;................................
+       LDMFD   SP!, {R4-R11, PC}
+
+;=============================================================================
+
+TableFFT_V7
+        ;N=16
+        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
+        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
+        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
+        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
+        ; N=64
+        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
+        DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
+        DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
+        DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
+        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
+        DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
+        DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
+        DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
+        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
+        DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
+        DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
+        DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
+        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
+        DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
+        DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
+        DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
+        ; N=256
+        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
+        DCW 0x3b1e,0x04b5, 0x3e69,0x0192, 0x3cc8,0x0324
+        DCW 0x35eb,0x0964, 0x3cc8,0x0324, 0x396b,0x0646
+        DCW 0x306c,0x0e06, 0x3b1e,0x04b5, 0x35eb,0x0964
+        DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
+        DCW 0x24ae,0x1709, 0x37af,0x07d6, 0x2e88,0x0f8d
+        DCW 0x1e7e,0x1b5d, 0x35eb,0x0964, 0x2aaa,0x1294
+        DCW 0x1824,0x1f8c, 0x341e,0x0af1, 0x26b3,0x1590
+        DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
+        DCW 0x0b14,0x2760, 0x306c,0x0e06, 0x1e7e,0x1b5d
+        DCW 0x0471,0x2afb, 0x2e88,0x0f8d, 0x1a46,0x1e2b
+        DCW 0xfdc7,0x2e5a, 0x2c9d,0x1112, 0x15fe,0x20e7
+        DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
+        DCW 0xf087,0x3453, 0x28b2,0x1413, 0x0d48,0x2620
+        DCW 0xea02,0x36e5, 0x26b3,0x1590, 0x08df,0x289a
+        DCW 0xe39c,0x392b, 0x24ae,0x1709, 0x0471,0x2afb
+        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
+        DCW 0xd74e,0x3cc5, 0x2093,0x19ef, 0xfb8f,0x2f6c
+        DCW 0xd178,0x3e15, 0x1e7e,0x1b5d, 0xf721,0x3179
+        DCW 0xcbe2,0x3f0f, 0x1c64,0x1cc6, 0xf2b8,0x3368
+        DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
+        DCW 0xc197,0x3ffb, 0x1824,0x1f8c, 0xea02,0x36e5
+        DCW 0xbcf0,0x3fec, 0x15fe,0x20e7, 0xe5ba,0x3871
+        DCW 0xb8a6,0x3f85, 0x13d5,0x223d, 0xe182,0x39db
+        DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
+        DCW 0xb140,0x3daf, 0x0f79,0x24da, 0xd94d,0x3c42
+        DCW 0xae2e,0x3c42, 0x0d48,0x2620, 0xd556,0x3d3f
+        DCW 0xab8e,0x3a82, 0x0b14,0x2760, 0xd178,0x3e15
+        DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
+        DCW 0xa7b1,0x3612, 0x06a9,0x29ce, 0xca15,0x3f4f
+        DCW 0xa678,0x3368, 0x0471,0x2afb, 0xc695,0x3fb1
+        DCW 0xa5bc,0x3076, 0x0239,0x2c21, 0xc338,0x3fec
+        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
+        DCW 0xa5bc,0x29ce, 0xfdc7,0x2e5a, 0xbcf0,0x3fec
+        DCW 0xa678,0x2620, 0xfb8f,0x2f6c, 0xba09,0x3fb1
+        DCW 0xa7b1,0x223d, 0xf957,0x3076, 0xb74d,0x3f4f
+        DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
+        DCW 0xab8e,0x19ef, 0xf4ec,0x3274, 0xb25e,0x3e15
+        DCW 0xae2e,0x1590, 0xf2b8,0x3368, 0xb02d,0x3d3f
+        DCW 0xb140,0x1112, 0xf087,0x3453, 0xae2e,0x3c42
+        DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
+        DCW 0xb8a6,0x07d6, 0xec2b,0x3612, 0xaac8,0x39db
+        DCW 0xbcf0,0x0324, 0xea02,0x36e5, 0xa963,0x3871
+        DCW 0xc197,0xfe6e, 0xe7dc,0x37b0, 0xa834,0x36e5
+        DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
+        DCW 0xcbe2,0xf50f, 0xe39c,0x392b, 0xa678,0x3368
+        DCW 0xd178,0xf073, 0xe182,0x39db, 0xa5ed,0x3179
+        DCW 0xd74e,0xebed, 0xdf6d,0x3a82, 0xa599,0x2f6c
+        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
+        DCW 0xe39c,0xe33a, 0xdb52,0x3bb6, 0xa599,0x2afb
+        DCW 0xea02,0xdf19, 0xd94d,0x3c42, 0xa5ed,0x289a
+        DCW 0xf087,0xdb26, 0xd74e,0x3cc5, 0xa678,0x2620
+        DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
+        DCW 0xfdc7,0xd3df, 0xd363,0x3daf, 0xa834,0x20e7
+        DCW 0x0471,0xd094, 0xd178,0x3e15, 0xa963,0x1e2b
+        DCW 0x0b14,0xcd8c, 0xcf94,0x3e72, 0xaac8,0x1b5d
+        DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
+        DCW 0x1824,0xc850, 0xcbe2,0x3f0f, 0xae2e,0x1590
+        DCW 0x1e7e,0xc625, 0xca15,0x3f4f, 0xb02d,0x1294
+        DCW 0x24ae,0xc44a, 0xc851,0x3f85, 0xb25e,0x0f8d
+        DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
+        DCW 0x306c,0xc18e, 0xc4e2,0x3fd4, 0xb74d,0x0964
+        DCW 0x35eb,0xc0b1, 0xc338,0x3fec, 0xba09,0x0646
+        DCW 0x3b1e,0xc02c, 0xc197,0x3ffb, 0xbcf0,0x0324
+        
+       END
+;******************* (C) COPYRIGHT 2009  STMicroelectronics *****END OF FILE****
diff -r 000000000000 -r 90ade34a3b71 cr4_fft_64_stm32.s
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cr4_fft_64_stm32.s	Sun Dec 13 07:14:57 2009 +0000
@@ -0,0 +1,329 @@
+;******************** (C) COPYRIGHT 2009  STMicroelectronics ********************
+;* File Name          : cr4_fft_64_stm32.s
+;* Author             : MCD Application Team
+;* Version            : V2.0.0
+;* Date               : 04/27/2009
+;* Description        : Optimized 64-point radix-4 complex FFT for Cortex-M3
+;********************************************************************************
+;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+;* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+;*******************************************************************************/
+
+    ;THUMB
+    REQUIRE8
+    PRESERVE8
+
+    AREA |.text|, CODE, READONLY, ALIGN=4
+                
+    EXPORT cr4_fft_64_stm32      
+    EXTERN TableFFT
+
+
+pssK          RN R0
+pssOUT        RN R0
+pssX          RN R1
+pssIN         RN R1
+butternbr     RN R2
+Nbin          RN R2
+index         RN R3
+Ar            RN R4
+Ai            RN R5
+Br            RN R6
+Bi            RN R7
+Cr            RN R8
+Ci            RN R9
+Dr            RN R10
+Di            RN R11
+cntrbitrev     RN R12
+tmp           RN R12
+pssIN2        RN R14
+tmp2          RN R14
+
+NPT EQU 64
+
+;----------------------------- MACROS ----------------------------------------
+     
+         MACRO
+         DEC  $reg
+         SUB  $reg,$reg,#1
+         MEND
+
+         MACRO
+         INC  $reg
+         ADD  $reg,$reg,#1
+         MEND
+
+
+          MACRO
+         QUAD  $reg
+         MOV  $reg,$reg,LSL#2
+         MEND
+
+;sXi = *(PssX+1); sXr = *PssX; PssX += offset; PssX= R1
+
+          MACRO
+          LDR2Q  $sXr,$sXi, $PssX, $offset
+          LDRSH $sXi, [$PssX, #2]
+          LDRSH $sXr, [$PssX]
+          ADD $PssX, $PssX, $offset
+          MEND
+
+;!! Same macro, to be used when passing negative offset value !!
+        MACRO
+        LDR2Qm  $sXr, $sXi, $PssX, $offset
+        LDRSH $sXi, [$PssX, #2]
+        LDRSH $sXr, [$PssX]
+        SUB $PssX, $PssX, $offset
+        MEND
+
+;(PssX+1)= sXi;  *PssX=sXr; PssX += offset;
+        MACRO
+        STR2Q  $sXr, $sXi, $PssX, $offset
+        STRH  $sXi, [$PssX, #2]
+        STRH  $sXr, [$PssX]
+        ADD $PssX, $PssX, $offset
+        MEND
+
+; YY = Cplx_conjugate_mul(Y,K)
+;  Y = YYr + i*YYi
+; use the following trick
+;  K = (Kr-Ki) + i*Ki
+        MACRO
+        CXMUL_V7  $YYr, $YYi, $Yr, $Yi, $Kr, $Ki,$tmp,$tmp2
+        SUB  $tmp2, $Yi, $Yr         ; sYi-sYr
+        MUL  $tmp, $tmp2, $Ki        ; (sYi-sYr)*sKi
+        ADD  $tmp2, $Kr, $Ki, LSL#1  ; (sKr+sKi)
+        MLA  $YYi, $Yi, $Kr, $tmp     ; lYYi = sYi*sKr-sYr*sKi
+        MLA  $YYr, $Yr, $tmp2, $tmp   ; lYYr = sYr*sKr+sYi*sKi
+        MEND
+
+; Four point complex Fast Fourier Transform        
+        MACRO
+        CXADDA4  $s
+        ; (C,D) = (C+D, C-D)
+        ADD     Cr, Cr, Dr
+        ADD     Ci, Ci, Di
+        SUB     Dr, Cr, Dr, LSL#1
+        SUB     Di, Ci, Di, LSL#1
+        ; (A,B) = (A+(B>>s), A-(B>>s))/4
+        MOV     Ar, Ar, ASR#2
+        MOV     Ai, Ai, ASR#2
+        ADD     Ar, Ar, Br, ASR#(2+$s)
+        ADD     Ai, Ai, Bi, ASR#(2+$s)
+        SUB     Br, Ar, Br, ASR#(1+$s)
+        SUB     Bi, Ai, Bi, ASR#(1+$s)
+        ; (A,C) = (A+(C>>s)/4, A-(C>>s)/4)
+        ADD     Ar, Ar, Cr, ASR#(2+$s)
+        ADD     Ai, Ai, Ci, ASR#(2+$s)
+        SUB     Cr, Ar, Cr, ASR#(1+$s)
+        SUB     Ci, Ai, Ci, ASR#(1+$s)
+        ; (B,D) = (B-i*(D>>s)/4, B+i*(D>>s)/4)
+        ADD     Br, Br, Di, ASR#(2+$s)
+        SUB     Bi, Bi, Dr, ASR#(2+$s)
+        SUB     Di, Br, Di, ASR#(1+$s)
+        ADD     Dr, Bi, Dr, ASR#(1+$s)
+        MEND
+
+        
+        MACRO
+        BUTFLY4ZERO_OPT  $pIN,$offset, $pOUT
+        LDRSH Ai, [$pIN, #2]
+        LDRSH Ar, [$pIN],#NPT
+        LDRSH Ci, [$pIN, #2]
+        LDRSH Cr, [$pIN],#NPT
+        LDRSH Bi, [$pIN, #2]
+        LDRSH Br, [$pIN],#NPT
+        LDRSH Di, [$pIN, #2]
+        LDRSH Dr, [$pIN],#NPT
+        ; (C,D) = (C+D, C-D)
+        ADD     Cr, Cr, Dr
+        ADD     Ci, Ci, Di
+        SUB     Dr, Cr, Dr, LSL#1  ; trick
+        SUB     Di, Ci, Di, LSL#1  ;trick
+        ; (A,B) = (A+B)/4, (A-B)/4
+        MOV     Ar, Ar, ASR#2
+        MOV     Ai, Ai, ASR#2
+        ADD     Ar, Ar, Br, ASR#2
+        ADD     Ai, Ai, Bi, ASR#2
+        SUB     Br, Ar, Br, ASR#1
+        SUB     Bi, Ai, Bi, ASR#1
+        ; (A,C) = (A+C)/4, (A-C)/4
+        ADD     Ar, Ar, Cr, ASR#2
+        ADD     Ai, Ai, Ci, ASR#2
+        SUB     Cr, Ar, Cr, ASR#1
+        SUB     Ci, Ai, Ci, ASR#1
+        ; (B,D) = (B-i*D)/4, (B+i*D)/4
+        ADD     Br, Br, Di, ASR#2
+        SUB     Bi, Bi, Dr, ASR#2
+        SUB     Di, Br, Di, ASR#1
+        ADD     Dr, Bi, Dr, ASR#1
+        ;
+        STRH    Ai, [$pOUT, #2]
+        STRH    Ar, [$pOUT], #4
+        STRH    Bi, [$pOUT, #2]
+        STRH    Br, [$pOUT], #4
+        STRH    Ci, [$pOUT, #2]
+        STRH    Cr, [$pOUT], #4
+        STRH    Dr, [$pOUT, #2]  ; inversion here
+        STRH    Di, [$pOUT], #4
+        MEND
+
+        MACRO
+        BUTFLY4_V7   $pssDin,$offset,$pssDout,$qformat,$pssK
+        LDR2Qm   Ar,Ai,$pssDin, $offset;-$offset
+        LDR2Q    Dr,Di,$pssK, #4
+        ; format CXMUL_V7 YYr, YYi, Yr, Yi, Kr, Ki,tmp,tmp2
+        CXMUL_V7 Dr,Di,Ar,Ai,Dr,Di,tmp,tmp2
+        LDR2Qm   Ar,Ai,$pssDin,$offset;-$offset
+        LDR2Q    Cr,Ci,$pssK,#4
+        CXMUL_V7 Cr,Ci,Ar,Ai,Cr,Ci,tmp,tmp2
+        LDR2Qm    Ar,Ai, $pssDin, $offset;-$offset
+        LDR2Q    Br,Bi, $pssK, #4
+        CXMUL_V7  Br,Bi,Ar,Ai,Br,Bi,tmp,tmp2
+        LDR2Q    Ar,Ai, $pssDin, #0
+        CXADDA4  $qformat
+        STRH    Ai, [$pssDout, #2]
+        STRH    Ar, [$pssDout]
+        ADD     $pssDout, $pssDout, $offset
+        STRH    Bi, [$pssDout, #2]
+        STRH    Br, [$pssDout]
+        ADD     $pssDout, $pssDout, $offset
+        STRH    Ci, [$pssDout, #2]
+        STRH    Cr, [$pssDout]
+        ADD     $pssDout, $pssDout, $offset
+        STRH    Dr, [$pssDout, #2]  ; inversion here
+        STRH    Di, [$pssDout], #4
+        MEND
+
+;-------------------             CODE             --------------------------------
+;===============================================================================
+;*******************************************************************************
+;* Function Name  : cr4_fft_64_stm32
+;* Description    : complex radix-4 64 points FFT
+;* Input          : - R0 = pssOUT: Output array .
+;*                  - R1 = pssIN: Input array 
+;*                  - R2 = Nbin: =64 number of points, this optimized FFT function  
+;*                    can only convert 64 points.
+;* Output         : None 
+;* Return         : None
+;*******************************************************************************
+cr4_fft_64_stm32
+
+        STMFD   SP!, {R4-R11, LR}
+        
+        MOV cntrbitrev, #0
+        MOV index,#0
+preloop_v7
+        ADD     pssIN2, pssIN, cntrbitrev, LSR#26 ;64-pts
+        BUTFLY4ZERO_OPT pssIN2,Nbin,pssOUT
+        INC index
+     IF :DEF:TARGET_LPC1768        
+        RBIT cntrbitrev,index
+     ELSE
+        ; since we need only 16 values, use a lookup table
+        ADR cntrbitrev, BITREV16
+        LDR cntrbitrev, [cntrbitrev, index, LSL #2]
+     ENDIF   
+        CMP index,#16  ;64-pts
+        BNE  preloop_v7
+
+
+        SUB     pssX, pssOUT, Nbin, LSL#2
+        MOV     index, #16
+        MOVS    butternbr, Nbin, LSR#4   ;dual use of register 
+        
+;------------------------------------------------------------------------------
+;   The FFT coefficients table can be stored into Flash or RAM. 
+;   The following two lines of code allow selecting the method for coefficients 
+;   storage. 
+;   In the case of choosing coefficients in RAM, you have to:
+;   1. Include the file table_fft.h, which is a part of the DSP library, 
+;      in your main file.
+;   2. Decomment the line LDR.W pssK, =TableFFT and comment the line 
+;      ADRL    pssK, TableFFT_V7
+;   3. Comment all the TableFFT_V7 data.
+;------------------------------------------------------------------------------
+        ADR    pssK, TableFFT_V7    ; Coeff in Flash 
+        ;LDR.W pssK, =TableFFT      ; Coeff in RAM 
+
+;................................
+passloop_v7
+        STMFD   SP!, {pssX,butternbr}
+        ADD     tmp, index, index, LSL#1
+        ADD     pssX, pssX, tmp
+        SUB     butternbr, butternbr, #1<<16
+;................
+grouploop_v7
+        ADD     butternbr,butternbr,index,LSL#(16-2)
+;.......
+butterloop_v7
+        BUTFLY4_V7  pssX,index,pssX,14,pssK
+        SUBS        butternbr,butternbr, #1<<16
+        BGE     butterloop_v7
+;.......
+        ADD     tmp, index, index, LSL#1
+        ADD     pssX, pssX, tmp
+        DEC     butternbr
+        MOVS    tmp2, butternbr, LSL#16
+        IT      NE
+        SUBNE   pssK, pssK, tmp
+        BNE     grouploop_v7
+;................
+        LDMFD   sp!, {pssX, butternbr}
+        QUAD    index
+        MOVS    butternbr, butternbr, LSR#2    ; loop nbr /= radix 
+        BNE     passloop_v7
+;................................
+       LDMFD   SP!, {R4-R11, PC}
+
+;=============================================================================
+
+TableFFT_V7
+         ;N=16
+        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
+        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
+        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
+        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
+        ; N=64
+        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
+        DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
+        DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
+        DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
+        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
+        DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
+        DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
+        DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
+        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
+        DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
+        DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
+        DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
+        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
+        DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
+        DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
+        DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
+
+; bit reversal table values from 0 to 16
+BITREV16
+        DCD 2_0000 << 28
+        DCD 2_1000 << 28
+        DCD 2_0100 << 28
+        DCD 2_1100 << 28
+        DCD 2_0010 << 28
+        DCD 2_1010 << 28
+        DCD 2_0110 << 28
+        DCD 2_1110 << 28
+        DCD 2_0001 << 28
+        DCD 2_1001 << 28
+        DCD 2_0101 << 28
+        DCD 2_1101 << 28
+        DCD 2_0011 << 28
+        DCD 2_1011 << 28
+        DCD 2_0111 << 28
+        DCD 2_1111 << 28
+        DCD 2_0000 << 28
+       END
+;******************* (C) COPYRIGHT 2009  STMicroelectronics *****END OF FILE****
diff -r 000000000000 -r 90ade34a3b71 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Dec 13 07:14:57 2009 +0000
@@ -0,0 +1,73 @@
+#include "mbed.h"
+#include <limits.h>
+
+DigitalOut myled(LED1);
+LocalFileSystem local("local");
+
+// code from FFTCM3.s by Ivan Mellen
+// http://www.luminarymicro.com/component/option,com_joomlaboard/Itemid,92/func,view/id,1636/catid,6/
+extern "C" void fftR4(short *y, short *x, int N);
+extern "C" void ifftR4(short *y, short *x, int N);
+
+// code from STM32 DSP Library
+/* 64 points*/
+extern "C" void cr4_fft_64_stm32(void *pssOUT, void *pssIN, uint16_t Nbin);
+/* 256 points */
+extern "C" void cr4_fft_256_stm32(void *pssOUT, void *pssIN, uint16_t Nbin);
+/* 1024 points */
+extern "C" void cr4_fft_1024_stm32(void *pssOUT, void *pssIN, uint16_t Nbin);
+
+void test_stm32()
+{
+#define N 64 /*Number of points*/
+    uint32_t x[N], y[N]; /* input and output arrays */
+    int16_t real[N], imag[N]; /* real and imaginary arrays */
+    memset(real, 0, sizeof(real));
+    memset(imag, 0, sizeof(imag));
+    real[1]=SHRT_MAX;
+    /* Fill the input array */
+    for (int i=0; i<N; i++)
+    {
+        x[i] = (((uint16_t)(real[i])) | ((uint32_t)(imag[i]<<16)));
+    }
+    cr4_fft_64_stm32(y, x, N); /*computes the FFT of the x[N] samples*/
+    FILE* log = fopen("/local/stm32.txt","w");
+    for (int i=0; i<N; i++)
+    {
+        fprintf(log, "%d: %d, %d -> %d, %d\n", i, real[i], imag[i], int16_t(y[i] & 0xFFFF), int16_t(y[i] >> 16));
+    }
+    fclose(log);    
+}
+
+void test_mellen()
+{
+    short x[512]; // input data 16 bit, 4 byte aligned  x0r,x0i,x1r,x1i,....
+    short y[512]; // output data 16 bit,4 byte aligned  y0r,y0i,y1r,y1i,....
+    short z[512]; // same format...
+    
+    for (int i=0;i<512;i++) x[i]=0;
+    for (int i=0;i<512;i=i+8)
+      { x[i+0]=16384; x[i+2]=16384;    x[i+4]=-16384;  x[i+6]=-16384;}
+    // x = [ 16384,16384,-16384,-16384,16384,...]  1/4 Fsampling
+    
+    //call functions
+    fftR4(y, x, 256);   // y is in frequency domain y[128]=
+    printf("fftR4 ok\n");
+    ifftR4(z, y, 256);  // z should be x/N + noise introduced by 16 bit truncating 
+    printf("ifftR4 ok\n");
+    FILE* log = fopen("/local/mellen.txt","w");
+    for (int i=0; i<256; i++)
+    {
+        fprintf(log, "%d: %d -> %d -> %d\n", i, x[i], y[i], z[i]);
+    }
+    fclose(log);    
+}
+
+int main()
+{
+    printf("Testing Mellen\n");
+    test_mellen();
+    printf("Testing STM32\n");
+    test_stm32();
+    printf("Done\n");
+}
diff -r 000000000000 -r 90ade34a3b71 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Dec 13 07:14:57 2009 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/49a220cc26e0