亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? s3c44b0x.c

?? 在ecos 下mingui 的移植開發(fā)
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
// $Id: s3c44b0x.c,2003,wen jian (wen_jian_1973@163.com) $
//
// s3c44b0x.c: Low Level Graphics Engine for ARM s3c44b0x
//
// This is customized graphics engine for an embedded system 
//  which based on samsung s3c44b0x.
//
// NOTE: you should use the new native GAL engine for the s3c44b0x systems.
//

/*
**  This library is free software; you can redistribute it and/or
**  modify it under the terms of the GNU Library General Public
**  License as published by the Free Software Foundation; either
**  version 2 of the License, or (at your option) any later version.
**
**  This library is distributed in the hope that it will be useful,
**  but WITHOUT ANY WARRANTY; without even the implied warranty of
**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
**  Library General Public License for more details.
**
**  You should have received a copy of the GNU Library General Public
**  License along with this library; if not, write to the Free
**  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
**  MA 02111-1307, USA
*/

// Modify records:
//
//  Who             When        Where       For What                Status
//-----------------------------------------------------------------------------
//
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

#include <cyg/hal/plf_io.h>
#include <cyg/infra/cyg_type.h>         // base types

#include "common.h"
#include "gal.h"
#include "s3c44b0x.h"

static S3C44B0X   *s3c44b0x;

static char FrameBuffer[MAX_X*MAX_Y/8*PIXELBPP]   __attribute__ ((aligned(4)));

//#define	FrameBuffer	0xc500000

#define	MONOMODE	0
#define	GRAY4MODE	1
#define	GRAY16MODE	2
#define	COLORMODE	3

#define _MODESEL	GRAY16MODE

#define	_BSWP		1
#define	_CLKVAL		4
#define	_LINEVAL	(MAX_Y-1)
#define	_HOZVAL		((MAX_X/4)-1)
#define	_LCDBANK	((cyg_uint32)FrameBuffer>>22)
#define	_LCDBASEU	((0x3fffff&(cyg_uint32)FrameBuffer)>>1)
#define	_LCDBASEL	(_LCDBASEU+((MAX_X*MAX_Y/8*(1<<_MODESEL))>>1))
#define	_PAGEWIDTH	((MAX_X*(1<<_MODESEL))/16)

static void initlcd()
{
    memset(FrameBuffer,0,sizeof(FrameBuffer));
    
    *(cyg_uint32*)study_LCDCON1=(0)|(1<<5)|(0<<7)|(0x3<<8)|(0x3<<10)|(_CLKVAL<<12)|0x1e;
    // disable,4B_SNGL_SCAN,WDLY=16clk,WLH=16clk,inv signal
  
    *(cyg_uint32*)study_LCDCON2=(_LINEVAL)|(_HOZVAL<<10)|(10<<21);  
    //LINEBLANK=10 (without any calculation) 
  
    *(cyg_uint32*)study_LCDSADDR1= (_MODESEL<<27) | ( _LCDBANK<<21 ) | _LCDBASEU;
    // monochrome, LCDBANK, LCDBASEU
  
    *(cyg_uint32*)study_LCDSADDR2= _LCDBASEL | (0<<21) | (_BSWP<<29);
  
    *(cyg_uint32*)study_LCDSADDR3= _PAGEWIDTH;
    
    *(cyg_uint32*)study_DITHMODE= 0x12210;

    //*(cyg_uint32*)study_REDLUT
    //*(cyg_uint32*)study_GREENLUT
    //*(cyg_uint32*)study_BLUELUT

    *(cyg_uint32*)study_LCDCON1=(1)|(1<<5)|(0<<7)|(0x3<<8)|(0x3<<10)|(_CLKVAL<<12)|0x1e;    
    // enable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,
    
    *(cyg_uint32*)study_PDATC|=0x8000;	// b15=1 DISPON

}

static int getclippingrect (int sx1,int sy1,int sx2,int sy2,int *dx1,int *dy1,int *dx2,int *dy2)
{
	*dx1 = ((*dx1) > sx1) ? (*dx1) : sx1;
	*dy1 = ((*dy1) > sy1) ? (*dy1) : sy1;
	*dx2 = ((*dx2) < sx2) ? (*dx2) : sx2;
	*dy2 = ((*dy2) < sy2) ? (*dy2) : sy2;
	if ( *dx1 >= *dx2 || *dy1 >= *dy2 )
	{
		return FALSE;
	}
	return TRUE;
}

// GC properties
static int bytes_per_pixel (GAL_GC gc)
{
    return gc.s3c44b0x->bpp;
}

static int bits_per_pixel (GAL_GC gc)
{
    return gc.s3c44b0x->depth;
}

static int width (GAL_GC gc)
{
    return gc.s3c44b0x->width;
}

static int height (GAL_GC gc)
{
    return gc.s3c44b0x->height;
}

static int colors (GAL_GC gc)
{
    int depth = bits_per_pixel (gc);

    return 1 << depth;
}

// Allocation and release of graphics context
static int allocategc (GAL_GC gc, int width, int height, int depth, 
                GAL_GC* newgc)
{
	newgc->s3c44b0x = (S3C44B0X *)malloc(sizeof(S3C44B0X));
	if ( newgc->s3c44b0x == NULL )
		return -1;
	newgc->s3c44b0x->bpp  =  gc.s3c44b0x->bpp;
	newgc->s3c44b0x->bkcolor =  gc.s3c44b0x->bkcolor;
	newgc->s3c44b0x->fgcolor =  gc.s3c44b0x->fgcolor;
	newgc->s3c44b0x->x1 =  gc.s3c44b0x->x1;
	newgc->s3c44b0x->y1 =  gc.s3c44b0x->y1;
	newgc->s3c44b0x->x1 =  gc.s3c44b0x->x1;
	newgc->s3c44b0x->y2 =  gc.s3c44b0x->y2;
	newgc->s3c44b0x->shift  =  gc.s3c44b0x->shift;
	newgc->s3c44b0x->stride =  gc.s3c44b0x->stride;
	newgc->s3c44b0x->fb_buf =  gc.s3c44b0x->fb_buf;
	newgc->s3c44b0x->width  = width;
	newgc->s3c44b0x->height = height;
	newgc->s3c44b0x->depth  = depth;
    return 0;
}

// without any code
static void freegc (GAL_GC gc)
{
   free(gc.s3c44b0x); 
}

// Clipping of graphics context
// without any code
static void enableclipping (GAL_GC gc)
{
	gc.s3c44b0x->x1 = 0;
	gc.s3c44b0x->y1 = 0;
	gc.s3c44b0x->x2 = gc.s3c44b0x->width-1;
	gc.s3c44b0x->y2 = gc.s3c44b0x->height-1;
}

static void disableclipping (GAL_GC gc)
{
	enableclipping(gc);
}

static int setclipping (GAL_GC gc, int x1, int y1, int x2, int y2)
{
   // ggiSetGCClipping (gc.visual, x1, y1, x2 + 1, y2 + 1);
	gc.s3c44b0x->x1 = x1;
	gc.s3c44b0x->y1 = y1;
	gc.s3c44b0x->x2 = x2;
	gc.s3c44b0x->y2 = y2;

    return 0;
}

static int getclipping (GAL_GC gc, int* x1, int* y1, int* x2, int* y2)
{
	*x1 = gc.s3c44b0x->x1;
	*y1 = gc.s3c44b0x->y1;
	*x2 = gc.s3c44b0x->x2;
	*y2 = gc.s3c44b0x->y2;
    return 0;
}


// Background and foreground colors
/*static int getbgcolor (GAL_GC gc, gal_pixel* color)
{
    *color = gc.s3c44b0x->bkcolor;
    return 0;
}

static int setbgcolor (GAL_GC gc, gal_pixel color)
{
    gc.s3c44b0x->bkcolor = color;
    return 0;
}

static int getfgcolor (GAL_GC gc, gal_pixel* color)
{
    *color = gc.s3c44b0x->fgcolor;
    return 0;
}

static int setfgcolor (GAL_GC gc, gal_pixel color)
{
    gc.s3c44b0x->fgcolor = color;
    return 0;
}
*/
static gal_pixel mapcolor(GAL_GC gc, gal_color *color)
{
	gal_pixel    ret;
#ifdef GRAY16
	return ret = (color->r*82 + color->g*124 + color->b*50) >> gc.s3c44b0x->shift;
#else
	return ret = (color->r&0xe0) + ((color->g&0xe0)>>3) + ((color->b&0xc0)>>6);
#endif
}

static int unmappixel (GAL_GC gc, gal_pixel pixel, gal_color* color)
{
#ifdef GRAY16
	color->r = color->g = color->b = (pixel << gc.s3c44b0x->shift) >> 8;
#else
	color->r = pixel & 0xe0;
	color->g =(pixel & 0x1c)<<3;
	color->b =(pixel & 0x03)<<6;
#endif
    return 0;
}

// Palette operations
static int getpalette (GAL_GC gc, int s, int len, gal_color* cmap)
{
    int i;
    for (i = 0; i < len; i++) {
#ifdef GRAY16
        cmap[i].r = (((s + i)%16 + 1) << 4) - 1;
        cmap[i].g = (((s + i)%16 + 1) << 4) - 1;
        cmap[i].b = (((s + i)%16 + 1) << 4) - 1;
#else
    	cmap[i].r = ((s+i) & 0xe0);
    	cmap[i].g = ((s+i) & 0x1c)<<3;
    	cmap[i].b = ((s+i) & 0x03)<<6;
#endif
    }
    return 0;
}

static int setpalette (GAL_GC gc, int s, int len, gal_color* cmap)
{
    return 0;
}

static int setcolorfulpalette (GAL_GC gc)
{
    return 0;
}


// Box operations
static size_t boxsize (GAL_GC gc, int w, int h)
{
    return w * h * bytes_per_pixel (gc);
}

static int fillbox (GAL_GC gc, int x, int y, int w, int h,
                gal_pixel pixel)
{
	int i,j,x1,y1,x2,y2,ret,ww,hh;
	unsigned char *dest;
	int shift;
	shift = gc.s3c44b0x->depth;
	getclipping(gc,&x1,&y1,&x2,&y2);
	ww = w;
	hh = h;
	ww += x;
	hh += y;	
	ret = getclippingrect(x1,y1,x2,y2,&x,&y,&ww,&hh);	
	if ( ret == -1 )
		return -1;
	ww -= x;
	hh -= y;
	for (i = 0; i < hh; i++)
	{
#ifdef GRAY16
		for (j =0; j < ww ; j++)
		{
			dest = gc.s3c44b0x->fb_buf + (gc.s3c44b0x->stride)*(y+i) + (gc.s3c44b0x->stride)*(x+j)/MAX_X;
          		if ( (x+j) % (8/shift) == 1 )
            		{
   	            		*dest &= 0xff << shift;
     	        		pixel &= 0xff >> (8-shift);
           	    		*dest |= pixel;
            		}
   	        	else if ( (x+j) % (8/shift) == 0 )
     	    		{
           	    		*dest &= 0xff >> (8-shift);
             			pixel &= 0xff >> (8-shift);
                		*dest |= pixel << shift;
   	        	}
		}
#else
		j=j;	// for waning
		dest = gc.s3c44b0x->fb_buf + (gc.s3c44b0x->stride)*(y+i) + (gc.s3c44b0x->stride)*x/MAX_X;
        	memset(dest,pixel,ww);
#endif
	}
    return 0;
}

static int putbox (GAL_GC gc, int x, int y, int w, int h, void* buf)
{
	int i,j,k,x1,x2,y1,y2,ret,xx,yy,ww,hh;
	unsigned char *dest;
	int shift;
	k = 0;
	shift = gc.s3c44b0x->depth;
	getclipping(gc,&x1,&y1,&x2,&y2);
	ww = w;
	hh = h;
	xx = x;
	yy = y;
	ww += x;
	hh += y;	
	ret = getclippingrect(x1,y1,x2,y2,&xx,&yy,&ww,&hh);	
	if ( ret == -1 )
		return -1;
	ww -= xx;
	hh -= yy;
	for ( i = 0; i < h; i++ )
	{
#ifdef GRAY16
		if ((y+i >= yy) && (y+i <= yy+hh)) 
		{
			for ( j = 0; j < w; j++ )
			{
				if ( (x+j>=xx)&&(x+j<=xx+ww))
				{
					dest = gc.s3c44b0x->fb_buf + (gc.s3c44b0x->stride)*(y+i) + (gc.s3c44b0x->stride)*(x+j)/MAX_X;
                    			if ( (x+j) % (8/shift) == 1 )
                    			{
                        			*dest &= 0xff << shift;
                        			((unsigned char *)buf)[k] &= 0xff >> (8-shift);
                        			*dest |= ((unsigned char *)buf)[k];
                    			}
                    			else if ( (x+j) % (8/shift) == 0 )
                    			{
                        			*dest &=  0xff >> (8-shift);
                        			((unsigned char *)buf)[k] &= 0xff >> (8-shift);
                        			*dest |= ((unsigned char *)buf)[k] << shift;
                    			}
				}
				k++;
			}
		}
		else 
			k += w;
#else
		j=j;	// for waning
		if ( i < hh ) 
		{
			dest = gc.s3c44b0x->fb_buf + (gc.s3c44b0x->stride)*(y+i) + (gc.s3c44b0x->stride)*x/MAX_X;
			memcpy(dest,&((unsigned char *)buf)[k],ww);
		}
		k+=w;
#endif
	}
    return 0;
}

static int getbox (GAL_GC gc, int x, int y, int w, int h, void* buf)
{
	int i,j,k,x1,y1,x2,y2;
	unsigned char *dest;
	int shift;
	k = 0;
	shift = gc.s3c44b0x->depth;
	getclipping(gc,&x1,&y1,&x2,&y2);
	for ( i = 0; i < h; i++ )
	{
#ifdef GRAY16
		if ( y+i <= y2 && y+i >= y1 )
		{
			for ( j = 0; j < w; j++ )
			{
				if ( x+j <= x2 && x+j >= x1)
				{
					dest = gc.s3c44b0x->fb_buf+(gc.s3c44b0x->stride)*(y+i) + (gc.s3c44b0x->stride)*(x+j)/MAX_X;
                    			if ( (x+j) % (8/shift) == 1 )
                        			((unsigned char *)buf)[k] = (0xff >> (8-shift)) & (*dest);
                    			else if ( (x+j) % (8/shift) == 0 )
                        			((unsigned char *)buf)[k] =  *dest >> (8-shift);
				}
				k++;
			}
		}
		else 
			k += w;
#else
		j=j;	// for waning
		if ( y+i <= y2 && y+i >= y1 )
		{
			dest = gc.s3c44b0x->fb_buf+(gc.s3c44b0x->stride)*(y+i)+(gc.s3c44b0x->stride)*x/MAX_X;
			memcpy(&((unsigned char *)buf)[k],dest,min(x2-x,w));	
		}
		k+=w;
#endif
	}
    return 0;
}

static int putboxmask (GAL_GC gc, int x, int y, int w, int h, void* buf)
{
    return 0;
}

/****************************************************************************/
/*      scalebox comes from SVGALib, Copyright 1993 Harm Hanemaayer         */
typedef unsigned char uchar;

/* We use the 32-bit to 64-bit multiply and 64-bit to 32-bit divide of the */
/* 386 (which gcc doesn't know well enough) to efficiently perform integer */
/* scaling without having to worry about overflows. */
static inline int muldiv64 (int m1, int m2, int d)
{
    long long int mul = (long long int) m1 * m2;

    return (int) (mul / d);
}

/* This is a DDA-based algorithm. */
/* Iteration over target bitmap. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区调教| 91精品欧美福利在线观看| 久久综合色一综合色88| 久久精品国产秦先生| 精品久久一二三区| 国产精品亚洲第一区在线暖暖韩国 | 国产成人免费视频网站| 国产欧美精品一区| 色视频一区二区| 午夜久久久久久电影| 欧美r级在线观看| 福利一区二区在线| 亚洲国产中文字幕| 亚洲人成小说网站色在线| 91理论电影在线观看| 午夜精品福利久久久| 精品久久久网站| www.欧美日韩国产在线| 亚洲成av人片在线观看无码| 欧美大片国产精品| 99精品欧美一区二区三区小说| 亚洲国产日韩一级| 精品国产123| 色狠狠综合天天综合综合| 青青草国产成人av片免费| 欧美国产精品中文字幕| 色呦呦日韩精品| 久久99在线观看| 亚洲精品日韩一| 欧美岛国在线观看| 色婷婷亚洲精品| 国内精品自线一区二区三区视频| 亚洲免费观看在线视频| 日韩你懂的在线观看| 91色porny| 国产精品一级黄| 午夜欧美电影在线观看| 国产欧美中文在线| 制服丝袜中文字幕亚洲| 国产91清纯白嫩初高中在线观看| 亚洲va韩国va欧美va精品| 亚洲精品一线二线三线| 欧美视频自拍偷拍| 不卡一区中文字幕| 国产在线视频一区二区| 亚洲高清一区二区三区| 亚洲欧美中日韩| 精品国产伦一区二区三区免费| 在线免费不卡电影| jvid福利写真一区二区三区| 精品一区二区三区的国产在线播放| 亚洲资源中文字幕| 国产精品久久三| 欧美mv和日韩mv的网站| 欧美四级电影在线观看| 9色porny自拍视频一区二区| 国产精品一区二区视频| 美国十次了思思久久精品导航| 亚洲综合在线视频| 亚洲欧美另类久久久精品| 欧美激情中文字幕| 国产日韩欧美一区二区三区乱码 | 欧美疯狂做受xxxx富婆| 在线观看欧美黄色| 色综合一区二区三区| 成人va在线观看| 成人小视频免费在线观看| 国产一区二区视频在线播放| 精品亚洲国内自在自线福利| 日本三级韩国三级欧美三级| 午夜伊人狠狠久久| 亚洲gay无套男同| 亚洲国产一区在线观看| 一区二区三区四区乱视频| 亚洲日本va在线观看| 亚洲欧美在线aaa| 综合激情成人伊人| 国产精品美女久久久久久久久| 欧美激情在线看| 国产欧美一区二区精品久导航| 国产婷婷精品av在线| 国产亚洲欧美一区在线观看| 国产亚洲一本大道中文在线| 中文字幕精品三区| 亚洲欧洲国产日韩| 亚洲激情成人在线| 亚洲电影视频在线| 日韩精品欧美精品| 久久国产日韩欧美精品| 国产精品18久久久| 成+人+亚洲+综合天堂| 日本黄色一区二区| 欧美美女一区二区| 精品理论电影在线| 国产精品午夜春色av| 亚洲免费视频中文字幕| 午夜精品爽啪视频| 久久国产精品露脸对白| 丁香婷婷深情五月亚洲| 99re8在线精品视频免费播放| 色天使久久综合网天天| 91精品国产一区二区| 精品久久久三级丝袜| 国产精品美女久久久久久久| 亚洲综合在线观看视频| 男人的天堂久久精品| 国产精品亚洲一区二区三区妖精 | 男女男精品网站| 国产乱色国产精品免费视频| 99久久伊人精品| 欧美日韩情趣电影| 国产亚洲欧美在线| 亚洲午夜精品网| 国产乱一区二区| 一本色道久久综合亚洲aⅴ蜜桃| 制服丝袜亚洲色图| 中文字幕av在线一区二区三区| 亚洲一区二区三区视频在线 | 亚洲人成小说网站色在线 | 亚欧色一区w666天堂| 国产一区免费电影| 欧美亚洲综合另类| 久久久久久久综合狠狠综合| 一区二区三区毛片| 国产成人一级电影| 欧美日韩五月天| 国产精品久久看| 免费观看一级特黄欧美大片| kk眼镜猥琐国模调教系列一区二区 | 日韩综合小视频| 99视频一区二区三区| 日韩久久久久久| 一区精品在线播放| 激情久久久久久久久久久久久久久久| 成人h动漫精品一区二| 欧美mv和日韩mv的网站| 亚洲国产一二三| 成人aaaa免费全部观看| 日韩三级视频在线看| 亚洲综合999| 99精品1区2区| 亚洲国产精品t66y| 激情综合色综合久久综合| 欧美麻豆精品久久久久久| 国产精品久久久久久久久动漫| 九九久久精品视频| 欧美男生操女生| 夜色激情一区二区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 风间由美中文字幕在线看视频国产欧美| 欧美三级蜜桃2在线观看| 日韩理论电影院| 成人av电影免费观看| 国产亚洲欧美日韩俺去了| 美女mm1313爽爽久久久蜜臀| 538prom精品视频线放| 亚洲一级片在线观看| 色综合久久久久综合| 国产精品电影院| 国产成人夜色高潮福利影视| 26uuu精品一区二区| 视频一区二区三区入口| 欧美日韩高清一区二区三区| 亚洲一级电影视频| 在线视频欧美区| 亚洲国产综合人成综合网站| 91久久免费观看| 一区二区三区高清| 欧美色手机在线观看| 亚洲五码中文字幕| 欧美日本视频在线| 日本成人在线一区| 欧美一区二区三区爱爱| 美日韩一级片在线观看| 精品日韩成人av| 国产精品系列在线观看| 中文字幕免费一区| 91亚洲精品乱码久久久久久蜜桃| 国产精品国产三级国产aⅴ入口 | 久久久久久久性| 成人一区二区三区视频| 中文字幕一区二区三区在线观看| 91免费看`日韩一区二区| 亚洲精品你懂的| 欧美人狂配大交3d怪物一区| 免费观看成人av| 国产亚洲综合av| 91丨porny丨国产| 亚洲成人777| 欧美电影免费观看高清完整版在线| 韩国视频一区二区| 国产精品免费人成网站| 在线一区二区视频| 奇米777欧美一区二区| 国产三级精品视频| 在线观看日韩精品| 另类小说图片综合网| 国产精品国产三级国产普通话99| 在线看日本不卡| 国产在线视频不卡二|