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

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

?? tl_vga.c

?? 十七種模擬器源代碼 非常有用的作課程設(shè)計不可缺少的
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*** 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_vga.c**** VGA-related thinlib functions** $Id: tl_vga.c,v 1.9 2001/03/12 06:06:55 matt Exp $*/#include <stdio.h>#include <string.h>#include <dpmi.h>#include <dos.h>#include "tl_types.h"#include "tl_bmp.h"#include "tl_vga.h"#include "tl_djgpp.h"#define  DEFAULT_OVERSCAN        0#define  MODE_TEXT               0x03#define  MODE_13H                0x13/* VGA card register addresses */#define  VGA_ATTR                0x3C0 /* Attribute reg */#define  VGA_MISC                0x3C2 /* Misc. output register */#define  VGA_SEQ_ADDR            0x3C4 /* Base port of sequencer */#define  VGA_SEQ_DATA            0x3C5 /* Data port of sequencer */#define  VGA_CRTC_ADDR           0x3D4 /* Base port of CRT controller */#define  VGA_CRTC_DATA           0x3D5 /* Data port of CRT controller */#define  VGA_STATUS              0x3DA /* Input status #1 register */#define  VGA_PAL_READ            0x3C7 /* Palette read address */#define  VGA_PAL_WRITE           0x3C8 /* Palette write address */#define  VGA_PAL_DATA            0x3C9 /* Palette data register *//* generic VGA CRTC register indexes */#define  HZ_DISPLAY_TOTAL        0x00#define  HZ_DISPLAY_END          0x01#define  CRTC_OVERFLOW           0x07#define  VT_DISPLAY_END          0x12#define  MEM_OFFSET              0x13/* indices into our register array */#define  CLOCK_INDEX             0#define  H_TOTAL_INDEX           1#define  H_DISPLAY_INDEX         2#define  H_BLANKING_START_INDEX  3#define  H_BLANKING_END_INDEX    4#define  H_RETRACE_START_INDEX   5#define  H_RETRACE_END_INDEX     6#define  V_TOTAL_INDEX           7#define  OVERFLOW_INDEX          8#define  MAXIMUM_SCANLINE_INDEX  10#define  V_RETRACE_START_INDEX   11#define  V_RETRACE_END_INDEX     12#define  V_END_INDEX             13#define  MEM_OFFSET_INDEX        14#define  UNDERLINE_LOC_INDEX     15#define  V_BLANKING_START_INDEX  16#define  V_BLANKING_END_INDEX    17#define  MODE_CONTROL_INDEX      18#define  MEMORY_MODE_INDEX       20typedef struct vgareg_s{   int port;   int index;   uint8 value;} vgareg_t;typedef struct vgamode_s{   int width;   int height;   char *name;   vgareg_t *regs;} vgamode_t;/* 60 Hz */static vgareg_t mode_256x224[] ={   { 0x3C2, 0x00, 0xE3 }, { 0x3D4, 0x00, 0x5F }, { 0x3D4, 0x01, 0x3F },   { 0x3D4, 0x02, 0x40 }, { 0x3D4, 0x03, 0x82 }, { 0x3D4, 0x04, 0x4A },   { 0x3D4, 0x05, 0x9A }, { 0x3D4, 0x06, 0x0B }, { 0x3D4, 0x07, 0xB2 },   { 0x3D4, 0x08, 0x00 }, { 0x3D4, 0x09, 0x61 }, { 0x3d4, 0x10, 0x00 },   { 0x3D4, 0x11, 0xAC }, { 0x3D4, 0x12, 0xBF }, { 0x3D4, 0x13, 0x20 },   { 0x3D4, 0x14, 0x40 }, { 0x3D4, 0x15, 0x01 }, { 0x3D4, 0x16, 0x0A },   { 0x3D4, 0x17, 0xA3 }, { 0x3C4, 0x01, 0x01 }, { 0x3C4, 0x04, 0x0E },   { 0, 0, 0 }};static vgareg_t mode_256x240[] ={   { 0x3c2, 0x00, 0xe3},{ 0x3d4, 0x00, 0x55},{ 0x3d4, 0x01, 0x3f},   { 0x3d4, 0x02, 0x80},{ 0x3d4, 0x03, 0x90},{ 0x3d4, 0x04, 0x49},   { 0x3d4, 0x05, 0x80},{ 0x3D4, 0x06, 0x43},{ 0x3d4, 0x07, 0xb2},   { 0x3d4, 0x08, 0x00},{ 0x3D4, 0x09, 0x61},{ 0x3d4, 0x10, 0x04},   { 0x3d4, 0x11, 0xac},{ 0x3D4, 0x12, 0xdf},{ 0x3d4, 0x13, 0x20},   { 0x3d4, 0x14, 0x40},{ 0x3d4, 0x15, 0x07},{ 0x3D4, 0x16, 0x11},   { 0x3d4, 0x17, 0xa3},{ 0x3c4, 0x01, 0x01},{ 0x3c4, 0x04, 0x0e},   { 0, 0, 0 }};static vgareg_t mode_256x256[] ={   { 0x3C2, 0x00, 0xE3 }, { 0x3D4, 0x00, 0x5F }, { 0x3D4, 0x01, 0x3F },   { 0x3D4, 0x02, 0x40 }, { 0x3D4, 0x03, 0x82 }, { 0x3D4, 0x04, 0x4A },   { 0x3D4, 0x05, 0x9A }, { 0x3D4, 0x06, 0x23 }, { 0x3D4, 0x07, 0xB2 },   { 0x3D4, 0x08, 0x00 }, { 0x3D4, 0x09, 0x61 }, { 0x3D4, 0x10, 0x0A },   { 0x3D4, 0x11, 0xAC }, { 0x3D4, 0x12, 0xFF }, { 0x3D4, 0x13, 0x20 },   { 0x3D4, 0x14, 0x40 }, { 0x3D4, 0x15, 0x07 }, { 0x3D4, 0x16, 0x1A },   { 0x3D4, 0x17, 0xA3 }, { 0x3C4, 0x01, 0x01 }, { 0x3C4, 0x04, 0x0E },   { 0, 0, 0 }};/* 60 Hz */static vgareg_t mode_256x256wide[] ={   { 0x3C2, 0x00, 0xE3 }, { 0x3D4, 0x00, 0x52 }, { 0x3D4, 0x01, 0x3F },   { 0x3D4, 0x02, 0x80 }, { 0x3D4, 0x03, 0x90 }, { 0x3D4, 0x04, 0x49 },   { 0x3D4, 0x05, 0x80 }, { 0x3D4, 0x06, 0x55 }, { 0x3D4, 0x07, 0xB2 },   { 0x3D4, 0x08, 0x00 }, { 0x3D4, 0x09, 0x61 }, { 0x3D4, 0x10, 0x20 },   { 0x3D4, 0x11, 0xAC }, { 0x3D4, 0x12, 0xFF }, { 0x3D4, 0x13, 0x20 },   { 0x3D4, 0x14, 0x40 }, { 0x3D4, 0x15, 0x07 }, { 0x3D4, 0x16, 0x1A },   { 0x3D4, 0x17, 0xA3 }, { 0x3C4, 0x01, 0x01 }, { 0x3C4, 0x04, 0x0E },   { 0, 0, 0 }};/* 60 Hz */static vgareg_t mode_288x224[] ={   { 0x3C2, 0x00, 0xE3 }, { 0x3D4, 0x00, 0x5F }, { 0x3D4, 0x01, 0x47 },   { 0x3D4, 0x02, 0x50 }, { 0x3D4, 0x03, 0x82 }, { 0x3D4, 0x04, 0x50 },   { 0x3D4, 0x05, 0x80 }, { 0x3D4, 0x06, 0x08 }, { 0x3D4, 0x07, 0x3E },   { 0x3D4, 0x08, 0x00 }, { 0x3D4, 0x09, 0x41 }, { 0x3D4, 0x10, 0xDA },   { 0x3D4, 0x11, 0x9C }, { 0x3D4, 0x12, 0xBF }, { 0x3D4, 0x13, 0x24 },   { 0x3D4, 0x14, 0x40 }, { 0x3D4, 0x15, 0xC7 }, { 0x3D4, 0x16, 0x04 },   { 0x3D4, 0x17, 0xA3 }, { 0x3C4, 0x01, 0x01 }, { 0x3C4, 0x04, 0x0E },   { 0, 0, 0 }};static vgareg_t mode_320x200[] ={   { 0, 0, 0 }};static vgamode_t vidmodes[] ={   { 288, 224, "288x224", mode_288x224 },   { 256, 224, "256x224", mode_256x224 },   { 256, 240, "256x240", mode_256x240 },   { 256, 256, "256x256 (wide)", mode_256x256wide },   { 256, 256, "256x256", mode_256x256 },   { 320, 200, "320x200", mode_320x200 },   { 0, 0, NULL, 0 }};static bitmap_t *screen = NULL;static bitmap_t *hardware = NULL;/* current VGA mode */static vgamode_t *vga_mode = NULL;/* eek */static int center_x, center_y;static vgareg_t *tweak_addscanlines(vgareg_t *inreg, int entries){   static vgareg_t outreg[32];   int maxscan,maxscanout;   int overflow,overflowout;   int ytotalin,ytotalout;   int ydispin,ydispout;   int vrsin,vrsout,vreout,vblksout,vblkeout;   /* first - check's it not already a 'non doubled' line mode */   maxscan = inreg[MAXIMUM_SCANLINE_INDEX].value;   if ((maxscan & 1) == 0)   /* it is, so just return the array as is */      return inreg;   /* copy across our standard display array */   memcpy (&outreg, inreg, entries * sizeof(vgareg_t));   /* keep hold of the overflow register - as we'll need to refer to it a lot */   overflow = inreg[OVERFLOW_INDEX].value;   /* set a large line compare value  - as we won't be doing any split window scrolling etc.*/   maxscanout = 0x40;   /* half all the y values */   /* total */   ytotalin = inreg[V_TOTAL_INDEX].value;   ytotalin |= ((overflow & 1)<<0x08) | ((overflow & 0x20)<<0x04);   ytotalout = ytotalin >> 1;   /* display enable end */   ydispin = inreg[13].value | ((overflow & 0x02)<< 0x07) | ((overflow & 0x040) << 0x03);   ydispin ++;   ydispout = ydispin >> 1;   ydispout --;   overflowout = ((ydispout & 0x100) >> 0x07) | ((ydispout && 0x200) >> 0x03);   outreg[V_END_INDEX].value = (ydispout & 0xff);   /* avoid top over scan */   if ((ytotalin - ydispin) < 40 && !center_y)   {      vrsout = ydispout;      /* give ourselves a scanline cushion */      ytotalout += 2;   }   else   {      /* vertical retrace start */      vrsin = inreg[V_RETRACE_START_INDEX].value | ((overflow & 0x04)<<0x06) | ((overflow & 0x80)<<0x02);      vrsout = vrsin >> 1;   }   /* check it's legal */   if (vrsout < ydispout)      vrsout = ydispout;   /* update our output overflow */   overflowout |= (((vrsout & 0x100) >> 0x06) | ((vrsout & 0x200) >> 0x02));   outreg[V_RETRACE_START_INDEX].value = (vrsout & 0xff);   /* vertical retrace end */   vreout = vrsout + 2;   /* make sure the retrace fits into our adjusted display size */   if (vreout > (ytotalout - 9))      ytotalout = vreout + 9;   /* write out the vertical retrace end */   outreg[V_RETRACE_END_INDEX].value &= ~0x0f;   outreg[V_RETRACE_END_INDEX].value |= (vreout & 0x0f);   /* vertical blanking start */   vblksout = ydispout + 1;   /* check it's legal */   if(vblksout > vreout)      vblksout = vreout;   /* save the overflow value */   overflowout |= ((vblksout & 0x100) >> 0x05);   maxscanout |= ((vblksout & 0x200) >> 0x04);   /* write the v blank value out */   outreg[V_BLANKING_START_INDEX].value = (vblksout & 0xff);   /* vertical blanking end */   vblkeout = vreout + 1;   /* make sure the blanking fits into our adjusted display size */   if (vblkeout > (ytotalout - 9))      ytotalout = vblkeout + 9;   /* write out the vertical blanking total */   outreg[V_BLANKING_END_INDEX].value = (vblkeout & 0xff);   /* update our output overflow */   overflowout |= ((ytotalout & 0x100) >> 0x08) | ((ytotalout & 0x200) >> 0x04);   /* write out the new vertical total */   outreg[V_TOTAL_INDEX].value = (ytotalout & 0xff);   /* write out our over flows */   outreg[OVERFLOW_INDEX].value = overflowout;   /* finally the max scan line */   outreg[MAXIMUM_SCANLINE_INDEX].value = maxscanout;   /* and we're done */   return outreg;}static void tweak_centermode(vgareg_t *pReg){   int center;   int hrt_start, hrt_end, hrt, hblnk_start, hblnk_end;   int vrt_start, vrt_end, vert_total, vert_display, vblnk_start, vrt, vblnk_end;   if (!pReg)      return;   /* vertical retrace width */   vrt = 2;   /* check the clock speed, to work out the retrace width */   if (pReg[CLOCK_INDEX].value == 0xe7)      hrt = 11;   else      hrt = 10;   /* our center x tweak value */   center = center_x;   /* check for double width scanline rather than half clock (15.75kHz modes) */   if( pReg[H_TOTAL_INDEX].value > 0x96)   {      center<<=1;      hrt<<=1;   }   /* set the hz retrace */   hrt_start = pReg[H_RETRACE_START_INDEX].value;   hrt_start += center;   /* make sure it's legal */   if (hrt_start <= pReg[H_DISPLAY_INDEX].value)      hrt_start = pReg[H_DISPLAY_INDEX].value + 1;   pReg[H_RETRACE_START_INDEX].value = hrt_start;   /* set hz retrace end */   hrt_end = hrt_start + hrt;   /* make sure it's legal */   if( hrt_end > pReg[H_TOTAL_INDEX].value)      hrt_end = pReg[H_TOTAL_INDEX].value;   /* set the hz blanking */   hblnk_start = pReg[H_DISPLAY_INDEX].value + 1;   /* make sure it's legal */   if (hblnk_start > hrt_start)      hblnk_start = pReg[H_RETRACE_START_INDEX].value;   pReg[H_BLANKING_START_INDEX].value = hblnk_start;   /* the horizontal blanking end */   hblnk_end = hrt_end + 2;   /* make sure it's legal */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲女人久久久久毛片| 国产不卡视频在线播放| 一本到一区二区三区| 最新中文字幕一区二区三区| 91在线视频播放地址| 亚洲日本va午夜在线影院| 色综合天天综合色综合av| 一区二区三区国产精品| 欧美日韩国产电影| 久久99热这里只有精品| 久久久国产精品不卡| 99re视频精品| 久久不见久久见免费视频7 | 成人免费一区二区三区在线观看| 欧美妇女性影城| 国内外精品视频| 中文字幕一区二区三区在线观看| 精品嫩草影院久久| 成人avav在线| 午夜精品免费在线| 欧美精品一区二区三区高清aⅴ| 国产成人免费高清| 夜夜揉揉日日人人青青一国产精品| 久久欧美一区二区| 日韩女优毛片在线| 色天天综合色天天久久| 成人免费视频播放| 亚洲.国产.中文慕字在线| 精品对白一区国产伦| 欧美一区二区三区免费观看视频 | 欧美性生活久久| 久久精品国产亚洲高清剧情介绍| 一区二区三区欧美亚洲| ●精品国产综合乱码久久久久| 国产欧美一区二区精品性色| 欧美精品自拍偷拍动漫精品| 色婷婷av一区二区三区大白胸| 99久久精品免费看国产免费软件| 成人高清免费在线播放| 国产成人综合亚洲网站| 国产大陆亚洲精品国产| 国产一区二区福利| 天堂一区二区在线免费观看| 亚洲欧美中日韩| 亚洲视频在线观看三级| 亚洲欧洲日韩女同| 亚洲精品视频在线观看网站| 久久伊人中文字幕| 欧美一区二区三区白人| 91精品国产91久久综合桃花| 欧美一区2区视频在线观看| 91精品国产福利| 久久午夜老司机| 国产三级一区二区三区| 国产精品美女久久久久久2018| 日韩午夜激情电影| 欧美喷潮久久久xxxxx| 欧美一卡二卡三卡| 久久久一区二区三区捆绑**| 欧美国产一区视频在线观看| 精品国产一区二区三区av性色| 久久奇米777| 亚洲欧洲三级电影| 亚洲v精品v日韩v欧美v专区| 久久er99热精品一区二区| 国产又黄又大久久| 91在线一区二区三区| 欧美日韩你懂的| 欧美午夜一区二区三区| 欧美一区二区三区免费大片| 久久久综合视频| 一区二区免费在线播放| 奇米精品一区二区三区在线观看一| 亚洲电影视频在线| 韩国av一区二区三区四区| 91色porny在线视频| av亚洲精华国产精华| 99久久婷婷国产| 欧美日本一区二区三区| 久久人人爽人人爽| 一区二区三区免费观看| 美女国产一区二区三区| 久久91精品国产91久久小草| 狠狠色狠狠色合久久伊人| 成人av电影在线网| 777午夜精品免费视频| 欧美一区二区三区视频在线| 国产精品欧美经典| 日韩高清在线观看| 久久激情综合网| 色呦呦国产精品| wwwwww.欧美系列| 一区二区三区精品视频在线| 国产精品综合二区| www.日韩精品| 欧美mv日韩mv国产网站app| 亚洲三级久久久| 国产精品12区| 91精品国产全国免费观看| 亚洲欧美在线观看| 国产精品一区二区无线| 欧美久久久久久久久| 亚洲视频每日更新| 国产精品一区二区三区四区| 91精品国产综合久久久蜜臀粉嫩| 中文字幕一区三区| 国产精品综合二区| 日韩一区二区三区免费观看| 亚洲综合色在线| 久久99久久99精品免视看婷婷 | 中文字幕第一区综合| 奇米精品一区二区三区四区| 一本一道久久a久久精品综合蜜臀| 久久综合资源网| 日日摸夜夜添夜夜添国产精品 | 久久综合狠狠综合久久激情| 无吗不卡中文字幕| 91黄色激情网站| 日韩欧美一级在线播放| 一区二区三区 在线观看视频| 成人短视频下载| 国产欧美日韩激情| 激情综合网最新| 日韩情涩欧美日韩视频| 亚洲成人av福利| 欧美日韩在线一区二区| 伊人开心综合网| 色拍拍在线精品视频8848| 中文字幕中文字幕在线一区 | 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日本一区二区三区在线不卡| 国产资源精品在线观看| 亚洲色图丝袜美腿| 91影视在线播放| 中文字幕佐山爱一区二区免费| 成人app下载| 一色屋精品亚洲香蕉网站| 99国产精品视频免费观看| 国产精品色眯眯| 成人av网站大全| 最新久久zyz资源站| 91视频免费看| 亚洲黄色av一区| 欧美美女视频在线观看| 性做久久久久久| 欧美一区二区免费| 美女在线视频一区| 久久久久久影视| 成人美女视频在线观看| 中文字幕在线观看不卡| 91豆麻精品91久久久久久| 亚洲午夜在线视频| 99在线精品免费| 亚洲精选视频免费看| 欧美日韩大陆在线| 蜜臀av亚洲一区中文字幕| 久久亚洲影视婷婷| 成人aa视频在线观看| 一区二区三区高清| 91精品国产综合久久久蜜臀图片| 极品美女销魂一区二区三区 | 亚洲男人的天堂在线观看| 国产成人在线影院| 国产精品私房写真福利视频| 91麻豆蜜桃一区二区三区| 婷婷激情综合网| 久久久久久免费| 91麻豆文化传媒在线观看| 视频在线在亚洲| 国产日韩欧美一区二区三区乱码| 99天天综合性| 天堂av在线一区| 国产日韩欧美综合在线| 91女厕偷拍女厕偷拍高清| 蜜臀av一级做a爰片久久| 中文字幕精品一区二区精品绿巨人| 欧洲精品一区二区| 一区二区久久久久久| 日韩欧美国产1| a级精品国产片在线观看| 五月婷婷久久丁香| 国产三级精品视频| 欧美日韩日日摸| 成人听书哪个软件好| 亚洲18影院在线观看| 国产亚洲综合色| 欧美群妇大交群中文字幕| 懂色av一区二区三区免费看| 视频一区中文字幕国产| 国产精品视频麻豆| 欧美日本在线观看| 成人免费视频国产在线观看| 秋霞av亚洲一区二区三| 亚洲视频1区2区| 久久综合久久综合亚洲| 欧美午夜免费电影| 成人av高清在线| 久久99国产精品成人| 亚洲国产综合人成综合网站| 中文乱码免费一区二区|