analyse audio input
Dependencies: PololuLedStrip mbed
Revision 0:bd2ecb743ed5, committed 2014-08-07
- Comitter:
- KongXiangyue
- Date:
- Thu Aug 07 14:24:47 2014 +0000
- Commit message:
- AUDIO fft led
Changed in this revision
diff -r 000000000000 -r bd2ecb743ed5 ADC_full/adc.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ADC_full/adc.cpp Thu Aug 07 14:24:47 2014 +0000 @@ -0,0 +1,439 @@ +/* mbed Library - ADC + * Copyright (c) 2010, sblandford + * released under MIT license http://mbed.org/licence/mit + */ +#include "mbed.h" +#include "adc.h" + + +ADC *ADC::instance; + +ADC::ADC(int sample_rate, int cclk_div) + { + + int i, adc_clk_freq, pclk, clock_div, max_div=1; + + //Work out CCLK + adc_clk_freq=CLKS_PER_SAMPLE*sample_rate; + int m = (LPC_SC->PLL0CFG & 0xFFFF) + 1; + int n = (LPC_SC->PLL0CFG >> 16) + 1; + int cclkdiv = LPC_SC->CCLKCFG + 1; + int Fcco = (2 * m * XTAL_FREQ) / n; + int cclk = Fcco / cclkdiv; + + //Power up the ADC + LPC_SC->PCONP |= (1 << 12); + //Set clock at cclk / 1. + LPC_SC->PCLKSEL0 &= ~(0x3 << 24); + switch (cclk_div) { + case 1: + LPC_SC->PCLKSEL0 |= 0x1 << 24; + break; + case 2: + LPC_SC->PCLKSEL0 |= 0x2 << 24; + break; + case 4: + LPC_SC->PCLKSEL0 |= 0x0 << 24; + break; + case 8: + LPC_SC->PCLKSEL0 |= 0x3 << 24; + break; + default: + fprintf(stderr, "Warning: ADC CCLK clock divider must be 1, 2, 4 or 8. %u supplied.\n", + cclk_div); + fprintf(stderr, "Defaulting to 1.\n"); + LPC_SC->PCLKSEL0 |= 0x1 << 24; + break; + } + pclk = cclk / cclk_div; + clock_div=pclk / adc_clk_freq; + + if (clock_div > 0xFF) { + fprintf(stderr, "Warning: Clock division is %u which is above 255 limit. Re-Setting at limit.\n", + clock_div); + clock_div=0xFF; + } + if (clock_div == 0) { + fprintf(stderr, "Warning: Clock division is 0. Re-Setting to 1.\n"); + clock_div=1; + } + + _adc_clk_freq=pclk / clock_div; + if (_adc_clk_freq > MAX_ADC_CLOCK) { + fprintf(stderr, "Warning: Actual ADC sample rate of %u which is above %u limit\n", + _adc_clk_freq / CLKS_PER_SAMPLE, MAX_ADC_CLOCK / CLKS_PER_SAMPLE); + while ((pclk / max_div) > MAX_ADC_CLOCK) max_div++; + fprintf(stderr, "Maximum recommended sample rate is %u\n", (pclk / max_div) / CLKS_PER_SAMPLE); + } + + LPC_ADC->ADCR = + ((clock_div - 1 ) << 8 ) | //Clkdiv + ( 1 << 21 ); //A/D operational + + //Default no channels enabled + LPC_ADC->ADCR &= ~0xFF; + //Default NULL global custom isr + _adc_g_isr = NULL; + //Initialize arrays + for (i=7; i>=0; i--) { + _adc_data[i] = 0; + _adc_isr[i] = NULL; + } + + + //* Attach IRQ + instance = this; + NVIC_SetVector(ADC_IRQn, (uint32_t)&_adcisr); + + //Disable global interrupt + LPC_ADC->ADINTEN &= ~0x100; + +}; + +void ADC::_adcisr(void) +{ + instance->adcisr(); +} + + +void ADC::adcisr(void) +{ + uint32_t stat; + int chan; + + // Read status + stat = LPC_ADC->ADSTAT; + //Scan channels for over-run or done and update array + if (stat & 0x0101) _adc_data[0] = LPC_ADC->ADDR0; + if (stat & 0x0202) _adc_data[1] = LPC_ADC->ADDR1; + if (stat & 0x0404) _adc_data[2] = LPC_ADC->ADDR2; + if (stat & 0x0808) _adc_data[3] = LPC_ADC->ADDR3; + if (stat & 0x1010) _adc_data[4] = LPC_ADC->ADDR4; + if (stat & 0x2020) _adc_data[5] = LPC_ADC->ADDR5; + if (stat & 0x4040) _adc_data[6] = LPC_ADC->ADDR6; + if (stat & 0x8080) _adc_data[7] = LPC_ADC->ADDR7; + + // Channel that triggered interrupt + chan = (LPC_ADC->ADGDR >> 24) & 0x07; + //User defined interrupt handlers + if (_adc_isr[chan] != NULL) + _adc_isr[chan](_adc_data[chan]); + if (_adc_g_isr != NULL) + _adc_g_isr(chan, _adc_data[chan]); + return; +} + +int ADC::_pin_to_channel(PinName pin) { + int chan; + switch (pin) { + case p15://=p0.23 of LPC1768 + default: + chan=0; + break; + case p16://=p0.24 of LPC1768 + chan=1; + break; + case p17://=p0.25 of LPC1768 + chan=2; + break; + case p18://=p0.26 of LPC1768 + chan=3; + break; + case p19://=p1.30 of LPC1768 + chan=4; + break; + case p20://=p1.31 of LPC1768 + chan=5; + break; + } + return(chan); +} + +PinName ADC::channel_to_pin(int chan) { + const PinName pin[8]={p15, p16, p17, p18, p19, p20, p15, p15}; + + if ((chan < 0) || (chan > 5)) + fprintf(stderr, "ADC channel %u is outside range available to MBED pins.\n", chan); + return(pin[chan & 0x07]); +} + + +int ADC::channel_to_pin_number(int chan) { + const int pin[8]={15, 16, 17, 18, 19, 20, 0, 0}; + + if ((chan < 0) || (chan > 5)) + fprintf(stderr, "ADC channel %u is outside range available to MBED pins.\n", chan); + return(pin[chan & 0x07]); +} + + +uint32_t ADC::_data_of_pin(PinName pin) { + //If in burst mode and at least one interrupt enabled then + //take all values from _adc_data + if (burst() && (LPC_ADC->ADINTEN & 0x3F)) { + return(_adc_data[_pin_to_channel(pin)]); + } else { + //Return current register value or last value from interrupt + switch (pin) { + case p15://=p0.23 of LPC1768 + default: + return(LPC_ADC->ADINTEN & 0x01?_adc_data[0]:LPC_ADC->ADDR0); + case p16://=p0.24 of LPC1768 + return(LPC_ADC->ADINTEN & 0x02?_adc_data[1]:LPC_ADC->ADDR1); + case p17://=p0.25 of LPC1768 + return(LPC_ADC->ADINTEN & 0x04?_adc_data[2]:LPC_ADC->ADDR2); + case p18://=p0.26 of LPC1768: + return(LPC_ADC->ADINTEN & 0x08?_adc_data[3]:LPC_ADC->ADDR3); + case p19://=p1.30 of LPC1768 + return(LPC_ADC->ADINTEN & 0x10?_adc_data[4]:LPC_ADC->ADDR4); + case p20://=p1.31 of LPC1768 + return(LPC_ADC->ADINTEN & 0x20?_adc_data[5]:LPC_ADC->ADDR5); + } + } +} + +//Enable or disable an ADC pin +void ADC::setup(PinName pin, int state) { + int chan; + chan=_pin_to_channel(pin); + if ((state & 1) == 1) { + switch(pin) { + case p15://=p0.23 of LPC1768 + default: + LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 14); + LPC_PINCON->PINSEL1 |= (unsigned int)0x1 << 14; + LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 14); + LPC_PINCON->PINMODE1 |= (unsigned int)0x2 << 14; + break; + case p16://=p0.24 of LPC1768 + LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 16); + LPC_PINCON->PINSEL1 |= (unsigned int)0x1 << 16; + LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 16); + LPC_PINCON->PINMODE1 |= (unsigned int)0x2 << 16; + break; + case p17://=p0.25 of LPC1768 + LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 18); + LPC_PINCON->PINSEL1 |= (unsigned int)0x1 << 18; + LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 18); + LPC_PINCON->PINMODE1 |= (unsigned int)0x2 << 18; + break; + case p18://=p0.26 of LPC1768: + LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 20); + LPC_PINCON->PINSEL1 |= (unsigned int)0x1 << 20; + LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 20); + LPC_PINCON->PINMODE1 |= (unsigned int)0x2 << 20; + break; + case p19://=p1.30 of LPC1768 + LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 28); + LPC_PINCON->PINSEL3 |= (unsigned int)0x3 << 28; + LPC_PINCON->PINMODE3 &= ~((unsigned int)0x3 << 28); + LPC_PINCON->PINMODE3 |= (unsigned int)0x2 << 28; + break; + case p20://=p1.31 of LPC1768 + LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 30); + LPC_PINCON->PINSEL3 |= (unsigned int)0x3 << 30; + LPC_PINCON->PINMODE3 &= ~((unsigned int)0x3 << 30); + LPC_PINCON->PINMODE3 |= (unsigned int)0x2 << 30; + break; + } + //Only one channel can be selected at a time if not in burst mode + if (!burst()) LPC_ADC->ADCR &= ~0xFF; + //Select channel + LPC_ADC->ADCR |= (1 << chan); + } + else { + switch(pin) { + case p15://=p0.23 of LPC1768 + default: + LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 14); + LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 14); + break; + case p16://=p0.24 of LPC1768 + LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 16); + LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 16); + break; + case p17://=p0.25 of LPC1768 + LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 18); + LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 18); + break; + case p18://=p0.26 of LPC1768: + LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 20); + LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 20); + break; + case p19://=p1.30 of LPC1768 + LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 28); + LPC_PINCON->PINMODE3 &= ~((unsigned int)0x3 << 28); + break; + case p20://=p1.31 of LPC1768 + LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 30); + LPC_PINCON->PINMODE3 &= ~((unsigned int)0x3 << 30); + break; + } + LPC_ADC->ADCR &= ~(1 << chan); + } +} +//Return channel enabled/disabled state +int ADC::setup(PinName pin) { + int chan; + + chan = _pin_to_channel(pin); + return((LPC_ADC->ADCR & (1 << chan)) >> chan); +} + +//Select channel already setup +void ADC::select(PinName pin) { + int chan; + + //Only one channel can be selected at a time if not in burst mode + if (!burst()) LPC_ADC->ADCR &= ~0xFF; + //Select channel + chan = _pin_to_channel(pin); + LPC_ADC->ADCR |= (1 << chan); +} + +//Enable or disable burst mode +void ADC::burst(int state) { + if ((state & 1) == 1) { + if (startmode(0) != 0) + fprintf(stderr, "Warning. startmode is %u. Must be 0 for burst mode.\n", startmode(0)); + LPC_ADC->ADCR |= (1 << 16); + } + else + LPC_ADC->ADCR &= ~(1 << 16); +} +//Return burst mode state +int ADC::burst(void) { + return((LPC_ADC->ADCR & (1 << 16)) >> 16); +} + +//Set startmode and edge +void ADC::startmode(int mode, int edge) { + int lpc_adc_temp; + + //Reset start mode and edge bit, + lpc_adc_temp = LPC_ADC->ADCR & ~(0x0F << 24); + //Write with new values + lpc_adc_temp |= ((mode & 7) << 24) | ((edge & 1) << 27); + LPC_ADC->ADCR = lpc_adc_temp; +} + +//Return startmode state according to mode_edge=0: mode and mode_edge=1: edge +int ADC::startmode(int mode_edge){ + switch (mode_edge) { + case 0: + default: + return((LPC_ADC->ADCR >> 24) & 0x07); + case 1: + return((LPC_ADC->ADCR >> 27) & 0x01); + } +} + +//Start ADC conversion +void ADC::start(void) { + startmode(1,0); +} + + +//Set interrupt enable/disable for pin to state +void ADC::interrupt_state(PinName pin, int state) { + int chan; + + chan = _pin_to_channel(pin); + if (state == 1) { + LPC_ADC->ADINTEN &= ~0x100; + LPC_ADC->ADINTEN |= 1 << chan; + /* Enable the ADC Interrupt */ + NVIC_EnableIRQ(ADC_IRQn); + } else { + LPC_ADC->ADINTEN &= ~( 1 << chan ); + //Disable interrrupt if no active pins left + if ((LPC_ADC->ADINTEN & 0xFF) == 0) + NVIC_DisableIRQ(ADC_IRQn); + } +} + +//Return enable/disable state of interrupt for pin +int ADC::interrupt_state(PinName pin) { + int chan; + + chan = _pin_to_channel(pin); + return((LPC_ADC->ADINTEN >> chan) & 0x01); +} + + +//Attach custom interrupt handler replacing default +void ADC::attach(void(*fptr)(void)) { + //* Attach IRQ + NVIC_SetVector(ADC_IRQn, (uint32_t)fptr); +} + +//Restore default interrupt handler +void ADC::detach(void) { + //* Attach IRQ + instance = this; + NVIC_SetVector(ADC_IRQn, (uint32_t)&_adcisr); +} + + +//Append interrupt handler for pin to function isr +void ADC::append(PinName pin, void(*fptr)(uint32_t value)) { + int chan; + + chan = _pin_to_channel(pin); + _adc_isr[chan] = fptr; +} + +//Append interrupt handler for pin to function isr +void ADC::unappend(PinName pin) { + int chan; + + chan = _pin_to_channel(pin); + _adc_isr[chan] = NULL; +} + +//Unappend global interrupt handler to function isr +void ADC::append(void(*fptr)(int chan, uint32_t value)) { + _adc_g_isr = fptr; +} + +//Detach global interrupt handler to function isr +void ADC::unappend() { + _adc_g_isr = NULL; +} + +//Set ADC offset +void offset(int offset) { + LPC_ADC->ADTRM &= ~(0x07 << 4); + LPC_ADC->ADTRM |= (offset & 0x07) << 4; +} + +//Return current ADC offset +int offset(void) { + return((LPC_ADC->ADTRM >> 4) & 0x07); +} + +//Return value of ADC on pin +int ADC::read(PinName pin) { + //Reset DONE and OVERRUN flags of interrupt handled ADC data + _adc_data[_pin_to_channel(pin)] &= ~(((uint32_t)0x01 << 31) | ((uint32_t)0x01 << 30)); + //Return value + return((_data_of_pin(pin) >> 4) & 0xFFF); +} + +//Return DONE flag of ADC on pin +int ADC::done(PinName pin) { + return((_data_of_pin(pin) >> 31) & 0x01); +} + +//Return OVERRUN flag of ADC on pin +int ADC::overrun(PinName pin) { + return((_data_of_pin(pin) >> 30) & 0x01); +} + +int ADC::actual_adc_clock(void) { + return(_adc_clk_freq); +} + +int ADC::actual_sample_rate(void) { + return(_adc_clk_freq / CLKS_PER_SAMPLE); +}
diff -r 000000000000 -r bd2ecb743ed5 ADC_full/adc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ADC_full/adc.h Thu Aug 07 14:24:47 2014 +0000 @@ -0,0 +1,131 @@ +/* mbed Library - ADC + * Copyright (c) 2010, sblandford + * released under MIT license http://mbed.org/licence/mit + */ + +#ifndef MBED_ADC_H +#define MBED_ADC_H + +#include "mbed.h" +#define XTAL_FREQ 12000000 +#define MAX_ADC_CLOCK 13000000 +#define CLKS_PER_SAMPLE 64 + +class ADC { +public: + + //Initialize ADC with ADC maximum sample rate of + //sample_rate and system clock divider of cclk_div + //Maximum recommened sample rate is 184000 + ADC(int sample_rate, int cclk_div); + + //Enable/disable ADC on pin according to state + //and also select/de-select for next conversion + void setup(PinName pin, int state); + + //Return enabled/disabled state of ADC on pin + int setup(PinName pin); + + //Enable/disable burst mode according to state + void burst(int state); + + //Select channel already setup + void select(PinName pin); + + //Return burst mode enabled/disabled + int burst(void); + + /*Set start condition and edge according to mode: + 0 - No start (this value should be used when clearing PDN to 0). + 1 - Start conversion now. + 2 - Start conversion when the edge selected by bit 27 occurs on the P2.10 / EINT0 / NMI pin. + 3 - Start conversion when the edge selected by bit 27 occurs on the P1.27 / CLKOUT / + USB_OVRCRn / CAP0.1 pin. + 4 - Start conversion when the edge selected by bit 27 occurs on MAT0.1. Note that this does + not require that the MAT0.1 function appear on a device pin. + 5 - Start conversion when the edge selected by bit 27 occurs on MAT0.3. Note that it is not + possible to cause the MAT0.3 function to appear on a device pin. + 6 - Start conversion when the edge selected by bit 27 occurs on MAT1.0. Note that this does + not require that the MAT1.0 function appear on a device pin. + 7 - Start conversion when the edge selected by bit 27 occurs on MAT1.1. Note that this does + not require that the MAT1.1 function appear on a device pin. + When mode >= 2, conversion is triggered by edge: + 0 - Rising edge + 1 - Falling edge + */ + void startmode(int mode, int edge); + + //Return startmode state according to mode_edge=0: mode and mode_edge=1: edge + int startmode(int mode_edge); + + //Start ADC conversion + void start(void); + + //Set interrupt enable/disable for pin to state + void interrupt_state(PinName pin, int state); + + //Return enable/disable state of interrupt for pin + int interrupt_state(PinName pin); + + //Attach custom interrupt handler replacing default + void attach(void(*fptr)(void)); + + //Restore default interrupt handler + void detach(void); + + //Append custom interrupt handler for pin + void append(PinName pin, void(*fptr)(uint32_t value)); + + //Unappend custom interrupt handler for pin + void unappend(PinName pin); + + //Append custom global interrupt handler + void append(void(*fptr)(int chan, uint32_t value)); + + //Unappend custom global interrupt handler + void unappend(void); + + //Set ADC offset to a value 0-7 + void offset(int offset); + + //Return current ADC offset + int offset(void); + + //Return value of ADC on pin + int read(PinName pin); + + //Return DONE flag of ADC on pin + int done(PinName pin); + + //Return OVERRUN flag of ADC on pin + int overrun(PinName pin); + + //Return actual ADC clock + int actual_adc_clock(void); + + //Return actual maximum sample rate + int actual_sample_rate(void); + + //Return pin ID of ADC channel + PinName channel_to_pin(int chan); + + //Return pin number of ADC channel + int channel_to_pin_number(int chan); + + +private: + int _pin_to_channel(PinName pin); + uint32_t _data_of_pin(PinName pin); + + int _adc_clk_freq; + void adcisr(void); + static void _adcisr(void); + static ADC *instance; + + uint32_t _adc_data[8]; + void(*_adc_isr[8])(uint32_t value); + void(*_adc_g_isr)(int chan, uint32_t value); + void(*_adc_m_isr)(void); +}; + +#endif \ No newline at end of file
diff -r 000000000000 -r bd2ecb743ed5 FFTCM3.s --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FFTCM3.s Thu Aug 07 14:24:47 2014 +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 bd2ecb743ed5 PololuLedStrip.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PololuLedStrip.lib Thu Aug 07 14:24:47 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/DavidEGrayson/code/PololuLedStrip/#87fd6273e0ff
diff -r 000000000000 -r bd2ecb743ed5 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Aug 07 14:24:47 2014 +0000 @@ -0,0 +1,349 @@ +#include "mbed.h" +#include "PololuLedStrip.h" + +extern "C" void fftR4(short *y, short *x, int N); + +//***************Global Varity*************************** +#define BUF_LEN 1024 +#define SAMP_FREQ 48000 +#define LED_COUNT 60 +short samples[BUF_LEN];// store values from ADC +short mx[BUF_LEN*2];// input data i6bit 4 byte aligned x0r,xoi,x1r,x1i,.... +short my[BUF_LEN*2];// output data 16bit 4byte aligned y0r,y0i, y1r,y1i,.... +float spectrum[BUF_LEN/2]; // frequency spectrum +float max1 = 0.0; + float max2 = 0.0; + float max3 = 0.0; + float max4 = 0.0; + float max5 = 0.0; + int j1 = 0; + int j2 = 0; + int j3 = 0; + int j4 = 0; + int j5 = 0; + int j11=0; + int j22=0; + int j33=0; + int j44=0; + int j55=0; +rgb_color colors[LED_COUNT]; +//--------------End of Global Varity--------------------- + + + +//************** Port Configuration ********************* +AnalogIn audio(p20); // ADC pin must be biased at Vcc/2 using coupling capacitor and potential divider +BusOut leds (LED1,LED2,LED3,LED4); +PololuLedStrip ledStrip(p8); + + +//*** Debug*** +Serial serial(USBTX,USBRX); //Real time debug USB port +LocalFileSystem local("local"); // Create the local filesystem under the name "local" + +//----------------- End of Port Configuration------------ + + +// **************SubFunctions Define ******************* +void initLED(); +void updateSamples(); +float magnitude (short y1, short y2); +void doFFT(); +void ledBarGraph(); +void calcPeakFrequency (); +void runLED(); + +//--------------- END of Sub Define--------------------- + + +int main() +{ + leds = 15; + wait (1.0); + leds =0; + initLED(); + + while(1) { + ledBarGraph(); + updateSamples(); + doFFT(); + calcPeakFrequency (); + runLED(); + + }// End while + + + +}// End main + +//********************SubFunction Implementation**************** + +void initLED(){ + for (int i = 0; i < 60; i++){ + colors[i] = (rgb_color){ 2,200,2 }; + } + + ledStrip.write(colors, LED_COUNT); + + wait(1); + for (int i = 0; i < 60; i++){ + colors[i] = (rgb_color){ 0,0,0 }; + } + + ledStrip.write(colors, LED_COUNT); + + } + + + + + + + +//-------------------------------------- +void updateSamples (){ + + for (int i=0; i< BUF_LEN; i++){ + samples[i]= (short) (audio.read_u16() - 0x8000); + wait_us(1e6/SAMP_FREQ); + + }//End for + + }// End updateSamples + +void doFFT(){ + //clear buffers + for (int i=0; i<BUF_LEN*2; i++){ + mx[i]=0; + my[i]=0; + }// end for + + for (int i =0; i<BUF_LEN;i++){ + mx[i*2]=samples[i]; + }// end for + + fftR4(my,mx,BUF_LEN); // call FFT routine + + int j=0;// counter number of next for loop + + for (int i= 0;i< BUF_LEN; i+=2 ){ + spectrum[j]= magnitude (my[i],my[i+i]); // get magnitude of FFT output to get spectrum data + j++; + } + + }// End doFFT + + //--------------------------- +float magnitude (short y1, short y2){ + + return sqrt(float (y1*y1+y2*y2)); + } + + //------------------------------------------ +void calcPeakFrequency (){ + float max = 0.0; + + int frequency = 0; + int j = 0; + max1 = 0.0; + max2 = 0.0; + max3 = 0.0; + max4 = 0.0; + max5 = 0.0; + j1 = 0; + j2 = 0; + j3 = 0; + j4 = 0; + j5 = 0; + + + for (int i=0; i<BUF_LEN; i+=2) { // loop through spectrum and look for maximum value + if (spectrum[j] > max) { + max = spectrum[j]; + frequency = int(SAMP_FREQ/BUF_LEN/2*i); + } + j++; + } + + for (int i=0; i<101; i+=2) { + if (spectrum[j1] > max1) { + max1 = spectrum[j1]; + j11=j1; + } + j1++; + } + + for (int i=102; i<204; i+=2) { + if (spectrum[j2] > max2) { + max2 = spectrum[j2]; + j22=j2; + } + j2++; + } + + for (int i=205; i<306; i+=2) { + if (spectrum[j3] > max3) { + max3 = spectrum[j3]; + j33=j3; + } + j3++; + } + + for (int i=307; i<408; i+=2) { + if (spectrum[j4] > max4) { + max4 = spectrum[j4]; + j44=j4; + } + j4++; + } + + for (int i=408; i<511; i+=2) { + if (spectrum[j5] > max5) { + max5 = spectrum[j5]; + j55=j5; + } + j5++; + } + serial.printf("frq=%d\n",frequency); + //serial.printf("j11-j55 = %d,%d,%d,%d,%d\n",j11,j22,j33,j44,j55); + + }//End calcPeakFrequency + //------------------------------------------------- + void ledBarGraph() +{ + float rms = 0.0; // initialse array + for (int i = 0; i < BUF_LEN; i++) { + rms+= samples[i]*samples[i]; + } + // calc the sum of the squares + + rms/=BUF_LEN; // get the mean + rms = sqrt(rms); // and root to get the RMS + rms/= 16384.0; // scale according to 16-bit signed maximum value + + // check value and update LEDs to show amplitude + if (rms > 0.8) { + leds = 15; + } else if (rms > 0.6) { + leds = 7; + } else if (rms > 0.4) { + leds = 3; + } else if (rms > 0.2) { + leds = 1; + } else { + leds = 0; + } + + //serial.printf("RMS = %f\n",rms); +}//End void ledBarGraph + +//------------------------------------------- + + + +void runLED(){ + // clear the ledStrip + for (int i = 0; i < LED_COUNT; i++){ + colors[i] = (rgb_color){ 0, 0, 0 }; + } + + //if ((maxFreq)>60) maxFreq=60; // Limiting Length + + // max1 + for (int i = 0; i < (j11/10); i++){ + colors[i] = (rgb_color){ 200,2,2 }; + } + + //max2 + for (int i = 21; i > (j22/10); i--){ + colors[i] = (rgb_color){ 2,200,2 }; + } + + //max3 + for (int i = 24; i < (j33/10); i++){ + colors[i] = (rgb_color){ 2,200,200 }; + } + //max4 + for (int i = 45; i > (j44/10); i--){ + colors[i] = (rgb_color){ 100,2,200 }; + } + //max5 + for (int i = 48; i < (j55/10); i++){ + colors[i] = (rgb_color){ 200,2,200 }; + } + + ledStrip.write(colors, LED_COUNT); + } + + + + + + +/*void runLED(){ + // clear the ledStrip + for (int i = 0; i < LED_COUNT; i++){ + colors[i] = (rgb_color){ 0, 0, 0 }; + } + + //if ((maxFreq)>60) maxFreq=60; // Limiting Length + + // max1 + for (int i = 0; i < 9; i++){ + colors[i] = (rgb_color){ 200,2,2 }; + } + + //max2 + for (int i = 21; i > 12; i--){ + colors[i] = (rgb_color){ 2,200,2 }; + } + + //max3 + for (int i = 24; i < 33; i++){ + colors[i] = (rgb_color){ 2,200,200 }; + } + //max4 + for (int i = 45; i > 36; i--){ + colors[i] = (rgb_color){ 100,2,200 }; + } + //max5 + for (int i = 48; i < 57; i++){ + colors[i] = (rgb_color){ 200,2,200 }; + } + + ledStrip.write(colors, LED_COUNT); + }*/ + +/*void runLED(){ + // clear the ledStrip + for (int i = 0; i < LED_COUNT; i++){ + colors[i] = (rgb_color){ 0, 0, 0 }; + } + + //if ((maxFreq)>60) maxFreq=60; // Limiting Length + + // max1 + for (int i = 0; i < (j11/10); i++){ + colors[i] = (rgb_color){ 200,2,2 }; + } + + //max2 + for (int i = 21; i < (21-((j22-101)/10)); i--){ + colors[i] = (rgb_color){ 2,200,2 }; + } + + //max3 + for (int i = 24; i < (24+((j33-204)/10)); i++){ + colors[i] = (rgb_color){ 2,200,200 }; + } + //max4 + for (int i = 45; i < (45-((j44-306)/10)); i--){ + colors[i] = (rgb_color){ 100,2,200 }; + } + //max5 + for (int i = 48; i < (48+((j55-408)/10)); i++){ + colors[i] = (rgb_color){ 200,2,200 }; + } + + ledStrip.write(colors, LED_COUNT); + }*/
diff -r 000000000000 -r bd2ecb743ed5 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Aug 07 14:24:47 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/3d0ef94e36ec \ No newline at end of file