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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vd_lcdframebuffer.c

?? X-scale 27x 平臺
?? C
字號:
//
// Copyright (c) Chrontel Inc.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Chrontel end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:  
   vd_LcdFrameBuffer.c
   
Abstract:  

Revision:
   12/11/02  Roger Yu. Created File     

Notes: 
--*/
#include "chrontel.h"
#include "lcd.h"


//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//
// NOTE: MUST also reserved in config.bib file
//\\/\\/\\//\\/\\//\\//\\//\\//\\//\\//\\//
#define CH_LCD_MEMORY_PHYADR PHYADR_LCD_FRAME_MEMORY_ORIG

#define CH_LCD_MEMORY_SIZE   0x130000     // 2 640x480x16 pages plus DMA

//--
volatile LCD_PALETTE  *v_pPaletteBuffer=NULL;

PBYTE virtFlatFrameBuffer=NULL;
PBYTE physFlatFrameBuffer=NULL;

volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorCh0=NULL;
volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorCh1=NULL;
volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorPalette=NULL;

// change lcdFramePages to 1 if need save memory, (DDRAW may want more video pages)
unsigned lcdFramePages=2;
unsigned lcdFramePageSize;
unsigned lcdPaletteSize =0x20;
unsigned lcdFrameBitsPerPixel=4;

//++++++++++++++++++++++++++++++++++++++++++++++++++++
static PBYTE physFlatPalette=NULL;
static PBYTE virtLcdDmaDesc = NULL;
static PBYTE lcdPhysDmaDesc;

//++++
static PBYTE pb_v_pPaletteBuffer=NULL;
static PBYTE pb_virtFlatFrameBuffer=NULL;
static PBYTE pb_virtLcdDmaDesc = NULL;
//++++

//pointers for all memory (palette, frame buffer, DMA descriptor)
static PBYTE virtLcdmemory=NULL;
static PBYTE physLcdmemory=NULL;


/*
    // LCD Palette Size (8bpp:200h/4bpp:20h/1bpp:4h )
#define PHYADR_LCD_PALETTE_SIZE 0x20
    // LCD Palette Buffer (200h bytes)

#define PHYADR_LCD_PALETTE_BUFFER (PHYADR_LCD_FRAME_MEMORY_ORIG)

// For 1024x768x2=0x180000, 2 frame need 0x300000 plus 30h for LCD DMA scriptor
//     800x600x2=0xEA600
//     640x480x2=0x96000 
#define PHYADR_LCD_FRAME_BUFFER_SIZE  0x96000
#define PHYADR_LCD_FRAME_BUFFER  (PHYADR_LCD_PALETTE_BUFFER + PHYADR_LCD_PALETTE_SIZE)

    // LCD DMA Descriptor PhyAddr
#define PHYADR_LCD_DMADESC      (PHYADR_LCD_FRAME_BUFFER+PHYADR_LCD_FRAME_BUFFER_SIZE)
*/


void CleanupLcdMemory();

int AllocLcdMemory(int sx, int sy, int bpp)
{
	unsigned bs;


	// If not enough for 2 pages then set as 1 page
	if (CH_LCD_MEMORY_SIZE < (sx*sy*4)) lcdFramePages =1;

	switch (bpp) {
		case 8:
			lcdPaletteSize=0x200; bs=1; 
            lcdFrameBitsPerPixel =3;
			break;
		case 16:
            lcdFrameBitsPerPixel =4;
		default:
			lcdPaletteSize=0x20; bs=2;
	}
	// calsulate need frame buffer size

	lcdFramePageSize = bs*sx*sy; 
	bs = lcdFramePageSize*lcdFramePages;

	physLcdmemory = (PBYTE)CH_LCD_MEMORY_PHYADR;
    virtLcdmemory = (PBYTE)VirtualAllocCopy(CH_LCD_MEMORY_SIZE, &pb_v_pPaletteBuffer, (PVOID)physLcdmemory);
		
	if (NULL==virtLcdmemory) return -1;

    // we DO NOT need map physical memory to virtual memory.
//    physLcdmemory = physLcdmemory;
    physFlatPalette = physLcdmemory;
    physFlatFrameBuffer = physLcdmemory + lcdPaletteSize;
    lcdPhysDmaDesc = physFlatFrameBuffer + bs;

    v_pPaletteBuffer = (volatile LCD_PALETTE  *)virtLcdmemory;
	virtFlatFrameBuffer = virtLcdmemory + lcdPaletteSize;
	virtLcdDmaDesc = virtFlatFrameBuffer + bs;

    
// set up the DMA descriptor
    frameDescriptorPalette = (LCD_FRAME_DESCRIPTOR *)virtLcdDmaDesc;
    frameDescriptorCh0 = (LCD_FRAME_DESCRIPTOR *)(virtLcdDmaDesc + 2*sizeof(LCD_FRAME_DESCRIPTOR));
    frameDescriptorCh1 = (LCD_FRAME_DESCRIPTOR *)(virtLcdDmaDesc + 1*sizeof(LCD_FRAME_DESCRIPTOR));

    return 0;  // success
}

void CleanupLcdMemory()
{

//@@@Note:
// Since the virtual address is included when we allocate physical frame memory,
// here we DO NOT do the VirtualFree operation.

	if (virtLcdmemory) VirtualFree((PVOID)v_pPaletteBuffer, 0, MEM_RELEASE);
	virtLcdmemory = NULL;

	v_pPaletteBuffer = NULL;
	virtFlatFrameBuffer = NULL;
	virtLcdDmaDesc = NULL;
    frameDescriptorCh0 = NULL;
    frameDescriptorCh1 = NULL;
    frameDescriptorPalette = NULL;

	return;

}


void SetDmaDescriptor(int dual_panel, int page, unsigned sx, unsigned sy, int dbl_line)
{
	if (frameDescriptorCh0) {
		unsigned ps;
		ps = page*lcdFramePageSize + (unsigned)physFlatFrameBuffer;
        
		frameDescriptorCh1->FDADR = (unsigned int)(lcdPhysDmaDesc + 1*sizeof(LCD_FRAME_DESCRIPTOR));
		frameDescriptorCh1->FIDR = frameDescriptorCh1->FDADR;   // 0;
		frameDescriptorCh1->FSADR = (unsigned)(ps + (lcdFramePageSize>>1));
		frameDescriptorCh1->LDCMD = (lcdFramePageSize>>1);

		if (lcdFrameBitsPerPixel <4) 
			frameDescriptorCh0->FDADR = (unsigned int)(lcdPhysDmaDesc);
		else frameDescriptorCh0->FDADR = (unsigned int)(lcdPhysDmaDesc + 2*sizeof(LCD_FRAME_DESCRIPTOR));

		frameDescriptorCh0->FSADR = (unsigned int)ps;
		frameDescriptorCh0->FIDR =  (unsigned int)(lcdPhysDmaDesc + 2*sizeof(LCD_FRAME_DESCRIPTOR));   // 0;
		if (dual_panel) frameDescriptorCh0->LDCMD = (lcdFramePageSize>>1);
		else     frameDescriptorCh0->LDCMD = lcdFramePageSize;

		frameDescriptorPalette->FDADR = (unsigned int)(lcdPhysDmaDesc + 2*sizeof(LCD_FRAME_DESCRIPTOR));
		frameDescriptorPalette->FSADR = (unsigned)physFlatPalette;
		frameDescriptorPalette->FIDR = (unsigned int)(lcdPhysDmaDesc);   // 0;
		frameDescriptorPalette->LDCMD = LCD_Pal + lcdPaletteSize;

		if ((!dual_panel) && (dbl_line)) {  // we will double vertical lines if required)
	       ULONG pad;
		   ULONG psad;
		   volatile LCD_FRAME_DESCRIPTOR *p;
		   unsigned i;

		   pad = (ULONG)(lcdPhysDmaDesc + 2*sizeof(LCD_FRAME_DESCRIPTOR));
		   psad = (ULONG)physFlatFrameBuffer;
           p=frameDescriptorCh0 = (LCD_FRAME_DESCRIPTOR *)(virtLcdDmaDesc + 2*sizeof(LCD_FRAME_DESCRIPTOR));

		   if (lcdFrameBitsPerPixel ==4) sx = sx*2; // 16bit color=2Bytes; 8bit color=1Byte !!!
		   for (i=0; i<sy; i++) {
			   p->FDADR = pad + sizeof(LCD_FRAME_DESCRIPTOR);
			   p->FIDR = pad;
			   p->FSADR = psad;
			   p->LDCMD = sx;  
			   p++;
			   pad+= sizeof(LCD_FRAME_DESCRIPTOR);
//			   psad += 320*2;
			   if (i==(sy-1)) p->FDADR = frameDescriptorCh0->FIDR;
			   else p->FDADR = pad + sizeof(LCD_FRAME_DESCRIPTOR);
			   p->FIDR = pad;
			   p->FSADR = psad;
			   p->LDCMD = sx;
			   p++;
			   pad+= sizeof(LCD_FRAME_DESCRIPTOR);
 		       psad += sx;
		   }

		   if (lcdFrameBitsPerPixel <4) {
			   pad = frameDescriptorCh0->FDADR;
               frameDescriptorCh0->FDADR = (unsigned int)(lcdPhysDmaDesc);
			   frameDescriptorPalette->FDADR = pad;
		   }

		}
	}
	return;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久午夜电影网| 图片区小说区国产精品视频| 亚洲国产另类av| 国产老肥熟一区二区三区| 欧洲精品视频在线观看| 国产亚洲精品福利| 日韩不卡免费视频| 欧美综合一区二区三区| 国产精品天美传媒沈樵| 精品一区二区三区免费播放| 欧美妇女性影城| 一区二区三区**美女毛片| 成人av综合一区| 国产偷国产偷精品高清尤物| 美美哒免费高清在线观看视频一区二区| av高清久久久| 欧美国产乱子伦| 国产一区二区三区电影在线观看| 欧美久久久久久久久久| 一区二区久久久| 色一区在线观看| 自拍av一区二区三区| 成人激情文学综合网| 中文字幕av不卡| 福利一区福利二区| 欧美经典一区二区| 丁香六月综合激情| 国产精品国产自产拍高清av| 成人妖精视频yjsp地址| 国产精品久久午夜夜伦鲁鲁| 懂色av中文一区二区三区| 国产日产亚洲精品系列| 国产剧情一区二区| 亚洲国产精品精华液2区45| 东方欧美亚洲色图在线| 中文字幕精品一区二区精品绿巨人| 国产激情偷乱视频一区二区三区| 精品国产一区二区三区av性色| 久久97超碰色| 久久理论电影网| 成人av电影在线播放| 亚洲视频香蕉人妖| 在线精品视频一区二区| 午夜久久久久久电影| 亚洲一卡二卡三卡四卡无卡久久| 99视频精品在线| 亚洲午夜成aⅴ人片| 日韩一级黄色片| 韩国中文字幕2020精品| 国产精品三级av在线播放| 一本到一区二区三区| 亚洲成人综合视频| 精品美女在线播放| www.66久久| 五月天久久比比资源色| 久久综合av免费| 99精品视频中文字幕| 性感美女久久精品| 久久久精品tv| 欧洲一区在线电影| 精品亚洲成a人在线观看| 中文乱码免费一区二区| 欧美日韩一区二区在线观看| 国产精品自在在线| 亚洲一区二区视频| 精品成人佐山爱一区二区| 91一区二区在线| 青草av.久久免费一区| 国产精品免费aⅴ片在线观看| 欧美系列亚洲系列| 丁香一区二区三区| 偷拍一区二区三区四区| 国产视频视频一区| 欧美日韩电影在线播放| 成人在线视频一区| 免费成人在线网站| 日韩毛片在线免费观看| 精品日韩在线观看| 91传媒视频在线播放| 国产精品白丝jk黑袜喷水| 亚洲bdsm女犯bdsm网站| 亚洲国产精品传媒在线观看| 欧美一区二区成人| 欧美亚洲动漫精品| 成人精品小蝌蚪| 国内精品伊人久久久久av一坑| 一区二区三区四区激情| 国产精品天美传媒| 久久精品在线观看| 日韩一区二区在线看| 欧美色爱综合网| 91在线无精精品入口| 国产精品自拍在线| 美女视频免费一区| 日韩高清一区二区| 亚洲123区在线观看| 亚洲制服丝袜一区| 国产精品毛片a∨一区二区三区 | 日本女人一区二区三区| 国产精品久久久久久一区二区三区| 精品电影一区二区| 日韩三级免费观看| 制服丝袜亚洲播放| 欧美高清一级片在线| 欧美人与性动xxxx| 欧美男生操女生| 欧美日韩国产区一| 欧美日韩国产免费一区二区 | a级高清视频欧美日韩| 欧美一区二区三区性视频| 色94色欧美sute亚洲13| 99精品一区二区三区| 91麻豆福利精品推荐| 91在线视频观看| 在线区一区二视频| 欧美日韩久久不卡| 欧美群妇大交群中文字幕| 欧美日韩1区2区| 3751色影院一区二区三区| 91超碰这里只有精品国产| 欧美精品tushy高清| 欧美一区二区三区视频免费播放| 在线播放日韩导航| 欧美成人一区二区三区| 欧美xxxxx牲另类人与| wwwwxxxxx欧美| 中文字幕色av一区二区三区| 中文字幕一区二区5566日韩| 亚洲精选一二三| 亚洲国产欧美日韩另类综合| 日韩不卡一二三区| 国产精品白丝av| 色综合天天做天天爱| 欧美日韩精品综合在线| 精品成人私密视频| 日韩美女啊v在线免费观看| 亚洲福中文字幕伊人影院| 秋霞电影一区二区| 懂色av一区二区夜夜嗨| 欧洲日韩一区二区三区| 精品久久一二三区| 综合欧美亚洲日本| 麻豆国产精品官网| 成人午夜看片网址| 欧美人成免费网站| 中文字幕不卡的av| 亚洲丶国产丶欧美一区二区三区| 极品尤物av久久免费看| 色综合久久久久久久久久久| 欧美一区二区三区在线视频| 国产精品天美传媒| 日本v片在线高清不卡在线观看| 国产剧情在线观看一区二区| 在线日韩av片| 中文一区二区完整视频在线观看| 亚洲成人福利片| 成人精品高清在线| 欧美一级日韩不卡播放免费| 亚洲人妖av一区二区| 国产真实乱子伦精品视频| 在线免费观看日本欧美| 国产午夜一区二区三区| 亚洲第一会所有码转帖| 成人性生交大片免费看中文网站| 欧美一区二区三区视频免费播放| 亚洲天堂中文字幕| 国产一区二区三区电影在线观看| 欧美日韩一卡二卡三卡| 亚洲视频在线观看一区| 国产在线国偷精品免费看| 99免费精品在线观看| 精品国产免费视频| 偷窥少妇高潮呻吟av久久免费| 91在线看国产| 欧美韩国日本一区| 国产一区二区在线电影| 91精品麻豆日日躁夜夜躁| 亚洲最大成人网4388xx| 99久久免费精品| 欧美激情在线免费观看| 极品少妇一区二区| 日韩欧美123| 日本中文字幕不卡| 欧美精品久久天天躁| 亚洲一区二区高清| 在线观看网站黄不卡| 一区二区三区精密机械公司| av电影在线观看一区| 国产精品久久午夜夜伦鲁鲁| 国产91精品久久久久久久网曝门| 久久色.com| 国产精品一区二区三区99| 久久影音资源网| 久久99热99| 亚洲一区在线观看免费| 欧美性猛片xxxx免费看久爱| 一区二区三区高清不卡| 欧美日韩亚洲丝袜制服| 亚洲午夜精品一区二区三区他趣| 欧美中文一区二区三区|