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

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

?? es5506.c

?? 十七種模擬器源代碼 非常有用的作課程設計不可缺少的
?? C
?? 第 1 頁 / 共 4 頁
字號:
	//update_irq_state(chip);	//}      // (LOG_COMMANDS && eslog)      //fprintf(eslog, "%06x:voice %d, loop end=%08x\n", cpu_getpreviouspc(), chip->current_page & 0x1f, voice->end);      break;          case 0x06:	/* K2 */	voice->k2 = (voice->k2 & ~0x00f0) | (data & 0x00f0);	voice->k2 = (voice->k2 & ~0xff00) | (data & 0xff00);      break;          case 0x07:	/* K1 */	voice->k1 = (voice->k1 & ~0x00f0) | (data & 0x00f0);	voice->k1 = (voice->k1 & ~0xff00) | (data & 0xff00);      break;          case 0x08:	/* LVOL */	voice->lvol = (voice->lvol & ~0xff00) | (data & 0xff00);      break;          case 0x09:	/* RVOL */	voice->rvol = (voice->rvol & ~0xff00) | (data & 0xff00);      break;	    case 0x0a:	/* ACC (hi) */	voice->accum = (voice->accum & ~0x03fc0000) | ((data & 0x00ff) << 18);	voice->accum = (voice->accum & ~0x7c000000) | ((data & 0x1f00) << 18);	if (!(voice->control & CONTROL_STOPMASK))	  fprintf(stderr,"got it accum2\n");      break;	    case 0x0b:	/* ACC (lo) */	voice->accum = (voice->accum & ~0x000003fc) | ((data & 0x00ff) << 2);	voice->accum = (voice->accum & ~0x0003fc00) | ((data & 0xff00) << 2);	if (!(voice->control & CONTROL_STOPMASK))	  fprintf(stderr,"got it accum2bzz\n");      break;          case 0x0c:	/* unused */      break;          case 0x0d:	/* ACT */      {	  double sample_rate = chip->master_clock / (double)(16 * ((data & 0x1f) + 1));	  if (audio_sample_rate)	    chip->output_step = (int)(sample_rate * (double)(1 << FRAC_BITS) / (double)audio_sample_rate);	  chip->active_voices = data & 0x1f;	  	  if (LOG_COMMANDS && eslog)	    fprintf(eslog, "active voices=%d, sample_rate=%d, output_step=%08x\n", chip->active_voices, (int)sample_rate, chip->output_step);      }      break;          case 0x0e:	/* IRQV - read only */      break;          case 0x0f:	/* PAGE */	chip->current_page = data & 0x7f;      break;    }}INLINE void es5505_reg_write_high(struct ES5506Chip *chip, struct ES5506Voice *voice, offs_t offset, UINT16 data, UINT16 mem_mask){  //fprintf(stderr,"reg_write_high %x\n",offset);  switch (offset)    {    case 0x00:	/* CR */	  voice->control &= ~(CONTROL_STOPMASK | CONTROL_BS0 | CONTROL_LOOPMASK | CONTROL_IRQE | CONTROL_DIR | CONTROL_IRQ);	  voice->control |= (data & (CONTROL_STOPMASK | CONTROL_LOOPMASK | CONTROL_IRQE | CONTROL_DIR | CONTROL_IRQ)) |	    ((data << 12) & CONTROL_BS0);	  voice->control &= ~(CONTROL_CA0 | CONTROL_CA1 | CONTROL_LPMASK);	  voice->control |= ((data >> 2) & CONTROL_LPMASK) |	    ((data << 2) & (CONTROL_CA0 | CONTROL_CA1));      update_irq_state(chip);      break;          case 0x01:	/* O4(n-1) */	voice->o4n1 = (voice->o4n1 & ~0x00ff) | (data & 0x00ff);	voice->o4n1 = (INT16)((voice->o4n1 & ~0xff00) | (data & 0xff00));      break;          case 0x02:	/* O3(n-1) */	voice->o3n1 = (voice->o3n1 & ~0x00ff) | (data & 0x00ff);	voice->o3n1 = (INT16)((voice->o3n1 & ~0xff00) | (data & 0xff00));      break;          case 0x03:	/* O3(n-2) */	voice->o3n2 = (voice->o3n2 & ~0x00ff) | (data & 0x00ff);	voice->o3n2 = (INT16)((voice->o3n2 & ~0xff00) | (data & 0xff00));      break;          case 0x04:	/* O2(n-1) */	voice->o2n1 = (voice->o2n1 & ~0x00ff) | (data & 0x00ff);	voice->o2n1 = (INT16)((voice->o2n1 & ~0xff00) | (data & 0xff00));      break;          case 0x05:	/* O2(n-2) */	voice->o2n2 = (voice->o2n2 & ~0x00ff) | (data & 0x00ff);	voice->o2n2 = (INT16)((voice->o2n2 & ~0xff00) | (data & 0xff00));      break;          case 0x06:	/* O1(n-1) */	voice->o1n1 = (voice->o1n1 & ~0x00ff) | (data & 0x00ff);	voice->o1n1 = (INT16)((voice->o1n1 & ~0xff00) | (data & 0xff00));      break;          case 0x07:    case 0x08:    case 0x09:    case 0x0a:    case 0x0b:    case 0x0c:	/* unused */      break;          case 0x0d:	/* ACT */	{	  double sample_rate = chip->master_clock / (double)(16 * ((data & 0x1f) + 1));	  if (audio_sample_rate)	    chip->output_step = (int)(sample_rate * (double)(1 << FRAC_BITS) / (double)audio_sample_rate);	  chip->active_voices = data & 0x1f;	  	  if (LOG_COMMANDS && eslog)	    fprintf(eslog, "active voices=%d, sample_rate=%d, output_step=%08x\n", chip->active_voices, (int)sample_rate, chip->output_step);	}      break;          case 0x0e:	/* IRQV - read only */      break;          case 0x0f:	/* PAGE */	chip->current_page = data & 0x7f;      break;    }}INLINE void es5505_reg_write_test(struct ES5506Chip *chip, struct ES5506Voice *voice, offs_t offset, UINT16 data, UINT16 mem_mask){  //fprintf(stderr,"writetest offset %x data %x\n",offset,data);  switch (offset)    {    case 0x00:	/* CH0L */    case 0x01:	/* CH0R */    case 0x02:	/* CH1L */    case 0x03:	/* CH1R */    case 0x04:	/* CH2L */    case 0x05:	/* CH2R */    case 0x06:	/* CH3L */    case 0x07:	/* CH3R */      break;          case 0x08:	/* SERMODE */      chip->mode = data & 0x0007;      break;          case 0x09:	/* PAR */      break;          case 0x0d:	/* ACT */      if (ACCESSING_LSB)	{	  double sample_rate = chip->master_clock / (double)(16 * ((data & 0x1f) + 1));	  if (audio_sample_rate)	    chip->output_step = (int)(sample_rate * (double)(1 << FRAC_BITS) / (double)audio_sample_rate);	  chip->active_voices = data & 0x1f;	  	  if (LOG_COMMANDS && eslog)	    fprintf(eslog, "active voices=%d, sample_rate=%d, output_step=%08x\n", chip->active_voices, (int)sample_rate, chip->output_step);	}      break;          case 0x0e:	/* IRQV - read only */      break;          case 0x0f:	/* PAGE */      if (ACCESSING_LSB)	chip->current_page = data & 0x7f;      break;    }}static void es5505_reg_write(struct ES5506Chip *chip, offs_t offset, data16_t data, data16_t mem_mask){  struct ES5506Voice *voice = &chip->voice[chip->current_page & 0x1f];  //fprintf(stderr,"reg_write %x\n",offset);    //	logerror("%04x:ES5505 write %02x/%02x = %04x & %04x\n", cpu_getpreviouspc(), chip->current_page, offset, data, mem_mask ^ 0xffff);    /* force an update */  stream_update(chip->stream, 0);    /* switch off the page and register */  if (chip->current_page < 0x20)    es5505_reg_write_low(chip, voice, offset, data, mem_mask);  else if (chip->current_page < 0x40)    es5505_reg_write_high(chip, voice, offset, data, mem_mask);  else    es5505_reg_write_test(chip, voice, offset, data, mem_mask);}/**********************************************************************************************     es5505_reg_read -- read from the specified ES5505 register***********************************************************************************************/INLINE UINT16 es5505_reg_read_low(struct ES5506Chip *chip, struct ES5506Voice *voice, offs_t offset){  UINT16 result = 0;	  switch (offset)    {    case 0x00:	/* CR */      result = (voice->control & (CONTROL_STOPMASK | CONTROL_LOOPMASK | CONTROL_IRQE | CONTROL_DIR | CONTROL_IRQ)) |	((voice->control & CONTROL_BS0) >> 12) |	((voice->control & CONTROL_LPMASK) << 2) |	((voice->control & (CONTROL_CA0 | CONTROL_CA1)) >> 2) |	0xf000;      voice->control &= ~CONTROL_IRQ;      update_irq_state(chip);      break;    case 0x01:	/* FC */      result = voice->freqcount >> 1;      break;	    case 0x02:	/* STRT (hi) */      result = voice->start >> 18;      break;	    case 0x03:	/* STRT (lo) */      result = voice->start >> 2;      break;	    case 0x04:	/* END (hi) */      result = voice->end >> 18;      break;	    case 0x05:	/* END (lo) */      result = voice->end >> 2;      break;	    case 0x06:	/* K2 */      result = voice->k2;      break;	    case 0x07:	/* K1 */      result = voice->k1;      break;	    case 0x08:	/* LVOL */      result = voice->lvol;      break;	    case 0x09:	/* RVOL */      result = voice->rvol;      break;	    case 0x0a:	/* ACC (hi) */      result = voice->accum >> 18;      break;	    case 0x0b:	/* ACC (lo) */      result = voice->accum >> 2;      break;	    case 0x0c:	/* unused */      break;	    case 0x0d:	/* ACT */      result = chip->active_voices;      break;			    case 0x0e:	/* IRQV */      result = chip->irqv;      break;	    case 0x0f:	/* PAGE */      result = chip->current_page;      break;    }  return result;}INLINE UINT16 es5505_reg_read_high(struct ES5506Chip *chip, struct ES5506Voice *voice, offs_t offset){  UINT16 result = 0;	  switch (offset)    {    case 0x00:	/* CR */      result = (voice->control & (CONTROL_STOPMASK | CONTROL_LOOPMASK | CONTROL_IRQE | CONTROL_DIR | CONTROL_IRQ)) |	((voice->control & CONTROL_BS0) >> 12) |	((voice->control & CONTROL_LPMASK) << 2) |	((voice->control & (CONTROL_CA0 | CONTROL_CA1)) >> 2) |	0xf000;      voice->control &= ~CONTROL_IRQ;      update_irq_state(chip);      break;    case 0x01:	/* O4(n-1) */      result = voice->o4n1;      break;	    case 0x02:	/* O3(n-1) */      result = voice->o3n1;      break;	    case 0x03:	/* O3(n-2) */      result = voice->o3n2;      break;	    case 0x04:	/* O2(n-1) */      result = voice->o2n1;      break;	    case 0x05:	/* O2(n-2) */      result = voice->o2n2;      break;	    case 0x06:	/* O1(n-1) */      /* special case for the Taito F3 games: they set the accumulator on a stopped */      /* voice and assume the filters continue to process the data. They then read */      /* the O1(n-1) in order to extract raw data from the sound ROMs. Since we don't */      /* want to waste time filtering stopped channels, we just look for a read from */      /* this register on a stopped voice, and return the raw sample data at the */      /* accumulator */      if ((voice->control & CONTROL_STOPMASK) && chip->region_base[voice->control >> 14])	voice->o1n1 = chip->region_base[voice->control >> 14][voice->exbank + (voice->accum >> 11)];      result = voice->o1n1;      break;	    case 0x07:    case 0x08:    case 0x09:    case 0x0a:    case 0x0b:    case 0x0c:	/* unused */      break;	    case 0x0d:	/* ACT */      result = chip->active_voices;      break;			    case 0x0e:	/* IRQV */      result = chip->irqv;      break;	    case 0x0f:	/* PAGE */      result = chip->current_page;      break;    }  return result;}INLINE UINT16 es5505_reg_read_test(struct ES5506Chip *chip, struct ES5506Voice *voice, offs_t offset){  UINT16 result = 0;	  switch (offset)    {    case 0x00:	/* CH0L */    case 0x01:	/* CH0R */    case 0x02:	/* CH1L */    case 0x03:	/* CH1R */    case 0x04:	/* CH2L */    case 0x05:	/* CH2R */    case 0x06:	/* CH3L */    case 0x07:	/* CH3R */      break;			    case 0x08:	/* SERMODE */      result = chip->mode;      break;			    case 0x09:	/* PAR */      if (chip->port_read)	result = (*chip->port_read)();      break;	    case 0x0f:	/* PAGE */      result = chip->current_page;      break;    }  return result;}static data16_t es5505_reg_read(struct ES5506Chip *chip, offs_t offset){  struct ES5506Voice *voice = &chip->voice[chip->current_page & 0x1f];  data16_t result = 0;  if (LOG_COMMANDS && eslog)    fprintf(eslog, "read from %02x/%02x -> ", chip->current_page, offset);	/* force an update */  stream_update(chip->stream, 0);	  /* switch off the page and register */  if (chip->current_page < 0x20)    result = es5505_reg_read_low(chip, voice, offset);  else if (chip->current_page < 0x40)    result = es5505_reg_read_high(chip, voice, offset);  else    result = es5505_reg_read_test(chip, voice, offset);	  if (LOG_COMMANDS && eslog)    fprintf(eslog, "%04x (accum=%08x)\n", result, voice->accum);	/* return the high byte */  return result;}/**********************************************************************************************     ES5505_data_0_r/ES5505_data_1_r -- handle a read from the status register***********************************************************************************************/READ16_HANDLER( ES5505_data_0_r ){  int res;  offset &= 0x3f;  res=es5505_reg_read(&es5506[0], offset>>1);#ifdef DUMP  fprintf(stderr,"ess %x -> %x (pc:%6x)\n",offset>>1,res,s68000readPC());#endif  return res;}READ16_HANDLER( ES5505_data_1_r ){  offset &= 0x3f;  return es5505_reg_read(&es5506[1], offset>>1);}/**********************************************************************************************     ES5505_data_0_w/ES5505_data_1_w -- handle a write to the current register***********************************************************************************************/WRITE16_HANDLER( ES5505_data_0_ww ){  offset &= 0x3f;#ifdef DUMP  fprintf(stderr,"es5505_data_0_w %x,%x (%x)\n",offset>>1,data,s68000readPC());#endif  es5505_reg_write(&es5506[0], offset>>1, data, 0);}WRITE_HANDLER( ES5505_data_0_wb ){  int mem_mask;  offset &= 0x3f;#ifdef DUMP  fprintf(stderr,"es5505_data_0_w %x,%d\n",offset>>1,data);#endif  if (offset & 1) {    mem_mask = 0xff00;  } else {    mem_mask = 0x00ff;  }  fprintf(stderr,"mem_mask bad\n");  exit(1);  es5505_reg_write(&es5506[0], offset>>1, data, mem_mask);}WRITE16_HANDLER( ES5505_data_1_ww ){  offset &= 0x1f;  es5505_reg_write(&es5506[1], offset>>1, data, 0);}WRITE_HANDLER( ES5505_data_1_wb ){  int mem_mask;  offset &= 0x1f;  if (offset & 1) {    mem_mask = 0xff00;  } else {    mem_mask = 0x00ff;  }  es5505_reg_write(&es5506[1], offset>>1, data, mem_mask);}void ES5506_voice_bank_0_w(int voice, int bank){  es5506[0].voice[voice].control = CONTROL_STOPMASK;  es5506[0].voice[voice].exbank=bank;}void ES5506_voice_bank_1_w(int voice, int bank){  es5506[1].voice[voice].control = CONTROL_STOPMASK;  es5506[1].voice[voice].exbank=bank;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩成人免费在线| 久久国产精品露脸对白| 午夜视频一区二区三区| 国内久久婷婷综合| 色综合久久中文字幕| 久久一日本道色综合| 午夜精品视频一区| 成人精品视频一区二区三区| 67194成人在线观看| 成人免费在线视频| 久久99精品久久只有精品| 色av一区二区| 国产精品狼人久久影院观看方式| 日韩avvvv在线播放| 99久久久无码国产精品| 久久欧美一区二区| 免费美女久久99| 91黄色免费版| 国产精品进线69影院| 国产精品一区二区三区网站| 在线91免费看| 亚洲超碰精品一区二区| 99久久综合色| 国产日韩欧美精品电影三级在线| 视频一区二区不卡| 欧美日免费三级在线| 亚洲欧洲日韩在线| 成人av手机在线观看| 日本一区二区三区dvd视频在线| 久久99九九99精品| 欧美精品一区二区三区在线播放| 麻豆精品一区二区综合av| 4438x成人网最大色成网站| 亚洲国产色一区| 欧美午夜免费电影| 亚洲资源中文字幕| 欧美精品在线观看播放| 天堂av在线一区| 日韩午夜激情视频| 激情综合五月天| 久久在线观看免费| 成年人网站91| 亚洲女人****多毛耸耸8| 色狠狠色狠狠综合| 五月激情丁香一区二区三区| 91麻豆精品国产自产在线| 天天av天天翘天天综合网色鬼国产 | 欧美一级xxx| 喷水一区二区三区| 久久久久88色偷偷免费| 国产999精品久久久久久| 国产精品久久久久久亚洲毛片 | 国产欧美一区二区在线观看| 成人夜色视频网站在线观看| 亚洲男人的天堂在线观看| 欧美系列在线观看| 青青草成人在线观看| 国产亚洲综合在线| 91亚洲永久精品| 首页国产丝袜综合| 精品国产伦一区二区三区观看体验| 国产成人av电影免费在线观看| 亚洲欧美色一区| 制服.丝袜.亚洲.中文.综合| 韩国精品免费视频| 亚洲视频每日更新| 日韩欧美国产一区在线观看| 国产成人免费高清| 婷婷国产v国产偷v亚洲高清| 精品国产乱码久久久久久图片| 99这里只有精品| 午夜欧美大尺度福利影院在线看| 久久蜜桃一区二区| 欧美在线观看一二区| 国产一区二区导航在线播放| 综合久久综合久久| 日韩一区二区在线免费观看| 99久久99久久精品国产片果冻| 日av在线不卡| 亚洲日本韩国一区| 精品捆绑美女sm三区| 日本韩国欧美一区二区三区| 国产一区二区三区| 午夜视频在线观看一区二区 | 国产日韩精品一区二区三区| 欧美午夜免费电影| av欧美精品.com| 精品亚洲国产成人av制服丝袜| 亚洲免费av高清| 国产女人18毛片水真多成人如厕| 8x8x8国产精品| 欧美亚洲国产一区在线观看网站| 国产精品一二三四区| 日本视频在线一区| 亚洲一区二区3| 欧美激情在线观看视频免费| 日韩欧美亚洲另类制服综合在线| 色综合网色综合| 国产mv日韩mv欧美| 国内外成人在线视频| 日本人妖一区二区| 日韩国产精品久久久久久亚洲| 中文字幕一区二区在线播放| 久久久久亚洲综合| 欧美精品一区二区在线观看| 日韩亚洲欧美在线| 欧美猛男超大videosgay| 日本精品裸体写真集在线观看| 成人晚上爱看视频| 风间由美中文字幕在线看视频国产欧美| 久久99国产精品尤物| 蜜臀精品一区二区三区在线观看| 亚洲高清免费在线| 亚洲成人av免费| 午夜久久久久久| 婷婷夜色潮精品综合在线| 亚洲成av人在线观看| 亚洲成人免费电影| 日本不卡一二三区黄网| 青青国产91久久久久久| 青青草伊人久久| 久草在线在线精品观看| 精品一区二区三区不卡| 久久99最新地址| 国产一区二区精品久久91| 国产精品自拍三区| 成人av网址在线观看| 97精品电影院| 欧美丝袜第三区| 欧美福利电影网| 日韩女优视频免费观看| 精品国产91亚洲一区二区三区婷婷| 精品国产亚洲在线| 欧美国产97人人爽人人喊| 亚洲欧洲三级电影| 亚洲综合丁香婷婷六月香| 丝袜美腿亚洲一区| 国产一区二区视频在线播放| 国产91对白在线观看九色| 91婷婷韩国欧美一区二区| 欧美三级乱人伦电影| 在线播放视频一区| 精品av综合导航| 中文一区二区完整视频在线观看| 亚洲欧美日韩国产另类专区| 亚洲成人动漫一区| 国产精品影音先锋| 欧美性色欧美a在线播放| 日韩一卡二卡三卡四卡| 欧美国产日韩精品免费观看| 亚洲自拍偷拍九九九| 久久成人av少妇免费| 99久久婷婷国产| 欧美成人vr18sexvr| 国产精品国产三级国产普通话99| 亚洲成人免费电影| 国产成人午夜高潮毛片| 欧美性三三影院| 国产欧美日韩在线| 天天色天天操综合| 99re成人在线| 日韩三级视频中文字幕| 亚洲精品中文在线影院| 久久国产精品免费| 欧美性色黄大片| 中文字幕欧美国产| 蜜臀av性久久久久蜜臀aⅴ| 91网站黄www| 久久无码av三级| 天堂午夜影视日韩欧美一区二区| 国产成人av福利| 日韩一区二区三区在线观看 | 91视视频在线观看入口直接观看www| 91超碰这里只有精品国产| 欧洲精品视频在线观看| 午夜精品久久久久久久久久久| 91精品视频网| 欧美性受xxxx| 国产精品久久毛片av大全日韩| 成人毛片在线观看| 91视频国产资源| 国产日韩一级二级三级| 日本不卡一区二区三区高清视频| 成年人网站91| 久久久久久久综合色一本| 午夜精品久久久久久久99樱桃| 91蜜桃在线观看| 亚洲日本电影在线| 本田岬高潮一区二区三区| 久久久99免费| 国产呦萝稀缺另类资源| 91精品国模一区二区三区| 亚洲综合色噜噜狠狠| 日本韩国欧美国产| 亚洲欧美一区二区久久| a级高清视频欧美日韩| 国产精品久久久久影院老司| 成人综合激情网| 国产精品久久久久久久久免费桃花| 国产一区二区在线免费观看|