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

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

?? tl_vesa.c

?? 十七種模擬器源代碼 非常有用的作課程設(shè)計(jì)不可缺少的
?? C
字號(hào):
/*** thinlib (c) 2000 Matthew Conte (matt@conte.com)****** This program is free software; you can redistribute it and/or** modify it under the terms of version 2 of the GNU Library General ** Public License as published by the Free Software Foundation.**** This program 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.  To obtain a ** copy of the GNU Library General Public License, write to the Free ** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.**** Any permitted reproduction of these routines, in whole or in part,** must bear this legend.****** tl_vesa.c**** VESA code.** $Id: tl_vesa.c,v 1.8 2001/03/12 06:06:55 matt Exp $*/#include <stdio.h>#include <string.h>#include <assert.h>#include <go32.h>#include <dos.h>#include <dpmi.h>#include "tl_types.h"#include "tl_log.h"#include "tl_bmp.h"#include "tl_djgpp.h"#include "tl_vga.h"#include "tl_vesa.h"#define  __PACKED__  __attribute__ ((packed))/* VESA information block structure */typedef struct vesainfo_s{   char   VESASignature[4]    __PACKED__;   uint16 VESAVersion         __PACKED__;   uint32 OEMStringPtr        __PACKED__;   char   Capabilities[4]     __PACKED__;   uint32 VideoModePtr        __PACKED__;    uint16 TotalMemory         __PACKED__;    uint16 OemSoftwareRev      __PACKED__;    uint32 OemVendorNamePtr    __PACKED__;    uint32 OemProductNamePtr   __PACKED__;    uint32 OemProductRevPtr    __PACKED__;    uint8  Reserved[222]       __PACKED__;    char   OemData[256]        __PACKED__; } vesainfo_t;/* SuperVGA mode information block */typedef struct modeinfo_s{   uint16 ModeAttributes      __PACKED__;    uint8  WinAAttributes      __PACKED__;    uint8  WinBAttributes      __PACKED__;    uint16 WinGranularity      __PACKED__;    uint16 WinSize             __PACKED__;    uint16 WinASegment         __PACKED__;    uint16 WinBSegment         __PACKED__;    uint32 WinFuncPtr          __PACKED__;    uint16 BytesPerScanLine    __PACKED__;    uint16 XResolution         __PACKED__;    uint16 YResolution         __PACKED__;    uint8  XCharSize           __PACKED__;    uint8  YCharSize           __PACKED__;    uint8  NumberOfPlanes      __PACKED__;    uint8  BitsPerPixel        __PACKED__;    uint8  NumberOfBanks       __PACKED__;    uint8  MemoryModel         __PACKED__;    uint8  BankSize            __PACKED__;    uint8  NumberOfImagePages  __PACKED__;   uint8  Reserved_page       __PACKED__;    uint8  RedMaskSize         __PACKED__;    uint8  RedMaskPos          __PACKED__;    uint8  GreenMaskSize       __PACKED__;    uint8  GreenMaskPos        __PACKED__;   uint8  BlueMaskSize        __PACKED__;    uint8  BlueMaskPos         __PACKED__;    uint8  ReservedMaskSize    __PACKED__;    uint8  ReservedMaskPos     __PACKED__;    uint8  DirectColorModeInfo __PACKED__;   /* VBE 2.0 extensions */   uint32 PhysBasePtr         __PACKED__;    uint32 OffScreenMemOffset  __PACKED__;    uint16 OffScreenMemSize    __PACKED__;    /* VBE 3.0 extensions */   uint16 LinBytesPerScanLine __PACKED__;   uint8  BnkNumberOfPages    __PACKED__;   uint8  LinNumberOfPages    __PACKED__;   uint8  LinRedMaskSize      __PACKED__;   uint8  LinRedFieldPos      __PACKED__;   uint8  LinGreenMaskSize    __PACKED__;   uint8  LinGreenFieldPos    __PACKED__;   uint8  LinBlueMaskSize     __PACKED__;   uint8  LinBlueFieldPos     __PACKED__;   uint8  LinRsvdMaskSize     __PACKED__;   uint8  LinRsvdFieldPos     __PACKED__;   uint32 MaxPixelClock       __PACKED__;   uint8  Reserved[190]       __PACKED__; } modeinfo_t;#define  MASK_LINEAR(addr)    (addr & 0x000FFFFF)#define  RM_TO_LINEAR(addr)   (((addr & 0xFFFF0000) >> 12) + (addr & 0xFFFF))#define  RM_OFFSET(addr)      (addr & 0xF)#define  RM_SEGMENT(addr)     ((addr >> 4) & 0xFFFF)#define  VBE_LINEAR_ADDR      0x4000#define  VBE_LINEAR_AVAIL     0x0080#define  VBE_INT              0x10#define  VBE_SUCCESS          0x004F#define  VBE_FUNC_DETECT      0x4F00#define  VBE_FUNC_GETMODEINFO 0x4F01#define  VBE_FUNC_SETMODE     0x4F02#define  VBE_FUNC_GETMODE     0x4F03#define  VBE_FUNC_FLIPPAGE    0x4F07#define  VBE_MAX_NUM_MODES    1024  /* liberal */static struct{   uint32 address;   int width, height;   int bpp;} cur_mode;static vesainfo_t vesa_info;static bitmap_t *screen = NULL;static bitmap_t *hardware = NULL;/* look for vesa */static int vesa_detect(vesainfo_t *vesainfo){   __dpmi_regs regs;   /* Use DOS transfer buffer to hold VBE info */   THIN_ASSERT(sizeof(*vesainfo) < _go32_info_block.size_of_transfer_buffer);   memset(&regs, 0, sizeof(regs));   strncpy(vesainfo->VESASignature, "VBE2", 4);   dosmemput(vesainfo, sizeof(*vesainfo), MASK_LINEAR(__tb));   regs.x.ax = VBE_FUNC_DETECT;   regs.x.di = RM_OFFSET(__tb);   regs.x.es = RM_SEGMENT(__tb);   __dpmi_int(VBE_INT, &regs);   if (VBE_SUCCESS != regs.x.ax)      return -1;   dosmemget(MASK_LINEAR(__tb), sizeof(*vesainfo), vesainfo);   if (strncmp(vesainfo->VESASignature, "VESA", 4) != 0)      return -1;   return 0;}static int vesa_getmodeinfo(uint16 mode, modeinfo_t *modeinfo){   __dpmi_regs regs;   THIN_ASSERT(sizeof(*modeinfo) < _go32_info_block.size_of_transfer_buffer);   memset(&regs, 0, sizeof(regs));   regs.x.ax = VBE_FUNC_GETMODEINFO;    regs.x.cx = mode;   regs.x.di = RM_OFFSET(__tb);   regs.x.es = RM_SEGMENT(__tb);     __dpmi_int(VBE_INT, &regs);   if (VBE_SUCCESS != regs.x.ax)      return -1;   dosmemget(MASK_LINEAR(__tb), sizeof(*modeinfo), modeinfo);   return 0;}static uint16 vesa_findmode(vesainfo_t *vesainfo, int width, int height, int bpp){   modeinfo_t mode_info;   uint16 modes[VBE_MAX_NUM_MODES], mode;   int i, mode_total = 0;   long list_ptr;      list_ptr = RM_TO_LINEAR(vesainfo->VideoModePtr);   while (mode_total < VBE_MAX_NUM_MODES)   {      dosmemget(list_ptr, 2, &mode);      if (0xFFFF == mode)         break;      modes[mode_total++] = mode;      list_ptr += 2;   }   /* VESA card on steroids? */   THIN_ASSERT(mode_total < VBE_MAX_NUM_MODES);   for (i = 0; i < mode_total; i++)   {      mode = modes[i];      if (vesa_getmodeinfo(mode, &mode_info))         return -1; /* we are definitely screwed */            if (mode_info.XResolution == width           && mode_info.YResolution == height           && mode_info.BitsPerPixel == bpp)         return mode;   }   return 0;}short int vid_selector = -1;static int vesa_setmodenum(uint16 mode){   __dpmi_regs regs;   __dpmi_meminfo mi;   modeinfo_t mode_info;   if (vesa_getmodeinfo(mode, &mode_info))      return -1;   mi.size = mode_info.BytesPerScanLine * mode_info.YResolution;   mi.address = mode_info.PhysBasePtr;   if (-1 == __dpmi_physical_address_mapping(&mi))      return -1;   if (0 == thinlib_nearptr)   {      vid_selector = __dpmi_allocate_ldt_descriptors(1);      if (-1 == vid_selector)         return -1;      /* paranoid */      if (-1 == __dpmi_set_descriptor_access_rights(vid_selector, 0x40f3))         return -1;      if (-1 == __dpmi_set_segment_base_address(vid_selector, mi.address))         return -1;      if (-1 == __dpmi_set_segment_limit(vid_selector, vesa_info.TotalMemory << 16 | 0xfff))         return -1;   }   memset(&regs, 0, sizeof(regs));   regs.x.ax = VBE_FUNC_SETMODE;   regs.x.bx = mode | VBE_LINEAR_ADDR;    __dpmi_int(VBE_INT, &regs);   if (VBE_SUCCESS != regs.x.ax)      return -1;   if (0 == thinlib_nearptr)      cur_mode.address = 0;   else      cur_mode.address = mi.address;   cur_mode.width = mode_info.XResolution;   cur_mode.height = mode_info.YResolution;   cur_mode.bpp = mode_info.BitsPerPixel;   if (NULL != screen)      thin_bmp_destroy(&screen);   if (thinlib_nearptr)   {      screen = thin_bmp_createhw((uint8 *) THIN_PHYS_ADDR(cur_mode.address),                                 cur_mode.width, cur_mode.height, cur_mode.bpp,                                 cur_mode.width);      if (NULL == screen)         return -1;   }   else   {      if (NULL != hardware)         thin_bmp_destroy(&hardware);      hardware = thin_bmp_createhw((uint8 *) cur_mode.address,                                    cur_mode.width, cur_mode.height, cur_mode.bpp,                                   cur_mode.width);      if (NULL == hardware)         return -1;      screen = thin_bmp_create(cur_mode.width, cur_mode.height, cur_mode.bpp, 0);      if (NULL == screen)         return -1;   }   return 0;}void thin_vesa_shutdown(void){   __dpmi_regs regs;   memset(&regs, 0, sizeof(regs));   regs.x.ax = 0x0003;   __dpmi_int(VBE_INT, &regs);   thin_bmp_destroy(&screen);   if (0 == thinlib_nearptr)      thin_bmp_destroy(&hardware);}int thin_vesa_setmode(int width, int height, int bpp){   uint16 mode;   mode = vesa_findmode(&vesa_info, width, height, bpp);   if (0 == mode)      return -1;   return vesa_setmodenum(mode);}int thin_vesa_init(int width, int height, int bpp){   memset(&vesa_info, 0, sizeof(vesa_info));   screen = NULL;   hardware = NULL;      if (vesa_detect(&vesa_info))      return -1;   /* check to see if linear framebuffer is available */   if ((vesa_info.VESAVersion >> 8) < 2)   {      thin_printf("thin@vesa: no linear framebuffer available\n");      return -1;   }   return thin_vesa_setmode(width, height, bpp);}bitmap_t *thin_vesa_lockwrite(void){   return screen;}void thin_vesa_freewrite(int num_dirties, rect_t *dirty_rects){   UNUSED(num_dirties);   UNUSED(dirty_rects);   if (0 == thinlib_nearptr)   {      movedata(_my_ds(), (unsigned) screen->line[0],               vid_selector, (unsigned) hardware->line[0],               hardware->pitch * hardware->height);   }}/*** $Log: tl_vesa.c,v $** Revision 1.8  2001/03/12 06:06:55  matt** better keyboard driver, support for bit depths other than 8bpp**** Revision 1.7  2001/02/01 06:28:26  matt** thinlib now works under NT/2000**** Revision 1.6  2001/01/15 05:25:52  matt** i hate near pointers**** Revision 1.5  2000/12/14 14:10:32  matt** cleaner initialization**** Revision 1.4  2000/11/25 20:28:34  matt** moved verboseness into correct places**** Revision 1.3  2000/11/06 02:22:33  matt** generalized video driver (tl_video.c)**** Revision 1.2  2000/11/05 16:32:36  matt** thinlib round 2**** Revision 1.1  2000/11/05 06:29:03  matt** initial revision***/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人中文字幕| 国产精品综合久久| 久久久亚洲午夜电影| 色婷婷综合在线| 精品一区二区在线视频| 亚洲一区在线观看视频| 国产欧美日本一区视频| 在线播放一区二区三区| av在线这里只有精品| 激情亚洲综合在线| 日韩电影在线免费观看| 伊人色综合久久天天| 日本一区二区三区国色天香| 日韩一区二区三区四区 | 日韩vs国产vs欧美| 亚洲私人黄色宅男| 国产日韩欧美精品电影三级在线| 4438x亚洲最大成人网| 色综合久久久久综合体桃花网| 国产福利一区在线| 精彩视频一区二区三区| 日本不卡123| 五月天激情综合网| 亚洲高清在线视频| 亚洲成va人在线观看| 一区二区欧美视频| 亚洲欧美日韩国产一区二区三区| 亚洲欧洲美洲综合色网| 国产精品私人自拍| 国产精品少妇自拍| 中文字幕欧美日韩一区| 亚洲国产成人在线| 国产精品麻豆久久久| 欧美国产丝袜视频| 国产精品视频一区二区三区不卡| 久久久精品国产99久久精品芒果| 久久久亚洲精品一区二区三区 | 5858s免费视频成人| 欧美日韩在线三级| 欧美日韩精品是欧美日韩精品| 欧美怡红院视频| 欧美色国产精品| 91麻豆精品91久久久久同性| 欧美一级xxx| 久久欧美一区二区| 欧美国产日产图区| 自拍偷拍亚洲欧美日韩| 亚洲精品视频免费看| 亚洲五月六月丁香激情| 日本视频中文字幕一区二区三区| 日本伊人色综合网| 国产一区二区不卡| 99久久精品费精品国产一区二区| 色婷婷久久一区二区三区麻豆| 日本精品视频一区二区| 欧美日本高清视频在线观看| 日韩区在线观看| 久久久噜噜噜久久中文字幕色伊伊 | 欧美tickle裸体挠脚心vk| 精品美女一区二区| 中文字幕高清不卡| 亚洲色图色小说| 天堂午夜影视日韩欧美一区二区| 免费高清在线视频一区·| 国产伦精品一区二区三区免费| 国产91丝袜在线播放| 色久优优欧美色久优优| 欧美一区二区视频免费观看| 久久亚洲综合av| 亚洲欧美一区二区三区久本道91| 亚洲综合久久久| 久久国产成人午夜av影院| 不卡视频在线观看| 欧美伦理视频网站| 国产欧美精品区一区二区三区| 亚洲欧美区自拍先锋| 美腿丝袜一区二区三区| 99久久99久久精品免费观看| 欧美日韩精品是欧美日韩精品| 久久综合色综合88| 一区二区免费视频| 国产一区二区中文字幕| 在线日韩国产精品| 久久久蜜桃精品| 亚洲成人av一区二区三区| 国产米奇在线777精品观看| 91久久奴性调教| 久久蜜桃av一区精品变态类天堂 | 欧美精品精品一区| 国产人妖乱国产精品人妖| 亚洲成人免费影院| www.欧美亚洲| 精品久久国产老人久久综合| 亚洲三级视频在线观看| 国产一区二区三区综合| 欧美日韩高清影院| 中文字幕在线一区免费| 久久国产欧美日韩精品| 欧美三级欧美一级| 国产欧美日韩久久| 美女视频一区二区| 欧美在线观看18| 国产精品―色哟哟| 经典一区二区三区| 欧美一区二区三区免费大片| 一区二区三区四区不卡视频| 粉嫩av亚洲一区二区图片| 日韩精品一区二区三区中文精品| 一区二区三区不卡视频| 成人ar影院免费观看视频| ww亚洲ww在线观看国产| 日韩成人伦理电影在线观看| 在线视频观看一区| 亚洲欧美日韩在线播放| 成人激情动漫在线观看| 久久久久99精品国产片| 久久爱www久久做| 91精品在线麻豆| 亚洲国产精品视频| 欧美综合一区二区| 一区二区三区在线观看视频| 99久久久无码国产精品| 欧美经典一区二区三区| 国产精品一二二区| 日韩欧美国产三级电影视频| 日韩精品亚洲专区| 在线成人av网站| 丝瓜av网站精品一区二区| 欧美人xxxx| 视频一区欧美日韩| 欧美日韩国产高清一区二区| 夜夜揉揉日日人人青青一国产精品| 99精品在线观看视频| 国产精品久久久久国产精品日日| 成人美女在线观看| 中文字幕日本不卡| 99国产精品国产精品毛片| 中文字幕色av一区二区三区| 99久久精品免费精品国产| 自拍偷拍亚洲综合| 欧美丝袜自拍制服另类| 日韩中文欧美在线| 欧美成人aa大片| 国产精品亚洲午夜一区二区三区| 久久久久99精品国产片| www.激情成人| 亚洲女性喷水在线观看一区| 欧美中文字幕一区二区三区| 亚洲成av人影院| 日韩欧美的一区| 国产精品一区不卡| 亚洲日本一区二区三区| 欧美日韩一区中文字幕| 日韩中文字幕91| 久久免费精品国产久精品久久久久| 国产福利电影一区二区三区| 国产精品久久99| 欧洲中文字幕精品| 久久精品国产亚洲aⅴ| 国产亚洲欧美日韩日本| 91视频.com| 免费日韩伦理电影| 久久精品欧美日韩精品| 一本一道波多野结衣一区二区| 日韩精品一卡二卡三卡四卡无卡| 精品少妇一区二区三区视频免付费 | 专区另类欧美日韩| 欧美日本国产一区| 国产精品亚洲一区二区三区在线 | 亚洲福利国产精品| 精品日韩成人av| 成人动漫一区二区在线| 午夜精品免费在线| 久久综合九色综合久久久精品综合 | 欧美人伦禁忌dvd放荡欲情| 黄页网站大全一区二区| 亚洲美女视频在线观看| 日韩久久精品一区| 色香蕉久久蜜桃| 国产一区二区三区黄视频 | 欧美午夜宅男影院| 国产精品一区二区在线观看网站| 亚洲精品高清在线| 欧美精品一区二区精品网| 色一情一乱一乱一91av| 国产精品中文字幕日韩精品| 亚洲精品久久7777| 久久精品免费在线观看| 欧美精品第1页| av在线不卡网| 国内精品久久久久影院薰衣草| 亚洲精品五月天| 国产欧美日韩麻豆91| 91精品久久久久久久99蜜桃| av中文字幕亚洲| 国产精品伊人色| 日韩av电影天堂| 亚洲一区二区三区中文字幕| 国产亚洲精品资源在线26u| 91精品国产综合久久福利软件|