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

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

?? id_sd.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁 / 共 4 頁
字號:
			SoundPositioned = false;
		}
		else
			DigiMissed = true;
	}
}

void
SD_SetDigiDevice(SDSMode mode)
{
	boolean	devicenotpresent;

	if (mode == DigiMode)
		return;

	SD_StopDigitized();

	devicenotpresent = false;
	switch (mode)
	{
	case sds_SoundBlaster:
		if (!SoundBlasterPresent)
		{
			if (SoundSourcePresent)
				mode = sds_SoundSource;
			else
				devicenotpresent = true;
		}
		break;
	case sds_SoundSource:
		if (!SoundSourcePresent)
			devicenotpresent = true;
		break;
	}

	if (!devicenotpresent)
	{
		if (DigiMode == sds_SoundSource)
			SDL_ShutSS();

		DigiMode = mode;

		if (mode == sds_SoundSource)
			SDL_StartSS();

		SDL_SetTimerSpeed();
	}
}

void
SDL_SetupDigi(void)
{
	memptr	list;
	word	far *p,
			pg;
	int		i;

	PM_UnlockMainMem();
	MM_GetPtr(&list,PMPageSize);
	PM_CheckMainMem();
	p = (word far *)MK_FP(PM_GetPage(ChunksInFile - 1),0);
	_fmemcpy((void far *)list,(void far *)p,PMPageSize);
	pg = PMSoundStart;
	for (i = 0;i < PMPageSize / (sizeof(word) * 2);i++,p += 2)
	{
		if (pg >= ChunksInFile - 1)
			break;
		pg += (p[1] + (PMPageSize - 1)) / PMPageSize;
	}
	PM_UnlockMainMem();
	MM_GetPtr((memptr *)&DigiList,i * sizeof(word) * 2);
	_fmemcpy((void far *)DigiList,(void far *)list,i * sizeof(word) * 2);
	MM_FreePtr(&list);
	NumDigi = i;

	for (i = 0;i < LASTSOUND;i++)
		DigiMap[i] = -1;
}

// 	AdLib Code

///////////////////////////////////////////////////////////////////////////
//
//	alOut(n,b) - Puts b in AdLib card register n
//
///////////////////////////////////////////////////////////////////////////
void
alOut(byte n,byte b)
{
asm	pushf
asm	cli

asm	mov	dx,0x388
asm	mov	al,[n]
asm	out	dx,al
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	inc	dx
asm	mov	al,[b]
asm	out	dx,al

asm	popf

asm	dec	dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx

asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx

asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx

asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
asm	in	al,dx
}

#if 0
///////////////////////////////////////////////////////////////////////////
//
//	SDL_SetInstrument() - Puts an instrument into a generator
//
///////////////////////////////////////////////////////////////////////////
static void
SDL_SetInstrument(int track,int which,Instrument far *inst,boolean percussive)
{
	byte		c,m;

	if (percussive)
	{
		c = pcarriers[which];
		m = pmodifiers[which];
	}
	else
	{
		c = carriers[which];
		m = modifiers[which];
	}

	tracks[track - 1]->inst = *inst;
	tracks[track - 1]->percussive = percussive;

	alOut(m + alChar,inst->mChar);
	alOut(m + alScale,inst->mScale);
	alOut(m + alAttack,inst->mAttack);
	alOut(m + alSus,inst->mSus);
	alOut(m + alWave,inst->mWave);

	// Most percussive instruments only use one cell
	if (c != 0xff)
	{
		alOut(c + alChar,inst->cChar);
		alOut(c + alScale,inst->cScale);
		alOut(c + alAttack,inst->cAttack);
		alOut(c + alSus,inst->cSus);
		alOut(c + alWave,inst->cWave);
	}

	alOut(which + alFeedCon,inst->nConn);	// DEBUG - I think this is right
}
#endif

///////////////////////////////////////////////////////////////////////////
//
//	SDL_ALStopSound() - Turns off any sound effects playing through the
//		AdLib card
//
///////////////////////////////////////////////////////////////////////////
#ifdef	_MUSE_
void
#else
static void
#endif
SDL_ALStopSound(void)
{
asm	pushf
asm	cli

	(long)alSound = 0;
	alOut(alFreqH + 0,0);

asm	popf
}

static void
SDL_AlSetFXInst(Instrument far *inst)
{
	byte		c,m;

	m = modifiers[0];
	c = carriers[0];
	alOut(m + alChar,inst->mChar);
	alOut(m + alScale,inst->mScale);
	alOut(m + alAttack,inst->mAttack);
	alOut(m + alSus,inst->mSus);
	alOut(m + alWave,inst->mWave);
	alOut(c + alChar,inst->cChar);
	alOut(c + alScale,inst->cScale);
	alOut(c + alAttack,inst->cAttack);
	alOut(c + alSus,inst->cSus);
	alOut(c + alWave,inst->cWave);

	// Note: Switch commenting on these lines for old MUSE compatibility
//	alOut(alFeedCon,inst->nConn);
	alOut(alFeedCon,0);
}

///////////////////////////////////////////////////////////////////////////
//
//	SDL_ALPlaySound() - Plays the specified sound on the AdLib card
//
///////////////////////////////////////////////////////////////////////////
#ifdef	_MUSE_
void
#else
static void
#endif
SDL_ALPlaySound(AdLibSound far *sound)
{
	Instrument	far *inst;
	byte		huge *data;

	SDL_ALStopSound();

asm	pushf
asm	cli

	alLengthLeft = sound->common.length;
	data = sound->data;
	data++;
	data--;
	alSound = (byte far *)data;
	alBlock = ((sound->block & 7) << 2) | 0x20;
	inst = &sound->inst;

	if (!(inst->mSus | inst->cSus))
	{
	asm	popf
		Quit("SDL_ALPlaySound() - Bad instrument");
	}

	SDL_AlSetFXInst(&alZeroInst);	// DEBUG
	SDL_AlSetFXInst(inst);

asm	popf
}

#if 0
///////////////////////////////////////////////////////////////////////////
//
// 	SDL_ALSoundService() - Plays the next sample out through the AdLib card
//
///////////////////////////////////////////////////////////////////////////
//static void
void
SDL_ALSoundService(void)
{
	byte	s;

	if (alSound)
	{
		s = *alSound++;
		if (!s)
			alOut(alFreqH + 0,0);
		else
		{
			alOut(alFreqL + 0,s);
			alOut(alFreqH + 0,alBlock);
		}

		if (!(--alLengthLeft))
		{
			(long)alSound = 0;
			alOut(alFreqH + 0,0);
			SDL_SoundFinished();
		}
	}
}
#endif

#if 0
void
SDL_ALService(void)
{
	byte	a,v;
	word	w;

	if (!sqActive)
		return;

	while (sqHackLen && (sqHackTime <= alTimeCount))
	{
		w = *sqHackPtr++;
		sqHackTime = alTimeCount + *sqHackPtr++;
	asm	mov	dx,[w]
	asm	mov	[a],dl
	asm	mov	[v],dh
		alOut(a,v);
		sqHackLen -= 4;
	}
	alTimeCount++;
	if (!sqHackLen)
	{
		sqHackPtr = (word far *)sqHack;
		sqHackLen = sqHackSeqLen;
		alTimeCount = sqHackTime = 0;
	}
}
#endif

///////////////////////////////////////////////////////////////////////////
//
//	SDL_ShutAL() - Shuts down the AdLib card for sound effects
//
///////////////////////////////////////////////////////////////////////////
static void
SDL_ShutAL(void)
{
asm	pushf
asm	cli

	alOut(alEffects,0);
	alOut(alFreqH + 0,0);
	SDL_AlSetFXInst(&alZeroInst);
	alSound = 0;

asm	popf
}

///////////////////////////////////////////////////////////////////////////
//
//	SDL_CleanAL() - Totally shuts down the AdLib card
//
///////////////////////////////////////////////////////////////////////////
static void
SDL_CleanAL(void)
{
	int	i;

asm	pushf
asm	cli

	alOut(alEffects,0);
	for (i = 1;i < 0xf5;i++)
		alOut(i,0);

asm	popf
}

///////////////////////////////////////////////////////////////////////////
//
//	SDL_StartAL() - Starts up the AdLib card for sound effects
//
///////////////////////////////////////////////////////////////////////////
static void
SDL_StartAL(void)
{
	alFXReg = 0;
	alOut(alEffects,alFXReg);
	SDL_AlSetFXInst(&alZeroInst);
}

///////////////////////////////////////////////////////////////////////////
//
//	SDL_DetectAdLib() - Determines if there's an AdLib (or SoundBlaster
//		emulating an AdLib) present
//
///////////////////////////////////////////////////////////////////////////
static boolean
SDL_DetectAdLib(void)
{
	byte	status1,status2;
	int		i;

	alOut(4,0x60);	// Reset T1 & T2
	alOut(4,0x80);	// Reset IRQ
	status1 = readstat();
	alOut(2,0xff);	// Set timer 1
	alOut(4,0x21);	// Start timer 1
#if 0
	SDL_Delay(TimerDelay100);
#else
asm	mov	dx,0x388
asm	mov	cx,100
usecloop:
asm	in	al,dx
asm	loop usecloop
#endif

	status2 = readstat();
	alOut(4,0x60);
	alOut(4,0x80);

	if (((status1 & 0xe0) == 0x00) && ((status2 & 0xe0) == 0xc0))
	{
		for (i = 1;i <= 0xf5;i++)	// Zero all the registers
			alOut(i,0);

		alOut(1,0x20);	// Set WSE=1
		alOut(8,0);		// Set CSM=0 & SEL=0

		return(true);
	}
	else
		return(false);
}

#if 0
///////////////////////////////////////////////////////////////////////////
//
//	SDL_t0Service() - My timer 0 ISR which handles the different timings and
//		dispatches to whatever other routines are appropriate
//
///////////////////////////////////////////////////////////////////////////
static void interrupt
SDL_t0Service(void)
{
static	word	count = 1;

#if 1	// for debugging
asm	mov	dx,STATUS_REGISTER_1
asm	in	al,dx
asm	mov	dx,ATR_INDEX
asm	mov	al,ATR_OVERSCAN
asm	out	dx,al
asm	mov	al,4	// red
asm	out	dx,al
#endif

	HackCount++;

	if ((MusicMode == smm_AdLib) || (DigiMode == sds_SoundSource))
	{
		SDL_ALService();
		SDL_SSService();
//		if (!(++count & 7))
		if (!(++count % 10))
		{
			LocalTime++;
			TimeCount++;
			if (SoundUserHook)
				SoundUserHook();
		}
//		if (!(count & 3))
		if (!(count % 5))
		{
			switch (SoundMode)
			{
			case sdm_PC:
				SDL_PCService();
				break;
			case sdm_AdLib:
				SDL_ALSoundService();
				break;
			}
		}
	}
	else
	{
		if (!(++count & 1))
		{
			LocalTime++;
			TimeCount++;
			if (SoundUserHook)
				SoundUserHook();
		}
		switch (SoundMode)
		{
		case sdm_PC:
			SDL_PCService();
			break;
		case sdm_AdLib:
			SDL_ALSoundService();
			break;
		}
	}

asm	mov	ax,[WORD PTR TimerCount]
asm	add	ax,[WORD PTR TimerDivisor]
asm	mov	[WORD PTR TimerCount],ax
asm	jnc	myack
	t0OldService();			// If we overflow a word, time to call old int handler
asm	jmp	olddone
myack:;
	outportb(0x20,0x20);	// Ack the interrupt
olddone:;

#if 1	// for debugging
asm	mov	dx,STATUS_REGISTER_1
asm	in	al,dx
asm	mov	dx,ATR_INDEX
asm	mov	al,ATR_OVERSCAN
asm	out	dx,al
asm	mov	al,3	// blue
asm	out	dx,al
asm	mov	al,0x20	// normal
asm	out	dx,al
#endif
}
#endif

////////////////////////////////////////////////////////////////////////////
//
//	SDL_ShutDevice() - turns off whatever device was being used for sound fx
//
////////////////////////////////////////////////////////////////////////////
static void
SDL_ShutDevice(void)
{
	switch (SoundMode)
	{
	case sdm_PC:
		SDL_ShutPC();
		break;
	case sdm_AdLib:
		SDL_ShutAL();
		break;
	}
	SoundMode = sdm_Off;
}

///////////////////////////////////////////////////////////////////////////
//
//	SDL_CleanDevice() - totally shuts down all sound devices
//
///////////////////////////////////////////////////////////////////////////
static void
SDL_CleanDevice(void)
{
	if ((SoundMode == sdm_AdLib) || (MusicMode == smm_AdLib))
		SDL_CleanAL();
}

///////////////////////////////////////////////////////////////////////////
//
//	SDL_StartDevice() - turns on whatever device is to be used for sound fx
//
///////////////////////////////////////////////////////////////////////////
static void
SDL_StartDevice(void)
{
	switch (SoundMode)
	{
	case sdm_AdLib:
		SDL_StartAL();
		break;
	}
	SoundNumber = SoundPriority = 0;
}

//	Public routines

///////////////////////////////////////////////////////////////////////////
//
//	SD_SetSoundMode() - Sets which sound hardware to use for sound effects
//
///////////////////////////////////////////////////////////////////////////
boolean
SD_SetSoundMode(SDMode mode)
{
	boolean	result = false;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.欧美色图| 在线精品视频免费播放| 亚洲午夜私人影院| 久久久国产午夜精品| 欧美日韩mp4| 91污在线观看| 高清成人在线观看| 青青草精品视频| 一区二区三区四区在线免费观看 | 欧洲精品视频在线观看| 国产九色sp调教91| 免费一级片91| 性欧美疯狂xxxxbbbb| 亚洲精品免费播放| 国产欧美日韩激情| 久久久精品黄色| 欧美电影精品一区二区| 欧美电影在哪看比较好| 色婷婷久久久亚洲一区二区三区| 成人黄色a**站在线观看| 国产精品一区二区x88av| 免费成人在线影院| 免费成人小视频| 日本不卡123| 视频一区二区三区入口| 亚洲国产精品欧美一二99| 亚洲欧美日韩久久| 亚洲欧美中日韩| 亚洲欧洲国产日韩| 国产亚洲一区二区三区四区| 精品久久99ma| 精品国产一区久久| 日韩欧美精品在线视频| 精品国产露脸精彩对白| 精品日产卡一卡二卡麻豆| 日韩免费高清电影| 日韩三级视频中文字幕| 日韩欧美国产不卡| 26uuu色噜噜精品一区二区| 精品乱人伦一区二区三区| 欧美xxxxxxxxx| 欧美va在线播放| 精品精品国产高清a毛片牛牛| 精品福利一二区| 久久久99精品久久| 亚洲国产成人在线| 国产精品久久一级| 亚洲男人电影天堂| 亚洲午夜电影在线| 青娱乐精品视频| 国产精品123| 99视频国产精品| 欧美少妇xxx| 日韩网站在线看片你懂的| 欧美精品一区二区三区四区 | 欧美亚洲图片小说| 欧美日韩一区二区三区四区五区 | 欧美激情一区二区三区在线| 国产精品视频九色porn| 综合久久久久久久| 天天av天天翘天天综合网| 久久成人免费电影| 国产不卡视频一区二区三区| 成人激情小说网站| 欧美日韩一区二区三区在线看| 日韩精品一区二区三区视频| 日本一区二区三区电影| 亚洲综合激情小说| 久久超碰97中文字幕| av一区二区三区黑人| 欧美日韩久久一区二区| 久久综合九色综合97_久久久| 亚洲欧美怡红院| 秋霞午夜鲁丝一区二区老狼| 成人午夜激情片| 欧美精品免费视频| 国产色一区二区| 亚洲成人av福利| 懂色一区二区三区免费观看| 欧美图片一区二区三区| 国产日韩欧美制服另类| 一区二区三区在线不卡| 国产麻豆午夜三级精品| 欧美在线你懂的| 久久久久久久久久久久久女国产乱 | 国产午夜亚洲精品不卡| 亚洲女子a中天字幕| 精品伊人久久久久7777人| aaa欧美大片| 精品va天堂亚洲国产| 亚洲线精品一区二区三区八戒| 国产精品91xxx| 日韩午夜精品电影| 一区二区免费在线| 成人高清免费观看| 欧美精品一区二区三区四区 | 成人黄色国产精品网站大全在线免费观看| 欧美视频在线一区二区三区| 中文字幕成人在线观看| 麻豆一区二区在线| 欧美在线视频你懂得| 国产精品午夜在线| 精品系列免费在线观看| 欧美色电影在线| 亚洲欧美一区二区三区国产精品 | 国产欧美日韩中文久久| 麻豆国产欧美日韩综合精品二区| 欧美伊人精品成人久久综合97| 国产精品女主播av| 国产乱码精品一区二区三区av | 久久亚洲精精品中文字幕早川悠里| 亚洲在线视频一区| 99精品欧美一区二区三区综合在线| 精品久久久久久久久久久院品网 | 国产宾馆实践打屁股91| 久久综合久久综合久久综合| 青椒成人免费视频| 91精品视频网| 午夜电影一区二区三区| 欧美中文字幕久久| 亚洲激情综合网| 99精品欧美一区二区三区综合在线| 中文字幕的久久| 成人国产电影网| 中文字幕中文字幕一区| av激情成人网| 亚洲人一二三区| av在线一区二区| 亚洲视频综合在线| av在线不卡观看免费观看| 一区视频在线播放| 91免费看`日韩一区二区| 亚洲天堂a在线| 在线观看中文字幕不卡| 一二三四社区欧美黄| 欧美午夜电影在线播放| 亚洲国产精品一区二区久久恐怖片| 欧美系列亚洲系列| 亚洲成人1区2区| 日韩一区二区三区电影在线观看 | 国产精品无遮挡| 成人国产免费视频| 亚洲欧美激情插| 欧美日韩久久一区| 久久精品国内一区二区三区 | 亚洲国产一区二区在线播放| 欧美日本韩国一区| 免费欧美日韩国产三级电影| 欧美mv和日韩mv的网站| 国产精品 欧美精品| 亚洲婷婷综合色高清在线| 91成人在线观看喷潮| 日韩福利电影在线| 精品美女在线播放| 波多野结衣的一区二区三区| 亚洲综合自拍偷拍| 日韩欧美一二三区| 成人av免费网站| 亚洲一区二区3| 精品欧美黑人一区二区三区| 粗大黑人巨茎大战欧美成人| 一区二区免费看| 欧美www视频| 99久久精品免费看国产| 午夜欧美一区二区三区在线播放| 欧美精品一区二区三区在线播放 | 最近中文字幕一区二区三区| 欧美日韩一区不卡| 国产在线乱码一区二区三区| 国产精品久久综合| 777久久久精品| 岛国精品在线观看| 亚洲成年人网站在线观看| 久久久久久免费毛片精品| 91社区在线播放| 久久99久久99| 亚洲一区自拍偷拍| 久久一区二区三区国产精品| 在线亚洲人成电影网站色www| 久久精品国产久精国产| 亚洲视频一区二区在线| 精品福利视频一区二区三区| 欧洲中文字幕精品| 国产精品自拍一区| 亚洲一级片在线观看| 精品久久久久久综合日本欧美 | 国产精品自在在线| 亚洲免费av网站| 欧美精品一区二区三区四区| 欧洲一区二区三区免费视频| 国产成人免费视频网站 | 欧美日韩亚洲国产综合| 岛国精品在线播放| 老司机精品视频在线| 亚洲综合图片区| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美三日本三级三级在线播放| 成人avav在线| 国产精品影视天天线| 日本成人超碰在线观看|