00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "includes.h"
00019
00020 #define TESTVGA_MEMORY_ADDRESS 0x30500000
00021
00022 unsigned char vga640480[]={
00023 0x61,0x02,0x0b,0x00,0x20,0x37,0x10,0x8c,
00024 0x01,0x69,0x30,0x20,0x05,0x03,0x1b,0x15,
00025 0x00,0xcb,0xff,0x40,0x3f,0x7e,0x0d,0x40,
00026 0x62,0x00,0x68,0x00,0xf0,0x00,0x00,0x00,
00027 0x0a,0x01,0x00,0x00,0x01,0x32,0x00,0x00,
00028 0x00,0x00,0x54,0x01,0xae,0xae,0xd7,0x81,
00029 0x08,0xfa,0xfa,0x1f,0x0f,0xfa,0xfa,0x03,
00030 0xfc,0x00,0x00,0x0f,0x0f,0x00,0x00,0x3f
00031 };
00032 unsigned char pal640480[]={
00033 0x61,0x02,0x0b,0x00,0x00,0x37,0x10,0x64,
00034 0x01,0x69,0x30,0x20,0x05,0x03,0x0a,0x15,
00035 0x00,0xcb,0xff,0x40,0x3f,0x7e,0x0d,0x40,
00036 0x62,0x00,0x68,0x00,0xf0,0x00,0x00,0x00,
00037 0x0a,0x01,0x00,0x00,0x01,0x32,0x00,0x00,
00038 0x00,0x00,0x54,0x01,0xae,0xae,0xd7,0x81,
00039 0x08,0xfa,0xfa,0x1f,0x0f,0xfa,0xfa,0x03,
00040 0xfc,0x00,0x00,0x0f,0x0f,0x00,0x00,0x3f
00041 };
00042 unsigned char vga_mode_vga[]="VGA 640X480";
00043 unsigned char vga_mode_pal[]="PAL 640X480";
00044 unsigned char *pDisplayMode[TestVgaMaxDisplayMode][2]={
00045 {0,0},
00046 {vga640480, vga_mode_vga},
00047 {pal640480, vga_mode_pal}
00048 };
00049 volatile static unsigned short (*pTestVgaBuffer)[SCR_XSIZE_TFT_640480]=(void *)TESTVGA_MEMORY_ADDRESS;
00050 void F_TestvgaGfxPixelColorSet(INT16U X,INT16U Y,INT16U ColorValue){
00051 if((X<SCR_XSIZE_TFT_640480)&&(Y<SCR_YSIZE_TFT_640480))
00052 pTestVgaBuffer[Y][X]=ColorValue;
00053 }
00054 void F_TestvgaGfxFill(INT16U ColorValue){
00055 INT16U X,Y;
00056
00057 for(Y=0;Y<SCR_YSIZE_TFT_640480;Y++)
00058 for(X=0;X<SCR_XSIZE_TFT_640480;X++) pTestVgaBuffer[Y][X]=ColorValue;
00059 }
00060 void F_TestvgaGfxRectangleDraw(INT16U StartX,INT16U StartY,INT16U EndX,INT16U EndY,INT16U ColorValue){
00061 F_TestvgaGfxLineDraw(StartX,StartY,EndX,StartY,ColorValue);
00062 F_TestvgaGfxLineDraw(StartX,StartY,StartX,EndY,ColorValue);
00063 F_TestvgaGfxLineDraw(EndX,StartY,EndX,EndY,ColorValue);
00064 F_TestvgaGfxLineDraw(StartX,EndY,EndX,EndY,ColorValue);
00065 }
00066 void F_TestvgaGfxRectangleFill(INT16U StartX,INT16U StartY,INT16U EndX,INT16U EndY,INT16U ColorValue){
00067 INT16U i;
00068
00069 for(i=StartY;i<=EndY;i++) F_TestvgaGfxLineDraw(StartX,i,EndX,i,ColorValue);
00070 }
00071 void F_TestvgaGfxLineDraw(INT16U StartX,INT16U StartY,INT16U EndX,INT16U EndY,INT16U ColorValue){
00072 INT32 DeltaX,DeltaY,Difference;
00073
00074 DeltaX=EndX-StartX;
00075 DeltaY=EndY-StartY;
00076 if(DeltaX>=0) {
00077 if(DeltaY>=0)
00078 {
00079 if(DeltaX>=DeltaY)
00080 {
00081 Difference=DeltaY-DeltaX/2;
00082 while(StartX<=EndX)
00083 {
00084 F_TestvgaGfxPixelColorSet(StartX,StartY,ColorValue);
00085 if(Difference>0){StartY+=1;Difference-=DeltaX;}
00086 StartX+=1;
00087 Difference+=DeltaY;
00088 }
00089 }
00090 else
00091 {
00092 Difference=DeltaX-DeltaY/2;
00093 while(StartY<=EndY)
00094 {
00095 F_TestvgaGfxPixelColorSet(StartX,StartY,ColorValue);
00096 if(Difference>0){StartX+=1;Difference-=DeltaY;}
00097 StartY+=1;
00098 Difference+=DeltaX;
00099 }
00100 }
00101 }
00102 else
00103 {
00104 DeltaY=-DeltaY;
00105
00106 if(DeltaX>=DeltaY)
00107 {
00108 Difference=DeltaY-DeltaX/2;
00109 while(StartX<=EndX)
00110 {
00111 F_TestvgaGfxPixelColorSet(StartX,StartY,ColorValue);
00112 if(Difference>0){StartY-=1;Difference-=DeltaX;}
00113 StartX+=1;
00114 Difference+=DeltaY;
00115 }
00116 }
00117 else
00118 {
00119 Difference=DeltaX-DeltaY/2;
00120 while(StartY>=EndY)
00121 {
00122 F_TestvgaGfxPixelColorSet(StartX,StartY,ColorValue);
00123 if(Difference>0){StartX+=1;Difference-=DeltaY;}
00124 StartY-=1;
00125 Difference+=DeltaX;
00126 }
00127 }
00128 }
00129 }
00130 else
00131 {
00132 DeltaX=-DeltaX;
00133 if(DeltaY >= 0)
00134 {
00135 if(DeltaX>=DeltaY)
00136 {
00137 Difference=DeltaY-DeltaX/2;
00138 while(StartX>=EndX)
00139 {
00140 F_TestvgaGfxPixelColorSet(StartX,StartY,ColorValue);
00141 if(Difference>0){StartY+=1;Difference-=DeltaX;}
00142 StartX-=1;
00143 Difference+=DeltaY;
00144 }
00145 }
00146 else
00147 {
00148 Difference=DeltaX-DeltaY/2;
00149 while(StartY<=EndY)
00150 {
00151 F_TestvgaGfxPixelColorSet(StartX,StartY,ColorValue);
00152 if(Difference>0){StartX-=1;Difference-=DeltaY;}
00153 StartY+=1;
00154 Difference+=DeltaX;
00155 }
00156 }
00157 }
00158 else
00159 {
00160 DeltaY=-DeltaY;
00161
00162 if(DeltaX>=DeltaY)
00163 {
00164 Difference=DeltaY-DeltaX/2;
00165 while(StartX>=EndX)
00166 {
00167 F_TestvgaGfxPixelColorSet(StartX,StartY,ColorValue);
00168 if(Difference>0){StartY-=1;Difference-=DeltaX;}
00169 StartX-=1;
00170 Difference+=DeltaY;
00171 }
00172 }
00173 else
00174 {
00175 Difference=DeltaX-DeltaY/2;
00176 while(StartY>=EndY)
00177 {
00178 F_TestvgaGfxPixelColorSet(StartX,StartY,ColorValue);
00179 if(Difference>0){StartX-=1;Difference-=DeltaY;}
00180 StartY-=1;
00181 Difference+=DeltaX;
00182 }
00183 }
00184 }
00185 }
00186 }
00187 void F_TestvgaDelay(void){
00188 INT32U i;
00189
00190 for(i=0;i<=10000000;i++);
00191 }
00192 #define VGA_BLANK 30
00193 #define C_UP (LCD_HORIZONTAL_SIZE-VGA_BLANK*2)
00194 #define C_RIGHT (LCD_HORIZONTAL_SIZE-VGA_BLANK*2)
00195 #define V_BLACK ((LCD_VERTICAL_SIZE-VGA_BLANK*4)/6)
00196 void F_Testvga(void){
00197
00198 F_TestvgaGfxFill((0x00<<11)|(0x3f<<5)|(0x00));
00199 F_TestvgaDelay();
00200 F_TestvgaGfxFill((0x1f<<11)|(0x00<<5)|(0x00));
00201 F_TestvgaDelay();
00202 F_TestvgaGfxFill(0xffff);
00203 F_TestvgaDelay();
00204 F_TestvgaGfxFill((0x00<<11)|(0x00<<5)|(0x1f));
00205 F_TestvgaDelay();
00206 F_TestvgaGfxFill((0x00<<11)|(0x3f<<5)|(0x00));
00207 F_TestvgaDelay();
00208 F_TestvgaGfxFill((0x1f<<11)|(0x00<<5)|(0x00));
00209 F_TestvgaDelay();
00210 F_TestvgaGfxRectangleDraw(VGA_BLANK,VGA_BLANK,(LCD_XSIZE_TFT_640480-VGA_BLANK),(LCD_YSIZE_TFT_640480-VGA_BLANK),0x0000);
00211 F_TestvgaDelay();
00212 F_TestvgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*0),(C_RIGHT),(VGA_BLANK*2+V_BLACK*1),0x001f);
00213 F_TestvgaDelay();
00214 F_TestvgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*1),(C_RIGHT),(VGA_BLANK*2+V_BLACK*2),0x07e0);
00215 F_TestvgaDelay();
00216 F_TestvgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*2),(C_RIGHT),(VGA_BLANK*2+V_BLACK*3),0xf800);
00217 F_TestvgaDelay();
00218 F_TestvgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*3),(C_RIGHT),(VGA_BLANK*2+V_BLACK*4),0xffe0);
00219 F_TestvgaDelay();
00220 F_TestvgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*4),(C_RIGHT),(VGA_BLANK*2+V_BLACK*5),0xf81f);
00221 F_TestvgaDelay();
00222 F_TestvgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*5),(C_RIGHT),(VGA_BLANK*2+V_BLACK*6),0x07ff);
00223 F_TestvgaDelay();
00224 }
00225