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

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

?? es5506.c

?? 十七種模擬器源代碼 非常有用的作課程設計不可缺少的
?? C
?? 第 1 頁 / 共 4 頁
字號:
				fprintf(eslog, "voice %d, K2 ramp=%04x\n", chip->current_page & 0x1f, voice->k2ramp);			break;			case 0x48/8:	/* K1 */			voice->k1 = data & 0xffff;			if (LOG_COMMANDS && eslog)				fprintf(eslog, "voice %d, K1=%04x\n", chip->current_page & 0x1f, voice->k1);			break;			case 0x50/8:	/* K1RAMP */			voice->k1ramp = ((data & 0xff00) >> 8) | ((data & 0x0001) << 31);			if (LOG_COMMANDS && eslog)				fprintf(eslog, "voice %d, K1 ramp=%04x\n", chip->current_page & 0x1f, voice->k1ramp);			break;			case 0x58/8:	/* ACTV */		{			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 0x60/8:	/* MODE */			chip->mode = data & 0x1f;			break;			case 0x68/8:	/* PAR - read only */		case 0x70/8:	/* IRQV - read only */			break;			case 0x78/8:	/* PAGE */			chip->current_page = data & 0x7f;			break;	}}INLINE void es5506_reg_write_high(struct ES5506Chip *chip, struct ES5506Voice *voice, offs_t offset, UINT32 data){		  //fprintf(stderr,"ess_reg_write_high %x %d\n",offset,data);	switch (offset)	{		case 0x00/8:	/* CR */		  //if (!(voice->control & CONTROL_IRQ)){		    voice->control = data & 0xffff;		    update_irq_state(chip);		    //}		  break;					case 0x08/8:	/* START */			voice->start = data & 0x7ffff800;			if (!(voice->control & CONTROL_STOPMASK))			  fprintf(stderr,"got it start\n");			break;			case 0x10/8:	/* END */			voice->end = data & 0x7fffff80;			if (!(voice->control & CONTROL_STOPMASK))			  fprintf(stderr,"got it end\n");			break;			case 0x18/8:	/* ACCUM */			voice->accum = data & 0x7fffff80;			if (!(voice->control & CONTROL_STOPMASK))			  fprintf(stderr,"got it accum\n");			break;		case 0x20/8:	/* O4(n-1) */			voice->o4n1 = (INT32)(data << 14) >> 14;			if (LOG_COMMANDS && eslog)				fprintf(eslog, "voice %d, O4(n-1)=%05x\n", chip->current_page & 0x1f, voice->o4n1 & 0x3ffff);			break;			case 0x28/8:	/* O3(n-1) */			voice->o3n1 = (INT32)(data << 14) >> 14;			if (LOG_COMMANDS && eslog)				fprintf(eslog, "voice %d, O3(n-1)=%05x\n", chip->current_page & 0x1f, voice->o3n1 & 0x3ffff);			break;			case 0x30/8:	/* O3(n-2) */			voice->o3n2 = (INT32)(data << 14) >> 14;			if (LOG_COMMANDS && eslog)				fprintf(eslog, "voice %d, O3(n-2)=%05x\n", chip->current_page & 0x1f, voice->o3n2 & 0x3ffff);			break;			case 0x38/8:	/* O2(n-1) */			voice->o2n1 = (INT32)(data << 14) >> 14;			if (LOG_COMMANDS && eslog)				fprintf(eslog, "voice %d, O2(n-1)=%05x\n", chip->current_page & 0x1f, voice->o2n1 & 0x3ffff);			break;			case 0x40/8:	/* O2(n-2) */			voice->o2n2 = (INT32)(data << 14) >> 14;			if (LOG_COMMANDS && eslog)				fprintf(eslog, "voice %d, O2(n-2)=%05x\n", chip->current_page & 0x1f, voice->o2n2 & 0x3ffff);			break;			case 0x48/8:	/* O1(n-1) */			voice->o1n1 = (INT32)(data << 14) >> 14;			if (LOG_COMMANDS && eslog)				fprintf(eslog, "voice %d, O1(n-1)=%05x\n", chip->current_page & 0x1f, voice->o1n1 & 0x3ffff);			break;			case 0x50/8:	/* W_ST */			chip->wst = data & 0x7f;			break;			case 0x58/8:	/* W_END */			chip->wend = data & 0x7f;			break;			case 0x60/8:	/* LR_END */			chip->lrend = data & 0x7f;			break;			case 0x68/8:	/* PAR - read only */		case 0x70/8:	/* IRQV - read only */			break;			case 0x78/8:	/* PAGE */			chip->current_page = data & 0x7f;			break;	}}static void es5506_reg_write(struct ES5506Chip *chip, offs_t offset, data8_t data){	struct ES5506Voice *voice = &chip->voice[chip->current_page & 0x1f];	int shift = 8 * (offset & 3);	//fprintf(stderr,"ess_reg_write %x %d\n",offset,data);	/* accumulate the data */		chip->write_latch = (chip->write_latch & ~(0xff000000 >> shift)) | (data << (24 - shift));	/* wait for a write to complete */	if (shift != 24)		return;/*	logerror("%04x:ES5506 write %02x/%02x = %08x\n", cpu_getpreviouspc(), chip->current_page, offset / 4 * 8, chip->write_latch);*/	/* force an update */	stream_update(chip->stream, 0);		/* switch off the page and register */	if (chip->current_page < 0x20)		es5506_reg_write_low(chip, voice, offset / 4, chip->write_latch);	else if (chip->current_page < 0x40)		es5506_reg_write_high(chip, voice, offset / 4, chip->write_latch);	/* clear the write latch when done */	chip->write_latch = 0;}/**********************************************************************************************     es5506_reg_read -- read from the specified ES5506 register***********************************************************************************************/INLINE UINT32 es5506_reg_read_low(struct ES5506Chip *chip, struct ES5506Voice *voice, offs_t offset){	UINT32 result = 0;		switch (offset)	{		case 0x00/8:	/* CR */			result = voice->control;			voice->control &= ~CONTROL_IRQ;			update_irq_state(chip);			break;					case 0x08/8:	/* FC */			result = voice->freqcount;			break;			case 0x10/8:	/* LVOL */			result = voice->lvol;			break;			case 0x18/8:	/* LVRAMP */			result = voice->lvramp << 8;			break;			case 0x20/8:	/* RVOL */			result = voice->rvol;			break;			case 0x28/8:	/* RVRAMP */			result = voice->rvramp << 8;			break;			case 0x30/8:	/* ECOUNT */			result = voice->ecount;			break;			case 0x38/8:	/* K2 */			result = voice->k2;			break;			case 0x40/8:	/* K2RAMP */			result = (voice->k2ramp << 8) | (voice->k2ramp >> 31);			break;			case 0x48/8:	/* K1 */			result = voice->k1;			break;			case 0x50/8:	/* K1RAMP */			result = (voice->k1ramp << 8) | (voice->k1ramp >> 31);			break;			case 0x58/8:	/* ACTV */			result = chip->active_voices;			break;			case 0x60/8:	/* MODE */			result = chip->mode;			break;			case 0x68/8:	/* PAR */			if (chip->port_read)				result = (*chip->port_read)();			break;					case 0x70/8:	/* IRQV */			result = chip->irqv;			break;			case 0x78/8:	/* PAGE */			result = chip->current_page;			break;	}	return result;}INLINE UINT32 es5506_reg_read_high(struct ES5506Chip *chip, struct ES5506Voice *voice, offs_t offset){	UINT32 result = 0;		switch (offset)	{		case 0x00/8:	/* CR */			result = voice->control;			voice->control &= ~CONTROL_IRQ;			update_irq_state(chip);			break;					case 0x08/8:	/* START */			result = voice->start;			break;			case 0x10/8:	/* END */			result = voice->end;			break;			case 0x18/8:	/* ACCUM */			result = voice->accum;			break;			case 0x20/8:	/* O4(n-1) */			result = voice->o4n1 & 0x3ffff;			break;			case 0x28/8:	/* O3(n-1) */			result = voice->o3n1 & 0x3ffff;			break;			case 0x30/8:	/* O3(n-2) */			result = voice->o3n2 & 0x3ffff;			break;			case 0x38/8:	/* O2(n-1) */			result = voice->o2n1 & 0x3ffff;			break;			case 0x40/8:	/* O2(n-2) */			result = voice->o2n2 & 0x3ffff;			break;			case 0x48/8:	/* O1(n-1) */			result = voice->o1n1 & 0x3ffff;			break;			case 0x50/8:	/* W_ST */			result = chip->wst;			break;			case 0x58/8:	/* W_END */			result = chip->wend;			break;			case 0x60/8:	/* LR_END */			result = chip->lrend;			break;			case 0x68/8:	/* PAR */			if (chip->port_read)				result = (*chip->port_read)();			break;					case 0x70/8:	/* IRQV */			result = chip->irqv;			break;			case 0x78/8:	/* PAGE */			result = chip->current_page;			break;	}	return result;}static data8_t es5506_reg_read(struct ES5506Chip *chip, offs_t offset){	struct ES5506Voice *voice = &chip->voice[chip->current_page & 0x1f];	int shift = 8 * (offset & 3);	/* only read on offset 0 */	if (shift != 0)		return chip->read_latch >> (24 - shift);	if (LOG_COMMANDS && eslog)		fprintf(eslog, "read from %02x/%02x -> ", chip->current_page, offset / 4 * 8);	/* force an update */	stream_update(chip->stream, 0);		/* switch off the page and register */	if (chip->current_page < 0x20)		chip->read_latch = es5506_reg_read_low(chip, voice, offset / 4);	else if (chip->current_page < 0x40)		chip->read_latch = es5506_reg_read_high(chip, voice, offset / 4);		if (LOG_COMMANDS && eslog)		fprintf(eslog, "%08x\n", chip->read_latch);	/* return the high byte */	return chip->read_latch >> 24;}/**********************************************************************************************     ES5506_data_0_r/ES5506_data_1_r -- handle a read from the status register***********************************************************************************************/READ_HANDLER( ES5506_data_0_r ){  int res;  offset&=0x3f;  res = es5506_reg_read(&es5506[0], offset>>1);#ifdef DUMP  fprintf(stderr,"ess %x -> %x (pc:%6x)\n",offset>>1,res,s68000readPC());#endif    return res;}READ_HANDLER( ES5506_data_1_r ){  offset&=0x3f;  return es5506_reg_read(&es5506[1], offset>>1);}/**********************************************************************************************     ES5506_data_0_w/ES5506_data_1_w -- handle a write to the current register***********************************************************************************************/WRITE_HANDLER( ES5506_data_0_w ){  offset&=0x3f;  // How fascinating : these functions do not care about mem_mask ???!  es5506_reg_write(&es5506[0], offset>>1, data);}WRITE_HANDLER( ES5506_data_1_w ){  offset&=0x3f;  es5506_reg_write(&es5506[1], offset>>1, data);}/**********************************************************************************************     ES5505_sh_start -- start emulation of the ES5505***********************************************************************************************/int ES5505_sh_start(const struct ES5505interface *intf){	struct ES5506interface es5506intf;	memset(&es5506intf, 0, sizeof(es5506intf));		es5506intf.num = intf->num;	memcpy(es5506intf.baseclock, intf->baseclock, sizeof(es5506intf.baseclock));	memcpy(es5506intf.region0, intf->region0, sizeof(es5506intf.region0));	memcpy(es5506intf.region1, intf->region1, sizeof(es5506intf.region1));	memcpy(es5506intf.mixing_level, intf->mixing_level, sizeof(es5506intf.mixing_level));	memcpy(es5506intf.irq_callback, intf->irq_callback, sizeof(es5506intf.irq_callback));	memcpy(es5506intf.read_port, intf->read_port, sizeof(es5506intf.read_port));	return ES5506_sh_start(&es5506intf);}/**********************************************************************************************     ES5505_sh_stop -- stop emulation of the ES5506***********************************************************************************************/void ES5505_sh_stop(void){	ES5506_sh_stop();} /**********************************************************************************************     es5505_reg_write -- handle a write to the selected ES5505 register***********************************************************************************************/INLINE void es5505_reg_write_low(struct ES5506Chip *chip, struct ES5506Voice *voice, offs_t offset, UINT16 data, UINT16 mem_mask){  //fprintf(stderr,"reg_write_low %x %d\n",offset,data);  switch (offset)    {    case 0x00:	/* CR */#if 1      // Notice : normally ACCESSING_LSB and MSB should be ALWAYS true.      // I am not totally certain, so I leave the code this way for now      //if (!(voice->control & CONTROL_IRQ)){      //fprintf(stderr,"voice %x old status %x... ",voice,voice->control);      voice->control &= ~(CONTROL_STOPMASK | CONTROL_LOOPMASK | CONTROL_DIR);      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);      //fprintf(stderr,"new status %x\n",voice->control);      //} else      //fprintf(stderr,"reject %x\n",voice->control);#else			if (ACCESSING_LSB)			{				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);			}			if (ACCESSING_MSB)			{				voice->control &= ~(CONTROL_CA0 | CONTROL_CA1 | CONTROL_LPMASK);				voice->control |= ((data >> 2) & CONTROL_LPMASK) |								  ((data << 2) & (CONTROL_CA0 | CONTROL_CA1));			}#endif            break;          case 0x01:	/* FC */	voice->freqcount = (voice->freqcount & ~0x001fe) | ((data & 0x00ff) << 1);	voice->freqcount = (voice->freqcount & ~0x1fe00) | ((data & 0xff00) << 1);      break;          case 0x02:	/* STRT (hi) */	voice->start = (voice->start & ~0x03fc0000) | ((data & 0x00ff) << 18);	voice->start = (voice->start & ~0x7c000000) | ((data & 0x1f00) << 18);	/* generate interrupt */	break;          case 0x03:	/* STRT (lo) */	voice->start = (voice->start & ~0x00000380) | ((data & 0x00e0) << 2);	voice->start = (voice->start & ~0x0003fc00) | ((data & 0xff00) << 2);	/* generate interrupt */      break;	    case 0x04:	/* END (hi) */	voice->end = (voice->end & ~0x03fc0000) | ((data & 0x00ff) << 18);	voice->end = (voice->end & ~0x7c000000) | ((data & 0x1f00) << 18);	voice->control |= CONTROL_STOP0;	/* generate interrupt */      break;          case 0x05:	/* END (lo) */	voice->end = (voice->end & ~0x00000380) | ((data & 0x00e0) << 2);	voice->end = (voice->end & ~0x0003fc00) | ((data & 0xff00) << 2);	voice->control |= CONTROL_STOP0;      /* generate interrupt */	//if ((voice->control&3)==0 && voice->accum < voice->start){	//voice->control |= (CONTROL_IRQ | CONTROL_STOPMASK);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨九色丨尤物| 九九精品一区二区| 91久久精品网| 亚洲三级视频在线观看| 91麻豆免费视频| 一区二区三区日韩在线观看| 欧美三级韩国三级日本三斤| 天使萌一区二区三区免费观看| 欧美女孩性生活视频| 成人免费黄色在线| 精品国一区二区三区| 国产亲近乱来精品视频| 天天影视色香欲综合网老头| 欧美日韩国产中文| 看电视剧不卡顿的网站| 久久久99久久精品欧美| 99精品一区二区三区| 亚洲国产sm捆绑调教视频| 欧美精品1区2区| 国产一区日韩二区欧美三区| 中文字幕一区二区三区四区| 欧美日韩一级黄| 国产在线精品免费| 国产精品久99| 欧美日韩国产精品自在自线| 国产精品一区一区三区| 一区二区三区中文在线| 日韩欧美国产综合在线一区二区三区| 韩国成人福利片在线播放| 中文字幕中文字幕一区| 欧美丰满少妇xxxxx高潮对白| 国产美女久久久久| 午夜精品爽啪视频| 久久久精品国产99久久精品芒果| 在线观看精品一区| 国产高清久久久久| 日韩高清国产一区在线| 国产精品成人一区二区三区夜夜夜| 欧美日韩中文字幕一区二区| 成人精品视频一区二区三区| 天天综合日日夜夜精品| 成人免费在线视频观看| 欧美v国产在线一区二区三区| 色婷婷综合激情| 国产jizzjizz一区二区| 午夜精品影院在线观看| 中文字幕一区二区三区不卡| 精品成人一区二区三区| 欧美高清性hdvideosex| 91网站在线观看视频| 国产美女精品人人做人人爽| 蜜臀久久99精品久久久久久9| 一区二区在线观看视频| 国产欧美日韩不卡| 欧美电视剧在线看免费| 欧美日本一区二区在线观看| 色欧美88888久久久久久影院| 风间由美性色一区二区三区| 久久国产尿小便嘘嘘尿| 午夜精品久久久久久久蜜桃app| 亚洲视频免费在线观看| 日韩一区在线免费观看| 日本一区二区免费在线观看视频 | 国产精品久久久久精k8| 日韩欧美一区二区在线视频| 色噜噜狠狠色综合欧洲selulu| av在线不卡电影| 成人一区二区三区中文字幕| 国产剧情一区在线| 另类人妖一区二区av| 日韩成人免费在线| 日韩精品1区2区3区| 日韩成人av影视| 天天操天天色综合| 五月婷婷色综合| 丝瓜av网站精品一区二区| 亚洲不卡在线观看| 一区二区三区在线观看视频| 亚洲柠檬福利资源导航| 亚洲精品高清在线观看| 一区二区三区精品久久久| 亚洲精品国产视频| 亚洲第一会所有码转帖| 视频一区二区欧美| 免费成人美女在线观看.| 蜜桃久久久久久久| 狠狠久久亚洲欧美| 成人性视频免费网站| 99久免费精品视频在线观看 | 亚洲精品国产高清久久伦理二区| 亚洲乱码国产乱码精品精可以看| 亚洲色图都市小说| 亚洲线精品一区二区三区八戒| 亚洲成人久久影院| 五月天欧美精品| 蜜臀精品一区二区三区在线观看 | xfplay精品久久| 精品国产亚洲在线| 国产精品少妇自拍| 伊人一区二区三区| 青草国产精品久久久久久| 国产精品 欧美精品| 99精品久久久久久| 欧洲一区二区三区在线| 日韩无一区二区| 国产精品理伦片| 一区二区三区在线不卡| 人妖欧美一区二区| 国产一区二区按摩在线观看| caoporm超碰国产精品| 欧美视频一区二| 久久久久9999亚洲精品| 一区二区三区波多野结衣在线观看| 日韩精彩视频在线观看| 丁香六月综合激情| 日本电影亚洲天堂一区| 欧美电影免费观看高清完整版在线 | 日韩电影免费一区| 成人白浆超碰人人人人| 717成人午夜免费福利电影| 国产欧美日韩视频一区二区| 亚洲一区二区四区蜜桃| 国产精选一区二区三区| 欧亚一区二区三区| 国产日产精品一区| 亚洲一区二区三区视频在线播放| 韩国三级电影一区二区| 在线看国产一区二区| 久久天堂av综合合色蜜桃网| 亚洲1区2区3区4区| 91香蕉视频在线| 久久亚洲二区三区| 亚洲大尺度视频在线观看| 国产成人在线色| 日韩欧美国产一区二区在线播放 | 欧美一卡二卡三卡| 亚洲精品精品亚洲| 成人自拍视频在线观看| 日韩女优av电影| 午夜精品久久久久久久| 99久久精品国产网站| 久久久一区二区三区| 秋霞av亚洲一区二区三| 欧美伊人久久久久久久久影院| 中文在线免费一区三区高中清不卡| 美女视频黄a大片欧美| 欧美性大战久久久久久久蜜臀| 亚洲国产高清不卡| 精品一区二区日韩| 日韩一区二区电影在线| 亚洲超丰满肉感bbw| 欧美四级电影网| 一区二区三区在线视频观看58| 成人av电影免费观看| 国产欧美日韩卡一| 丁香激情综合五月| 久久久精品天堂| 国产一区二区在线免费观看| 欧美xxxxxxxxx| 蜜臀久久久久久久| 日韩美女主播在线视频一区二区三区 | 欧美国产乱子伦| 国产成人亚洲综合色影视| 日韩精品自拍偷拍| 三级欧美在线一区| 欧美日韩成人在线| 亚洲aⅴ怡春院| 欧美电影在线免费观看| 午夜久久久久久电影| 欧美片网站yy| 蜜臀国产一区二区三区在线播放 | 午夜成人在线视频| 欧美性感一类影片在线播放| 亚洲国产一区二区三区| 欧美福利视频导航| 日本午夜精品视频在线观看| 欧美一级专区免费大片| 精品一区二区三区蜜桃| 久久久久久久久蜜桃| 国产美女在线观看一区| 国产精品三级在线观看| 91热门视频在线观看| 一区二区三区在线免费播放| 欧美精品一二三| 免费成人在线观看视频| 久久精子c满五个校花| 成人动漫av在线| 亚洲一卡二卡三卡四卡无卡久久| 51精品久久久久久久蜜臀| 久久超碰97中文字幕| 久久久午夜精品| 日本精品一区二区三区高清| 五月婷婷综合激情| 亚洲精品在线观看网站| 成人精品视频.| 日韩不卡免费视频| 中文字幕免费在线观看视频一区| 色拍拍在线精品视频8848| 美脚の诱脚舐め脚责91| 国产精品美女一区二区在线观看|