diff --git a/VFOsys_astep/VFOsys_astep.ino b/VFOsys_astep/VFOsys_astep.ino new file mode 100644 index 0000000..9f6803f --- /dev/null +++ b/VFOsys_astep/VFOsys_astep.ino @@ -0,0 +1,271 @@ +/*------------------------------------------------------------------ + + VFO System for ESP32-DevKitC Ver 1.00 + + by T.Uebo / JF3HZB + + Feb. 10, 2019 + +--------------------------------------------------------------------*/ + +/*------Hard ware Configuration --------------------- +<> +pin No. Connection + 17 : Rotary Encoder A + 16 : Rotary Encoder B + + 22 : si5351A SCL + 21 : si5351A SDA + + 18 : SCK / ST7735,SEPS525(128x160 display) + 23 : MOSI / ST7735,SEPS525(128x160 display) + 5 : CS / ST7735,SEPS525(128x160 display) + 2 : DC(A0) / ST7735,SEPS525(128x160 display) + 15 : RESET / ST7735,SEPS525(128x160 display) + + +<> +CLK0 : Car Signal (I) +CLK1 : Car Signal (Q) +CLK2 : Lo Signal +------------------------------------------------*/ + +/*------------------------------------------------------- + Frequency settings +--------------------------------------------------------*/ +#define init_freq 7100000 // Initial Frequncy[Hz] +int32_t offset_frq = 8998500; // Offset Frequency[Hz] +int32_t car_frq = 8998500; // Carrier Frequncy[Hz] +unsigned char f_carON = 1; // ON/OFF Car signal + +#define fmax 150000000 // Max frequency[Hz] +#define fmin 100000 // Min frequency[Hz] +#define freq_step 10 // Min step[Hz] + +/*---------------------------------------------------------- + Adaptive step control parameters +-----------------------------------------------------------*/ +uint32_t vth=2; // Velocity threshold for acceleration +float Racc=0.002; // Rate of acceleration +float Rdec=1.0; // Rate of deceleration +float MaxL=1500.0; // Max Step[Hz] = freq_step + Racc*MaxL*MaxL + + +/*---------------------------------------------------------------------------------- + Control flags +-----------------------------------------------------------------------------------*/ +uint8_t f_fchange; // if frequency changed, set this flag to 1 +uint8_t f_cchange; // if Car frequency and/or "f_carON" changed, set this flag to 1 +uint8_t f_dchange; // if need to renew display, set this flag to 1 + + + +/*-------------------------------------------------------- + pin assign +----------------------------------------------------------*/ +//#define LED_BUILTIN 13 + +#define PULSE_INPUT_PIN 16 // Rotaty Encoder A +#define PULSE_CTRL_PIN 17 // Rotaty Encoder B + + + + + + + +//------------------------------------------------------------------------------ +#define NAME "VFO System" +#define VERSION "Ver. 1.00" +#define ID "by JF3HZB" + + +#include "driver/pcnt.h" +#include "display.h" +#include "graph.h" +#include "dial.h" +#include "si5351.h" + +/*----------------------------------------------------------------------------- + * Global +-----------------------------------------------------------------------------*/ +float L=0.0; +long afstp; +long frq=init_freq; +int16_t RE_Count = 0; +uint8_t f_redraw; +extern char f_rev; +extern uint32_t cl_BG; + +/*-------------------------------------------------------------------------- + Timer ISR +---------------------------------------------------------------------------*/ +hw_timer_t * timer = NULL; +void IRAM_ATTR onTimer(){} + + + +//----------------------------------------------------------------------------------------------- +void setup() { +//----------------------------------------------------------------------------------------------- + char str[64]; + //--------- create tasks on core0 -------------------------------- + xTaskCreatePinnedToCore(task0, "Task0", 4096, NULL, 1, NULL, 0); + + //--------- Set up Interrupt Timer ------------------------------- + timer = timerBegin(0, 80, true); //use Timer0, div80 for 1us clock + timerAttachInterrupt(timer, &onTimer, true); + timerAlarmWrite(timer, 10000, true); // T=10000us + timerAlarmEnable(timer); // Start Timer + + //pinMode(LED_BUILTIN, OUTPUT); //LED + + //--- Counter setup for Rotary Encoder --------------------- + pcnt_config_t pcnt_config_A;// structure for A + pcnt_config_t pcnt_config_B;// structure for B + // + pcnt_config_A.pulse_gpio_num = PULSE_INPUT_PIN; + pcnt_config_A.ctrl_gpio_num = PULSE_CTRL_PIN; + pcnt_config_A.lctrl_mode = PCNT_MODE_REVERSE; + pcnt_config_A.hctrl_mode = PCNT_MODE_KEEP; + pcnt_config_A.channel = PCNT_CHANNEL_0; + pcnt_config_A.unit = PCNT_UNIT_0; + pcnt_config_A.pos_mode = PCNT_COUNT_INC; + pcnt_config_A.neg_mode = PCNT_COUNT_DEC; + pcnt_config_A.counter_h_lim = 10000; + pcnt_config_A.counter_l_lim = -10000; + // + pcnt_config_B.pulse_gpio_num = PULSE_CTRL_PIN; + pcnt_config_B.ctrl_gpio_num = PULSE_INPUT_PIN; + pcnt_config_B.lctrl_mode = PCNT_MODE_KEEP; + pcnt_config_B.hctrl_mode = PCNT_MODE_REVERSE; + pcnt_config_B.channel = PCNT_CHANNEL_1; + pcnt_config_B.unit = PCNT_UNIT_0; + pcnt_config_B.pos_mode = PCNT_COUNT_INC; + pcnt_config_B.neg_mode = PCNT_COUNT_DEC; + pcnt_config_B.counter_h_lim = 10000; + pcnt_config_B.counter_l_lim = -10000; + // + pcnt_unit_config(&pcnt_config_A);//Initialize A + pcnt_unit_config(&pcnt_config_B);//Initialize B + pcnt_counter_pause(PCNT_UNIT_0); + pcnt_counter_clear(PCNT_UNIT_0); + pcnt_counter_resume(PCNT_UNIT_0); //Start + + + display_init(); + GRAM_clr(); + sprintf(str, NAME ); disp_str16(str,20, 90, 0x00ffff); + sprintf(str, VERSION); disp_str12(str,36, 50, 0x00ffff); + sprintf(str, ID ); disp_str8(str,50, 20, 0x00ffff); + trans65k(); + f_redraw=1; + + + delay(1000); + init_Dial(); + GRAM_clr(); + + si5351_init(); + + f_fchange = 1; + f_cchange = 1; + f_dchange = 1; + f_redraw=0; +} + + + + + + +//----------------------------------------------------------------------------------------------- +void loop() { // (core1) +//----------------------------------------------------------------------------------------------- + char str[64]; + + if(f_dchange==1){ + f_dchange=0; + //GRAM_clr(); + boxfill(0,0,Nx-1,Ny-1,cl_BG); + //Display Dial + Dial(frq); + + box(7,100,153,126, 0xa0a0a0); + box(6,99,154,127, 0xa0a0a0); + + //-------- Display Digital Frquency --------------------------------------- + sprintf(str, "%3d.%03d,%02d", frq/1000000, (frq/1000)%1000, (frq/10)%100 ); + disp_str16(str,17, 105, 0xffd080); + sprintf(str, "MHz" ); + disp_str12(str,120, 106, 0xffd080); + + if(f_redraw==0){ + trans65k(); + f_redraw=1; + } + } + + + //digitalWrite(LED_BUILTIN, 1^digitalRead(LED_BUILTIN) ); // Toggle LED +} + + + + + +/*----------------------------------------------------------------------------------------------- + Alternative Loop (core0) +------------------------------------------------------------------------------------------------*/ +void task0(void* arg) +{ + while (1) + { + pcnt_get_counter_value(PCNT_UNIT_0, &RE_Count); + int count=RE_Count; + pcnt_counter_clear(PCNT_UNIT_0); + + if(f_rev==1) count=-count; + + + if(count!=0){ + afstp=(long)(0.5 + (float)(count)*((float)freq_step + Racc*L*L) ); + if(abs(count)>=vth) L+=1.0*(float)( abs(count) - vth ); + if(L>MaxL) L=MaxL; + }else{ + L-=Rdec; + if(L<0) L=0; + } + + //---Update frequency ------------------------------- + if(afstp!=0){ + frq+=afstp; + if(frq>fmax) frq=fmax; + if(frq +#include "display.h" +#include "graph.h" +#include "dial_font.h" +#include "dial.h" +#include "dial_prm.h" + +extern uint8_t R_GRAM[Nx][Ny]; +extern uint8_t B_GRAM[Nx][Ny]; +extern uint8_t G_GRAM[Nx][Ny]; + +int freq_tick = 1000; +long Dial_font[26][13]; +int fontpitch; +float xoff_font, yoff_font; +float xoff_point; +int D_center, D_left, D_right; +int yry[Nx][4]; +int D_R_inside; +float reso; +float reso_main; + +int H_sub1, H_sub5, H_sub10; +int L_sub1, L_sub5, L_sub10; + +int H_main1, H_main5, H_main10; +int L_main1, L_main5, L_main10; + + +/*------------------------------------------------------------------------------------------------- + + +--------------------------------------------------------------------------------------------------*/ +void init_Dial(void) { + int xg; //yg; + float xf, yf, arc_main, arc_sub; + int D_R_tmp; + + + if (f_dispmode == 0) { + D_left = 0; D_right = Nx - 1; + D_center = (Nx >> 1); + } else { + D_left = 0; D_right = Ny - 1; + D_center = (Ny >> 1); + } + + D_R_inside = D_R - Dial_space; + + if (f_main_outside == 1) { + reso = (float)tick_pitch / (float)D_R_inside; + reso_main = (float)tick_pitch_main / (float)D_R; + if ( D_R < (Nx / 2) ) arc_main = 1.6 * (float)D_R; else arc_main = 1.6 * 0.5 * (float)Nx; + if ( D_R_inside < (Nx / 2) ) arc_sub = 1.6 * (float)D_R_inside; else arc_sub = 1.6 * 0.5 * (float)Nx; + } else { + reso = (float)tick_pitch / (float)D_R; + reso_main = (float)tick_pitch_main / (float)D_R_inside; + if ( D_R < (Nx / 2) ) arc_sub = 1.6 * (float)D_R; else arc_sub = 1.6 * 0.5 * (float)Nx; + if ( D_R_inside < (Nx / 2) ) arc_main = 1.6 * (float)D_R_inside; else arc_main = 1.6 * 0.5 * (float)Nx; + } + + reso = 0.1 * reso; + reso_main = 0.1 * reso_main; + + + H_main1 = (int)( (arc_main / ( 0.1 * (float)tick_pitch_main ) ) * 2.0 ); + L_main1 = (int)( (arc_main / ( 0.1 * (float)tick_pitch_main ) ) * -1.0 ); + + + H_main5 = (int)( (arc_main / ( 0.1 * (float)tick_pitch_main) / 5.0 ) * 2.0 ); + L_main5 = (int)( (arc_main / ( 0.1 * (float)tick_pitch_main) / 5.0 ) * 0.75 ); + + L_main5 /= 2; L_main5++; + L_main5 *= 2; L_main5++; + L_main5 *= -1; + + + H_main10 = (int)( (arc_main / ( 0.1 * (float)tick_pitch_main) / 10.0) * 2.0 ); + L_main10 = (int)( (arc_main / ( 0.1 * (float)tick_pitch_main) / 10.0) * 0.75 ); + + L_main10 /= 2; L_main10++; + L_main10 *= 2; + L_main10 *= -1; + + + H_sub1 = (int)( (arc_sub / ( 0.1 * (float)tick_pitch) ) * 2.0 ); + L_sub1 = (int)( (arc_sub / ( 0.1 * (float)tick_pitch) ) * -1.0 ); + + + H_sub5 = (int)( (arc_sub / ( 0.1 * (float)tick_pitch) / 5.0) * 2.0 ); + L_sub5 = (int)( (arc_sub / ( 0.1 * (float)tick_pitch) / 5.0) * 0.75 ); + + L_sub5 /= 2; L_sub5++; + L_sub5 *= 2; L_sub5++; + L_sub5 *= -1; + + + H_sub10 = (int)( (arc_sub / ( 0.1 * (float)tick_pitch) / 10.0) * 2.0 ); + L_sub10 = (int)( (arc_sub / ( 0.1 * (float)tick_pitch) / 10.0) * 0.75 ); + + L_sub10 /= 2; L_sub10++; + L_sub10 *= 2; + L_sub10 *= -1; + + + + // Region settings yry[][]-------------------------------------------------------- + for (xg = D_left; xg <= D_right; xg++) { + + xf = (float)xg; + yf = (float)(D_R * D_R) - + (xf - (float)D_center) * (xf - (float)D_center); + + if (yf > 0) { + yry[xg][0] = (int)( 0.5 + sqrt(yf) - (float)D_R + (float)D_height ); + if (yry[xg][0] < 0) yry[xg][0] = 0; + } else { + yry[xg][0] = 0; + } + + } + + if (f_main_outside == 1) D_R_tmp = D_R - tick_main10; + else D_R_tmp = D_R - tick10; + + + for (xg = D_left; xg <= D_right; xg++) { + + xf = (float)xg; + yf = (float)(D_R_tmp * D_R_tmp) - + (xf - (float)D_center) * (xf - (float)D_center); + + if (yf > 0) { + yry[xg][1] = (int)( 0.5 + sqrt(yf) - (float)D_R + (float)D_height ); + if (yry[xg][1] < 0) yry[xg][1] = 0; + } else { + yry[xg][1] = 0; + } + + } + + + for (xg = D_left; xg <= D_right; xg++) { + + xf = (float)xg; + yf = (float)( (D_R_inside + 1) * (D_R_inside + 1) ) - + (xf - (float)D_center) * (xf - (float)D_center); + + if (yf > 0) { + yry[xg][2] = (int)( 0.5 + sqrt(yf) - (float)D_R + (float)D_height ); + if (yry[xg][2] < 0) yry[xg][2] = 0; + } else { + yry[xg][2] = 0; + } + + } + + if (f_main_outside == 1) D_R_tmp = D_R_inside - tick10; + else D_R_tmp = D_R_inside - tick_main10; + + for (xg = D_left; xg <= D_right; xg++) { + + xf = (float)xg; + yf = (float)(D_R_tmp * D_R_tmp) - + (xf - (float)D_center) * (xf - (float)D_center); + + if (yf > 0) { + yry[xg][3] = (int)( 0.5 + sqrt(yf) - (float)D_R + (float)D_height ); + if (yry[xg][3] < 0) yry[xg][3] = 0; + } else { + yry[xg][3] = 0; + } + + } + //------------------------------------------------------------------------ + + Sel_font12(); + //if(f_FONT==0) Sel_font12(); + if (f_FONT == 1) Sel_font14(); + if (f_FONT == 2) Sel_font16(); +} +/*------------------------------------------------------------------------------------------------- + +--------------------------------------------------------------------------------------------------*/ + + + + + + +void Sel_font12(void) { + int k, j; + fontpitch = 8.5; + xoff_font = 2.5; + yoff_font = 10.0; + xoff_point = 0.5; + + for (k = 0; k < 10; k++) { + for (j = 0; j < 13; j++) { + Dial_font[k+16][j] = Dial_font12[k][j]; + } + } + +} + + + + +void Sel_font14(void) { + int k, j; + fontpitch = 9; + xoff_font = 1.5; + yoff_font = 9.0; + xoff_point = 0.5; + + for (k = 0; k < 10; k++) { + for (j = 0; j < 13; j++) { + Dial_font[k+16][j] = Dial_font14[k][j]; + } + } + +} + + + +void Sel_font16(void) { + int k, j; + fontpitch = 10; + xoff_font = 2.0; + yoff_font = 8.0; + xoff_point = 0; + + for (k = 0; k < 10; k++) { + for (j = 0; j < 13; j++) { + Dial_font[k+16][j] = Dial_font16[k][j]; + } + } + +} + + + + +/*------------------------------------------------------------------------------- +* +--------------------------------------------------------------------------------*/ +void Dial(long freq) +{ + int i, k; + int xg, yg, xi, yi; + float x, y, angle, a, s, c, xf, yf; +#define ZERO_rad 128 + float sin_[ZERO_rad * 2], cos_[ZERO_rad * 2]; + + float xr, yr, fsign; + int d, dg, dgmax; + float dgf; + long fdisp; + long fx, fy; + int D_R_tmp; + + if(f_rev==1) freq=-freq; + + if (freq < 0) { + freq = - freq; + fsign = -1.0; + } else { + fsign = 1.0; + } + + //---------------------------------------------------- + if (f_dispmode == 0) { + + for (xg = D_left; xg <= D_right; xg++) { + yg = yry[xg][0]; + for (i = 0; i <= yg; i++) { + R_GRAM[xg][i] = 0; + G_GRAM[xg][i] = 0; + B_GRAM[xg][i] = 0; + } + } + + } else { + + for (xg = D_left; xg <= D_right; xg++) { + yg = yry[xg][0]; + for (i = 0; i <= yg; i++) { + R_GRAM[Nx - 1 - i][xg] = 0; + G_GRAM[Nx - 1 - i][xg] = 0; + B_GRAM[Nx - 1 - i][xg] = 0; + } + } + + } + + + + //------------------------------------------------------------------------ + // SUB DIAL + //------------------------------------------------------------------------ + + angle = -(float)( freq % (freq_tick * 10) ) * reso / (float)freq_tick; + angle *= fsign; + + + // Rotation matrix---------------------------------------------- + for (i = -ZERO_rad + 1; i <= ZERO_rad - 1; i++) { + a = angle + i * reso; + sin_[i + ZERO_rad] = sin(a); cos_[i + ZERO_rad] = cos(a); + } + + + if (f_main_outside == 1) D_R_tmp = D_R_inside; + else D_R_tmp = D_R; + + + if (f_subtick10 == 1) { + + // Tick 10kHz---------------------------------------- + if (f_dispmode == 0) { + + for (i = L_sub10; i <= H_sub10; i++) { + + // every 10points + if (fsign > 0) k = i * 10 + ZERO_rad; else k = -i * 10 + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -1 - tick_width; xg <= 1; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick10 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + x = x + (float)D_center; + y = y - (float)D_R + (float)D_height; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= 0 && yi <= D_height ) + dot(x, y); + } + } + } + + } else { + + for (i = L_sub10; i <= H_sub10; i++) { + + // every 10points + if (fsign > 0) k = i * 10 + ZERO_rad; else k = -i * 10 + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -1 - tick_width; xg <= 1; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick10 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + y = (float)(Nx - 1) - ( y - (float)D_R + (float)D_height); + x = x + (float)D_center; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= Nx - 1 - D_height && yi <= Nx - 1 ) + dot(y, x); + } + } + } + + } + + } + + + + if (f_subtick5 == 1) { + + // Tick 5kHz---------------------------------------- + if (f_dispmode == 0) { + + for (i = L_sub5; i <= H_sub5; i += 2) { + + // every 5points + if (fsign > 0) k = i * 5 + ZERO_rad; else k = -i * 5 + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -1 - tick_width; xg <= 1; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick5 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + x = x + (float)D_center; + y = y - (float)D_R + (float)D_height; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= 0 && yi <= D_height ) + dot(x, y); + } + } + } + + } else { + + for (i = L_sub5; i <= H_sub5; i += 2) { + + if (fsign > 0) k = i * 5 + ZERO_rad; else k = -i * 5 + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -1 - tick_width; xg <= 1; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick5 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + y = (float)(Nx - 1) - ( y - (float)D_R + (float)D_height); + x = x + (float)D_center; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= Nx - 1 - D_height && yi <= Nx - 1 ) + dot(y, x); + } + } + } + + } + + } + + + if (f_subtick1 == 1) { + + //Tick 1kHz--------------------------------------------------------------------- + if (f_dispmode == 0) { + + for (i = L_sub1; i <= H_sub1; i++) { + + if (i % 5 != 0 ) { + + if (fsign > 0) k = i + ZERO_rad; else k = -i + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -tick_width; xg <= 0; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick1 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + x = x + (float)D_center; + y = y - (float)D_R + (float)D_height; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= 0 && yi <= D_height ) dot(x, y); + } + } + } + } + + } else { + + for (i = L_sub1; i <= H_sub1; i++) { + + if (i % 5 != 0 ) { + + if (fsign > 0) k = i + ZERO_rad; else k = -i + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -tick_width; xg <= 0; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick1 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + y = (float)(Nx - 1) - ( y - (float)D_R + (float)D_height); + x = x + (float)D_center; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= Nx - 1 - D_height && yi <= Nx - 1 ) dot(y, x); + } + } + } + } + + } + + } + + + + if (f_subnum == 1) { + + // Number(kHz)------------------------------------------ + for (i = L_sub10; i <= H_sub10; i++) // + { + fdisp = freq + i * (10 * freq_tick); + + if (fdisp >= 0) { + + fdisp /= (10 * freq_tick); + fdisp *= 10; + + // every 10kHz + if (fsign > 0) k = i * 10 + ZERO_rad; else k = -i * 10 + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + dgmax = 3; + if (freq_tick_main == 10000) dgmax = 2; + + + //------------------------------------------------------------------------------------- + for (dg = 0; dg < dgmax; dg++) + { + d = fdisp % 10; + + //for( xg=0; xg<13; xg++) // Scanning 13bit + for ( xg = 0; xg < 9; xg++) + { + fx = Dial_font[d + 0x10][xg]; + //for( yg=0; yg<24; yg++) // Scanning 24bit + for ( yg = 10; yg < 24; yg++) + { + fy = (long)( 1 << ( 23 - yg) ); + + if (f_dispmode == 0) { + + if ( ( fx & fy ) == fy ) + { + if (dgmax == 1) xr = (float)xg - 6.0 + xoff_font; // (13-1)/2 = 6 + if (dgmax == 2) xr = (float)xg - 6.0 + xoff_font - ( (float)(dg) - 0.5 ) * (float)fontpitch; + if (dgmax == 3) xr = (float)xg - 6.0 + xoff_font - ( (float)(dg) - 1.0 ) * (float)fontpitch; + + yr = (float)( D_R_tmp - (yg + TNCL) ) + yoff_font; + + xf = c * (xr) - s * (yr); + yf = s * (xr) + c * (yr); + + xf = xf + (float)D_center; + yf = yf - (float)D_R + (float)D_height; + + xi = (int)xf; yi = (int)yf; + if ( xi >= D_left && xi <= D_right && yi >= 0 && yi <= D_height ) dot(xf, yf); + + } + + } else { + + if ( ( fx & fy ) == fy ) + { + if (dgmax == 1) xr = (float)( (xg + TNCL) - D_R_tmp ); + if (dgmax == 2) xr = (float)( (xg + TNCL) - D_R_tmp ) - ( (float)(dg) - 1.0 ) * (float)fontpitch; + if (dgmax == 3) xr = (float)( (xg + TNCL) - D_R_tmp ) - ( (float)(dg) - 2.0 ) * (float)fontpitch; + + yr = (float)(12 - yg) + 0.5 * yoff_font; + + xf = c * (xr) - s * (yr); + yf = s * (xr) + c * (yr); + + xf = xf + (float)D_R - (float)D_height + (float)(Nx - 1); + yf = yf + (float)D_center; + + xi = (int)xf; yi = (int)yf; + if ( yi >= D_left && yi <= D_right && xi >= Nx - 1 - D_height && xi <= Nx - 1 ) dot(xf, yf); + } + + + } + + } + } + + fdisp /= 10; + } + } + } + + } + + + + + //------------------------------------------------------------------------------------ + // MAIN DIAL + //------------------------------------------------------------------------------------ + + if (f_main_outside == 1) D_R_tmp = D_R; + else D_R_tmp = D_R_inside; + + angle = -(float)( freq % (freq_tick_main * 10) ) * reso_main / (float)freq_tick_main; + angle *= fsign; + + + // Rotation matrix ------------------------------- + for (i = -ZERO_rad + 1; i <= ZERO_rad - 1; i++) { + a = angle + i * reso_main; + sin_[i + ZERO_rad] = sin(a); cos_[i + ZERO_rad] = cos(a); + } + + if (f_maintick10 == 1) { + + // Tick 10-------------------------------------- + if (f_dispmode == 0) { + + for (i = L_main10; i <= H_main10; i++) { + + if (fsign > 0) k = i * 10 + ZERO_rad; else k = -i * 10 + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -1 - tick_width; xg <= 1; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick_main10 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + x = x + (float)D_center; + y = y - (float)D_R + (float)D_height; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= 0 && yi <= D_height ) + dot(x, y); + } + } + } + + } else { + + + for (i = L_main10; i <= H_main10; i++) { + + if (fsign > 0) k = i * 10 + ZERO_rad; else k = -i * 10 + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -1 - tick_width; xg <= 1; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick_main10 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + y = (float)(Nx - 1) - ( y - (float)D_R + (float)D_height); + x = x + (float)D_center; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= Nx - 1 - D_height && yi <= Nx - 1 ) + dot(y, x); + } + } + } + + + } + + } + + + if (f_maintick5 == 1) { + + // Tick 5 ---------------------------------------- + if (f_dispmode == 0) { + + for (i = L_main5; i <= H_main5; i += 2) { + + if (fsign > 0) k = i * 5 + ZERO_rad; else k = -i * 5 + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -1 - tick_width; xg <= 1; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick_main5 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + x = x + (float)D_center; + y = y - (float)D_R + (float)D_height; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= 0 && yi <= D_height ) + dot(x, y); + } + } + } + + } else { + + for (i = L_main5; i <= H_main5; i += 2) { + + if (fsign > 0) k = i * 5 + ZERO_rad; else k = -i * 5 + ZERO_rad; + + s = sin_[k]; c = cos_[k]; + + for (xg = -1 - tick_width; xg <= 1; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick_main5 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + y = (float)(Nx - 1) - ( y - (float)D_R + (float)D_height); + x = x + (float)D_center; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= Nx - 1 - D_height && yi <= Nx - 1 ) + dot(y, x); + } + } + } + + } + + } + + + if (f_maintick1 == 1) { + + // Tick 1--------------------------------------------- + if (f_dispmode == 0) { + + for (i = L_main1; i <= H_main1; i++) { + + if (i % 5 != 0 ) { + if (fsign > 0) k = i + ZERO_rad; else k = -i + ZERO_rad; + s = sin_[k]; c = cos_[k]; + + for (xg = -tick_width; xg <= 0; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick_main1 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + x = x + (float)D_center; + y = y - (float)D_R + (float)D_height; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= 0 && yi <= D_height ) + dot(x, y); + } + } + } + } + + } else { + + for (i = L_main1; i <= H_main1; i++) { + + if (i % 5 != 0 ) { + if (fsign > 0) k = i + ZERO_rad; else k = -i + ZERO_rad; + s = sin_[k]; c = cos_[k]; + + for (xg = -tick_width; xg <= 0; xg++) { + for (yg = 1 + (D_R - D_R_tmp); yg < tick_main1 + (D_R - D_R_tmp); yg++) { + x = c * (float)xg - s * ((float)D_R - (float)yg); + y = s * (float)xg + c * ((float)D_R - (float)yg); + + y = (float)(Nx - 1) - ( y - (float)D_R + (float)D_height); + x = x + (float)D_center; + + xi = (int)x; yi = (int)y; + if ( xi >= D_left && xi <= D_right && yi >= Nx - 1 - D_height && yi <= Nx - 1 ) + dot(y, x); + } + } + } + } + + } + + } + + // Number ----------------------------------------------- + if (f_mainnum == 1) { + + + for (i = L_main10; i <= H_main10; i++) + { + fdisp = freq + i * (10 * freq_tick_main); + + if (fdisp >= 0) + { + + fdisp /= (10 * freq_tick_main); + + if (fsign > 0) k = i * 10 + ZERO_rad; else k = -i * 10 + ZERO_rad; //Step 10 point + s = sin_[k]; c = cos_[k]; + + + dgmax = 1; + if (fdisp < 10) { + if (freq_tick_main == 10000) dgmax = 2; + } else if (fdisp < 100) { + dgmax = 2; + } else if (fdisp < 1000) { + dgmax = 3; + } else { + dgmax = 4; + } + + //------------------------------------------------- + for (dg = 0; dg < dgmax; dg++) + { + d = fdisp % 10; + + //for( xg=0; xg<13; xg++) // Scanning 13bit + for ( xg = 0; xg < 9; xg++) + { + fx = Dial_font[d + 0x10][xg]; + //for( yg=0; yg<24; yg++) // Scanning 24bit + for ( yg = 10; yg < 24; yg++) + { + fy = (long)( 1 << ( 23 - yg) ); //23 + + if (f_dispmode == 0) { + + if ( ( fx & fy ) == fy ) + { + dgf = (float)dg; + + if (dg == 0 && freq_tick_main == 10000) + dgf = (float)dg - 0.6; + + if (dgmax == 1) xr = (float)xg - 6.0 + xoff_font; // (13-1)/2 = 6 + if (dgmax == 2) xr = (float)xg - 6.0 + xoff_font - ( dgf - 0.5 ) * (float)fontpitch; + if (dgmax == 3) xr = (float)xg - 6.0 + xoff_font - ( dgf - 1.0 ) * (float)fontpitch; + if (dgmax == 4) xr = (float)xg - 6.0 + xoff_font - ( dgf - 1.5 ) * (float)fontpitch; + + yr = (float)( D_R_tmp - (yg + TNCL_main) ) + yoff_font; + + xf = c * (xr) - s * (yr); + yf = s * (xr) + c * (yr); + + xf = xf + (float)D_center; + yf = yf - (float)D_R + (float)D_height; + + xi = (int)xf; yi = (int)yf; + if ( xi >= D_left && xi <= D_right && yi >= 0 && yi <= D_height ) dot(xf, yf); + } + + } else { + + if ( ( fx & fy ) == fy ) + { + dgf = (float)dg; + + if (dg == 0 && freq_tick_main == 10000) + dgf = (float)dg - 0.6; + + if (dgmax == 1) xr = (float)( (xg + TNCL_main) - D_R_tmp ); // (13-1)/2 = 6 + if (dgmax == 2) xr = (float)( (xg + TNCL_main) - D_R_tmp ) - (dgf - 1.0 ) * (float)fontpitch; + if (dgmax == 3) xr = (float)( (xg + TNCL_main) - D_R_tmp ) - (dgf - 2.0 ) * (float)fontpitch; + if (dgmax == 4) xr = (float)( (xg + TNCL_main) - D_R_tmp ) - (dgf - 3.0 ) * (float)fontpitch; + + yr = (float)(12 - yg) + 0.5 * yoff_font; + + xf = c * (xr) - s * (yr); + yf = s * (xr) + c * (yr); + + xf = xf + (float)D_R - (float)D_height + (float)(Nx - 1); + yf = yf + (float)D_center; + + xi = (int)xf; yi = (int)yf; + if ( yi >= D_left && yi <= D_right && xi >= Nx - 1 - D_height && xi <= Nx - 1 ) dot(xf, yf); + } + + } + } + } + + + // Decimal point--------------------------------------- + if (dg == 0) + { + if (freq_tick_main == 10000) + { + for (xg = -5; xg <= -4; xg++) { + for (yg = 21; yg <= 22; yg++) { + + if ( + //(xg==-6 && yg==20)|| + //(xg==-6 && yg==22)|| + //(xg==-4 && yg==20)|| + //(xg==-4 && yg==22) + 0 + ) + {} else + { + if (f_dispmode == 0) { + if (dgmax == 1) xr = (float)xg + 0.29 * (float)fontpitch + xoff_point; + if (dgmax == 2) xr = (float)xg + 0.69 * (float)fontpitch + xoff_point; + if (dgmax == 3) xr = (float)xg + 1.29 * (float)fontpitch + xoff_point; + if (dgmax == 4) xr = (float)xg + 1.69 * (float)fontpitch + xoff_point; + + yr = (float)( D_R_tmp - (yg + TNCL_main) ) + yoff_font; + + + xf = c * (xr) - s * (yr); + yf = s * (xr) + c * (yr); + + xf = xf + (float)D_center; + yf = yf - (float)D_R + (float)D_height; + + xi = (int)xf; yi = (int)yf; + if ( xi >= D_left && xi <= D_right && yi >= 0 && yi <= D_height ) { + dot(xf, yf); + if (tick_width == 1) dot(xf, yf + 0.3); + } + + + } else { + if (dgmax == 1) xr = (float)( (xg + TNCL_main) - D_R_tmp - 1) + 0.7 * (float)fontpitch + xoff_point; + if (dgmax == 2) xr = (float)( (xg + TNCL_main) - D_R_tmp - 1) + 1.7 * (float)fontpitch + xoff_point; + if (dgmax == 3) xr = (float)( (xg + TNCL_main) - D_R_tmp - 1) + 2.7 * (float)fontpitch + xoff_point; + if (dgmax == 4) xr = (float)( (xg + TNCL_main) - D_R_tmp - 1) + 3.7 * (float)fontpitch + xoff_point; + + yr = (float)(12 - yg) + 0.5 * yoff_font; + + xf = c * (xr) - s * (yr); + yf = s * (xr) + c * (yr); + + xf = xf + (float)D_R - (float)D_height + (float)(Nx - 1); + yf = yf + (float)D_center; + + xi = (int)xf; yi = (int)yf; + if ( yi >= D_left && yi <= D_right && xi >= Nx - 1 - D_height && xi <= Nx - 1 ) { + dot(xf, yf); + if (tick_width == 1) dot(xf + 0.3, yf); + } + } + } + + } + } + } + + } + + fdisp /= 10; + } + } + } + + } + + + + + //-------------------------------------------------------------------- + // coloring + //-------------------------------------------------------------------- + unsigned int cR, cG, cB; + unsigned int dcR, dcG, dcB; + int ccR, ccG, ccB; + float kido; + + + dcR = (cl_DIAL_BG >> 16) & 0xFF; + dcG = (cl_DIAL_BG >> 8) & 0xFF; + dcB = (cl_DIAL_BG) & 0xFF; + + + + // Outside Tick + if (f_main_outside == 1) { + cR = (cl_TICK_main >> 16) & 0xFF; + cG = (cl_TICK_main >> 8 ) & 0xFF; + cB = cl_TICK_main & 0xFF; + } else { + cR = (cl_TICK >> 16) & 0xFF; + cG = (cl_TICK >> 8 ) & 0xFF; + cB = cl_TICK & 0xFF; + } + + + if (f_dispmode == 0){ + for (xg = D_left; xg <= D_right; xg++) { + for (i = yry[xg][1]; i <= yry[xg][0]; i++) { + + if ( R_GRAM[xg][i] != 0) { + kido = (float)R_GRAM[xg][i] / (float)255.0; + ccR = (int)(kido * (float)cR + (1.0 - kido) * (float)dcR + 0.5 ); + ccG = (int)(kido * (float)cG + (1.0 - kido) * (float)dcG + 0.5 ); + ccB = (int)(kido * (float)cB + (1.0 - kido) * (float)dcB + 1.0 ); + if (ccR > 0xFF) ccR = 0xFF; + if (ccG > 0xFF) ccG = 0xFF; + if (ccB > 0xFF) ccB = 0xFF; + R_GRAM[xg][i] = (unsigned char)ccR; + G_GRAM[xg][i] = (unsigned char)ccG; + B_GRAM[xg][i] = (unsigned char)ccB; + } + + } + } + + }else{ + + for (xg = D_left; xg <= D_right; xg++) { + for (i = yry[xg][1]; i <= yry[xg][0]; i++) { + + + if ( R_GRAM[Nx - 1 - i][xg] != 0) { + kido = (float)R_GRAM[Nx - 1 - i][xg] / (float)255.0; + ccR = (int)(kido * (float)cR + (1.0 - kido) * (float)dcR + 0.5); + ccG = (int)(kido * (float)cG + (1.0 - kido) * (float)dcG + 0.5); + ccB = (int)(kido * (float)cB + (1.0 - kido) * (float)dcB + 1.0); + if (ccR > 0xFF) ccR = 0xFF; + if (ccG > 0xFF) ccG = 0xFF; + if (ccB > 0xFF) ccB = 0xFF; + R_GRAM[Nx - 1 - i][xg] = (unsigned char)ccR; + G_GRAM[Nx - 1 - i][xg] = (unsigned char)ccG; + B_GRAM[Nx - 1 - i][xg] = (unsigned char)ccB; + } + + } + } + + } + + + + + //Outside Number--------------------- + if (f_main_outside == 1) { + cR = (cl_NUM_main >> 16) & 0xFF; + cG = (cl_NUM_main >> 8 ) & 0xFF; + cB = cl_NUM_main & 0xFF; + } else { + cR = (cl_NUM >> 16) & 0xFF; + cG = (cl_NUM >> 8 ) & 0xFF; + cB = cl_NUM & 0xFF; + } + + if (f_dispmode == 0){ + for (xg = D_left; xg <= D_right; xg++) { + for (i = yry[xg][2]; i < yry[xg][1]; i++) { + + if (R_GRAM[xg][i] != 0) { + kido = (float)R_GRAM[xg][i] / (float)255.0; + ccR = (int)(kido * (float)cR + (1.0 - kido) * (float)dcR + 0.5); + ccG = (int)(kido * (float)cG + (1.0 - kido) * (float)dcG + 0.5); + ccB = (int)(kido * (float)cB + (1.0 - kido) * (float)dcB + 1.0); + if (ccR > 0xFF) ccR = 0xFF; + if (ccG > 0xFF) ccG = 0xFF; + if (ccB > 0xFF) ccB = 0xFF; + R_GRAM[xg][i] = (unsigned char)ccR; + G_GRAM[xg][i] = (unsigned char)ccG; + B_GRAM[xg][i] = (unsigned char)ccB; + } + + } + } + + }else{ + + for (xg = D_left; xg <= D_right; xg++) { + for (i = yry[xg][2]; i < yry[xg][1]; i++) { + + if (R_GRAM[Nx - 1 - i][xg] != 0) { + kido = (float)R_GRAM[Nx - 1 - i][xg] / (float)255.0; + ccR = (int)(kido * (float)cR + (1.0 - kido) * (float)dcR + 0.5); + ccG = (int)(kido * (float)cG + (1.0 - kido) * (float)dcG + 0.5); + ccB = (int)(kido * (float)cB + (1.0 - kido) * (float)dcB + 1.0); + if (ccR > 0xFF) ccR = 0xFF; + if (ccG > 0xFF) ccG = 0xFF; + if (ccB > 0xFF) ccB = 0xFF; + R_GRAM[Nx - 1 - i][xg] = (unsigned char)ccR; + G_GRAM[Nx - 1 - i][xg] = (unsigned char)ccG; + B_GRAM[Nx - 1 - i][xg] = (unsigned char)ccB; + } + } + } + } + + + + + //Inside Tick--------------- + if (f_main_outside == 1) { + cR = (cl_TICK >> 16) & 0xFF; + cG = (cl_TICK >> 8 ) & 0xFF; + cB = cl_TICK & 0xFF; + } else { + cR = (cl_TICK_main >> 16) & 0xFF; + cG = (cl_TICK_main >> 8 ) & 0xFF; + cB = cl_TICK_main & 0xFF; + } + + + if (f_dispmode == 0) { + + for (xg = D_left; xg <= D_right; xg++) { + for (i = yry[xg][3]; i < yry[xg][2]; i++) { + + if (R_GRAM[xg][i] != 0) { + kido = (float)R_GRAM[xg][i] / (float)255.0; + ccR = (int)(kido * (float)cR + (1.0 - kido) * (float)dcR + 0.5); + ccG = (int)(kido * (float)cG + (1.0 - kido) * (float)dcG + 0.5); + ccB = (int)(kido * (float)cB + (1.0 - kido) * (float)dcB + 1.0); + if (ccR > 0xFF) ccR = 0xFF; + if (ccG > 0xFF) ccG = 0xFF; + if (ccB > 0xFF) ccB = 0xFF; + R_GRAM[xg][i] = (unsigned char)ccR; + G_GRAM[xg][i] = (unsigned char)ccG; + B_GRAM[xg][i] = (unsigned char)ccB; + } + + } + } + + }else{ + + for (xg = D_left; xg <= D_right; xg++) { + for (i = yry[xg][3]; i < yry[xg][2]; i++) { + + if (R_GRAM[Nx - 1 - i][xg] != 0) { + kido = (float)R_GRAM[Nx - 1 - i][xg] / (float)255.0; + ccR = (int)(kido * (float)cR + (1.0 - kido) * (float)dcR + 0.5); + ccG = (int)(kido * (float)cG + (1.0 - kido) * (float)dcG + 0.5); + ccB = (int)(kido * (float)cB + (1.0 - kido) * (float)dcB + 1.0); + if (ccR > 0xFF) ccR = 0xFF; + if (ccG > 0xFF) ccG = 0xFF; + if (ccB > 0xFF) ccB = 0xFF; + R_GRAM[Nx - 1 - i][xg] = (unsigned char)ccR; + G_GRAM[Nx - 1 - i][xg] = (unsigned char)ccG; + B_GRAM[Nx - 1 - i][xg] = (unsigned char)ccB; + } + + } + } + } + + + + + //Inside Number-------------------------- + if (f_main_outside == 1) { + cR = (cl_NUM >> 16) & 0xFF; + cG = (cl_NUM >> 8 ) & 0xFF; + cB = cl_NUM & 0xFF; + } else { + cR = (cl_NUM_main >> 16) & 0xFF; + cG = (cl_NUM_main >> 8 ) & 0xFF; + cB = cl_NUM_main & 0xFF; + } + + + if (f_dispmode == 0) { + + for (xg = D_left; xg <= D_right; xg++) { + for (i = 0; i < yry[xg][3]; i++) { + + if (R_GRAM[xg][i] != 0) { + kido = (float)R_GRAM[xg][i] / (float)255.0; + ccR = (int)(kido * (float)cR + (1.0 - kido) * (float)dcR + 0.5); + ccG = (int)(kido * (float)cG + (1.0 - kido) * (float)dcG + 0.5); + ccB = (int)(kido * (float)cB + (1.0 - kido) * (float)dcB + 1.0); + if (ccR > 0xFF) ccR = 0xFF; + if (ccG > 0xFF) ccG = 0xFF; + if (ccB > 0xFF) ccB = 0xFF; + R_GRAM[xg][i] = (unsigned char)ccR; + G_GRAM[xg][i] = (unsigned char)ccG; + B_GRAM[xg][i] = (unsigned char)ccB; + } + + } + } + + }else{ + + for (xg = D_left; xg <= D_right; xg++) { + for (i = 0; i < yry[xg][3]; i++) { + + + if (R_GRAM[Nx - 1 - i][xg] != 0) { + kido = (float)R_GRAM[Nx - 1 - i][xg] / (float)255.0; + ccR = (int)(kido * (float)cR + (1.0 - kido) * (float)dcR + 0.5); + ccG = (int)(kido * (float)cG + (1.0 - kido) * (float)dcG + 0.5); + ccB = (int)(kido * (float)cB + (1.0 - kido) * (float)dcB + 1.0); + if (ccR > 0xFF) ccR = 0xFF; + if (ccG > 0xFF) ccG = 0xFF; + if (ccB > 0xFF) ccB = 0xFF; + R_GRAM[Nx - 1 - i][xg] = (unsigned char)ccR; + G_GRAM[Nx - 1 - i][xg] = (unsigned char)ccG; + B_GRAM[Nx - 1 - i][xg] = (unsigned char)ccB; + } + + } + } + } + + + + //----DIAL base----------------------------------------------------------------------- + + if (f_dispmode == 0) { + + for (xg = D_left; xg <= D_right; xg++) { + yg = yry[xg][0]; + for (i = 0; i <= yg; i++) { + + if ((R_GRAM[xg][i] == 0) && (G_GRAM[xg][i] == 0) && (B_GRAM[xg][i] == 0)) + { + R_GRAM[xg][i] = dcR; + G_GRAM[xg][i] = dcG; + B_GRAM[xg][i] = dcB; + } + } + } + + } else { + + for (xg = D_left; xg <= D_right; xg++) { + yg = yry[xg][0]; + for (i = 0; i <= yg; i++) { + + if ((R_GRAM[Nx - 1 - i][xg] == 0) && (G_GRAM[Nx - 1 - i][xg] == 0) && (B_GRAM[Nx - 1 - i][xg] == 0)) + { + R_GRAM[Nx - 1 - i][xg] = dcR; + G_GRAM[Nx - 1 - i][xg] = dcG; + B_GRAM[Nx - 1 - i][xg] = dcB; + } + } + } + + } + + + + //-- Dial pointer --------------------------------------------------------------- + int ypt = D_height + DP_pos - DP_len; + if (ypt < 0) ypt = 0; + + if (f_dispmode == 0) { + + for (xg = D_center - (DP_width - 1); xg <= D_center + (DP_width - 1); xg++) { + for (yg = ypt; yg < (D_height + DP_pos); yg++) { + R_GRAM[xg][yg] = (cl_POINTER >> 16) & 0xFF; + G_GRAM[xg][yg] = (cl_POINTER >> 8) & 0xFF; + B_GRAM[xg][yg] = (cl_POINTER) & 0xFF; + } + } + + } else { + + for (xg = D_center - (DP_width - 1); xg <= D_center + (DP_width - 1); xg++) { + for (yg = ypt; yg < (D_height + DP_pos); yg++) { + R_GRAM[Nx - 1 - yg][xg] = (cl_POINTER >> 16) & 0xFF; + G_GRAM[Nx - 1 - yg][xg] = (cl_POINTER >> 8) & 0xFF; + B_GRAM[Nx - 1 - yg][xg] = (cl_POINTER) & 0xFF; + } + } + + } + + + +} +/*--------------------------------------------------------------------------- + * End of void Dial(long freq) +---------------------------------------------------------------------------- */ + + +void dot(float x, float y) +{ + int xd, yd, xu, yu; + float Rxu, Rxd, Ryu, Ryd; + unsigned int dat; + + if(x>0 && y>0) + { + if (f_dispmode == 0) x = x + 0.5 * (float)(tick_width); + else y = y + 0.5 * (float)(tick_width); + + xd = (int)x; yd = (int)y; + + if ( xd >= 0 && xd < Nx - 1 && yd >= 0 && yd < Ny - 1) { + xu = xd + 1; yu = yd + 1; + + Rxd = ( (float)xu - x ); + Rxu = ( x - (float)xd ); + Ryd = ( (float)yu - y ); + Ryu = ( y - (float)yd ); + + + dat = (int)R_GRAM[xd][yd] + (int)(Rxd * Ryd * 256.0); + if (dat > 0xFF) dat = 0xFF; + R_GRAM[xd][yd] = (unsigned char)dat; + + dat = (unsigned int)R_GRAM[xu][yd] + (unsigned int)(Rxu * Ryd * 256.0); + if (dat > 0xFF) dat = 0xFF; + R_GRAM[xu][yd] = (unsigned char)dat; + + dat = (unsigned int)R_GRAM[xd][yu] + (unsigned int)(Rxd * Ryu * 256.0); + if (dat > 0xFF) dat = 0xFF; + R_GRAM[xd][yu] = (unsigned char)dat; + + dat = (unsigned int)R_GRAM[xu][yu] + (unsigned int)(Rxu * Ryu * 256.0); + if (dat > 0xFF) dat = 0xFF; + R_GRAM[xu][yu] = (unsigned char)dat; + } + } +} + +/* +void dot(float x, float y) +{ + R_GRAM[(int)x][(int)y]=255; +} +*/ diff --git a/VFOsys_astep/dial.h b/VFOsys_astep/dial.h new file mode 100644 index 0000000..84a4145 --- /dev/null +++ b/VFOsys_astep/dial.h @@ -0,0 +1,20 @@ +/* + * File: dial.h + * Author: JF3HZB / T.UEBO + * + * Created on 2019/02/10, 22:13 + */ + + +#ifndef DIAL_H +#define DIAL_H + +void init_Dial(void); +void Dial(long freq); +void dot(float, float); + +void Sel_font12(void); +void Sel_font14(void); +void Sel_font16(void); + +#endif /* DIAL_H */ diff --git a/VFOsys_astep/dial_font.h b/VFOsys_astep/dial_font.h new file mode 100644 index 0000000..ce7066a --- /dev/null +++ b/VFOsys_astep/dial_font.h @@ -0,0 +1,56 @@ +/* + * File: dial_font.h + * Author: JF3HZB / T.UEBO + * + * Created on 2019/02/10, 22:13 + */ + +#ifndef _dial_font_ +#define _dial_font_ + +const int Dial_font16[10][13] = +{ + {0x000007E0, 0x00001FF8, 0x0000381C, 0x00002004, 0x00002004, 0x0000381C, 0x00001FF8, 0x000007E0, 0,0,0,0,0}, + {0x00000000, 0x00001004, 0x00001004, 0x00003FFC, 0x00003FFC, 0x00000004, 0x00000004, 0x00000000, 0,0,0,0,0}, + {0x00000C1C, 0x00001C3C, 0x00003064, 0x000020C4, 0x00002184, 0x0000330C, 0x00001E3C, 0x00000C30, 0,0,0,0,0}, + {0x00000830, 0x00001838, 0x0000310C, 0x00002104, 0x00002104, 0x0000338C, 0x00001EF8, 0x00000C70, 0,0,0,0,0}, + {0x00000060, 0x000001E0, 0x000007A0, 0x00001E20, 0x00003824, 0x00003FFC, 0x00003FFC, 0x00000024, 0,0,0,0,0}, + {0x00000010, 0x00003F18, 0x00003F0C, 0x00002204, 0x00002204, 0x0000230C, 0x000021F8, 0x000020F0, 0,0,0,0,0}, + {0x00000FF0, 0x00001FF8, 0x0000330C, 0x00002204, 0x00002204, 0x0000330C, 0x000019F8, 0x000008F0, 0,0,0,0,0}, + {0x00000C00, 0x00003C00, 0x00003000, 0x0000203C, 0x000021FC, 0x000027C0, 0x00003E00, 0x00003800, 0,0,0,0,0}, + {0x00000C70, 0x00001EF8, 0x0000338C, 0x00002104, 0x00002104, 0x0000338C, 0x00001EF8, 0x00000C70, 0,0,0,0,0}, + {0x00000F10, 0x00001F98, 0x000030CC, 0x00002044, 0x00002044, 0x000030CC, 0x00001FF8, 0x00000FF0, 0,0,0,0,0} +}; + + +const int Dial_font14[10][13]={ + {0x00000000, 0x00000FF8, 0x00001FFC, 0x00003006, 0x00003006, 0x00003006, 0x00001FFC, 0x00000FF8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00000000, 0x00000800, 0x00001800, 0x00003FFE, 0x00003FFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00001C1E, 0x0000383E, 0x00003076, 0x000030E6, 0x000031C6, 0x00003F86, 0x00001F06, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00001C1C, 0x0000380E, 0x00003186, 0x00003186, 0x00003186, 0x00003FFE, 0x00001EFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x000000F0, 0x000003F0, 0x00000F30, 0x00001C30, 0x00003830, 0x00003FFE, 0x00003FFE, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00003F8C, 0x00003F8E, 0x00003186, 0x00003186, 0x00003186, 0x000031FE, 0x000000FC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00001FFC, 0x00003FFE, 0x00003186, 0x00003186, 0x00003186, 0x000039FE, 0x000018FC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00003800, 0x00003000, 0x0000301E, 0x000030FE, 0x000033F0, 0x00003F80, 0x00003E00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00001EFC, 0x00003FFE, 0x00003186, 0x00003186, 0x00003186, 0x00003FFE, 0x00001EFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00001F8C, 0x00003FCE, 0x000030C6, 0x000030C6, 0x000030C6, 0x00003FFE, 0x00001FFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 } +}; + + +const int Dial_font12[10][13] = +{ + {0x00000000, 0x000007FC, 0x00000FFE, 0x00000C06, 0x00000C06, 0x00000FFE, 0x000007FC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00000000, 0x00000600, 0x00000FFE, 0x00000FFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x0000060E, 0x00000E1E, 0x00000C36, 0x00000C66, 0x00000FC6, 0x00000786, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x0000060C, 0x00000E0E, 0x00000CC6, 0x00000CC6, 0x00000FFE, 0x0000077C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00000078, 0x000001F8, 0x00000798, 0x00000E18, 0x00000FFE, 0x00000FFE, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00000FCC, 0x00000FCE, 0x00000CC6, 0x00000CC6, 0x00000CFE, 0x00000C7C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x000007FC, 0x00000FFE, 0x00000CC6, 0x00000CC6, 0x00000CFE, 0x0000067C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x00000E00, 0x00000C00, 0x00000C3E, 0x00000DFE, 0x00000FE0, 0x00000F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x0000077C, 0x00000FFE, 0x00000CC6, 0x00000CC6, 0x00000FFE, 0x0000077C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }, + {0x00000000, 0x000007CC, 0x00000FE6, 0x00000C66, 0x00000C66, 0x00000FFE, 0x000007FC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 } +}; + + + +#endif diff --git a/VFOsys_astep/dial_prm.h b/VFOsys_astep/dial_prm.h new file mode 100644 index 0000000..c054827 --- /dev/null +++ b/VFOsys_astep/dial_prm.h @@ -0,0 +1,76 @@ +/*---------------------------------------------------------------------------------- + Dial parameter +-----------------------------------------------------------------------------------*/ +char f_dispmode = 0; // 0:Normal / 1: Rotate 90 degrees +char f_main_outside = 0; // 0:Main dial is inside / 1:Main dial is outside +char f_FONT = 0; // Font 0, 1, or 2 +char f_rev = 0; // Increasing Direction of dial rotation 0: CW / 1: CCW + +char f_maintick1 = 1; // Main Tick(1) display on/off +char f_maintick5 = 1; // Main Tick(5) display on/off +char f_maintick10 = 1; // Main Tick(10) display on/off +char f_mainnum = 1; // Main Number display on/off + +char f_subtick1 = 1; // Sub Tick(1) display on/off +char f_subtick5 = 1; // Sub Tick(5) display on/off +char f_subtick10 = 1; // Sub Tick(10) display on/off +char f_subnum = 1; // Sub Number display on/off + + +//メインダイアル1目盛あたりの周波数 ------------------------------------------------------------ +int freq_tick_main = 10000; // Frequency/tikcs of Main dial (if 10000: 10kHz / else: 100kHz) + +//ダイアル表示エリア------------------------------------------------------------ +int D_height = 80; // Display position + +//ダイアル半径------------------------------------------------------------------ +int D_R = 160; //Dial radius (if 45000, Linear scale) + +//メイン,サブダイアルの間隔---------------------------------------------------- +int Dial_space = 40; // Space bitween Main and Sub Dial + +//目盛り間隔-------------------------------------------------------------------- +int tick_pitch_main = 50; // Main Tick Pitch +int tick_pitch = 60; // Sub Tick Pitch + +//目盛りの太さ------------------------------------------------------------------ +int tick_width = 1; // Width of Tick( 0 or 1 ) + +//目盛りの長さ(main)------------------------------------------------------------ +int tick_main1 = 4; // Length of Main Tick(1) +int tick_main5 = 9; // Length of Main Tick(5) +int tick_main10 = 12; // Length of Main Tick(10) + +//目盛りの長さ(sub)------------------------------------------------------------- +int tick1 = 8; // Length of Sub Tick(1) +int tick5 = 11; // Length of Sub Tick(5) +int tick10 = 15; // Length of Sub Tick(10) + +//目盛り・数字間のスペース------------------------------------------------------ +int TNCL_main = 13; // Space bitween Number and Tick (Main) +int TNCL = 16; // Space bitween Number and Tick (Sub) + +// 指針長さ,幅----------------------------------------------------------------- +int DP_len = 90; // Length of Dial pointer +int DP_width = 1; // Width of Dial pointer +int DP_pos = 12; // Position of Dial pointer + + +//Coloring 0xRRGGBB ----------------------------------------------------------- +// 背景 +unsigned long cl_BG = 0x000000; // Background +// 指針色 +unsigned long cl_POINTER = 0xFF0000; // Dial pointer +// main目盛 +unsigned long cl_TICK_main = 0x00FF00; // Main Tick +// main数字 +unsigned long cl_NUM_main = 0xFFFFFF; //Main Number +// sub目盛 +unsigned long cl_TICK = 0x00FFFF; // Sub Tick +// sub数字 +unsigned long cl_NUM = 0xFFFFFF; // Sub Number +// ダイアルベース +unsigned long cl_DIAL_BG = 0x000000; // Dial base +/*--------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------*/ diff --git a/VFOsys_astep/display.cpp b/VFOsys_astep/display.cpp new file mode 100644 index 0000000..332d5b3 --- /dev/null +++ b/VFOsys_astep/display.cpp @@ -0,0 +1,308 @@ +/* + * File: display.cpp + * Author: JF3HZB / T.UEBO + * + * Created on 2019/02/10, 22:13 + * + * ------------------------------------------- + * Dedicated Display Interface for ESP32 + *-------------------------------------------- + * + */ + +#include +#include +#include "soc/spi_reg.h" +#include "display.h" + +#define VSPI 3 +#define HSPI 2 + +#define sel_SPI VSPI + +#define SCLK 18 // SPI clock pin +#define SDI -1 // MISO(master input slave output) not using +#define SDO 23 // MOSI(master output slave input) pin +#define CS 5 // Chip Select pin +#define DC 2 // Data/Command pin +#define RST 15 // Reset pin +//#define RST 0 // Reset pin + +uint8_t R_GRAM[Nx][Ny]; +uint8_t G_GRAM[Nx][Ny]; +uint8_t B_GRAM[Nx][Ny]; +uint16_t GRAM65k[Nx][Ny]; + + + +//------------------------------------------------------- +#ifdef ST7735 +//------------------------------------------------------- +void Transfer_Image() { + + #define block_size 512 + int kxy, pt=0, xp, yp; + uint32_t col_data; + + d_Command(0x2A); + SPI.write(0); SPI.write(0); + SPI.write((Xw-1)>>8); SPI.write(Xw-1); + d_Command(0x2B); + SPI.write(0); SPI.write(0); + SPI.write((Yw-1)>>8); SPI.write(Yw-1); + d_Command(0x2C); + + + + SET_PERI_REG_BITS( SPI_MOSI_DLEN_REG(sel_SPI), + SPI_USR_MOSI_DBITLEN, + (block_size-1), + SPI_USR_MOSI_DBITLEN_S + ); + + for(kxy=0; kxy<(Nx*Ny*16/block_size); kxy++) { + while (READ_PERI_REG(SPI_CMD_REG(sel_SPI)) & SPI_USR); + + for (uint32_t i = 0; i < 16; i++){ + xp=pt/Ny; yp=pt%Ny; + col_data=GRAM65k[xp][yp]; + pt++; + xp=pt/Ny; yp=pt%Ny; + col_data|=(GRAM65k[xp][yp]<<16); + pt++; + WRITE_PERI_REG((SPI_W0_REG(sel_SPI) + (i << 2)), col_data); + } + + SET_PERI_REG_MASK(SPI_CMD_REG(sel_SPI), SPI_USR); + } +} + + + + +/*----------------------------------------------------------------- + Initialize ST7735 +------------------------------------------------------------------ */ +void display_init(void){ + pinMode(RST, OUTPUT); //Set RESET pin + pinMode(DC, OUTPUT); //Set Data/Command pin + SPI.begin(SCLK, SDI, SDO, CS); //VSPI setting + + SPI.setBitOrder(MSBFIRST); + //SPI.setFrequency(10000000); + //SPI.setFrequency(20000000); + SPI.setFrequency(27000000); + //SPI.setFrequency(40000000); + SPI.setDataMode(SPI_MODE0); + SPI.setHwCs(true); //Set Hardware CS pin + + //Hardware Reset------------ + digitalWrite(RST, HIGH); + delay(10); + digitalWrite(RST, LOW); + delay(10); + digitalWrite(RST, HIGH); + delay(100); + + digitalWrite(DC, HIGH); + + d_Command(0x01); // Software reset + delay (150); //Delay 150ms + d_Command(0x11); //Sleep out + delay (300); + + d_Command(0xB1); SPI.write(0x01); SPI.write(0x2C); SPI.write(0x2D); + d_Command(0xB2); SPI.write(0x01); SPI.write(0x2C); SPI.write(0x2D); + d_Command(0xB3); SPI.write(0x01); SPI.write(0x2C); SPI.write(0x2D); + SPI.write(0x01); SPI.write(0x2C); SPI.write(0x2D); + + d_Command(0xB4); SPI.write(0x07); //Column inversion + + d_Command(0xC0); SPI.write(0xA2); SPI.write(0x02); SPI.write(0x84); + d_Command(0xC1); SPI.write(0xC5); + d_Command(0xC2); SPI.write(0x0A); SPI.write(0x00); + d_Command(0xC3); SPI.write(0x8A); SPI.write(0x2A); + d_Command(0xC4); SPI.write(0x8A); SPI.write(0xEE); + d_Command(0xC5); SPI.write(0x0E); //VCOM + + d_Command(0x20); // not invert display, + d_Command(0x36); SPI.write(0xC8); //Mem access ctl (directions), + + d_Command(0x3A); // set color mode + SPI.write(0x05); //65k mode + + d_Command(0x2A); // Column addr set x=0 to 127 + SPI.write(0x00); SPI.write(0x00); SPI.write(0x00); SPI.write(0x7F); + d_Command(0x2B); // Raw addr set y=0 to 159 + SPI.write(0x00); SPI.write(0x00); SPI.write(0x00); SPI.write(0x9F); + + d_Command(0xE0); + SPI.write(0x02); SPI.write(0x1C); SPI.write(0x07); SPI.write(0x12); + SPI.write(0x37); SPI.write(0x32); SPI.write(0x29); SPI.write(0x2D); + SPI.write(0x29); SPI.write(0x25); SPI.write(0x2B); SPI.write(0x39); + SPI.write(0x00); SPI.write(0x01); SPI.write(0x03); SPI.write(0x10); + d_Command(0xE1); + SPI.write(0x03); SPI.write(0x1D); SPI.write(0x07); SPI.write(0x06); + SPI.write(0x2E); SPI.write(0x2C); SPI.write(0x29); SPI.write(0x2D); + SPI.write(0x2E); SPI.write(0x2E); SPI.write(0x37); SPI.write(0x3F); + SPI.write(0x00); SPI.write(0x00); SPI.write(0x02); SPI.write(0x10); + + d_Command(0x13); + delay(10); + d_Command(0x29); + delay(100); + d_Command(0x36); SPI.write(0xC0); + delay(10); +} +#endif + + + + +//--------------------------------------------------------------------------------- +#ifdef SEPS525 +//--------------------------------------------------------------------------------- +void Transfer_Image() { + int pt=0, xp, yp; + + d_Command(0x17); + SPI.write(0); + d_Command(0x18); + SPI.write(0x9F); + d_Command(0x19); + SPI.write(0); + d_Command(0x1A); + SPI.write(0x7F); + d_Command(0x22); + + SET_PERI_REG_BITS( SPI_MOSI_DLEN_REG(sel_SPI), + SPI_USR_MOSI_DBITLEN, + 15, + SPI_USR_MOSI_DBITLEN_S + ); + for(pt=0; pt>3)); + GRAM65k[xps][yps]=(col16 >> 8) | (col16 << 8); + } + } +} diff --git a/VFOsys_astep/display.h b/VFOsys_astep/display.h new file mode 100644 index 0000000..06a625a --- /dev/null +++ b/VFOsys_astep/display.h @@ -0,0 +1,34 @@ +/* + * File: display.h + * Author: JF3HZB / T.UEBO + * + * Created on 2019/02/10, 22:13 + */ + +#ifndef _display_ +#define _display_ + +/*---------------------------------------- + Select Display controller + ST7735 : LCD (1.8inch 128x160 TFT) + SEPS525: OLED ( NHD-1.69-160128UGC3 ) +-----------------------------------------*/ + +//#define SEPS525 +#define ST7735 + +/*---------------------------------------*/ + + +#define Xw 128 +#define Yw 160 + +#define Nx Yw +#define Ny Xw + +void display_init(void); +void Transfer_Image(void); +void trans65k(void); +void d_Command(uint8_t d); + +#endif diff --git a/VFOsys_astep/font.h b/VFOsys_astep/font.h new file mode 100644 index 0000000..fb25ea6 --- /dev/null +++ b/VFOsys_astep/font.h @@ -0,0 +1,217 @@ +/* + * File: font.h + * Author: JF3HZB / T.UEBO + * + * Created on 2018/03/21, 23:04 + */ + +#ifndef _font_ +#define _font_ + +#include "font12.h" +#include "font16.h" +#include "font20.h" + + +/*********************************** +* Font Data 0x20 to 0xDF 192 +***********************************/ + +const char font[192][5] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // " " 0x20 + { 0x00, 0x00, 0x4f, 0x00, 0x00 }, // ! 0x21 + { 0x00, 0x07, 0x00, 0x07, 0x00 }, // " 0x22 + { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # 0x23 + { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ 0x24 + { 0x23, 0x13, 0x08, 0x64, 0x62 }, // % 0x25 + { 0x36, 0x49, 0x55, 0x22, 0x50 }, // & 0x26 + { 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' 0x27 + { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( 0x28 + { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) 0x29 + { 0x14, 0x08, 0x3e, 0x08, 0x14 }, // * 0x2A + { 0x08, 0x08, 0x3e, 0x08, 0x08 }, // + 0x2B + { 0x00, 0x50, 0x30, 0x00, 0x00 }, // , 0x2C + { 0x08, 0x08, 0x08, 0x08, 0x08 }, // - 0x2D + { 0x00, 0x60, 0x60, 0x00, 0x00 }, // . 0x2E + { 0x20, 0x10, 0x08, 0x04, 0x02 }, // / 0x2F + { 0x3e, 0x51, 0x49, 0x45, 0x3e }, // 0 0x30 + { 0x00, 0x42, 0x7f, 0x40, 0x00 }, // 1 0x31 + { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 0x32 + { 0x21, 0x41, 0x45, 0x4b, 0x31 }, // 3 0x33 + { 0x18, 0x14, 0x12, 0x7f, 0x10 }, // 4 0x34 + { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 0x35 + { 0x3c, 0x4a, 0x49, 0x49, 0x30 }, // 6 0x36 + { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 0x37 + { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 0x38 + { 0x06, 0x49, 0x49, 0x29, 0x1e }, // 9 0x39 + { 0x00, 0x36, 0x36, 0x00, 0x00 }, // : 0x3A + { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; 0x3B + { 0x08, 0x14, 0x22, 0x41, 0x00 }, // < 0x3C + { 0x14, 0x14, 0x14, 0x14, 0x14 }, // = 0x3D + { 0x00, 0x41, 0x22, 0x14, 0x08 }, // > 0x3E + { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? 0x3F + { 0x32, 0x49, 0x79, 0x41, 0x3e }, // @ 0x40 + { 0x7e, 0x11, 0x11, 0x11, 0x7e }, // A 0x41 + { 0x7f, 0x49, 0x49, 0x49, 0x36 }, // B 0x42 + { 0x3e, 0x41, 0x41, 0x41, 0x22 }, // C 0x43 + { 0x7f, 0x41, 0x41, 0x22, 0x1c }, // D 0x44 + { 0x7f, 0x49, 0x49, 0x49, 0x41 }, // E 0x45 + { 0x7f, 0x09, 0x09, 0x09, 0x01 }, // F 0x46 + { 0x3e, 0x41, 0x49, 0x49, 0x7a }, // G 0x47 + { 0x7f, 0x08, 0x08, 0x08, 0x7f }, // H 0x48 + { 0x00, 0x41, 0x7f, 0x41, 0x00 }, // I 0x49 + { 0x20, 0x40, 0x41, 0x3f, 0x01 }, // J 0x4A + { 0x7f, 0x08, 0x14, 0x22, 0x41 }, // K 0x4B + { 0x7f, 0x40, 0x40, 0x40, 0x40 }, // L 0x4C + { 0x7f, 0x02, 0x0c, 0x02, 0x7f }, // M 0x4D + { 0x7f, 0x04, 0x08, 0x10, 0x7f }, // N 0x4E + { 0x3e, 0x41, 0x41, 0x41, 0x3e }, // O 0x4F + { 0x7f, 0x09, 0x09, 0x09, 0x06 }, // P 0X50 + { 0x3e, 0x41, 0x51, 0x21, 0x5e }, // Q 0X51 + { 0x7f, 0x09, 0x19, 0x29, 0x46 }, // R 0X52 + { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S 0X53 + { 0x01, 0x01, 0x7f, 0x01, 0x01 }, // T 0X54 + { 0x3f, 0x40, 0x40, 0x40, 0x3f }, // U 0X55 + { 0x1f, 0x20, 0x40, 0x20, 0x1f }, // V 0X56 + { 0x3f, 0x40, 0x38, 0x40, 0x3f }, // W 0X57 + { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X 0X58 + { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y 0X59 + { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z 0X5A + { 0x00, 0x7f, 0x41, 0x41, 0x00 }, // [ 0X5B + { 0x02, 0x04, 0x08, 0x10, 0x20 }, // "\" 0X5C + { 0x00, 0x41, 0x41, 0x7f, 0x00 }, // ] 0X5D + { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ 0X5E + { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ 0X5F + { 0x00, 0x01, 0x02, 0x04, 0x00 }, // ` 0X60 + { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a 0X61 + { 0x7f, 0x48, 0x44, 0x44, 0x38 }, // b 0X62 + { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c 0X63 + { 0x38, 0x44, 0x44, 0x48, 0x7f }, // d 0X64 + { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e 0X65 + { 0x08, 0x7e, 0x09, 0x01, 0x02 }, // f 0X66 + { 0x0c, 0x52, 0x52, 0x52, 0x3e }, // g 0X67 + { 0x7f, 0x08, 0x04, 0x04, 0x78 }, // h 0X68 + { 0x00, 0x44, 0x7d, 0x40, 0x00 }, // i 0X69 + { 0x20, 0x40, 0x44, 0x3d, 0x00 }, // j 0X6A + { 0x7f, 0x10, 0x28, 0x44, 0x00 }, // k 0X6B + { 0x00, 0x41, 0x7f, 0x40, 0x00 }, // l 0X6C + { 0x7c, 0x04, 0x18, 0x04, 0x78 }, // m 0X6D + { 0x7c, 0x08, 0x04, 0x04, 0x78 }, // n 0X6E + { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o 0X6F + { 0x7c, 0x14, 0x14, 0x14, 0x08 }, // p 0X70 + { 0x08, 0x14, 0x14, 0x18, 0x7c }, // q 0X71 + { 0x7c, 0x08, 0x04, 0x04, 0x08 }, // r 0X72 + { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s 0X73 + { 0x04, 0x3f, 0x44, 0x40, 0x20 }, // t 0X74 + { 0x3c, 0x40, 0x40, 0x20, 0x7c }, // u 0X75 + { 0x1c, 0x20, 0x40, 0x20, 0x1c }, // v 0X76 + { 0x3c, 0x40, 0x30, 0x40, 0x3c }, // w 0X77 + { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x 0X78 + { 0x0c, 0x50, 0x50, 0x50, 0x3c }, // y 0X79 + { 0x44, 0x64, 0x54, 0x4c, 0x44 }, // z 0X7A + { 0x00, 0x08, 0x36, 0x41, 0x00 }, // { 0X7B + { 0x00, 0x00, 0x7f, 0x00, 0x00 }, // | 0X7C + { 0x00, 0x41, 0x36, 0x08, 0x00 }, // } 0X7D + { 0x08, 0x08, 0x2a, 0x1c, 0x08 }, // -> 0X7E + { 0x08, 0x1c, 0x2a, 0x08, 0x08 }, // <- 0X7F + { 0x00, 0x00, 0x0f, 0x08, 0x08 }, // 0x80 + { 0x08, 0x08, 0x0f, 0x00, 0x00 }, // 0x81 + { 0x2c, 0x32, 0x02, 0x32, 0x2c }, // ohm 0x82 + { 0x44, 0x3c, 0x04, 0x7c, 0x44 }, // pi 0x83 + { 0x63, 0x55, 0x49, 0x41, 0x41 }, // siguma0x84 + { 0x14, 0x14, 0x7c, 0x14, 0x12 }, // sec 0x85 + { 0x44, 0x3c, 0x14, 0x14, 0x74 }, // man 0x86 + { 0x7c, 0x14, 0x1c, 0x14, 0x7c }, // en 0x87 + { 0x10, 0x10, 0x54, 0x10, 0x10 }, // waru0x88 + { 0x7f, 0x7f, 0x7f, 0x7f, 0x7f }, // 0x89 + { 0x0f, 0x0f, 0x0f, 0x0f, 0x0f }, // 0x8A + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8B + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8C + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8D + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8E + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8F + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x90 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x91 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x92 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x93 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x94 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x95 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x96 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x97 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x98 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x99 + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9A + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9B + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9C + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9D + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9E + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9F + { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0xA0 + { 0x70, 0x50, 0x70, 0x00, 0x00 }, // . 0xA1 + { 0x00, 0x00, 0x0f, 0x01, 0x01 }, // [ 0xA2 + { 0x40, 0x40, 0x78, 0x00, 0x00 }, // ] 0xA3 + { 0x10, 0x20, 0x40, 0x00, 0x00 }, // , 0xA4 + { 0x00, 0x18, 0x18, 0x00, 0x00 }, // . 0xA5 + { 0x0a, 0x0a, 0x4a, 0x2a, 0x1e }, // wo 0xA6 + { 0x04, 0x24, 0x34, 0x14, 0x0c }, // a 0xA7 + { 0x20, 0x10, 0x78, 0x04, 0x00 }, // i 0xA8 + { 0x18, 0x08, 0x4c, 0x48, 0x38 }, // u 0xA9 + { 0x48, 0x48, 0x78, 0x48, 0x48 }, // e 0xAA + { 0x48, 0x28, 0x18, 0x7c, 0x08 }, // o 0xAB + { 0x08, 0x7c, 0x08, 0x28, 0x18 }, // ya 0xAC + { 0x40, 0x48, 0x48, 0x78, 0x40 }, // yu 0xAD + { 0x54, 0x54, 0x54, 0x7c, 0x00 }, // yo 0xAE + { 0x18, 0x00, 0x58, 0x40, 0x38 }, // tu 0xAF + { 0x08, 0x08, 0x08, 0x08, 0x08 }, // - 0xB0 + { 0x01, 0x41, 0x3d, 0x09, 0x07 }, // a 0xB1 + { 0x20, 0x10, 0x7c, 0x02, 0x01 }, // i 0xB2 + { 0x0e, 0x02, 0x43, 0x22, 0x1e }, // u 0xB3 + { 0x42, 0x42, 0x7e, 0x42, 0x42 }, // e 0xB4 + { 0x22, 0x12, 0x0a, 0x7f, 0x02 }, // o 0xB5 + { 0x42, 0x3f, 0x02, 0x42, 0x3e }, // ka 0xB6 + { 0x0a, 0x0a, 0x7f, 0x0a, 0x0a }, // ki 0xB7 + { 0x08, 0x46, 0x42, 0x22, 0x1e }, // ku 0xB8 + { 0x04, 0x03, 0x42, 0x3e, 0x04 }, // ke 0xB9 + { 0x42, 0x42, 0x42, 0x42, 0x7e }, // ko 0xBA + { 0x02, 0x4f, 0x22, 0x1f, 0x02 }, // sa 0xBB + { 0x4a, 0x4a, 0x40, 0x20, 0x1c }, // si 0xBC + { 0x42, 0x22, 0x12, 0x2a, 0x46 }, // su 0xBD + { 0x02, 0x3f, 0x42, 0x4a, 0x46 }, // se 0xBE + { 0x06, 0x48, 0x40, 0x20, 0x1e }, // so 0xBF + { 0x08, 0x46, 0x4a, 0x32, 0x1e }, // ta 0xC0 + { 0x0a, 0x4a, 0x3e, 0x09, 0x08 }, // ti 0xC1 + { 0x0e, 0x00, 0x4e, 0x20, 0x1e }, // tu 0xC2 + { 0x04, 0x45, 0x3d, 0x05, 0x04 }, // te 0xC3 + { 0x00, 0x7f, 0x08, 0x10, 0x00 }, // to 0xC4 + { 0x44, 0x24, 0x1f, 0x04, 0x04 }, // na 0xC5 + { 0x40, 0x42, 0x42, 0x42, 0x40 }, // ni 0xC6 + { 0x42, 0x2a, 0x12, 0x2a, 0x06 }, // nu 0xC7 + { 0x22, 0x12, 0x7b, 0x16, 0x22 }, // ne 0xC8 + { 0x00, 0x40, 0x20, 0x1f, 0x00 }, // no 0xC9 + { 0x78, 0x00, 0x02, 0x04, 0x78 }, // ha 0xCA + { 0x3f, 0x44, 0x44, 0x44, 0x44 }, // hi 0xCB + { 0x02, 0x42, 0x42, 0x22, 0x1e }, // hu 0xCC + { 0x04, 0x02, 0x04, 0x08, 0x30 }, // he 0xCD + { 0x32, 0x02, 0x7f, 0x02, 0x32 }, // ho 0xCE + { 0x02, 0x12, 0x22, 0x52, 0x0e }, // ma 0xCF + { 0x00, 0x2a, 0x2a, 0x2a, 0x40 }, // mi 0xD0 + { 0x38, 0x24, 0x22, 0x20, 0x70 }, // mu 0xD1 + { 0x40, 0x28, 0x10, 0x28, 0x06 }, // me 0xD2 + { 0x0a, 0x3e, 0x4a, 0x4a, 0x4a }, // mo 0xD3 + { 0x04, 0x7f, 0x04, 0x14, 0x0c }, // ya 0xD4 + { 0x40, 0x42, 0x42, 0x7e, 0x40 }, // yu 0xD5 + { 0x4a, 0x4a, 0x4a, 0x4a, 0x7e }, // yo 0xD6 + { 0x04, 0x05, 0x45, 0x25, 0x1c }, // ra 0xD7 + { 0x0f, 0x40, 0x20, 0x1f, 0x00 }, // ri 0xD8 + { 0x7c, 0x00, 0x7e, 0x80, 0x30 }, // ru 0xD9 + { 0x7e, 0x40, 0x20, 0x10, 0x08 }, // re 0xDA + { 0x7e, 0x42, 0x42, 0x42, 0x7e }, // ro 0xDB + { 0x0e, 0x02, 0x42, 0x22, 0x1e }, // wa 0xDC + { 0x42, 0x42, 0x40, 0x20, 0x18 }, // n 0xDD + { 0x02, 0x04, 0x01, 0x02, 0x00 }, // " 0xDE + { 0x07, 0x05, 0x07, 0x00, 0x00 } // . 0xDF + +}; + +#endif diff --git a/VFOsys_astep/font12.h b/VFOsys_astep/font12.h new file mode 100644 index 0000000..4bf1439 --- /dev/null +++ b/VFOsys_astep/font12.h @@ -0,0 +1,97 @@ +const int font12[95][13]={ + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000380, 0x000007E6, 0x00000380, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000380, 0x00000040, 0x00000380, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000090, 0x000007FE, 0x000007FE, 0x00000090, 0x000007FE, 0x000007FE, 0x00000090, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000398, 0x000006CC, 0x00000FFE, 0x0000066C, 0x00000338, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000006, 0x0000030C, 0x00000498, 0x000004B0, 0x0000036C, 0x000000D2, 0x00000192, 0x0000030C, 0x00000600, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000018, 0x0000003C, 0x00000766, 0x00000DC2, 0x000008E6, 0x00000DBC, 0x0000071C, 0x00000036, 0x00000022, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000080, 0x00000300, 0x00000300, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x000001F8, 0x000003FC, 0x00000606, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000606, 0x000003FC, 0x000001F8, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000001B0, 0x000000E0, 0x000003F8, 0x000003F8, 0x000000E0, 0x000001B0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000040, 0x00000040, 0x000001F0, 0x00000040, 0x00000040, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000001, 0x00000007, 0x00000006, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000040, 0x00000040, 0x00000040, 0x00000040, 0x00000040, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000000, 0x00000006, 0x00000006, 0x00000000, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000007, 0x0000001C, 0x000000F0, 0x00000380, 0x00000E00, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000003FC, 0x000007FE, 0x00000402, 0x00000402, 0x000007FE, 0x000003FC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000202, 0x000007FE, 0x000007FE, 0x00000002, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000038E, 0x0000079E, 0x00000432, 0x00000462, 0x000007C6, 0x00000386, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000031C, 0x0000071E, 0x00000442, 0x00000442, 0x000007FE, 0x000003BC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000038, 0x000001F8, 0x000007C8, 0x00000608, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007CC, 0x0000078E, 0x00000482, 0x00000482, 0x000004FE, 0x0000047C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000003FC, 0x000007FE, 0x00000442, 0x00000442, 0x0000077E, 0x0000033C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000700, 0x00000600, 0x0000040E, 0x0000047E, 0x000007F0, 0x00000780, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000003BC, 0x000007FE, 0x00000442, 0x00000442, 0x000007FE, 0x000003BC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000003CC, 0x000007EE, 0x00000422, 0x00000422, 0x000007FE, 0x000003FC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000000, 0x0000018C, 0x00000000, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000002, 0x0000018C, 0x00000000, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000040, 0x000000E0, 0x000001B0, 0x00000318, 0x0000060C, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000090, 0x00000090, 0x00000090, 0x00000090, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x0000060C, 0x00000318, 0x000001B0, 0x000000E0, 0x00000040, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000380, 0x00000780, 0x00000436, 0x000007E0, 0x000003C0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000F8, 0x00000104, 0x00000272, 0x00000492, 0x000004B2, 0x000004F2, 0x00000294, 0x00000130, 0x000000E0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000006, 0x0000001E, 0x0000007E, 0x000001E8, 0x00000788, 0x00000788, 0x000001E8, 0x0000007E, 0x0000001E, 0x00000006, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000442, 0x00000442, 0x00000442, 0x000007E6, 0x000003BC, 0x00000018, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000001F8, 0x000003FC, 0x00000606, 0x00000402, 0x00000402, 0x00000606, 0x0000079E, 0x0000039C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000402, 0x00000402, 0x00000402, 0x00000606, 0x000003FC, 0x000001F8, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000442, 0x00000442, 0x000004E2, 0x00000606, 0x0000030C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000440, 0x00000440, 0x000004E0, 0x00000600, 0x00000300, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000001F8, 0x000003FC, 0x00000606, 0x00000402, 0x00000422, 0x00000626, 0x0000073E, 0x0000033C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000040, 0x00000040, 0x00000040, 0x00000040, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000606, 0x000007FE, 0x000007FE, 0x00000606, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000000C, 0x0000000E, 0x00000002, 0x00000002, 0x000007FE, 0x000007FC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x000000E0, 0x000001B0, 0x00000318, 0x0000060C, 0x00000406, 0x00000002, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000002, 0x00000002, 0x00000002, 0x00000006, 0x0000000C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x000001C0, 0x00000070, 0x0000001E, 0x0000001E, 0x00000070, 0x000001C0, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000180, 0x000000C0, 0x00000060, 0x00000030, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000001F8, 0x000003FC, 0x00000204, 0x00000402, 0x00000402, 0x00000204, 0x000003FC, 0x000001F8, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000410, 0x00000410, 0x00000630, 0x000003E0, 0x000001C0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000001F8, 0x000003FC, 0x00000204, 0x00000402, 0x0000041A, 0x0000041A, 0x0000020C, 0x000003FE, 0x000001FA, 0x00000002, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000410, 0x00000418, 0x0000063C, 0x000003EE, 0x000001C6, 0x00000002, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000039C, 0x000007DE, 0x000004C2, 0x00000442, 0x00000462, 0x0000077E, 0x0000033C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000700, 0x00000600, 0x00000400, 0x000007FE, 0x000007FE, 0x00000400, 0x00000600, 0x00000700, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007F8, 0x000007FC, 0x00000002, 0x00000002, 0x00000002, 0x000007FC, 0x000007F8, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000700, 0x000007E0, 0x000000F8, 0x0000001E, 0x0000001E, 0x000000F8, 0x000007E0, 0x00000700, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x000007E0, 0x000007FE, 0x0000003E, 0x000000E0, 0x000003C0, 0x000000E0, 0x0000003E, 0x000007FE, 0x000007E0, 0x00000000, 0x00000FFF, 0x00000FFF}, + {0x00000606, 0x0000070E, 0x0000039C, 0x000000F0, 0x00000060, 0x000000F0, 0x0000039C, 0x0000070E, 0x00000606, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000700, 0x00000780, 0x000001C0, 0x0000007E, 0x0000007E, 0x000001C0, 0x00000780, 0x00000700, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000706, 0x0000060E, 0x0000041E, 0x00000472, 0x000004E2, 0x00000782, 0x00000706, 0x0000060E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x000007FE, 0x000007FE, 0x00000402, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000700, 0x000003C0, 0x000000F0, 0x0000003C, 0x0000000E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000402, 0x000007FE, 0x000007FE, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000180, 0x00000300, 0x00000600, 0x00000600, 0x00000300, 0x00000180, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000200, 0x00000300, 0x00000180, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000004C, 0x000000DE, 0x00000092, 0x00000092, 0x000000FE, 0x0000007E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000082, 0x00000082, 0x000000FE, 0x0000007C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000007C, 0x000000FE, 0x00000082, 0x00000082, 0x000000EE, 0x0000006C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000007C, 0x000000FE, 0x00000082, 0x00000082, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000007C, 0x000000FE, 0x00000092, 0x00000092, 0x000000F6, 0x00000074, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000080, 0x000003FE, 0x000007FE, 0x00000680, 0x00000280, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000072, 0x000000F9, 0x00000089, 0x0000008B, 0x0000007F, 0x000000FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000080, 0x00000080, 0x000000FE, 0x0000007E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x000006FE, 0x000006FE, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000000E, 0x0000000F, 0x00000001, 0x00000001, 0x000006FF, 0x000006FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000007FE, 0x000007FE, 0x00000030, 0x00000078, 0x000000CC, 0x00000086, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x000007FE, 0x000007FE, 0x00000400, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000FE, 0x000000FE, 0x00000080, 0x00000080, 0x000000FE, 0x000000FE, 0x00000080, 0x00000080, 0x000000FE, 0x0000007E, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000FE, 0x000000FE, 0x00000080, 0x00000080, 0x000000FE, 0x0000007E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x0000007C, 0x000000FE, 0x00000082, 0x00000082, 0x000000FE, 0x0000007C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000FF, 0x000000FF, 0x00000084, 0x00000084, 0x000000FC, 0x00000078, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000038, 0x0000007C, 0x00000082, 0x00000082, 0x000000FF, 0x0000007F, 0x00000001, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000C0, 0x0000007E, 0x0000007E, 0x000000C0, 0x000000C0, 0x00000060, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000064, 0x000000F6, 0x00000092, 0x00000092, 0x000000DE, 0x0000004C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000040, 0x000001FC, 0x000001FE, 0x00000046, 0x0000004C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000FC, 0x000000FE, 0x00000002, 0x00000002, 0x000000FE, 0x000000FC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000F8, 0x000000FC, 0x00000006, 0x00000006, 0x000000FC, 0x000000F8, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000F0, 0x000000F8, 0x0000000E, 0x0000000E, 0x000000F8, 0x000000F8, 0x0000000E, 0x0000000E, 0x000000F8, 0x000000F0, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000C6, 0x000000EE, 0x00000038, 0x00000010, 0x00000038, 0x000000EE, 0x000000C6, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000C0, 0x000000F3, 0x0000003F, 0x0000000E, 0x00000038, 0x000000F0, 0x000000C0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x000000E6, 0x000000CE, 0x00000092, 0x000000E6, 0x000000CE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000060, 0x000003FC, 0x00000606, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000000, 0x000007FE, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000000, 0x00000606, 0x000003FC, 0x00000060, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}, + {0x00000020, 0x00000060, 0x00000040, 0x00000060, 0x00000020, 0x00000060, 0x00000040, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF} +}; \ No newline at end of file diff --git a/VFOsys_astep/font16.h b/VFOsys_astep/font16.h new file mode 100644 index 0000000..2ea32f0 --- /dev/null +++ b/VFOsys_astep/font16.h @@ -0,0 +1,104 @@ +/* + * File: font.h + * Author: JF3HZB / T.UEBO + * + * Created on 2018/03/21, 23:04 + */ + +const int font16[95][21]={ + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00003FCC, 0x00003FCC, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00003800, 0x00003800, 0x00000000, 0x00003800, 0x00003800, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000058, 0x000004F8, 0x000007E0, 0x00001F58, 0x00003CF8, 0x000027E0, 0x00001F40, 0x00003C40, 0x00002400, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000610, 0x00000F1C, 0x0000198C, 0x00007FFF, 0x00007FFF, 0x000018CC, 0x00001C78, 0x00000430, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00001C00, 0x00003E04, 0x0000621C, 0x00004638, 0x00007CE0, 0x000039C0, 0x00001738, 0x00001E7C, 0x000038C4, 0x0000708C, 0x000040F8, 0x00000070, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000070, 0x000000F8, 0x0000398C, 0x00007F04, 0x00004784, 0x000047E4, 0x00007D7C, 0x0000391C, 0x000001F4, 0x000001E4, 0x0000010C, 0x00000108, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00003800, 0x00003800, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00000FF0, 0x00003FFC, 0x0000700E, 0x00004002, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00004002, 0x0000700E, 0x00003FFC, 0x00000FF0, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000440, 0x000006C0, 0x00000380, 0x00001FF0, 0x00001FF0, 0x00000380, 0x000006C0, 0x00000440, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000100, 0x00000100, 0x00000100, 0x00000FE0, 0x00000FE0, 0x00000100, 0x00000100, 0x00000100, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00000002, 0x0000000E, 0x0000000C, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x0000000C, 0x0000000C, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000006, 0x0000001E, 0x00000078, 0x000001E0, 0x00000780, 0x00001E00, 0x00007800, 0x00006000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000007E0, 0x00001FF8, 0x0000381C, 0x00002004, 0x00002004, 0x0000381C, 0x00001FF8, 0x000007E0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00001004, 0x00001004, 0x00003FFC, 0x00003FFC, 0x00000004, 0x00000004, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000C1C, 0x00001C3C, 0x00003064, 0x000020C4, 0x00002184, 0x0000330C, 0x00001E3C, 0x00000C30, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000830, 0x00001838, 0x0000310C, 0x00002104, 0x00002104, 0x0000338C, 0x00001EF8, 0x00000C70, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000060, 0x000001E0, 0x000007A0, 0x00001E20, 0x00003824, 0x00003FFC, 0x00003FFC, 0x00000024, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000010, 0x00003F18, 0x00003F0C, 0x00002204, 0x00002204, 0x0000230C, 0x000021F8, 0x000020F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000FF0, 0x00001FF8, 0x0000330C, 0x00002204, 0x00002204, 0x0000330C, 0x000019F8, 0x000008F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000C00, 0x00003C00, 0x00003000, 0x0000203C, 0x000021FC, 0x000027C0, 0x00003E00, 0x00003800, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000C70, 0x00001EF8, 0x0000338C, 0x00002104, 0x00002104, 0x0000338C, 0x00001EF8, 0x00000C70, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000F10, 0x00001F98, 0x000030CC, 0x00002044, 0x00002044, 0x000030CC, 0x00001FF8, 0x00000FF0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00000000, 0x00000C18, 0x00000C18, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00000004, 0x00000C1C, 0x00000C18, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000100, 0x00000380, 0x000006C0, 0x00000C60, 0x00001830, 0x00003018, 0x00002008, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000240, 0x00000240, 0x00000240, 0x00000240, 0x00000240, 0x00000240, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00002008, 0x00003018, 0x00001830, 0x00000C60, 0x000006C0, 0x00000380, 0x00000100, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000C00, 0x00001C00, 0x00003000, 0x0000206C, 0x000020EC, 0x00003180, 0x00001F00, 0x00000E00, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000003E0, 0x000007F0, 0x00000C18, 0x000019CC, 0x000033E4, 0x00002624, 0x00002464, 0x000027C4, 0x000027E4, 0x0000362C, 0x00001868, 0x00000FC0, 0x00000780, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000004, 0x0000001C, 0x000000FC, 0x000003E4, 0x00000F40, 0x00003C40, 0x00003C40, 0x00000F40, 0x000003E4, 0x000000FC, 0x0000001C, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00002104, 0x00002104, 0x00002104, 0x00003304, 0x00001F8C, 0x00000CF8, 0x00000070, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000003C0, 0x00000FF0, 0x00001C38, 0x0000300C, 0x00002004, 0x00002004, 0x00002004, 0x00003004, 0x0000300C, 0x00003C18, 0x00000C10, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00002004, 0x00002004, 0x00002004, 0x00002004, 0x0000300C, 0x00001C38, 0x00000FF0, 0x000003C0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00002104, 0x00002104, 0x00002384, 0x000027C4, 0x0000300C, 0x00001818, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00002104, 0x00002100, 0x00002380, 0x000027C0, 0x00003000, 0x00001800, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000003C0, 0x00000FF0, 0x00001C38, 0x0000300C, 0x00002004, 0x00002004, 0x00002084, 0x00002084, 0x0000308C, 0x000038FC, 0x000008FC, 0x00000080, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00000100, 0x00000100, 0x00000100, 0x00002104, 0x00003FFC, 0x00003FFC, 0x00002004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00002004, 0x00003FFC, 0x00003FFC, 0x00002004, 0x00002004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000018, 0x0000001C, 0x00002004, 0x00002004, 0x00003FFC, 0x00003FF8, 0x00002000, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00002004, 0x00003FFC, 0x00003FFC, 0x00002184, 0x00000300, 0x00000780, 0x00002DC0, 0x00003874, 0x0000303C, 0x0000200C, 0x00002004, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00002004, 0x00002004, 0x00000004, 0x00000004, 0x0000000C, 0x00000018, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00001E04, 0x00000784, 0x000001E0, 0x00000078, 0x00000078, 0x000001E0, 0x00000784, 0x00001E04, 0x00003FFC, 0x00003FFC, 0x00002004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00001E04, 0x00000704, 0x000001C0, 0x000020E0, 0x00002038, 0x00003FFC, 0x00003FFC, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000003C0, 0x00000FF0, 0x00001C38, 0x0000300C, 0x00002004, 0x00002004, 0x00002004, 0x00002004, 0x0000300C, 0x00001C38, 0x00000FF0, 0x000003C0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00002084, 0x00002084, 0x00002080, 0x00002080, 0x00003180, 0x00001F00, 0x00000E00, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000003C0, 0x00000FF0, 0x00001C38, 0x0000301C, 0x00002034, 0x00002024, 0x00002024, 0x00002034, 0x0000301C, 0x00001C3E, 0x00000FF2, 0x000003C6, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00002104, 0x00002100, 0x000021C0, 0x000033F0, 0x00001E3C, 0x00000C0C, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000C30, 0x00001E3C, 0x0000320C, 0x00002304, 0x00002104, 0x00002184, 0x0000308C, 0x00003CF8, 0x00000C70, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00003800, 0x00003000, 0x00002004, 0x00002004, 0x00003FFC, 0x00003FFC, 0x00002004, 0x00002004, 0x00003000, 0x00003800, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002000, 0x00003FF0, 0x00003FF8, 0x0000200C, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x0000200C, 0x00003FF8, 0x00003FF0, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002000, 0x00003800, 0x00003F00, 0x000027C0, 0x000000F0, 0x0000003C, 0x0000003C, 0x000000F0, 0x000027C0, 0x00003F00, 0x00003800, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002000, 0x00003800, 0x00003F00, 0x000027E0, 0x000000FC, 0x0000207C, 0x000039E0, 0x00003F80, 0x000027E0, 0x000000FC, 0x000000FC, 0x000027E0, 0x00003F00, 0x00003800, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x0000300C, 0x00003C3C, 0x00002E74, 0x000003C0, 0x000003C0, 0x00002E74, 0x00003C3C, 0x0000300C, 0x00002004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002000, 0x00003000, 0x00003C04, 0x00002F04, 0x000003FC, 0x000003FC, 0x00002F04, 0x00003C04, 0x00003000, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000004, 0x0000380C, 0x0000303C, 0x00002074, 0x000021C4, 0x00002384, 0x00002E04, 0x00003C0C, 0x0000301C, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00007FFE, 0x00007FFE, 0x00004002, 0x00004002, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00006000, 0x00007800, 0x00001E00, 0x00000780, 0x000001E0, 0x00000078, 0x0000001E, 0x00000006, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00004002, 0x00004002, 0x00007FFE, 0x00007FFE, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000400, 0x00000C00, 0x00001800, 0x00003000, 0x00003000, 0x00001800, 0x00000C00, 0x00000400, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00001000, 0x00001800, 0x00000C00, 0x00000400, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000118, 0x0000033C, 0x00000224, 0x00000264, 0x0000024C, 0x000003FC, 0x000001FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002000, 0x00003FFC, 0x00003FFC, 0x0000030C, 0x00000204, 0x00000204, 0x0000030C, 0x000001F8, 0x000000F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000000F0, 0x000001F8, 0x0000030C, 0x00000204, 0x00000204, 0x00000204, 0x0000030C, 0x00000188, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000000F0, 0x000001F8, 0x0000030C, 0x00000204, 0x00000204, 0x0000230C, 0x00003FFC, 0x00003FFC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000000F0, 0x000001F8, 0x0000034C, 0x00000244, 0x00000244, 0x00000344, 0x000001CC, 0x000000C8, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000200, 0x00000204, 0x00001FFC, 0x00003FFC, 0x00002204, 0x00003200, 0x00001200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000016, 0x000001FF, 0x000003E9, 0x00000229, 0x00000229, 0x000003E9, 0x000003CF, 0x00000206, 0x00000200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00000304, 0x00000200, 0x00000204, 0x000003FC, 0x000001FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000204, 0x000033FC, 0x000033FC, 0x00000004, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000002, 0x00000003, 0x00000201, 0x000033FF, 0x000033FE, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00002004, 0x00003FFC, 0x00003FFC, 0x00000064, 0x000002E0, 0x000003B4, 0x0000031C, 0x0000020C, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00002004, 0x00003FFC, 0x00003FFC, 0x00000004, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000204, 0x000003FC, 0x000003FC, 0x00000304, 0x00000200, 0x00000204, 0x000003FC, 0x000003FC, 0x00000204, 0x00000200, 0x00000204, 0x000003FC, 0x000001FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000204, 0x000003FC, 0x000003FC, 0x00000304, 0x00000200, 0x00000204, 0x000003FC, 0x000001FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000000F0, 0x000001F8, 0x0000030C, 0x00000204, 0x00000204, 0x00000204, 0x0000030C, 0x000001F8, 0x000000F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000201, 0x000003FF, 0x000003FF, 0x0000030D, 0x00000204, 0x00000204, 0x0000030C, 0x000001F8, 0x000000F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x000000F0, 0x000001F8, 0x0000030C, 0x00000204, 0x00000204, 0x0000030D, 0x000003FF, 0x000003FF, 0x00000001, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000204, 0x000003FC, 0x000003FC, 0x00000304, 0x00000200, 0x00000300, 0x00000100, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000190, 0x000003DC, 0x0000024C, 0x00000244, 0x00000264, 0x00000324, 0x000003BC, 0x00000098, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000200, 0x00000200, 0x00001FF8, 0x00001FFC, 0x00000204, 0x0000020C, 0x00000008, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000200, 0x000003F8, 0x000003FC, 0x00000004, 0x00000004, 0x0000020C, 0x000003FC, 0x000003FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000200, 0x00000300, 0x000003C0, 0x000002F0, 0x0000003C, 0x0000003C, 0x000002F0, 0x000003C0, 0x00000300, 0x00000200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000200, 0x00000380, 0x000003E0, 0x0000027C, 0x0000027C, 0x000003E0, 0x000003E0, 0x0000027C, 0x0000027C, 0x000003E0, 0x00000380, 0x00000200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000204, 0x0000030C, 0x0000039C, 0x000002F4, 0x00000060, 0x000002F4, 0x0000039C, 0x0000030C, 0x00000204, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000202, 0x00000303, 0x000003C3, 0x000002F3, 0x0000003E, 0x0000003C, 0x000002F0, 0x000003C0, 0x00000300, 0x00000200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x0000008C, 0x0000039C, 0x00000334, 0x00000264, 0x000002CC, 0x0000039C, 0x00000310, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000100, 0x00000100, 0x00003FFC, 0x00007EFE, 0x00004002, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00000000, 0x00007FFE, 0x00007FFE, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000000, 0x00004002, 0x00007EFE, 0x00003FFC, 0x00000100, 0x00000100, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}, + {0x00000080, 0x00000180, 0x00000100, 0x00000100, 0x00000180, 0x00000080, 0x00000080, 0x00000180, 0x00000100, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF} +}; diff --git a/VFOsys_astep/font20.h b/VFOsys_astep/font20.h new file mode 100644 index 0000000..7f1d1db --- /dev/null +++ b/VFOsys_astep/font20.h @@ -0,0 +1,104 @@ +/* + * File: font.h + * Author: JF3HZB / T.UEBO + * + * Created on 2018/03/21, 23:04 + */ + +const long font20[95][23]={ + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x00000000, 0x0003FF9C, 0x0003FF9C, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x00000000, 0x0003C000, 0x0003C000, 0x00000000, 0x00000000, 0x0003C000, 0x0003C000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000001B8, 0x000033F8, 0x00003FE0, 0x0000FF80, 0x0003F980, 0x0003B1B8, 0x000033F8, 0x00003FE0, 0x0000FF80, 0x0003F980, 0x0003B000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000F9E0, 0x0001FC70, 0x00039C38, 0x00030E18, 0x000FFFFE, 0x000FFFFE, 0x00030E18, 0x00038738, 0x0001C7F0, 0x0000F3E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0001F038, 0x0003F870, 0x000718E0, 0x000619C0, 0x00063B80, 0x0007F700, 0x0003EE00, 0x00001C00, 0x000039F0, 0x000073F8, 0x0000E718, 0x0001C618, 0x00038638, 0x000307F0, 0x000003E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000003F8, 0x000007FC, 0x0001EE1C, 0x0003FC0C, 0x00073C0C, 0x00061E0C, 0x0006379C, 0x000663F8, 0x0003C0F8, 0x0001843C, 0x000007FC, 0x000007EC, 0x0000079C, 0x00000418, 0x00000410, 0x000FEFFF, 0x00000000, 0x00000000, 0x00000000, 0x0003C000, 0x0003C000, 0x00000000, 0x000FFFFF}, + {0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x00007FE0, 0x0001FFF8, 0x0003C03C, 0x0007000E, 0x00060006, 0x00040002, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00040002, 0x00060006, 0x0007000E, 0x0003C03C, 0x0001FFF8, 0x00007FE0, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00006180, 0x00007380, 0x00003F00, 0x00001E00, 0x0001FFE0, 0x0001FFE0, 0x00001E00, 0x00003F00, 0x00007380, 0x00006180, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x0000FFC0, 0x0000FFC0, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000036, 0x0000003C, 0x00000038, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x0000001C, 0x0000001C, 0x0000001C, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000006, 0x0000001E, 0x0000007E, 0x000001F0, 0x000007C0, 0x00001F00, 0x00007C00, 0x0001F000, 0x0007C000, 0x00070000, 0x00060000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00007FE0, 0x0000FFF0, 0x0001C038, 0x0003801C, 0x0003000C, 0x0003000C, 0x0003801C, 0x0001C038, 0x0000FFF0, 0x00007FE0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x0000800C, 0x0000800C, 0x0001800C, 0x0003FFFC, 0x0003FFFC, 0x0000000C, 0x0000000C, 0x0000000C, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000F03C, 0x0001C07C, 0x000380FC, 0x000301CC, 0x0003038C, 0x0003070C, 0x00038E0C, 0x0003FC1C, 0x0001F87C, 0x0000F078, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000E0F0, 0x0001C038, 0x0003801C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00031E1C, 0x00039F3C, 0x0001FBF8, 0x0000F1F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000001C0, 0x000007C0, 0x00000EC0, 0x00003CC0, 0x000070C0, 0x0001E0C0, 0x0003C0CC, 0x0003FFFC, 0x0003FFFC, 0x000000CC, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000070, 0x0003FC38, 0x0003FC1C, 0x00031C1C, 0x0003180C, 0x0003180C, 0x00031C0C, 0x00031E1C, 0x00030FF8, 0x000307F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00007FF0, 0x0000FFF8, 0x0001C61C, 0x00038C0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00038E1C, 0x000187F8, 0x0000C3F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0001E000, 0x0003C000, 0x00038000, 0x00030000, 0x000300FC, 0x000307FC, 0x00031F80, 0x00033C00, 0x0003F800, 0x0003E000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000F1F0, 0x0001FBF8, 0x00019F1C, 0x00030E0C, 0x00030C0C, 0x00030C0C, 0x00030E0C, 0x00019F1C, 0x0001FBF8, 0x0000F1F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000FC30, 0x0001FE18, 0x0003871C, 0x0003030C, 0x0003030C, 0x0003030C, 0x0003030C, 0x0003861C, 0x0001FFF8, 0x0000FFF0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00007070, 0x00007070, 0x00007070, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x0000706C, 0x00007078, 0x00007070, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000E00, 0x00001F00, 0x00003B80, 0x000071C0, 0x0000E0E0, 0x0001C070, 0x00038038, 0x00030018, 0x00020008, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00020008, 0x00030018, 0x00038038, 0x0001C070, 0x0000E0E0, 0x000071C0, 0x00003B80, 0x00001F00, 0x00000E00, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00007000, 0x0000E000, 0x0001C000, 0x00038000, 0x000300DC, 0x000301DC, 0x000303DC, 0x00038700, 0x0001CE00, 0x0000FC00, 0x00007800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00001FC0, 0x00003FE0, 0x00007078, 0x0000E73C, 0x0001CF9C, 0x00039FCC, 0x000338CC, 0x000330CC, 0x0003318C, 0x00033F8C, 0x00033FCC, 0x0003B0CC, 0x0001C1D8, 0x0000E398, 0x00007F30, 0x00003E00, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000000C, 0x0000001C, 0x000000FC, 0x000007FC, 0x00001FCC, 0x0000FD80, 0x0003F180, 0x0003C180, 0x0003E180, 0x0000F980, 0x00003F8C, 0x000007CC, 0x000001FC, 0x0000003C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00039E0C, 0x0001FF1C, 0x0000F3F8, 0x000001F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00003FC0, 0x00007FE0, 0x0000E070, 0x0001C038, 0x0003801C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003800C, 0x0001C01C, 0x0000E038, 0x00006070, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003801C, 0x0001C038, 0x0000F0F0, 0x00007FE0, 0x00001F80, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00031E0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00031E0C, 0x00033F0C, 0x0003000C, 0x0003801C, 0x0001C038, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00031E0C, 0x00030C0C, 0x00030C00, 0x00030C00, 0x00031E00, 0x00033F00, 0x00030000, 0x00038000, 0x0001C000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00007FE0, 0x0000FFF0, 0x0001E078, 0x0003803C, 0x0003001C, 0x0003000C, 0x0003000C, 0x0003030C, 0x0003030C, 0x0003030C, 0x0003031C, 0x000383FC, 0x0001C3FC, 0x0000E3F8, 0x00000300, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003060C, 0x00000600, 0x00000600, 0x00000600, 0x00000600, 0x00000600, 0x00000600, 0x0003060C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x0003000C, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000078, 0x0000001C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003001C, 0x0003FFF8, 0x0003FFF0, 0x00030000, 0x00030000, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003070C, 0x00030E0C, 0x00001E00, 0x00003F00, 0x00037380, 0x0003E1CC, 0x0003C0EC, 0x0003807C, 0x0003003C, 0x0003001C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x0003000C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000001C, 0x00000038, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0000F00C, 0x0000780C, 0x00001E00, 0x00000F00, 0x00000380, 0x000001E0, 0x000001E0, 0x00000380, 0x00000F00, 0x00001E00, 0x0000780C, 0x0000F00C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003E00C, 0x0000F00C, 0x00007C00, 0x00001E00, 0x00000F80, 0x000003C0, 0x000300F0, 0x0003007C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00003FC0, 0x00007FE0, 0x0000E070, 0x0001C038, 0x0003801C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003801C, 0x0001C038, 0x0000E070, 0x00007FE0, 0x00003FC0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003030C, 0x0003030C, 0x00030300, 0x00030300, 0x00030300, 0x00038700, 0x0001CE00, 0x0000FC00, 0x00007800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00003FC0, 0x00007FE0, 0x0000E070, 0x0001C038, 0x0003807C, 0x0003006C, 0x000300CC, 0x000300CC, 0x000300CC, 0x0003006C, 0x0003807C, 0x0001C03E, 0x0000E0FE, 0x00007FE6, 0x00003F8E, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00030C0C, 0x00030C0C, 0x00030E0C, 0x00030F00, 0x00030F80, 0x00030DE4, 0x00039CFC, 0x0001F83C, 0x0000F01C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000071E0, 0x0001F870, 0x00039838, 0x00030C1C, 0x00030C0C, 0x00030C0C, 0x0003060C, 0x0003060C, 0x0003831C, 0x0001C398, 0x0000E1F0, 0x000070E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003C000, 0x00038000, 0x00030000, 0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x0003000C, 0x00030000, 0x00038000, 0x0003C000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00030000, 0x0003FFE0, 0x0003FFF0, 0x00030038, 0x0000001C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000001C, 0x00030038, 0x0003FFF0, 0x0003FFE0, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00030000, 0x0003E000, 0x0003F800, 0x00033E00, 0x00000F80, 0x000003E0, 0x000000F8, 0x0000003C, 0x000000F8, 0x000003E0, 0x00000F80, 0x00033E00, 0x0003F800, 0x0003E000, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00030000, 0x0003E000, 0x0003FC00, 0x00033F00, 0x00030FE0, 0x000001FC, 0x0000007C, 0x000003E0, 0x00031F80, 0x0003FC00, 0x0003FC00, 0x00031F80, 0x000003E0, 0x0000007C, 0x000001FC, 0x00030FE0, 0x00033F00, 0x0003FC00, 0x0003E000, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003801C, 0x0003C03C, 0x0003E07C, 0x000370EC, 0x000039C0, 0x00001F80, 0x00000F00, 0x00000F00, 0x00001F80, 0x000039C0, 0x000370EC, 0x0003E07C, 0x0003C03C, 0x0003801C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00030000, 0x0003C000, 0x0003E000, 0x00037000, 0x0000380C, 0x00001C0C, 0x00000FFC, 0x00000FFC, 0x00001C0C, 0x0000380C, 0x00037000, 0x0003E000, 0x0003C000, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000003C, 0x0003E07C, 0x000380EC, 0x000301CC, 0x0003038C, 0x0003070C, 0x00030E0C, 0x00031C0C, 0x0003380C, 0x0003701C, 0x0003E07C, 0x0003C000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x00000000, 0x0007FFFE, 0x0007FFFE, 0x00060006, 0x00060006, 0x00060006, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00060000, 0x00078000, 0x0007E000, 0x0000F800, 0x00003E00, 0x00000F80, 0x000003E0, 0x000000F8, 0x0000003E, 0x0000000E, 0x00000006, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00060006, 0x00060006, 0x00060006, 0x0007FFFE, 0x0007FFFE, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00003000, 0x00007000, 0x0000E000, 0x0001C000, 0x00038000, 0x00038000, 0x0001C000, 0x0000E000, 0x00007000, 0x00003000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x00018000, 0x0001C000, 0x0000E000, 0x00007000, 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000630, 0x00000C78, 0x00001CFC, 0x000018CC, 0x0000198C, 0x0000198C, 0x00001D9C, 0x00000FFC, 0x000007F8, 0x0000003C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00001C1C, 0x0000180C, 0x0000180C, 0x0000180C, 0x00001C1C, 0x00000E38, 0x000007F0, 0x000003E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000003E0, 0x000007F0, 0x00000E38, 0x00001C1C, 0x0000180C, 0x0000180C, 0x0000180C, 0x0000180C, 0x0000180C, 0x00000C18, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000003E0, 0x000007F0, 0x00000E38, 0x00001C1C, 0x0000180C, 0x0000180C, 0x0000180C, 0x00031C1C, 0x0003FFFC, 0x0003FFFC, 0x0000001C, 0x00000004, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000007F0, 0x00000FF8, 0x00001D9C, 0x0000198C, 0x0000198C, 0x0000198C, 0x0000198C, 0x0000198C, 0x00000D8C, 0x00000798, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00001800, 0x0000180C, 0x0000180C, 0x0001FFFC, 0x0003FFFC, 0x0003180C, 0x0003180C, 0x00039800, 0x00019800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000000FC, 0x00001FFE, 0x00003FB7, 0x00007363, 0x00006363, 0x00006363, 0x00006363, 0x00006763, 0x00007E77, 0x00007C3E, 0x0000601C, 0x00006000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003FFFC, 0x0001FFFC, 0x00000C0C, 0x00001800, 0x00001800, 0x00001800, 0x00001C0C, 0x00000FFC, 0x000007FC, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x0000000C, 0x0003980C, 0x00039FFC, 0x00039FFC, 0x0000000C, 0x0000000C, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000006, 0x00000007, 0x00001803, 0x00039803, 0x00039FFF, 0x00039FFE, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x000000EC, 0x000001C0, 0x00001BC0, 0x00001FE0, 0x00001E7C, 0x00001C3C, 0x0000181C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x0000000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0000000C, 0x0000000C, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000180C, 0x00001FFC, 0x00001FFC, 0x00001C0C, 0x00001800, 0x00001800, 0x0000180C, 0x00001C0C, 0x00001FFC, 0x00001FFC, 0x00001C0C, 0x0000180C, 0x00001800, 0x00001800, 0x00001C0C, 0x00000FFC, 0x000007FC, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000180C, 0x00001FFC, 0x00001FFC, 0x00001C0C, 0x00001800, 0x00001800, 0x00001C00, 0x00001C0C, 0x00000FFC, 0x000007FC, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000003E0, 0x000007F0, 0x00000E38, 0x00001C1C, 0x0000180C, 0x0000180C, 0x0000180C, 0x0000180C, 0x00001C1C, 0x00000E38, 0x000007F0, 0x000003E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00001803, 0x00001FFF, 0x00001FFF, 0x00001C33, 0x00001830, 0x00001818, 0x00001818, 0x00001818, 0x00001C30, 0x00000FF0, 0x000007E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x000007E0, 0x00000FF0, 0x00001C30, 0x00001818, 0x00001818, 0x00001818, 0x00001818, 0x00001C30, 0x00001C33, 0x00001FFF, 0x00000FFF, 0x00000003, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000180C, 0x00001FFC, 0x00000FFC, 0x00001E0C, 0x00001800, 0x00001800, 0x00001800, 0x00000C00, 0x00000600, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000620, 0x00000F38, 0x00001F9C, 0x0000198C, 0x0000198C, 0x000019CC, 0x000018CC, 0x00001CFC, 0x00000E78, 0x00000230, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00001800, 0x00001800, 0x00001800, 0x0000FFF8, 0x0000FFFC, 0x0000180C, 0x0000180C, 0x0000180C, 0x00000038, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00001800, 0x00001FF0, 0x00001FF8, 0x0000001C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000001C, 0x00001838, 0x00001FFC, 0x00001FFC, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00001800, 0x00001E00, 0x00001F80, 0x000019C0, 0x000000F0, 0x0000003C, 0x0000003C, 0x000000F0, 0x000019C0, 0x00001F80, 0x00001E00, 0x00001800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00001800, 0x00001E00, 0x00001F80, 0x000019E0, 0x0000007C, 0x0000003C, 0x000018F0, 0x00001FC0, 0x00001FC0, 0x000018F0, 0x0000003C, 0x0000007C, 0x000019E0, 0x00001F80, 0x00001E00, 0x00001800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x0000180C, 0x00001C1C, 0x00001E3C, 0x00001B6C, 0x000001C0, 0x00000080, 0x000001C0, 0x00001B6C, 0x00001E3C, 0x00001C1C, 0x0000180C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00001806, 0x00001E03, 0x00001F03, 0x00001B87, 0x000019CE, 0x000000FC, 0x00000078, 0x000000F0, 0x000019E0, 0x00001B80, 0x00001F00, 0x00001E00, 0x00001800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000C1C, 0x0000183C, 0x0000187C, 0x000018EC, 0x000019CC, 0x00001B8C, 0x00001F0C, 0x00001E0C, 0x00001C18, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000400, 0x00000400, 0x00000E00, 0x0003FFFC, 0x0007FBFE, 0x00060006, 0x00040002, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00000000, 0x00000000, 0x0007FFFE, 0x0007FFFE, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000000, 0x00040002, 0x00060006, 0x0007FBFE, 0x0003FFFC, 0x00000E00, 0x00000400, 0x00000400, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}, + {0x00000300, 0x00000600, 0x00000E00, 0x00000C00, 0x00000C00, 0x00000600, 0x00000700, 0x00000300, 0x00000300, 0x00000600, 0x00000C00, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF} +}; diff --git a/VFOsys_astep/graph.cpp b/VFOsys_astep/graph.cpp new file mode 100644 index 0000000..dfa77b3 --- /dev/null +++ b/VFOsys_astep/graph.cpp @@ -0,0 +1,364 @@ +/* + * File: graph.cpp + * Author: JF3HZB / T.UEBO + * + * Created on 2017/12/08, 00:21 + */ + + +#include +#include "display.h" +#include "graph.h" +#include "font.h" + +extern uint8_t R_GRAM[Nx][Ny]; +extern uint8_t B_GRAM[Nx][Ny]; +extern uint8_t G_GRAM[Nx][Ny]; + + +// Claer GRAM ------------------------------------------------------------------ +void GRAM_clr(void) +{ + boxfill(0,0,Nx-1,Ny-1,0); +} + +//-------------------------------------------------------------------------- +void boxfill(int x_min, int y_min, int x_max, int y_max, unsigned long color) +{ + int k, j; + union { + unsigned long lw[1]; + unsigned char byte[4]; + } cl_data; + cl_data.lw[0]=color; + + if(x_min<0) x_min=0; + if(y_min<0) y_min=0; + if(x_max>=Nx) x_max=Nx-1; + if(y_max>=Ny) y_max=Ny-1; + + for(k=x_min;k<=x_max; k++){ + for(j=y_min; j<=y_max; j++){ + R_GRAM[k][j]=cl_data.byte[2]; + G_GRAM[k][j]=cl_data.byte[1]; + B_GRAM[k][j]=cl_data.byte[0]; + } + } +} + +//-------------------------------------------------------------------------- +void line(int xs, int ys,int xe, int ye, unsigned long color) +{ + union { + unsigned long lw[1]; + unsigned char byte[4]; + } cl_data; + cl_data.lw[0]=color; + + + int dx = (xe > xs ? xe - xs : xs - xe); + int xstep = xe > xs ? 1 : -1; + int dy = (ye > ys ? ye - ys : ys - ye); + int ystep = ye > ys ? 1 : -1; + int j; + + if(dx==0 && dy==0){ + R_GRAM[xs][ys]=cl_data.byte[2]; + G_GRAM[xs][ys]=cl_data.byte[1]; + B_GRAM[xs][ys]=cl_data.byte[0]; + + } else if(dx==0){ + if(ystep>0) for(j=ys; j<=ye; j++){ + R_GRAM[xs][j]=cl_data.byte[2]; + G_GRAM[xs][j]=cl_data.byte[1]; + B_GRAM[xs][j]=cl_data.byte[0]; + } + if(ystep<0) for(j=ye; j<=ys; j++){ + R_GRAM[xs][j]=cl_data.byte[2]; + G_GRAM[xs][j]=cl_data.byte[1]; + B_GRAM[xs][j]=cl_data.byte[0]; + } + } else if(dy==0){ + if(xstep>0) for(j=xs; j<=xe; j++){ + R_GRAM[j][ys]=cl_data.byte[2]; + G_GRAM[j][ys]=cl_data.byte[1]; + B_GRAM[j][ys]=cl_data.byte[0]; + } + if(xstep<0) for(j=xe; j<=xs; j++){ + R_GRAM[j][ys]=cl_data.byte[2]; + G_GRAM[j][ys]=cl_data.byte[1]; + B_GRAM[j][ys]=cl_data.byte[0]; + } + } else { + int xx=xs, yy=ys; + if(dx>dy){ + int t = - (dx >> 1); + while (1) + { + R_GRAM[xx][yy]=cl_data.byte[2]; + G_GRAM[xx][yy]=cl_data.byte[1]; + B_GRAM[xx][yy]=cl_data.byte[0]; + if (xx == xe) break; + xx += xstep; + t += dy; + if (t >= 0){ yy += ystep; t-= dx;} + } + } else { + int t = - (dy >> 1); + while (1) + { + R_GRAM[xx][yy]=cl_data.byte[2]; + G_GRAM[xx][yy]=cl_data.byte[1]; + B_GRAM[xx][yy]=cl_data.byte[0]; + if (yy == ye) break; + yy += ystep; + t += dx; + if (t >= 0){ xx += xstep; t-= dy;} + } + } + } +} + + +//-------------------------------------------------------------------------- +void box(int x_min, int y_min, int x_max, int y_max, unsigned long color) +{ + int k,j; + + if(x_min<0) x_min=0; + if(y_min<0) y_min=0; + if(x_max>=Nx) x_max=Nx-1; + if(y_max>=Ny) y_max=Ny-1; + + line(x_min, y_min, x_max, y_min, color); + line(x_min, y_max, x_max, y_max, color); + line(x_min, y_min, x_min, y_max, color); + line(x_max, y_min, x_max, y_max, color); + +} + + +//---------------------------------------------------------------------------- +// Draw String +//---------------------------------------------------------------------------- + +//------font 5x7---------------------------------------- +void disp_str8( char *s, int x, int y, unsigned long color) +{ + unsigned char c; + int k,N; + + N=x; + for(k=0; k<128; k++) + { + c=*(s+k); + if(c==0) break; + N=disp_chr8(c, N, y, color); + N+=1; + } +} + + +//------font12-------------------------------------------- +void disp_str12( char *s, int x, int y, unsigned long color) +{ + unsigned char c; + int k,N; + + N=x; + for(k=0; k<128; k++) + { + c=*(s+k); + if(c==0) break; + N=disp_chr12(c,N,y,color); + N+=1; + } +} + + + +//------font16-------------------------------------------- +void disp_str16( char *s, int x, int y, unsigned long color) +{ + unsigned char c; + int k,N; + + N=x; + for(k=0; k<128; k++) + { + c=*(s+k); + if(c==0) break; + N=disp_chr16(c,N,y,color); + N+=1; + } +} + +//------font20-------------------------------------------- +void disp_str20( char *s, int x, int y, unsigned long color) +{ + unsigned char c; + int k,N; + + N=x; + for(k=0; k<128; k++) + { + c=*(s+k); + if(c==0) break; + N=disp_chr20(c,N,y,color); + N+=1; + } +} + + + +//----------------------------------------------------------------------------- +// Draw a character +//----------------------------------------------------------------------------- + +//------font 5x7 ------------------------------------- +int disp_chr8(char c, int x, int y, unsigned long color) +{ + union { + unsigned long lw[1]; + unsigned char byte[4]; + } cl_data; + cl_data.lw[0]=color; + + int k, j; + unsigned char f8; + + if(c=='\\') c=' '; + + for(k=0; k<5; k++){ + f8=(unsigned char)bitrev8(font[c-0x20][k]); + if(x>=0){ + for(j=0; j<8; j++){ + if( (f8&0x01)==0x01 ){ + R_GRAM[x][y+j]=cl_data.byte[2]; + G_GRAM[x][y+j]=cl_data.byte[1]; + B_GRAM[x][y+j]=cl_data.byte[0]; + } + f8>>=1; + } + } + x++; + } + return(x); +} +//--------- bit reverse(8bit)----------------- +unsigned char bitrev8(unsigned char x) + { + x = ((x & 0xaa) >> 1) | ((x & 0x55) << 1); + x = ((x & 0xcc) >> 2) | ((x & 0x33) << 2); + x = (x >> 4) | (x << 4); + return(x); + } + + +//------font12----------------------------------------- +int disp_chr12(char c, int x, int y, unsigned long color) +{ + union { + unsigned long lw[1]; + unsigned char byte[4]; + } cl_data; + cl_data.lw[0]=color; + + int k, j, yj; + unsigned short int f12; + + if(c=='\\') c=' '; + + for(k=0; k<24; k++){ + f12=(unsigned short int)font12[c-0x20][k]; + if(f12==0x0fff) break; + if(x>=0){ + for(j=0; j<12; j++){ + yj=y+j; + if( (f12&0x0001)==0x0001){ + if( x>=0 && x=0 && yj>=1; + } + } + x++; + } + return(x+1); +} + + + + +//------font16----------------------------------------- +int disp_chr16(char c, int x, int y, unsigned long color) +{ + union { + unsigned long lw[1]; + unsigned char byte[4]; + } cl_data; + cl_data.lw[0]=color; + + int k, j, yj; + unsigned short int f16; + + if(c=='\\') c=' '; + + for(k=0; k<24; k++){ + f16=(unsigned short int)font16[c-0x20][k]; + if(f16==0xffff) break; + if(x>=0){ + for(j=0; j<16; j++){ + yj=y+j; + if( (f16&0x0001)==0x0001){ + if( x>=0 && x=0 && yj>=1; + } + } + x++; + } + return(x+1); +} + +//------font20----------------------------------------- +int disp_chr20(char c, int x, int y, unsigned long color) +{ + union { + unsigned long lw[1]; + unsigned char byte[4]; + } cl_data; + cl_data.lw[0]=color; + + int k, j, yj; + unsigned long f20; + + if(c=='\\') c=' '; + + for(k=0; k<24; k++){ + f20=(unsigned long)font20[c-0x20][k]; + if(f20==0xfffff) break; + if(x>=0){ + for(j=0; j<20; j++){ + yj=y+j; + if( (f20&0x00001)==0x00001){ + if( x>=0 && x=0 && yj>=1; + } + } + x++; + } + return(x+1); +} diff --git a/VFOsys_astep/graph.h b/VFOsys_astep/graph.h new file mode 100644 index 0000000..09b4b74 --- /dev/null +++ b/VFOsys_astep/graph.h @@ -0,0 +1,29 @@ +/* + * File: graph.h + * Author: JF3HZB / T.UEBO + * + * Created on 2017/12/08, 00:21 + */ + + +#ifndef _graph_ +#define _graph_ + +void GRAM_clr(void); +void line(int,int,int,int, unsigned long); +void boxfill(int, int, int, int, unsigned long); +void box(int, int, int, int, unsigned long); + +void disp_str8(char*, int, int, unsigned long); +void disp_str12(char*, int, int, unsigned long); +void disp_str16(char*, int, int, unsigned long); +void disp_str20(char*, int, int, unsigned long); + +int disp_chr8(char, int, int, unsigned long); +unsigned char bitrev8(unsigned char ); +int disp_chr12(char, int, int, unsigned long); +int disp_chr16(char, int, int, unsigned long); +int disp_chr20(char, int, int, unsigned long); + + +#endif diff --git a/VFOsys_astep/si5351.cpp b/VFOsys_astep/si5351.cpp new file mode 100644 index 0000000..d9b2943 --- /dev/null +++ b/VFOsys_astep/si5351.cpp @@ -0,0 +1,279 @@ +/* + * File: si5351.cpp + * Author: JF3HZB / T.UEBO + * + * Created on 2019/02/11, 23:07 + */ + + +#include + +#define SDA 21 +#define SCL 22 +#define fxtal (25000000) + + + + +volatile uint32_t oMf=0; +volatile uint32_t oMc=0; + +void wr_I2C(unsigned char d){ + int k; + for(k=0;k<8;k++){ + if(d & 0x80) digitalWrite(SDA, HIGH); else digitalWrite(SDA, LOW); + delayMicroseconds(1); + digitalWrite(SCL, HIGH); + delayMicroseconds(1); + digitalWrite(SCL, LOW); + delayMicroseconds(1); + digitalWrite(SDA, LOW); + d <<= 1; + } + digitalWrite(SCL, HIGH); + delayMicroseconds(1); + digitalWrite(SCL, LOW); +} + + +void cmd_si5351(unsigned char reg_No, unsigned char d){ + digitalWrite(SDA, LOW); // start condition + delayMicroseconds(1); + digitalWrite(SCL, LOW); // + delayMicroseconds(1); + + wr_I2C(0xC0); + wr_I2C(reg_No); + wr_I2C(d); + + delayMicroseconds(1); + digitalWrite(SCL, HIGH); // stop condition + delayMicroseconds(1); + digitalWrite(SDA, HIGH); // + delayMicroseconds(10); +} + + + +void set_car_freq(unsigned long freq, unsigned char EN, unsigned char RST){ +// freq [Hz] +// +// fvco= fxtal*(a+b/c) ( a:15 -- 90, b:0 -- 1048575, c:1 -- 1048575 ) +// freq= fvco /(a+b/c) ( a:4, 6--1800, b:0 -- 1048575, c:1 -- 1048575 ) +// +// P1= 128*a + floor(128*b/c) - 512 +// P2= 128*b - c*floor(128*b/c) +// P3= c +// + + int k; + uint32_t M; + uint32_t R; + + if(EN==1){ + cmd_si5351(16,0x4F); + cmd_si5351(17,0x4F); + + if(freq<1500) freq=1500; else if(freq>280000000) freq=280000000; + + if( freq> 150000000){M=4; R=0;} + else if(freq>=63000000){M=6; R=0;} + else if(freq>=27500000){M=14; R=0;} + else if(freq>=13000000){M=30; R=0;} + else if(freq>= 6500000){M=62; R=0;} + else if(freq>= 3000000){M=126; R=0;} + else if(freq>= 1500000){M=280; R=0;} + else if(freq>= 700000){M=600; R=0;} + else if(freq>= 330000){M=1280; R=0;} + else if(freq>= 150000){M=1300; R=1;} + else if(freq>= 67000){M=1500; R=2;} + else if(freq>= 30300){M=1600; R=3;} + else if(freq>= 14000){M=1800; R=4;} + else if(freq>= 7000){M=1800; R=5;} + else if(freq>= 3500){M=1800; R=6;} + else{M=1800; R=7;} + + freq*=M; + freq<<=R; + + unsigned long c=0xFFFFF; + unsigned long a=freq/fxtal; + unsigned long b=(long)((float)(freq-a*fxtal)*(float)c/(float)fxtal); + unsigned long dd=(128*b)/c; + unsigned long P1=128*a+dd-512; + unsigned long P2=128*b-c*dd; + unsigned long P3=c; + + + //Set fvco of PLL_A + cmd_si5351(26,(P3>>8)&0xFF); //MSNA_P3[15:8] + cmd_si5351(27,P3&0xFF); //MSNA_P3[7:0] + cmd_si5351(28,(P1>>16)&0x03); //MSNA_P1[17:16] + cmd_si5351(29,(P1>>8)&0xFF); //MSNA_P1[15:8] + cmd_si5351(30,P1&0xFF); //MSNA_P1[7:0] + cmd_si5351(31,(P3>>12)&0xF0|(P2>>16)&0x0F);//MSNA_P3[19:16], MSNA_P2[19:16] + cmd_si5351(32,(P2>>8)&0xFF); //MSNA_P2[15:8] + cmd_si5351(33,P2&0xFF); //MSNA_P2[7:0] + + // Set MS0, MS1 + // a=M, b=0, c=1 ---> P1=128*M-512, P2=0, P3=1 + if(M==4){ + P1=0; + cmd_si5351(42,0); //MS0_P3[15:8] + cmd_si5351(43,1); //MS0_P3[7:0] + cmd_si5351(44,0b00001100); //0,R0_DIV[2:0],MS0_DIVBY4[1:0],MS0_P1[17:16] + cmd_si5351(45,0); //MS0_P1[15:8] + cmd_si5351(46,0); //MS0_P1[7:0] + cmd_si5351(47,0); //MS0_P3[19:16], MS0_P2[19:16] + cmd_si5351(48,0); //MS0_P2[15:8] + cmd_si5351(49,0); //MS0_P2[7:0] + + cmd_si5351(50,0); //MS1_P3[15:8] + cmd_si5351(51,1); //MS1_P3[7:0] + cmd_si5351(52,0b00001100); //0,R1_DIV[2:0],MS1_DIVBY4[1:0],MS1_P1[17:16] + cmd_si5351(53,0); //MS1_P1[15:8] + cmd_si5351(54,0); //MS1_P1[7:0] + cmd_si5351(55,0); //MS1_P3[19:16], MS0_P2[19:16] + cmd_si5351(56,0); //MS1_P2[15:8] + cmd_si5351(57,0); //MS1_P2[7:0] + }else{ + P1=128*M-512; + cmd_si5351(42,0); //MS0_P3[15:8] + cmd_si5351(43,1); //MS0_P3[7:0] + cmd_si5351(44,(R<<4)&0x70|(P1>>16)&0x03);//0,R0_DIV[2:0],MS0_DIVBY4[1:0],MS0_P1[17:16] + cmd_si5351(45,(P1>>8)&0xFF); //MS0_P1[15:8] + cmd_si5351(46,P1&0xFF); //MS0_P1[7:0] + cmd_si5351(47,0); //MS0_P3[19:16], MS0_P2[19:16] + cmd_si5351(48,0); //MS0_P2[15:8] + cmd_si5351(49,0); //MS0_P2[7:0] + + cmd_si5351(50,0); //MS1_P3[15:8] + cmd_si5351(51,1); //MS1_P3[7:0] + cmd_si5351(52,(R<<4)&0x70|(P1>>16)&0x03);//0,R1_DIV[2:0],MS1_DIVBY4[1:0],MS1_P1[17:16] + cmd_si5351(53,(P1>>8)&0xFF); //MS1_P1[15:8] + cmd_si5351(54,P1&0xFF); //MS1_P1[7:0] + cmd_si5351(55,0); //MS1_P3[19:16], MS0_P2[19:16] + cmd_si5351(56,0); //MS1_P2[15:8] + cmd_si5351(57,0); //MS1_P2[7:0] + } + cmd_si5351(165,0); + cmd_si5351(166,M); + + if( (oMc!=M)||(RST==1) ){ + cmd_si5351(177,0x20); // Reset PLLA + } + oMc=M; + + }else{ + cmd_si5351(16,0x80); + cmd_si5351(17,0x80); + } + +} + + + +void set_freq(unsigned long freq){ +// freq [Hz] +// +// fvco= fxtal*(a+b/c) ( a:15 -- 90, b:0 -- 1048575, c:1 -- 1048575 ) +// freq= fvco /(a+b/c) ( a:4, 6--1800, b:0 -- 1048575, c:1 -- 1048575 ) +// +// P1= 128*a + floor(128*b/c) - 512 +// P2= 128*b - c*floor(128*b/c) +// P3= c +// + + int k; + uint32_t M; + uint32_t R; + + if(freq<1500) freq=1500; else if(freq>280000000) freq=280000000; + + if( freq> 150000000){M=4; R=0;} + else if(freq>=63000000){M=6; R=0;} + else if(freq>=27500000){M=14; R=0;} + else if(freq>=13000000){M=30; R=0;} + else if(freq>= 6500000){M=62; R=0;} + else if(freq>= 3000000){M=126; R=0;} + else if(freq>= 1500000){M=280; R=0;} + else if(freq>= 700000){M=600; R=0;} + else if(freq>= 330000){M=1280; R=0;} + else if(freq>= 150000){M=1300; R=1;} + else if(freq>= 67000){M=1500; R=2;} + else if(freq>= 30300){M=1600; R=3;} + else if(freq>= 14000){M=1800; R=4;} + else if(freq>= 7000){M=1800; R=5;} + else if(freq>= 3500){M=1800; R=6;} + else{M=1800; R=7;} + + freq*=M; + freq<<=R; + + unsigned long c=0xFFFFF; + unsigned long a=freq/fxtal; + unsigned long b=(long)((float)(freq-a*fxtal)*(float)c/(float)fxtal); + unsigned long dd=(128*b)/c; + unsigned long P1=128*a+dd-512; + unsigned long P2=128*b-c*dd; + unsigned long P3=c; + + + //Set fvco of PLL_B + cmd_si5351(34,(P3>>8)&0xFF); //MSNB_P3[15:8] + cmd_si5351(35,P3&0xFF); //MSNB_P3[7:0] + cmd_si5351(36,(P1>>16)&0x03); //MSNB_P1[17:16] + cmd_si5351(37,(P1>>8)&0xFF); //MSNB_P1[15:8] + cmd_si5351(38,P1&0xFF); //MSNB_P1[7:0] + cmd_si5351(39,(P3>>12)&0xF0|(P2>>16)&0x0F);//MSNB_P3[19:16], MSNB_P2[19:16] + cmd_si5351(40,(P2>>8)&0xFF); //MSNB_P2[15:8] + cmd_si5351(41,P2&0xFF); //MSNB_P2[7:0] + + // Set MS2 + // a=M, b=0, c=1 ---> P1=128*M-512, P2=0, P3=1 + if(M==4){ + P1=0; + cmd_si5351(58,0); //MS2_P3[15:8] + cmd_si5351(59,1); //MS2_P3[7:0] + cmd_si5351(60,0b00001100); //0,R0_DIV[2:0],MS2_DIVBY4[1:0],MS2_P1[17:16] + cmd_si5351(61,0); //MS2_P1[15:8] + cmd_si5351(62,0); //MS2_P1[7:0] + cmd_si5351(63,0); //MS2_P3[19:16], MS2_P2[19:16] + cmd_si5351(64,0); //MS2_P2[15:8] + cmd_si5351(65,0); //MS2_P2[7:0] + }else{ + P1=128*M-512; + cmd_si5351(58,0); //MS2_P3[15:8] + cmd_si5351(59,1); //MS2_P3[7:0] + cmd_si5351(60,(R<<4)&0x70|(P1>>16)&0x03);//0,R0_DIV[2:0],MS2_DIVBY4[1:0],MS2_P1[17:16] + cmd_si5351(61,(P1>>8)&0xFF); //MS2_P1[15:8] + cmd_si5351(62,P1&0xFF); //MS2_P1[7:0] + cmd_si5351(63,0); //MS2_P3[19:16], MS2_P2[19:16] + cmd_si5351(64,0); //MS2_P2[15:8] + cmd_si5351(65,0); //MS2_P2[7:0] + + } + + if(oMf!=M){ + cmd_si5351(177,0x80); // Reset PLLB + } + oMf=M; +} + + + +void si5351_init(void){ + pinMode(SDA, OUTPUT); + pinMode(SCL, OUTPUT); + digitalWrite(SDA, HIGH); + digitalWrite(SCL, HIGH); + delay(10); + cmd_si5351(183,0b10010010); // CL=8pF + cmd_si5351(16,0x80); // Disable CLK0 + cmd_si5351(17,0x80); // Disable CLK1 + cmd_si5351(18,0x80); // Disable CLK2 + cmd_si5351(177,0xA0); // Reset PLL_A and B + cmd_si5351(16,0x80); // Disable CLK0 (MS0=Integer Mode, Source=PLL_A) + cmd_si5351(17,0x80); // Disable CLK1 (MS1=Integer Mode, Source=PLL_A) + cmd_si5351(18,0x6F); // Enable CLK2 (MS2=Integer Mode, Source=PLL_B) +} diff --git a/VFOsys_astep/si5351.h b/VFOsys_astep/si5351.h new file mode 100644 index 0000000..78fff5f --- /dev/null +++ b/VFOsys_astep/si5351.h @@ -0,0 +1,16 @@ +/* + * File: si5351.h + * Author: JF3HZB / T.UEBO + * + * Created on 2019/02/11, 23:07 + */ + + +#ifndef __si5351H___ +#define __si5351H___ + +void si5351_init(void); +void set_freq(unsigned long freq); +void set_car_freq(unsigned long freq, unsigned char EN, unsigned char RST); + +#endif diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..8bcd854 --- /dev/null +++ b/readme.txt @@ -0,0 +1,13 @@ +VFOsys : fixed step tuning +VFOsys_astep : with adaptive step control + +JF3HZB T. Uebo +Tj Lab + +https://tj-lab.org +https://tj-lab.org/2019/02/17/vfo5/ +https://tj-lab.org/2019/02/27/vfo6/ + + + +