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

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

?? gus_wave.c

?? <Linux1.0核心游記>電子書+書后源碼+Linux1.0源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
				 */	    gus_poke (target + i, data);	  }      }#else /*        * * * GUS_NO_DMA   */      {	unsigned long   address, hold_address;	unsigned char   dma_command;	unsigned long   flags;	/* 	 * OK, move now. First in and then out.	 */	COPY_FROM_USER (snd_raw_buf[gus_devnum][0],			addr, sizeof_patch + src_offs,			blk_size);	DISABLE_INTR (flags);	/******** INTERRUPTS DISABLED NOW ********/	gus_write8 (0x41, 0);	/* 				 * Disable GF1 DMA 				 */	DMAbuf_start_dma (gus_devnum, snd_raw_buf_phys[gus_devnum][0],			  blk_size, DMA_MODE_WRITE);	/* 	 * Set the DRAM address for the wave data	 */	address = target;	if (sound_dsp_dmachan[gus_devnum] > 3)	  {	    hold_address = address;	    address = address >> 1;	    address &= 0x0001ffffL;	    address |= (hold_address & 0x000c0000L);	  }	gus_write16 (0x42, (address >> 4) & 0xffff);	/* 							 * DRAM DMA address 							 */	/* 	 * Start the DMA transfer	 */	dma_command = 0x21;	/* 				 * IRQ enable, DMA start 				 */	if (patch.mode & WAVE_UNSIGNED)	  dma_command |= 0x80;	/* 				 * Invert MSB 				 */	if (patch.mode & WAVE_16_BITS)	  dma_command |= 0x40;	/* 				 * 16 bit _DATA_ 				 */	if (sound_dsp_dmachan[gus_devnum] > 3)	  dma_command |= 0x04;	/* 				 * 16 bit DMA channel 				 */	gus_write8 (0x41, dma_command);		/* 						 * Let's go luteet (=bugs) 						 */	/* 	 * Sleep here until the DRAM DMA done interrupt is served	 */	active_device = GUS_DEV_WAVE;	DO_SLEEP (dram_sleeper, dram_sleep_flag, HZ);	if (TIMED_OUT (dram_sleeper, dram_sleep_flag))	  printk ("GUS: DMA Transfer timed out\n");	RESTORE_INTR (flags);      }#endif /*         * * * GUS_NO_DMA   */      /*        * Now the next part       */      left -= blk_size;      src_offs += blk_size;      target += blk_size;      gus_write8 (0x41, 0);	/* 				 * Stop DMA 				 */    }  free_mem_ptr += patch.len;  if (!pmgr_flag)    pmgr_inform (dev, PM_E_PATCH_LOADED, instr, free_sample, 0, 0);  free_sample++;  return 0;}static voidguswave_hw_control (int dev, unsigned char *event){  int             voice, cmd;  unsigned short  p1, p2;  unsigned long   plong, flags;  cmd = event[2];  voice = event[3];  p1 = *(unsigned short *) &event[4];  p2 = *(unsigned short *) &event[6];  plong = *(unsigned long *) &event[4];  if ((voices[voice].volume_irq_mode == VMODE_START_NOTE) &&      (cmd != _GUS_VOICESAMPLE) && (cmd != _GUS_VOICE_POS))    do_volume_irq (voice);  switch (cmd)    {    case _GUS_NUMVOICES:      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_select_max_voices (p1);      RESTORE_INTR (flags);      break;    case _GUS_VOICESAMPLE:      guswave_set_instr (dev, voice, p1);      break;    case _GUS_VOICEON:      DISABLE_INTR (flags);      gus_select_voice (voice);      p1 &= ~0x20;		/* 				 * Disable intr 				 */      gus_voice_on (p1);      RESTORE_INTR (flags);      break;    case _GUS_VOICEOFF:      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_voice_off ();      RESTORE_INTR (flags);      break;    case _GUS_VOICEFADE:      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_voice_fade (voice);      RESTORE_INTR (flags);      break;    case _GUS_VOICEMODE:      DISABLE_INTR (flags);      gus_select_voice (voice);      p1 &= ~0x20;		/* 				 * Disable intr 				 */      gus_voice_mode (p1);      RESTORE_INTR (flags);      break;    case _GUS_VOICEBALA:      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_voice_balance (p1);      RESTORE_INTR (flags);      break;    case _GUS_VOICEFREQ:      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_voice_freq (plong);      RESTORE_INTR (flags);      break;    case _GUS_VOICEVOL:      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_voice_volume (p1);      RESTORE_INTR (flags);      break;    case _GUS_VOICEVOL2:	/* 				 * Just update the voice value 				 */      voices[voice].initial_volume =	voices[voice].current_volume = p1;      break;    case _GUS_RAMPRANGE:      if (voices[voice].mode & WAVE_ENVELOPES)	break;			/* 				 * NO-NO 				 */      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_ramp_range (p1, p2);      RESTORE_INTR (flags);      break;    case _GUS_RAMPRATE:      if (voices[voice].mode & WAVE_ENVELOPES)	break;			/* 				 * NO-NO 				 */      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_ramp_rate (p1, p2);      RESTORE_INTR (flags);      break;    case _GUS_RAMPMODE:      if (voices[voice].mode & WAVE_ENVELOPES)	break;			/* 				 * NO-NO 				 */      DISABLE_INTR (flags);      gus_select_voice (voice);      p1 &= ~0x20;		/* 				 * Disable intr 				 */      gus_ramp_mode (p1);      RESTORE_INTR (flags);      break;    case _GUS_RAMPON:      if (voices[voice].mode & WAVE_ENVELOPES)	break;			/* 				 * NO-NO 				 */      DISABLE_INTR (flags);      gus_select_voice (voice);      p1 &= ~0x20;		/* 				 * Disable intr 				 */      gus_rampon (p1);      RESTORE_INTR (flags);      break;    case _GUS_RAMPOFF:      if (voices[voice].mode & WAVE_ENVELOPES)	break;			/* 				 * NO-NO 				 */      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_rampoff ();      RESTORE_INTR (flags);      break;    case _GUS_VOLUME_SCALE:      volume_base = p1;      volume_scale = p2;      break;    case _GUS_VOICE_POS:      DISABLE_INTR (flags);      gus_select_voice (voice);      gus_set_voice_pos (voice, plong);      RESTORE_INTR (flags);      break;    default:;    }}static intgus_sampling_set_speed (int speed){  if (speed <= 0)    return gus_sampling_speed;  if (speed > 44100)    speed = 44100;  gus_sampling_speed = speed;  return speed;}static intgus_sampling_set_channels (int channels){  if (!channels)    return gus_sampling_channels;  if (channels > 2)    channels = 2;  if (channels < 1)    channels = 1;  gus_sampling_channels = channels;  return channels;}static intgus_sampling_set_bits (int bits){  if (!bits)    return gus_sampling_bits;  if (bits != 8 && bits != 16)    bits = 8;  gus_sampling_bits = bits;  return bits;}static intgus_sampling_ioctl (int dev, unsigned int cmd, unsigned int arg, int local){  switch (cmd)    {    case SOUND_PCM_WRITE_RATE:      if (local)	return gus_sampling_set_speed (arg);      return IOCTL_OUT (arg, gus_sampling_set_speed (IOCTL_IN (arg)));      break;    case SOUND_PCM_READ_RATE:      if (local)	return gus_sampling_speed;      return IOCTL_OUT (arg, gus_sampling_speed);      break;    case SNDCTL_DSP_STEREO:      if (local)	return gus_sampling_set_channels (arg + 1) - 1;      return IOCTL_OUT (arg, gus_sampling_set_channels (IOCTL_IN (arg) + 1) - 1);      break;    case SOUND_PCM_WRITE_CHANNELS:      if (local)	return gus_sampling_set_channels (arg);      return IOCTL_OUT (arg, gus_sampling_set_channels (IOCTL_IN (arg)));      break;    case SOUND_PCM_READ_CHANNELS:      if (local)	return gus_sampling_channels;      return IOCTL_OUT (arg, gus_sampling_channels);      break;    case SNDCTL_DSP_SAMPLESIZE:      if (local)	return gus_sampling_set_bits (arg);      return IOCTL_OUT (arg, gus_sampling_set_bits (IOCTL_IN (arg)));      break;    case SOUND_PCM_READ_BITS:      if (local)	return gus_sampling_bits;      return IOCTL_OUT (arg, gus_sampling_bits);    case SOUND_PCM_WRITE_FILTER:	/* 					 * NOT YET IMPLEMENTED 					 */      return IOCTL_OUT (arg, RET_ERROR (EINVAL));      break;    case SOUND_PCM_READ_FILTER:      return IOCTL_OUT (arg, RET_ERROR (EINVAL));      break;    default:      return RET_ERROR (EINVAL);    }  return RET_ERROR (EINVAL);}static voidgus_sampling_reset (int dev){}static intgus_sampling_open (int dev, int mode){#ifdef GUS_NO_DMA  printk ("GUS: DMA mode not enabled. Device not supported\n");  return RET_ERROR (ENXIO);#endif  if (gus_busy)    return RET_ERROR (EBUSY);  gus_initialize ();  gus_busy = 1;  active_device = 0;  gus_reset ();  reset_sample_memory ();  gus_select_max_voices (14);  pcm_active = 0;  pcm_opened = 1;  if (mode & OPEN_READ)   {     recording_active = 1;     set_input_volumes();  }  return 0;}static voidgus_sampling_close (int dev){  gus_reset ();  gus_busy = 0;  pcm_opened = 0;  active_device = 0;  if (recording_active)     set_input_volumes();  recording_active = 0;}static voidgus_sampling_update_volume (void){  unsigned long   flags;  int             voice;  DISABLE_INTR (flags);  if (pcm_active && pcm_opened)    for (voice = 0; voice < gus_sampling_channels; voice++)      {	gus_select_voice (voice);	gus_rampoff ();	gus_voice_volume (1530 + (25 * gus_pcm_volume));	gus_ramp_range (65, 1530 + (25 * gus_pcm_volume));      }  RESTORE_INTR (flags);}static voidplay_next_pcm_block (void){  unsigned long   flags;  int             speed = gus_sampling_speed;  int             this_one, is16bits, chn;  unsigned long   dram_loc;  unsigned char   mode[2], ramp_mode[2];  if (!pcm_qlen)    return;  this_one = pcm_head;  for (chn = 0; chn < gus_sampling_channels; chn++)    {      mode[chn] = 0x00;      ramp_mode[chn] = 0x03;	/* 				 * Ramping and rollover off 				 */      if (chn == 0)	{	  mode[chn] |= 0x20;	/* 				 * Loop irq 				 */	  voices[chn].loop_irq_mode = LMODE_PCM;	}      if (gus_sampling_bits != 8)	{	  is16bits = 1;	  mode[chn] |= 0x04;	/* 				 * 16 bit data 				 */	}      else	is16bits = 0;      dram_loc = this_one * pcm_bsize;      dram_loc += chn * pcm_banksize;      if (this_one == (pcm_nblk - 1))	/* 					 * Last of the DRAM buffers 					 */	{	  mode[chn] |= 0x08;	/* 				 * Enable loop 				 */	  ramp_mode[chn] = 0x03;	/* 					 * Disable rollover 					 */	}      else	{	  if (chn == 0)	    ramp_mode[chn] = 0x04;	/* 					 * Enable rollover bit 					 */	}      DISABLE_INTR (flags);      gus_select_voice (chn);      gus_voice_freq (speed);      if (gus_sampling_channels == 1)	gus_voice_balance (7);	/* 				 * mono 				 */      else if (chn == 0)	gus_voice_balance (0);	/* 				 * left 				 */      else	gus_voice_balance (15);	/* 				 * right 				 */      if (!pcm_active)		/* 				 * Voice not started yet 				 */	{	  /* 	   * The playback was not started yet (or there has been a pause).	   * Start the voice (again) and ask for a rollover irq at the end of	   * this_one block. If this_one one is last of the buffers, use just	   * the normal loop with irq.	   */	  gus_voice_off ();	/* 				 * It could already be running 				 */	  gus_rampoff ();	  gus_voice_volume (1530 + (25 * gus_pcm_volume));	  gus_ramp_range (65, 1530 + (25 * gus_pcm_volume));	  gus_write_addr (0x0a, dram_loc, is16bits);	/* 							 * Starting position 							 */	  gus_write_addr (0x02, chn * pcm_banksize, is16bits);	/* 								 * Loop start 								 * location 								 */	  if (chn != 0)	    gus_write_addr (0x04, pcm_banksize + (pcm_bsize * pcm_nblk),			    is16bits);	/* 					 * Loop end location 					 */	}      if (chn == 0)	gus_write_addr (0x04, dram_loc + pcm_datasize[this_one], is16bits);	/* 										 * Loop 										 * end 										 * location 										 */      else	mode[chn] |= 0x08;	/* 				 * Enable loop 				 */      if (pcm_datasize[this_one] != pcm_bsize)	{	  /* 	   * Incomplete block. Possibly the last one. 	   */	  if (chn == 0)	    {	      mode[chn] &= ~0x08;	/* 					 * Disable loop 					 */	      mode[chn] |= 0x20;	/* 					 * Enable loop IRQ 					 */	      voices[0].loop_irq_mode = LMODE_PCM_STOP;	      ramp_mode[chn] = 0x03;	/* 					 * No rollover bit 					 */	    }	  else	    {	      gus_write_addr (0x04, dram_loc + pcm_datasize[this_one], is16bits);	/* 											 * Loop 											 * end 											 * location 											 */	      mode[chn] &= ~0x08;	/* 					 * Disable loop 					 */	    }	}      RESTORE_INTR (flags);    }  for (chn = 0; chn < gus_sampling_channels; chn++)    {      DISABLE_INTR (flags);      gus_select_voice (chn);      gus_write8 (0x0d, ramp_mode[chn]);      gus_voice_on (mode[chn]);      RESTORE_INTR (flags);    }  pcm_active = 1;}static voidgus_transfer_output_block (int dev, unsigned long buf,			   int total_count, int intrflag, int chn){  /*    * This routine transfers one block of audio data to the DRAM. In mono mode   * it's called just once. When in stereo mode, this_one routine is called   * once for both channels.   *    * The left/mono channel data is transferred to the beginning of dram and the

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品欧美一区二区三区小说 | 91高清视频在线| 日本一区二区视频在线| 国产精品一级片在线观看| 欧美系列在线观看| 亚洲国产精品v| 成人免费视频免费观看| 亚洲欧美中日韩| 欧洲人成人精品| 性久久久久久久| 日韩欧美成人激情| 国产91精品在线观看| 亚洲欧美日韩在线不卡| 欧美日本视频在线| 国产真实乱子伦精品视频| 久久久国产综合精品女国产盗摄| 国产成人在线观看免费网站| 亚洲欧美怡红院| 在线播放中文一区| 国产毛片一区二区| 亚洲精品欧美专区| 日韩欧美电影在线| 色综合久久88色综合天天6| 午夜欧美大尺度福利影院在线看| 精品国产乱码91久久久久久网站| 成人91在线观看| 日韩高清电影一区| 国产精品久久久久久久久动漫| 欧美日韩国产一级二级| 狠狠色丁香婷婷综合久久片| 亚洲日本一区二区三区| 91精品黄色片免费大全| 国产91精品在线观看| 亚洲国产一二三| 国产精品国产三级国产aⅴ原创| 777奇米四色成人影色区| 盗摄精品av一区二区三区| 午夜视频在线观看一区| 国产欧美日韩在线看| 欧美日韩电影在线| 成人av在线网| 狠狠狠色丁香婷婷综合激情| 一区二区三区中文在线观看| 久久影院午夜论| 欧美日韩黄色一区二区| 91啪九色porn原创视频在线观看| 美国十次了思思久久精品导航| 亚洲免费视频中文字幕| 2024国产精品| 7799精品视频| 欧美日韩精品电影| 91精彩视频在线观看| 成人免费的视频| 国产一区二区三区免费看| 日韩影院免费视频| 亚洲成a天堂v人片| 亚洲欧美偷拍卡通变态| 国产人成一区二区三区影院| 日韩欧美在线不卡| 欧美电影一区二区| 欧美中文字幕一区二区三区亚洲| 成人性视频免费网站| 国产在线播精品第三| 美国十次综合导航| 免费在线一区观看| 日韩电影在线观看一区| 亚洲图片欧美视频| 亚洲一线二线三线视频| 亚洲视频你懂的| 亚洲欧洲三级电影| 中文字幕制服丝袜一区二区三区| 久久精品亚洲一区二区三区浴池 | ㊣最新国产の精品bt伙计久久| 久久久精品免费免费| 26uuu亚洲婷婷狠狠天堂| 日韩精品一区二区在线| 欧美大片在线观看| 精品国产百合女同互慰| 久久中文字幕电影| 久久久久久亚洲综合| 久久久久高清精品| 国产日韩欧美在线一区| 中文字幕不卡在线| 亚洲丝袜另类动漫二区| 国产精品久久久久婷婷二区次| 国产视频一区二区在线| 国产精品网站在线| 亚洲日本一区二区| 亚洲一区二区三区四区在线| 亚洲精品久久嫩草网站秘色| 亚洲一区二区三区四区在线免费观看 | 欧美一区二区三区在线观看| 欧美群妇大交群的观看方式| 欧美人妖巨大在线| 日韩午夜小视频| 精品国产一区a| 国产精品午夜在线观看| 亚洲日本va午夜在线电影| 一区二区三区日韩在线观看| 午夜精品视频一区| 久久精品国产在热久久| 国产91在线观看丝袜| jlzzjlzz国产精品久久| 欧美亚洲丝袜传媒另类| 91精品国产麻豆| 国产欧美日韩卡一| 伊人一区二区三区| 日本美女一区二区三区视频| 国产精品综合二区| 色狠狠综合天天综合综合| 制服丝袜中文字幕亚洲| 久久久久久毛片| 亚洲精品乱码久久久久| 精品在线观看视频| 91碰在线视频| 精品国产伦一区二区三区观看体验| 国产三级精品视频| 三级不卡在线观看| 成人免费观看男女羞羞视频| 欧美日韩不卡一区| 国产精品久久久久久久久久免费看| 亚洲成人激情自拍| 成人免费观看视频| 日韩视频在线你懂得| 亚洲人快播电影网| 国产综合色产在线精品| 在线日韩一区二区| 亚洲国产成人午夜在线一区| 日韩av不卡在线观看| 97久久精品人人爽人人爽蜜臀| 欧美精选午夜久久久乱码6080| 国产精品视频观看| 精品一区二区三区久久| 欧美午夜精品久久久| 国产女主播视频一区二区| 日本不卡的三区四区五区| 99久久久无码国产精品| 久久久久久久久久久久电影| 午夜一区二区三区视频| 99精品视频在线播放观看| 久久久影视传媒| 蜜臀av一区二区在线免费观看 | 麻豆中文一区二区| 欧美在线一区二区三区| 国产精品国产三级国产普通话三级| 精油按摩中文字幕久久| 欧美日韩国产系列| 亚洲综合偷拍欧美一区色| av中文一区二区三区| 久久这里只有精品视频网| 蜜臀91精品一区二区三区| 欧美性大战久久久久久久| 亚洲欧洲日韩在线| av不卡免费在线观看| 精品国精品国产尤物美女| 午夜不卡av免费| 欧美视频完全免费看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产精品资源在线| 精品捆绑美女sm三区| 日本亚洲电影天堂| 欧美日本一区二区三区四区| 亚洲午夜国产一区99re久久| 欧美综合亚洲图片综合区| 亚洲精品国产a| 91成人在线精品| 亚洲青青青在线视频| 91麻豆文化传媒在线观看| 国产精品久久二区二区| 91麻豆国产精品久久| 亚洲精品欧美二区三区中文字幕| www.欧美色图| 亚洲女人****多毛耸耸8| 91丨九色丨国产丨porny| 亚洲欧美另类图片小说| 日本久久一区二区| 亚洲va韩国va欧美va精品| 欧美丰满一区二区免费视频| 日韩精品视频网| 久久久蜜桃精品| 成人av在线影院| 亚洲一区电影777| 91精品国产色综合久久ai换脸| 琪琪久久久久日韩精品| 久久久噜噜噜久噜久久综合| 国产.精品.日韩.另类.中文.在线.播放 | 亚洲精品少妇30p| 欧美色爱综合网| 日本不卡一区二区| 精品sm捆绑视频| 成人性色生活片免费看爆迷你毛片| 国产精品理论片| 欧美日韩美少妇| 狠狠久久亚洲欧美| 亚洲精品欧美在线| 这里只有精品免费| 国产宾馆实践打屁股91| 亚洲精品成人a在线观看| 5月丁香婷婷综合| 国产v综合v亚洲欧|