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

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

?? vesavbe.c

?? 嵌入式試驗箱S3C2410的bootloader源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
*               pixelClock  - Desired pixel clock* Returns:      Closest pixel clock to desired clock (-1 if not supported)** Description:  Calls the VBE/Core 3.0 interface to determine the closest*               pixel clock to the requested value. The BIOS will always*               search for a pixel clock that is no more than 1% below the*               requested clock or somewhere higher than the clock. If the*               clock is higher note that it may well be many Mhz higher*               that requested and the application will have to check that*               the returned value is suitable for it's needs. This function*               returns the actual pixel clock that will be programmed by*               the hardware.**               Note that if the pixel clock will be used with a linear*               framebuffer mode, make sure you pass in the linear*               framebuffer flag to this function.**               NOTE: Requires VBE/Core 3.0*****************************************************************************/{    RMREGS  regs;    if (state->VBEVersion >= 0x300) {	regs.x.ax = 0x4F0B;	regs.h.bl = 0x00;	regs.e.ecx = pixelClock;	regs.x.dx = mode;	PM_int86(0x10,&regs,&regs);	if (regs.x.ax == VBE_SUCCESS)	    return regs.e.ecx;	}    return -1;}ibool VBEAPI VBE_setDACWidth(int width)/****************************************************************************** Function:     VBE_setDACWidth* Parameters:   width   - Width to set the DAC to* Returns:      True on success, false on failure*****************************************************************************/{    RMREGS  regs;    regs.x.ax = 0x4F08;    regs.h.bl = 0x00;    regs.h.bh = width;    PM_int86(0x10,&regs,&regs);    return regs.x.ax == VBE_SUCCESS;}int VBEAPI VBE_getDACWidth(void)/****************************************************************************** Function:     VBE_getDACWidth* Returns:      Current width of the palette DAC*****************************************************************************/{    RMREGS  regs;    regs.x.ax = 0x4F08;    regs.h.bl = 0x01;    PM_int86(0x10,&regs,&regs);    if (regs.x.ax != VBE_SUCCESS)	return -1;    return regs.h.bh;}ibool VBEAPI VBE_setPalette(int start,int num,VBE_palette *pal,ibool waitVRT)/****************************************************************************** Function:     VBE_setPalette* Parameters:   start   - Starting palette index to program*               num     - Number of palette indexes to program*               pal     - Palette buffer containing values*               waitVRT - Wait for vertical retrace flag* Returns:      True on success, false on failure** Description:  Sets a block of palette registers by calling the VBE 2.0*               BIOS. This function will fail on VBE 1.2 implementations.*****************************************************************************/{    RMREGS  regs;    regs.x.ax = 0x4F09;    regs.h.bl = waitVRT ? 0x80 : 0x00;    regs.x.cx = num;    regs.x.dx = start;    VBE_callESDI(&regs, pal, sizeof(VBE_palette) * num);    return regs.x.ax == VBE_SUCCESS;}void * VBEAPI VBE_getBankedPointer(VBE_modeInfo *modeInfo)/****************************************************************************** Function:     VBE_getBankedPointer* Parameters:   modeInfo    - Mode info block for video mode* Returns:      Selector to the linear framebuffer (0 on failure)** Description:  Returns a near pointer to the VGA framebuffer area.*****************************************************************************/{    /* We just map the pointer every time, since the pointer will always     * be in real mode memory, so we wont actually be mapping any real     * memory.     *     * NOTE: We cannot currently map a near pointer to the banked frame     *       buffer for Watcom Win386, so we create a 16:16 far pointer to     *       the video memory. All the assembler code will render to the     *       video memory by loading the selector rather than using a     *       near pointer.     */    ulong seg = (ushort)modeInfo->WinASegment;    if (seg != 0) {	if (seg == 0xA000)	    return (void*)PM_getA0000Pointer();	else	    return (void*)PM_mapPhysicalAddr(seg << 4,0xFFFF,true);	}    return NULL;}#ifndef REALMODEvoid * VBEAPI VBE_getLinearPointer(VBE_modeInfo *modeInfo)/****************************************************************************** Function:     VBE_getLinearPointer* Parameters:   modeInfo    - Mode info block for video mode* Returns:      Selector to the linear framebuffer (0 on failure)** Description:  Returns a near pointer to the linear framebuffer for the video*               mode.*****************************************************************************/{    static ulong physPtr[MAX_LIN_PTRS] = {0};    static void *linPtr[MAX_LIN_PTRS] = {0};    static int numPtrs = 0;    int i;    /* Search for an already mapped pointer */    for (i = 0; i < numPtrs; i++) {	if (physPtr[i] == modeInfo->PhysBasePtr)	    return linPtr[i];	}    if (numPtrs < MAX_LIN_PTRS) {	physPtr[numPtrs] = modeInfo->PhysBasePtr;	linPtr[numPtrs] = PM_mapPhysicalAddr(modeInfo->PhysBasePtr,(state->VBEMemory * 1024L)-1,true);	return linPtr[numPtrs++];	}    return NULL;}static void InitPMCode(void)/****************************************************************************** Function:     InitPMCode  - 32 bit protected mode version** Description:  Finds the address of and relocates the protected mode*               code block from the VBE 2.0 into a local memory block. The*               memory block is allocated with malloc() and must be freed*               with VBE_freePMCode() after graphics processing is complete.**               Note that this buffer _must_ be recopied after each mode set,*               as the routines will change depending on the underlying*               video mode.*****************************************************************************/{    RMREGS      regs;    RMSREGS     sregs;    uchar       *code;    int         pmLen;    if (!state->pmInfo && state->VBEVersion >= 0x200) {	regs.x.ax = 0x4F0A;	regs.x.bx = 0;	PM_int86x(0x10,&regs,&regs,&sregs);	if (regs.x.ax != VBE_SUCCESS)	    return;	if (VBE_shared)	    state->pmInfo = PM_mallocShared(regs.x.cx);	else	    state->pmInfo = PM_malloc(regs.x.cx);	if (state->pmInfo == NULL)	    return;	state->pmInfo32 = state->pmInfo;	pmLen = regs.x.cx;	/* Relocate the block into our local data segment */	code = PM_mapRealPointer(sregs.es,regs.x.di);	memcpy(state->pmInfo,code,pmLen);	/* Now do a sanity check on the information we recieve to ensure	 * that is is correct. Some BIOS return totally bogus information	 * in here (Matrox is one)! Under DOS this works OK, but under OS/2	 * we are screwed.	 */	if (state->pmInfo->setWindow >= pmLen ||	    state->pmInfo->setDisplayStart >= pmLen ||	    state->pmInfo->setPalette >= pmLen ||	    state->pmInfo->IOPrivInfo >= pmLen) {	    if (VBE_shared)		PM_freeShared(state->pmInfo);	    else		PM_free(state->pmInfo);	    state->pmInfo32 = state->pmInfo = NULL;	    return;	    }	/* Read the IO priveledge info and determine if we need to	 * pass a selector to MMIO registers to the bank switch code.	 * Since we no longer support selector allocation, we no longer	 * support this mechanism so we disable the protected mode	 * interface in this case.	 */	if (state->pmInfo->IOPrivInfo && !state->MMIOSel) {	    ushort *p = (ushort*)((uchar*)state->pmInfo + state->pmInfo->IOPrivInfo);	    while (*p != 0xFFFF)		p++;	    p++;	    if (*p != 0xFFFF)		VBE_freePMCode();	    }	}}void * VBEAPI VBE_getSetBank(void)/****************************************************************************** Function:     VBE_getSetBank* Returns:      Pointer to the 32 VBE 2.0 bit bank switching routine.*****************************************************************************/{    if (state->VBEVersion >= 0x200) {	InitPMCode();	if (state->pmInfo)	    return (uchar*)state->pmInfo + state->pmInfo->setWindow;	}    return NULL;}void * VBEAPI VBE_getSetDisplayStart(void)/****************************************************************************** Function:     VBE_getSetDisplayStart* Returns:      Pointer to the 32 VBE 2.0 bit CRT start address routine.*****************************************************************************/{    if (state->VBEVersion >= 0x200) {	InitPMCode();	if (state->pmInfo)	    return (uchar*)state->pmInfo + state->pmInfo->setDisplayStart;	}    return NULL;}void * VBEAPI VBE_getSetPalette(void)/****************************************************************************** Function:     VBE_getSetPalette* Returns:      Pointer to the 32 VBE 2.0 bit palette programming routine.*****************************************************************************/{    if (state->VBEVersion >= 0x200) {	InitPMCode();	if (state->pmInfo)	    return (uchar*)state->pmInfo + state->pmInfo->setPalette;	}    return NULL;}void VBEAPI VBE_freePMCode(void)/****************************************************************************** Function:     VBE_freePMCode** Description:  This routine frees the protected mode code blocks that*               we copied from the VBE 2.0 interface. This routine must*               be after you have finished graphics processing to free up*               the memory occupied by the routines. This is necessary*               because the PM info memory block must be re-copied after*               every video mode set from the VBE 2.0 implementation.*****************************************************************************/{    if (state->pmInfo) {	if (VBE_shared)	    PM_freeShared(state->pmInfo);	else	    PM_free(state->pmInfo);	state->pmInfo = NULL;	state->pmInfo32 = NULL;	}}void VBEAPI VBE_sharePMCode(void)/****************************************************************************** Function:     VBE_sharePMCode** Description:  Enables internal sharing of the PM code buffer for OS/2.*****************************************************************************/{    VBE_shared = true;}/* Set of code stubs used to build the final bank switch code */#define VBE20_adjustOffset  7static uchar VBE20A_bankFunc32_Start[] = {    0x53,0x51,                  /*  push    ebx,ecx     */    0x8B,0xD0,                  /*  mov     edx,eax     */    0x33,0xDB,                  /*  xor     ebx,ebx     */    0xB1,0x00,                  /*  mov     cl,0        */    0xD2,0xE2,                  /*  shl     dl,cl       */    };static uchar VBE20_bankFunc32_End[] = {    0x59,0x5B,                  /*  pop     ecx,ebx     */    };static uchar bankFunc32[100];#define copy(p,b,a) memcpy(b,a,sizeof(a)); (p) = (b) + sizeof(a)ibool VBEAPI VBE_getBankFunc32(int *codeLen,void **bankFunc,int dualBanks,    int bankAdjust)/****************************************************************************** Function:     VBE_getBankFunc32* Parameters:   codeLen     - Place to store length of code*               bankFunc    - Place to store pointer to bank switch code*               dualBanks   - True if dual banks are in effect*               bankAdjust  - Bank shift adjustment factor* Returns:      True on success, false if not compatible.** Description:  Creates a local 32 bit bank switch function from the*               VBE 2.0 bank switch code that is compatible with the*               virtual flat framebuffer devices (does not have a return*               instruction at the end and takes the bank number in EAX*               not EDX). Note that this 32 bit code cannot include int 10h*               instructions, so we can only do this if we have VBE 2.0*               or later.**               Note that we need to know the length of the 32 bit*               bank switch function, which the standard VBE 2.0 spec*               does not provide. In order to support this we have*               extended the VBE 2.0 state->pmInfo structure in UniVBE 5.2 in a*               way to support this, and we hope that this will become*               a VBE 2.0 ammendment.**               Note also that we cannot run the linear framebuffer*               emulation code with bank switching routines that require*               a selector to the memory mapped registers passed in ES.*****************************************************************************/{    int     len;    uchar   *code;    uchar   *p;    InitPMCode();    if (state->VBEVersion >= 0x200 && state->pmInfo32 && !state->MMIOSel) {	code = (uchar*)state->pmInfo32 + state->pmInfo32->setWindow;	if (state->pmInfo32->extensionSig == VBE20_EXT_SIG)	    len = state->pmInfo32->setWindowLen-1;	else {	    /* We are running on a system without the UniVBE 5.2 extension.	     * We do as best we can by scanning through the code for the	     * ret function to determine the length. This is not foolproof,	     * but is the best we can do.	     */	    p = code;	    while (*p != 0xC3)		p++;	    len = p - code;	    }	if ((len + sizeof(VBE20A_bankFunc32_Start) + sizeof(VBE20_bankFunc32_End)) > sizeof(bankFunc32))	    PM_fatalError("32-bit bank switch function too long!");	copy(p,bankFunc32,VBE20A_bankFunc32_Start);	memcpy(p,code,len);	p += len;	copy(p,p,VBE20_bankFunc32_End);	*codeLen = p - bankFunc32;	bankFunc32[VBE20_adjustOffset] = (uchar)bankAdjust;	*bankFunc = bankFunc32;	return true;	}    return false;}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产剧情一区在线| 欧美肥妇bbw| 不卡高清视频专区| 高清不卡一区二区在线| 精品系列免费在线观看| 麻豆精品精品国产自在97香蕉| 欧美bbbbb| 久久精品久久精品| 国模无码大尺度一区二区三区| 久久99精品国产.久久久久| 国产在线精品免费av| 国产成人自拍在线| 99热这里都是精品| 欧美日韩综合不卡| 日韩免费看的电影| 国产日产欧产精品推荐色| 中文字幕一区免费在线观看| 亚洲精品中文字幕乱码三区| 亚洲另类在线视频| 日韩电影免费一区| 国产精品 欧美精品| caoporn国产精品| 在线视频综合导航| 91麻豆精品国产91久久久资源速度| 欧美一区二区网站| 久久婷婷色综合| 中文字幕日韩欧美一区二区三区| 一区二区三区在线观看国产 | 九九精品视频在线看| 国产福利一区二区三区视频| 成人免费视频一区| 色av成人天堂桃色av| 欧美精品久久久久久久久老牛影院| 欧美一区二区高清| 国产欧美日韩在线| 一区二区高清免费观看影视大全| 日韩不卡一二三区| 国产成人午夜精品影院观看视频| 99热国产精品| 日韩欧美自拍偷拍| 国产精品不卡视频| 日韩综合一区二区| 福利一区二区在线| 欧美影院一区二区| 精品国产伦一区二区三区观看方式 | 国产福利一区二区三区视频| 日本精品裸体写真集在线观看 | 国产精品嫩草影院av蜜臀| 一区二区三区日韩| 久久精品国产99国产精品| www.日本不卡| 日韩欧美中文一区二区| 国产精品久久久久久久裸模| 青青草国产精品97视觉盛宴| 91在线小视频| 日韩西西人体444www| 国产精品国产三级国产普通话三级| 午夜电影一区二区三区| 成人免费毛片app| 日韩久久免费av| 亚洲综合色网站| 豆国产96在线|亚洲| 欧美一区二区日韩| 亚洲精品国产品国语在线app| 精品一区二区免费| 7777精品伊人久久久大香线蕉| 最近日韩中文字幕| 91在线观看地址| 精品免费国产一区二区三区四区| 一区二区三区精品在线| 国产精品一级片| 欧美一级欧美三级在线观看| 亚洲精品videosex极品| 国产不卡免费视频| 欧美成人精品1314www| 一区二区三国产精华液| 99在线精品免费| 国产午夜精品一区二区三区视频 | 成人动漫在线一区| 欧美mv日韩mv国产网站app| 亚洲一区影音先锋| av日韩在线网站| 国产精品麻豆视频| 高清视频一区二区| 精品国产麻豆免费人成网站| 日韩精品色哟哟| 欧美系列亚洲系列| 亚洲男人电影天堂| 99免费精品视频| 中文字幕亚洲一区二区va在线| 国产成人免费视| 337p日本欧洲亚洲大胆精品| 久久99热这里只有精品| 欧美人狂配大交3d怪物一区| 亚洲图片一区二区| 欧美性受xxxx| 夜夜精品视频一区二区| 色婷婷综合久久久久中文| 亚洲欧美另类小说| 色综合久久66| 一区二区三区日韩在线观看| 欧美中文字幕一区二区三区| 亚洲黄网站在线观看| 在线亚洲+欧美+日本专区| 亚洲精品写真福利| 91国产免费看| 午夜av一区二区三区| 欧美精品乱码久久久久久按摩| 亚洲成人第一页| 91麻豆精品国产自产在线观看一区| 天堂一区二区在线| 欧美一区日本一区韩国一区| 免费人成精品欧美精品| 2022国产精品视频| 国产传媒日韩欧美成人| 欧美激情综合网| 91麻豆国产福利精品| 一区二区久久久久| 91麻豆精品国产91久久久资源速度 | 国产制服丝袜一区| 国产欧美一区二区在线观看| 不卡一区二区在线| 亚洲福中文字幕伊人影院| 884aa四虎影成人精品一区| 麻豆国产精品视频| 日本一区二区电影| 91福利在线播放| 免费欧美在线视频| 日本一区二区三区四区在线视频| av中文字幕不卡| 午夜激情一区二区| 久久久综合激的五月天| av亚洲精华国产精华精| 午夜电影一区二区三区| 久久久久免费观看| 色国产精品一区在线观看| 麻豆精品视频在线观看视频| 国产精品久久三| 欧美伊人久久大香线蕉综合69 | 99久久久久免费精品国产| 亚洲国产精品影院| 久久丝袜美腿综合| 欧美综合一区二区| 日本vs亚洲vs韩国一区三区二区| 欧美韩国日本不卡| 欧美三区在线视频| 国产精品99久久久| 亚洲一区在线观看免费 | 国产欧美一区二区精品久导航| 91在线观看视频| 激情图区综合网| 一区二区三区在线视频免费观看 | 日韩成人精品在线观看| 国产精品欧美极品| 91麻豆精品久久久久蜜臀| 成人sese在线| 欧美a级理论片| 亚洲欧美另类小说视频| 欧美tk丨vk视频| 色婷婷精品大视频在线蜜桃视频 | 日韩欧美黄色影院| 一本久久a久久免费精品不卡| 九色|91porny| 亚洲第一主播视频| 中文字幕一区日韩精品欧美| 日韩精品一区二区三区老鸭窝 | 91精品国产91久久综合桃花| 成人免费毛片高清视频| 奇米精品一区二区三区在线观看 | 成人国产电影网| 久久精品国产999大香线蕉| 一区二区三区久久| 国产精品久久精品日日| 精品久久久久久久人人人人传媒| 欧美视频一区在线| 91蜜桃网址入口| 国产成人精品免费网站| 精品无码三级在线观看视频| 亚洲综合区在线| 中文字幕亚洲一区二区av在线 | 亚洲人成7777| 欧美国产日产图区| 日韩欧美一卡二卡| 91精品午夜视频| 欧美日韩一区二区在线观看| 91社区在线播放| 成人午夜激情影院| 国产高清精品在线| 激情欧美一区二区| 久久66热偷产精品| 老司机免费视频一区二区三区| 亚洲与欧洲av电影| 亚洲女厕所小便bbb| 国产精品美女久久久久高潮| 久久久精品人体av艺术| 久久午夜色播影院免费高清| 精品久久久久久综合日本欧美| 欧美电影免费观看高清完整版在线 | 国产精品情趣视频| 国产欧美日韩三级|