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

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

?? id_vl.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁 / 共 2 頁
字號:
// ID_VL.C

#include <dos.h>
#include <alloc.h>
#include <mem.h>
#include <string.h>
#include "ID_HEAD.H"
#include "ID_VL.H"
#pragma hdrstop

//
// SC_INDEX is expected to stay at SC_MAPMASK for proper operation
//

unsigned	bufferofs;
unsigned	displayofs,pelpan;

unsigned	screenseg=SCREENSEG;		// set to 0xa000 for asm convenience

unsigned	linewidth;
unsigned	ylookup[MAXSCANLINES];

boolean		screenfaded;
unsigned	bordercolor;

boolean		fastpalette;				// if true, use outsb to set

byte		far	palette1[256][3],far palette2[256][3];

//===========================================================================

// asm

int	 VL_VideoID (void);
void VL_SetCRTC (int crtc);
void VL_SetScreen (int crtc, int pelpan);
void VL_WaitVBL (int vbls);

//===========================================================================


/*
=======================
=
= VL_Startup
=
=======================
*/

#if 0
void	VL_Startup (void)
{
	if ( !MS_CheckParm ("HIDDENCARD") && VL_VideoID () != 5)
		MS_Quit ("You need a VGA graphics card to run this!");

	asm	cld;				// all string instructions assume forward
}

#endif

/*
=======================
=
= VL_Startup	// WOLFENSTEIN HACK
=
=======================
*/

static	char *ParmStrings[] = {"HIDDENCARD",""};

void	VL_Startup (void)
{
	int i,videocard;

	asm	cld;

	videocard = VL_VideoID ();
	for (i = 1;i < _argc;i++)
		if (US_CheckParm(_argv[i],ParmStrings) == 0)
		{
			videocard = 5;
			break;
		}

	if (videocard != 5)
Quit ("Improper video card!  If you really have a VGA card that I am not \n"
	  "detecting, use the -HIDDENCARD command line parameter!");

}



/*
=======================
=
= VL_Shutdown
=
=======================
*/

void	VL_Shutdown (void)
{
	VL_SetTextMode ();
}


/*
=======================
=
= VL_SetVGAPlaneMode
=
=======================
*/

void	VL_SetVGAPlaneMode (void)
{
asm	mov	ax,0x13
asm	int	0x10
	VL_DePlaneVGA ();
	VGAMAPMASK(15);
	VL_SetLineWidth (40);
}


/*
=======================
=
= VL_SetTextMode
=
=======================
*/

void	VL_SetTextMode (void)
{
asm	mov	ax,3
asm	int	0x10
}

//===========================================================================

/*
=================
=
= VL_ClearVideo
=
= Fill the entire video buffer with a given color
=
=================
*/

void VL_ClearVideo (byte color)
{
asm	mov	dx,GC_INDEX
asm	mov	al,GC_MODE
asm	out	dx,al
asm	inc	dx
asm	in	al,dx
asm	and	al,0xfc				// write mode 0 to store directly to video
asm	out	dx,al

asm	mov	dx,SC_INDEX
asm	mov	ax,SC_MAPMASK+15*256
asm	out	dx,ax				// write through all four planes

asm	mov	ax,SCREENSEG
asm	mov	es,ax
asm	mov	al,[color]
asm	mov	ah,al
asm	mov	cx,0x8000			// 0x8000 words, clearing 8 video bytes/word
asm	xor	di,di
asm	rep	stosw
}


/*
=============================================================================

			VGA REGISTER MANAGEMENT ROUTINES

=============================================================================
*/


/*
=================
=
= VL_DePlaneVGA
=
=================
*/

void VL_DePlaneVGA (void)
{

//
// change CPU addressing to non linear mode
//

//
// turn off chain 4 and odd/even
//
	outportb (SC_INDEX,SC_MEMMODE);
	outportb (SC_INDEX+1,(inportb(SC_INDEX+1)&~8)|4);

	outportb (SC_INDEX,SC_MAPMASK);		// leave this set throughought

//
// turn off odd/even and set write mode 0
//
	outportb (GC_INDEX,GC_MODE);
	outportb (GC_INDEX+1,inportb(GC_INDEX+1)&~0x13);

//
// turn off chain
//
	outportb (GC_INDEX,GC_MISCELLANEOUS);
	outportb (GC_INDEX+1,inportb(GC_INDEX+1)&~2);

//
// clear the entire buffer space, because int 10h only did 16 k / plane
//
	VL_ClearVideo (0);

//
// change CRTC scanning from doubleword to byte mode, allowing >64k scans
//
	outportb (CRTC_INDEX,CRTC_UNDERLINE);
	outportb (CRTC_INDEX+1,inportb(CRTC_INDEX+1)&~0x40);

	outportb (CRTC_INDEX,CRTC_MODE);
	outportb (CRTC_INDEX+1,inportb(CRTC_INDEX+1)|0x40);
}

//===========================================================================

/*
====================
=
= VL_SetLineWidth
=
= Line witdh is in WORDS, 40 words is normal width for vgaplanegr
=
====================
*/

void VL_SetLineWidth (unsigned width)
{
	int i,offset;

//
// set wide virtual screen
//
	outport (CRTC_INDEX,CRTC_OFFSET+width*256);

//
// set up lookup tables
//
	linewidth = width*2;

	offset = 0;

	for (i=0;i<MAXSCANLINES;i++)
	{
		ylookup[i]=offset;
		offset += linewidth;
	}
}

/*
====================
=
= VL_SetSplitScreen
=
====================
*/

void VL_SetSplitScreen (int linenum)
{
	VL_WaitVBL (1);
	linenum=linenum*2-1;
	outportb (CRTC_INDEX,CRTC_LINECOMPARE);
	outportb (CRTC_INDEX+1,linenum % 256);
	outportb (CRTC_INDEX,CRTC_OVERFLOW);
	outportb (CRTC_INDEX+1, 1+16*(linenum/256));
	outportb (CRTC_INDEX,CRTC_MAXSCANLINE);
	outportb (CRTC_INDEX+1,inportb(CRTC_INDEX+1) & (255-64));
}


/*
=============================================================================

						PALETTE OPS

		To avoid snow, do a WaitVBL BEFORE calling these

=============================================================================
*/


/*
=================
=
= VL_FillPalette
=
=================
*/

void VL_FillPalette (int red, int green, int blue)
{
	int	i;

	outportb (PEL_WRITE_ADR,0);
	for (i=0;i<256;i++)
	{
		outportb (PEL_DATA,red);
		outportb (PEL_DATA,green);
		outportb (PEL_DATA,blue);
	}
}

//===========================================================================

/*
=================
=
= VL_SetColor
=
=================
*/

void VL_SetColor	(int color, int red, int green, int blue)
{
	outportb (PEL_WRITE_ADR,color);
	outportb (PEL_DATA,red);
	outportb (PEL_DATA,green);
	outportb (PEL_DATA,blue);
}

//===========================================================================

/*
=================
=
= VL_GetColor
=
=================
*/

void VL_GetColor	(int color, int *red, int *green, int *blue)
{
	outportb (PEL_READ_ADR,color);
	*red = inportb (PEL_DATA);
	*green = inportb (PEL_DATA);
	*blue = inportb (PEL_DATA);
}

//===========================================================================

/*
=================
=
= VL_SetPalette
=
= If fast palette setting has been tested for, it is used
= (some cards don't like outsb palette setting)
=
=================
*/

void VL_SetPalette (byte far *palette)
{
	int	i;

//	outportb (PEL_WRITE_ADR,0);
//	for (i=0;i<768;i++)
//		outportb(PEL_DATA,*palette++);

	asm	mov	dx,PEL_WRITE_ADR
	asm	mov	al,0
	asm	out	dx,al
	asm	mov	dx,PEL_DATA
	asm	lds	si,[palette]

	asm	test	[ss:fastpalette],1
	asm	jz	slowset
//
// set palette fast for cards that can take it
//
	asm	mov	cx,768
	asm	rep outsb
	asm	jmp	done

//
// set palette slowly for some video cards
//
slowset:
	asm	mov	cx,256
setloop:
	asm	lodsb
	asm	out	dx,al
	asm	lodsb
	asm	out	dx,al
	asm	lodsb
	asm	out	dx,al
	asm	loop	setloop

done:
	asm	mov	ax,ss
	asm	mov	ds,ax

}


//===========================================================================

/*
=================
=
= VL_GetPalette
=
= This does not use the port string instructions,
= due to some incompatabilities
=
=================
*/

void VL_GetPalette (byte far *palette)
{
	int	i;

	outportb (PEL_READ_ADR,0);
	for (i=0;i<768;i++)
		*palette++ = inportb(PEL_DATA);
}


//===========================================================================

/*
=================
=
= VL_FadeOut
=
= Fades the current palette to the given color in the given number of steps
=
=================
*/

void VL_FadeOut (int start, int end, int red, int green, int blue, int steps)
{
	int		i,j,orig,delta;
	byte	far *origptr, far *newptr;

	VL_WaitVBL(1);
	VL_GetPalette (&palette1[0][0]);
	_fmemcpy (palette2,palette1,768);

//
// fade through intermediate frames
//
	for (i=0;i<steps;i++)
	{
		origptr = &palette1[start][0];
		newptr = &palette2[start][0];
		for (j=start;j<=end;j++)
		{
			orig = *origptr++;
			delta = red-orig;
			*newptr++ = orig + delta * i / steps;
			orig = *origptr++;
			delta = green-orig;
			*newptr++ = orig + delta * i / steps;
			orig = *origptr++;
			delta = blue-orig;
			*newptr++ = orig + delta * i / steps;
		}

		VL_WaitVBL(1);
		VL_SetPalette (&palette2[0][0]);
	}

//
// final color
//
	VL_FillPalette (red,green,blue);

	screenfaded = true;
}


/*
=================
=
= VL_FadeIn
=
=================
*/

void VL_FadeIn (int start, int end, byte far *palette, int steps)
{
	int		i,j,delta;

	VL_WaitVBL(1);
	VL_GetPalette (&palette1[0][0]);
	_fmemcpy (&palette2[0][0],&palette1[0][0],sizeof(palette1));

	start *= 3;
	end = end*3+2;

//
// fade through intermediate frames
//
	for (i=0;i<steps;i++)
	{
		for (j=start;j<=end;j++)
		{
			delta = palette[j]-palette1[0][j];
			palette2[0][j] = palette1[0][j] + delta * i / steps;
		}

		VL_WaitVBL(1);
		VL_SetPalette (&palette2[0][0]);
	}

//
// final color
//
	VL_SetPalette (palette);
	screenfaded = false;
}



/*
=================
=
= VL_TestPaletteSet
=
= Sets the palette with outsb, then reads it in and compares
= If it compares ok, fastpalette is set to true.
=
=================

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人av一区二区| 国产一区二区精品久久| 欧美成人vps| 国产综合色在线| 欧美国产精品久久| 欧美日韩国产综合一区二区三区| 免费在线观看不卡| 国产精品你懂的在线欣赏| 欧美丝袜丝交足nylons| 国产福利一区二区三区视频在线 | 九九精品视频在线看| 久久影院午夜论| 日韩一本二本av| 成人小视频在线| 久久99国产精品久久99果冻传媒| 国产精品久久久久久久午夜片| 欧美视频完全免费看| 成人国产精品免费观看视频| 麻豆成人免费电影| 天天爽夜夜爽夜夜爽精品视频| 中文文精品字幕一区二区| 日韩一级片在线观看| 欧美日韩高清在线| 5566中文字幕一区二区电影| 欧美久久久一区| 91精品国产麻豆| 91精品欧美福利在线观看| 欧美精品日韩精品| 欧美一二三区精品| 欧美一三区三区四区免费在线看| 欧美在线观看一二区| 欧美色网站导航| 91精品综合久久久久久| 日韩一区二区三区精品视频 | 欧美视频一区在线| 日韩欧美国产电影| 26uuu久久天堂性欧美| 国产日韩欧美不卡在线| 国产精品美女一区二区三区| 国产精品久久777777| 夜夜嗨av一区二区三区| 免播放器亚洲一区| 国产91丝袜在线播放0| 99精品国产91久久久久久| 欧美人与禽zozo性伦| 中文字幕高清一区| 久久99精品久久只有精品| 色婷婷久久99综合精品jk白丝| 欧美精品日韩综合在线| 久久精品一区二区三区四区| 中文字幕精品三区| 美女视频一区二区| 一本到不卡精品视频在线观看| 欧美群妇大交群的观看方式| 国产精品毛片a∨一区二区三区| 亚洲二区在线视频| 色综合天天综合| 国产精品嫩草影院com| 久久99精品久久久| 欧美日韩亚洲高清一区二区| 亚洲视频免费看| 91老师片黄在线观看| 久久综合久久鬼色中文字| 日韩va欧美va亚洲va久久| 91激情五月电影| 一区二区三区四区精品在线视频| 成人在线一区二区三区| 久久久久久久久久看片| 韩日欧美一区二区三区| 欧美成人a在线| 国产在线精品视频| 久久久久9999亚洲精品| 国产一区二区在线视频| 国产日韩欧美精品一区| 成人午夜av在线| 一区二区三区在线免费| 欧美精品乱码久久久久久| 婷婷综合久久一区二区三区| 日韩一区二区免费视频| 国产福利精品导航| 亚洲精品国产成人久久av盗摄| 在线观看亚洲a| 国产在线视视频有精品| 成人免费一区二区三区在线观看| 欧美视频在线一区二区三区 | 亚洲国产毛片aaaaa无费看| 欧美午夜片在线观看| 国产一区二区精品久久91| 亚洲欧洲99久久| 精品国产乱码久久久久久蜜臀| 国产一区二区三区黄视频 | 日本美女一区二区三区| 欧美日韩综合在线免费观看| 麻豆freexxxx性91精品| 成人免费视频在线观看| 在线成人免费观看| 激情另类小说区图片区视频区| 久久女同精品一区二区| 91免费看`日韩一区二区| 久久精品国产色蜜蜜麻豆| 国产精品乱人伦| 亚洲国产精品传媒在线观看| 99久久精品国产麻豆演员表| 九色|91porny| 懂色av中文字幕一区二区三区| 国产精品一区二区三区网站| 精品在线观看视频| 国产精品亚洲成人| 国产成人av资源| 国产乱码精品一区二区三区忘忧草 | 国产欧美日韩一区二区三区在线观看| 欧美怡红院视频| 欧美一区二区成人6969| 日韩免费在线观看| 欧美激情自拍偷拍| 日韩电影在线一区二区三区| 韩国欧美国产一区| 亚洲欧洲一区二区在线播放| 欧美日本一区二区三区| 欧美激情一二三区| 国产视频在线观看一区二区三区 | 亚洲大片一区二区三区| 视频一区免费在线观看| 国产suv一区二区三区88区| 在线观看日韩av先锋影音电影院| 日韩色视频在线观看| 亚洲三级小视频| 99视频在线精品| 欧美日韩精品欧美日韩精品一综合| 国产成人免费视频网站高清观看视频| 国产精品国产三级国产aⅴ入口| 日韩精品一区二区在线| 91精品一区二区三区在线观看| 成人激情动漫在线观看| 五月婷婷激情综合| 午夜久久福利影院| 久久国产夜色精品鲁鲁99| 青青草97国产精品免费观看无弹窗版| 国产精品毛片久久久久久久| 69堂亚洲精品首页| 波多野结衣中文字幕一区二区三区| 94-欧美-setu| 欧美一级xxx| 午夜久久久久久电影| 日av在线不卡| 欧美日韩视频不卡| 一道本成人在线| 欧美xxx久久| 国产精品久久久久影院色老大 | 中文字幕一区二区三| 久久影音资源网| 欧美mv日韩mv国产| 国产精品久久久久久久浪潮网站| 欧美一区二区三区电影| 国产91富婆露脸刺激对白| 在线观看www91| 欧美一级生活片| 国产欧美日本一区二区三区| 夜色激情一区二区| 欧美成人综合网站| 91国产丝袜在线播放| 天天影视涩香欲综合网| 中文字幕一区二区三区精华液| 欧美日韩综合在线免费观看| 国产乱国产乱300精品| 亚洲国产精品自拍| 国产精品免费av| 欧美国产精品一区二区三区| 国产福利精品导航| 亚洲三级在线观看| 6080yy午夜一二三区久久| 日韩va欧美va亚洲va久久| 精品国产伦理网| 波多野洁衣一区| 日本特黄久久久高潮| 久久九九全国免费| 欧美老肥妇做.爰bbww视频| 精品一区二区三区在线播放视频| 国产精品成人免费精品自在线观看| 欧美一区二区三区在线看| 国产一区在线视频| 亚洲精品一区二区三区蜜桃下载| 亚洲国产精品久久久久婷婷884| 成人国产在线观看| 精品精品国产高清a毛片牛牛| 亚洲免费观看视频| 色综合久久66| 麻豆一区二区三| 国产午夜精品久久| 欧美日韩一区二区三区在线 | av不卡免费在线观看| 三级不卡在线观看| 亚洲天堂精品视频| 国产精品三级视频| 久久久久久黄色| 精品免费一区二区三区| 91精品国产丝袜白色高跟鞋| 欧美在线播放高清精品| 97aⅴ精品视频一二三区| 99久免费精品视频在线观看|