亚洲欧美第一页_禁久久精品乱码_粉嫩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人**亚洲成av**| 国产欧美日韩卡一| 国产精品入口麻豆原神| 国产日韩欧美综合在线| 欧美一区二区免费| 欧美成人性福生活免费看| 7777精品久久久大香线蕉| 91精品欧美久久久久久动漫| 日韩欧美一区二区视频| 精品动漫一区二区三区在线观看| 91福利国产成人精品照片| 国产盗摄女厕一区二区三区| 国产乱子轮精品视频| 另类小说一区二区三区| 国产乱子轮精品视频| 不卡的看片网站| 在线免费观看一区| 欧美丰满少妇xxxbbb| 欧美精彩视频一区二区三区| 成人欧美一区二区三区白人| 午夜久久久久久| 国产乱国产乱300精品| 成人福利电影精品一区二区在线观看| 色综合久久中文综合久久97| 欧美美女一区二区| 日韩欧美成人一区二区| 国产精品传媒视频| 偷偷要91色婷婷| 日韩精品在线一区二区| 欧美天堂一区二区三区| 欧美一区二区三区免费观看视频| 久久久99久久精品欧美| 樱桃视频在线观看一区| 精品一区二区三区在线播放 | 亚洲国产精品自拍| 精品在线播放免费| 欧日韩精品视频| 国产精品女主播av| 青青青伊人色综合久久| 91片在线免费观看| 久久精品视频在线看| 天堂精品中文字幕在线| 国产999精品久久久久久| 这里只有精品99re| 亚洲欧美福利一区二区| 国产精品一区在线| 91精品福利在线一区二区三区| 亚洲人精品一区| 国产69精品久久777的优势| 91精品视频网| 亚洲va欧美va国产va天堂影院| 成人av综合在线| 国产亚洲美州欧州综合国| 亚洲成人精品一区| 在线观看亚洲一区| 亚洲婷婷综合久久一本伊一区| 国产黄人亚洲片| 精品国产成人系列| 久久精品国产99| 欧美va亚洲va香蕉在线| 日日欢夜夜爽一区| 91久久香蕉国产日韩欧美9色| 亚洲国产高清aⅴ视频| 国产精品 欧美精品| 精品对白一区国产伦| 九九九精品视频| 日韩亚洲国产中文字幕欧美| 香蕉av福利精品导航 | 久久成人免费日本黄色| 欧美亚洲禁片免费| 亚洲午夜一区二区三区| 欧美丝袜丝nylons| ...av二区三区久久精品| 成人美女在线观看| 中文字幕中文字幕中文字幕亚洲无线| 国产一区二区三区在线观看免费视频 | 国产成人在线免费| 国产视频一区在线播放| 成人免费毛片a| 自拍av一区二区三区| 欧美日韩一区高清| 亚洲三级在线看| 色综合中文字幕国产 | caoporen国产精品视频| 中文字幕精品综合| 91丨国产丨九色丨pron| 亚洲精选视频免费看| 欧美日韩在线三级| 蜜乳av一区二区| 国产人久久人人人人爽| 色悠久久久久综合欧美99| 亚洲1区2区3区视频| 日韩欧美亚洲另类制服综合在线 | 欧洲国产伦久久久久久久| 亚洲va国产天堂va久久en| 欧美成人一级视频| 97se亚洲国产综合自在线| 亚洲国产精品久久不卡毛片 | 欧美日韩亚洲综合在线| 蜜臀91精品一区二区三区| 日本一区二区动态图| 欧美视频完全免费看| 九九九精品视频| 亚洲蜜臀av乱码久久精品 | 成人午夜视频网站| 图片区小说区国产精品视频| 国产午夜精品福利| 欧美精品黑人性xxxx| 国产91精品精华液一区二区三区| 亚洲伊人色欲综合网| 国产情人综合久久777777| 欧美午夜寂寞影院| 盗摄精品av一区二区三区| 亚洲成av人影院| 国产精品伦一区二区三级视频| 欧美精品日韩精品| www.综合网.com| 久久狠狠亚洲综合| 亚洲成av人片在www色猫咪| 国产精品美女久久久久久| 欧美一区二区三区日韩视频| 91蜜桃网址入口| 国产一区二区三区蝌蚪| 日韩电影免费在线| 中文字幕亚洲视频| 久久女同性恋中文字幕| 717成人午夜免费福利电影| 99精品在线观看视频| 国产成人精品三级麻豆| 久久成人综合网| 美日韩一区二区| 日韩一区精品视频| 亚洲一区二区av在线| 亚洲手机成人高清视频| 国产精品私人影院| 国产午夜精品一区二区| 日韩欧美区一区二| 日韩视频免费观看高清完整版 | 久久99精品久久久久久动态图 | 欧美日韩高清一区二区| 色综合久久久久综合99| bt7086福利一区国产| 成人一区二区三区视频在线观看| 免费看欧美女人艹b| 日韩电影在线看| 免费高清在线视频一区·| 天堂资源在线中文精品| 亚洲aaa精品| 丝袜亚洲另类欧美| 亚洲成人免费视| 日日欢夜夜爽一区| 日本中文字幕一区二区视频| 五月婷婷激情综合网| 日韩精品一级二级| 日本少妇一区二区| 美女精品自拍一二三四| 国产精品一二三| 成人av综合在线| 欧洲激情一区二区| 欧美理论片在线| 精品日韩av一区二区| 久久久国产精华| 亚洲日本va午夜在线影院| 亚洲制服欧美中文字幕中文字幕| 亚洲.国产.中文慕字在线| 免费av成人在线| 国产乱人伦精品一区二区在线观看| 国产精品中文字幕欧美| 99视频精品在线| 欧美日韩成人在线一区| 日韩欧美国产综合一区| 国产欧美一区二区精品久导航 | 久久se精品一区精品二区| 国产麻豆精品在线| 一本久久综合亚洲鲁鲁五月天| 欧洲一区二区三区免费视频| 7799精品视频| 久久九九影视网| 亚洲一区二区三区免费视频| 蜜臀av亚洲一区中文字幕| 成人激情av网| 欧美日韩精品综合在线| 91在线你懂得| 国产拍欧美日韩视频二区| 国产精品全国免费观看高清 | 亚洲免费观看高清在线观看| 日本特黄久久久高潮| www.久久精品| 日韩免费一区二区| 亚洲激情av在线| 国产成人99久久亚洲综合精品| 欧美探花视频资源| 国产精品网站一区| 蜜臀av性久久久久蜜臀aⅴ| 色综合av在线| 欧美激情一区在线| 久久成人精品无人区| 在线一区二区三区四区五区 |