⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emufx.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	for (z = 0; z < 4; z++) {		/* front/rear/center-lfe/side */		int j, k, l, d;		for (j = 0; j < 2; j++) {	/* left/right */			k = 0xb0 + (z * 8) + (j * 4);			l = 0xe0 + (z * 8) + (j * 4);			d = playback + SND_EMU10K1_PLAYBACK_CHANNELS + z * 2 + j;			A_OP(icode, &ptr, iMAC0, A_C_00000000, A_C_00000000, A_GPR(d), A_GPR(BASS_GPR + 0 + j));			A_OP(icode, &ptr, iMACMV, A_GPR(k+1), A_GPR(k), A_GPR(k+1), A_GPR(BASS_GPR + 4 + j));			A_OP(icode, &ptr, iMACMV, A_GPR(k), A_GPR(d), A_GPR(k), A_GPR(BASS_GPR + 2 + j));			A_OP(icode, &ptr, iMACMV, A_GPR(k+3), A_GPR(k+2), A_GPR(k+3), A_GPR(BASS_GPR + 8 + j));			A_OP(icode, &ptr, iMAC0, A_GPR(k+2), A_GPR_ACCU, A_GPR(k+2), A_GPR(BASS_GPR + 6 + j));			A_OP(icode, &ptr, iACC3, A_GPR(k+2), A_GPR(k+2), A_GPR(k+2), A_C_00000000);			A_OP(icode, &ptr, iMAC0, A_C_00000000, A_C_00000000, A_GPR(k+2), A_GPR(TREBLE_GPR + 0 + j));			A_OP(icode, &ptr, iMACMV, A_GPR(l+1), A_GPR(l), A_GPR(l+1), A_GPR(TREBLE_GPR + 4 + j));			A_OP(icode, &ptr, iMACMV, A_GPR(l), A_GPR(k+2), A_GPR(l), A_GPR(TREBLE_GPR + 2 + j));			A_OP(icode, &ptr, iMACMV, A_GPR(l+3), A_GPR(l+2), A_GPR(l+3), A_GPR(TREBLE_GPR + 8 + j));			A_OP(icode, &ptr, iMAC0, A_GPR(l+2), A_GPR_ACCU, A_GPR(l+2), A_GPR(TREBLE_GPR + 6 + j));			A_OP(icode, &ptr, iMACINT0, A_GPR(l+2), A_C_00000000, A_GPR(l+2), A_C_00000010);			A_OP(icode, &ptr, iACC3, A_GPR(d), A_GPR(l+2), A_C_00000000, A_C_00000000);			if (z == 2)	/* center */				break;		}	}	nctl += 2;#undef BASS_GPR#undef TREBLE_GPR	for (z = 0; z < 8; z++) {		A_SWITCH(icode, &ptr, tmp + 0, playback + SND_EMU10K1_PLAYBACK_CHANNELS + z, gpr + 0);		A_SWITCH_NEG(icode, &ptr, tmp + 1, gpr + 0);		A_SWITCH(icode, &ptr, tmp + 1, playback + z, tmp + 1);		A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + z), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);	}	snd_emu10k1_init_stereo_onoff_control(controls + nctl++, "Tone Control - Switch", gpr, 0);	gpr += 2;	/* Master volume (will be renamed later) */	A_OP(icode, &ptr, iMAC0, A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS));	A_OP(icode, &ptr, iMAC0, A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS));	A_OP(icode, &ptr, iMAC0, A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS));	A_OP(icode, &ptr, iMAC0, A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS));	A_OP(icode, &ptr, iMAC0, A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS));	A_OP(icode, &ptr, iMAC0, A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS));	A_OP(icode, &ptr, iMAC0, A_GPR(playback+6+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+6+SND_EMU10K1_PLAYBACK_CHANNELS));	A_OP(icode, &ptr, iMAC0, A_GPR(playback+7+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+7+SND_EMU10K1_PLAYBACK_CHANNELS));	snd_emu10k1_init_mono_control(&controls[nctl++], "Wave Master Playback Volume", gpr, 0);	gpr += 2;	/* analog speakers */	A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS);	A_PUT_STEREO_OUTPUT(A_EXTOUT_AREAR_L, A_EXTOUT_AREAR_R, playback+2 + SND_EMU10K1_PLAYBACK_CHANNELS);	A_PUT_OUTPUT(A_EXTOUT_ACENTER, playback+4 + SND_EMU10K1_PLAYBACK_CHANNELS);	A_PUT_OUTPUT(A_EXTOUT_ALFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS);	if (emu->card_capabilities->spk71)		A_PUT_STEREO_OUTPUT(A_EXTOUT_ASIDE_L, A_EXTOUT_ASIDE_R, playback+6 + SND_EMU10K1_PLAYBACK_CHANNELS);	/* headphone */	A_PUT_STEREO_OUTPUT(A_EXTOUT_HEADPHONE_L, A_EXTOUT_HEADPHONE_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS);	/* digital outputs */	/* A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); */	if (emu->card_capabilities->emu1010) {		/* EMU1010 Outputs from PCM Front, Rear, Center, LFE, Side */		snd_printk("EMU outputs on\n");		for (z = 0; z < 8; z++) {			if (emu->card_capabilities->ca0108_chip) {				A_OP(icode, &ptr, iACC3, A3_EMU32OUT(z), A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + z), A_C_00000000, A_C_00000000);			} else {				A_OP(icode, &ptr, iACC3, A_EMU32OUTL(z), A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + z), A_C_00000000, A_C_00000000);			}		}	}	/* IEC958 Optical Raw Playback Switch */ 	gpr_map[gpr++] = 0;	gpr_map[gpr++] = 0x1008;	gpr_map[gpr++] = 0xffff0000;	for (z = 0; z < 2; z++) {		A_OP(icode, &ptr, iMAC0, A_GPR(tmp + 2), A_FXBUS(FXBUS_PT_LEFT + z), A_C_00000000, A_C_00000000);		A_OP(icode, &ptr, iSKIP, A_GPR_COND, A_GPR_COND, A_GPR(gpr - 2), A_C_00000001);		A_OP(icode, &ptr, iACC3, A_GPR(tmp + 2), A_C_00000000, A_C_00010000, A_GPR(tmp + 2));		A_OP(icode, &ptr, iANDXOR, A_GPR(tmp + 2), A_GPR(tmp + 2), A_GPR(gpr - 1), A_C_00000000);		A_SWITCH(icode, &ptr, tmp + 0, tmp + 2, gpr + z);		A_SWITCH_NEG(icode, &ptr, tmp + 1, gpr + z);		A_SWITCH(icode, &ptr, tmp + 1, playback + SND_EMU10K1_PLAYBACK_CHANNELS + z, tmp + 1);		if ((z==1) && (emu->card_capabilities->spdif_bug)) {			/* Due to a SPDIF output bug on some Audigy cards, this code delays the Right channel by 1 sample */			snd_printk(KERN_INFO "Installing spdif_bug patch: %s\n", emu->card_capabilities->name);			A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(gpr - 3), A_C_00000000, A_C_00000000);			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 3), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);		} else {			A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);		}	}	snd_emu10k1_init_stereo_onoff_control(controls + nctl++, SNDRV_CTL_NAME_IEC958("Optical Raw ",PLAYBACK,SWITCH), gpr, 0);	gpr += 2;		A_PUT_STEREO_OUTPUT(A_EXTOUT_REAR_L, A_EXTOUT_REAR_R, playback+2 + SND_EMU10K1_PLAYBACK_CHANNELS);	A_PUT_OUTPUT(A_EXTOUT_CENTER, playback+4 + SND_EMU10K1_PLAYBACK_CHANNELS);	A_PUT_OUTPUT(A_EXTOUT_LFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS);	/* ADC buffer */#ifdef EMU10K1_CAPTURE_DIGITAL_OUT	A_PUT_STEREO_OUTPUT(A_EXTOUT_ADC_CAP_L, A_EXTOUT_ADC_CAP_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS);#else	A_PUT_OUTPUT(A_EXTOUT_ADC_CAP_L, capture);	A_PUT_OUTPUT(A_EXTOUT_ADC_CAP_R, capture+1);#endif	if (emu->card_capabilities->emu1010) {		if (emu->card_capabilities->ca0108_chip) {			snd_printk("EMU2 inputs on\n");			for (z = 0; z < 0x10; z++) {				snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, 									bit_shifter16,									A3_EMU32IN(z),									A_FXBUS2(z*2) );			}		} else {			snd_printk("EMU inputs on\n");			/* Capture 16 (originally 8) channels of S32_LE sound */			/* printk("emufx.c: gpr=0x%x, tmp=0x%x\n",gpr, tmp); */			/* For the EMU1010: How to get 32bit values from the DSP. High 16bits into L, low 16bits into R. */			/* A_P16VIN(0) is delayed by one sample,			 * so all other A_P16VIN channels will need to also be delayed			 */			/* Left ADC in. 1 of 2 */			snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_P16VIN(0x0), A_FXBUS2(0) );			/* Right ADC in 1 of 2 */			gpr_map[gpr++] = 0x00000000;			/* Delaying by one sample: instead of copying the input			 * value A_P16VIN to output A_FXBUS2 as in the first channel,			 * we use an auxiliary register, delaying the value by one			 * sample			 */			snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(2) );			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x1), A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(4) );			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x2), A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(6) );			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x3), A_C_00000000, A_C_00000000);			/* For 96kHz mode */			/* Left ADC in. 2 of 2 */			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0x8) );			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x4), A_C_00000000, A_C_00000000);			/* Right ADC in 2 of 2 */			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0xa) );			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x5), A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0xc) );			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x6), A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0xe) );			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x7), A_C_00000000, A_C_00000000);			/* Pavel Hofman - we still have voices, A_FXBUS2s, and			 * A_P16VINs available -			 * let's add 8 more capture channels - total of 16			 */			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,								  bit_shifter16,								  A_GPR(gpr - 1),								  A_FXBUS2(0x10));			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x8),			     A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,								  bit_shifter16,								  A_GPR(gpr - 1),								  A_FXBUS2(0x12));			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x9),			     A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,								  bit_shifter16,								  A_GPR(gpr - 1),								  A_FXBUS2(0x14));			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xa),			     A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,								  bit_shifter16,								  A_GPR(gpr - 1),								  A_FXBUS2(0x16));			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xb),			     A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,								  bit_shifter16,								  A_GPR(gpr - 1),								  A_FXBUS2(0x18));			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xc),			     A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,								  bit_shifter16,								  A_GPR(gpr - 1),								  A_FXBUS2(0x1a));			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xd),			     A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,								  bit_shifter16,								  A_GPR(gpr - 1),								  A_FXBUS2(0x1c));			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xe),			     A_C_00000000, A_C_00000000);			gpr_map[gpr++] = 0x00000000;			snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,								  bit_shifter16,								  A_GPR(gpr - 1),								  A_FXBUS2(0x1e));			A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xf),			     A_C_00000000, A_C_00000000);		}#if 0		for (z = 4; z < 8; z++) {			A_OP(icode, &ptr, iACC3, A_FXBUS2(z), A_C_00000000, A_C_00000000, A_C_00000000);		}		for (z = 0xc; z < 0x10; z++) {			A_OP(icode, &ptr, iACC3, A_FXBUS2(z), A_C_00000000, A_C_00000000, A_C_00000000);		}#endif	} else {		/* EFX capture - capture the 16 EXTINs */		/* Capture 16 channels of S16_LE sound */		for (z = 0; z < 16; z++) {			A_OP(icode, &ptr, iACC3, A_FXBUS2(z), A_C_00000000, A_C_00000000, A_EXTIN(z));		}	}	#endif /* JCD test */	/*	 * ok, set up done..	 */	if (gpr > tmp) {		snd_BUG();		err = -EIO;		goto __err;	}	/* clear remaining instruction memory */	while (ptr < 0x400)		A_OP(icode, &ptr, 0x0f, 0xc0, 0xc0, 0xcf, 0xc0);	seg = snd_enter_user();	icode->gpr_add_control_count = nctl;	icode->gpr_add_controls = (struct snd_emu10k1_fx8010_control_gpr __user *)controls;	emu->support_tlv = 1; /* support TLV */	err = snd_emu10k1_icode_poke(emu, icode);	emu->support_tlv = 0; /* clear again */	snd_leave_user(seg); __err:	kfree(controls);	if (icode != NULL) {		kfree((void __force *)icode->gpr_map);		kfree(icode);	}	return err;}/* * initial DSP configuration for Emu10k1 *//* when volume = max, then copy only to avoid volume modification *//* with iMAC0 (negative values) */static void __devinit _volume(struct snd_emu10k1_fx8010_code *icode, u32 *ptr, u32 dst, u32 src, u32 vol){	OP(icode, ptr, iMAC0, dst, C_00000000, src, vol);	OP(icode, ptr, iANDXOR, C_00000000, vol, C_ffffffff, C_7fffffff);	OP(icode, ptr, iSKIP, GPR_COND, GPR_COND, CC_REG_NONZERO, C_00000001);	OP(icode, ptr, iACC3, dst, src, C_00000000, C_00000000);}static void __devinit _volume_add(struct snd_emu10k1_fx8010_code *icode, u32 *ptr, u32 dst, u32 src, u32 vol){	OP(icode, ptr, iANDXOR, C_00000000, vol, C_ffffffff, C_7fffffff);	OP(icode, ptr, iSKIP, GPR_COND, GPR_COND, CC_REG_NONZERO, C_00000002);	OP(icode, ptr, iMACINT0, dst, dst, src, C_00000001);	OP(icode, ptr, iSKIP, C_00000000, C_7fffffff, C_7fffffff, C_00000001);	OP(icode, ptr, iMAC0, dst, dst, src, vol);}static void __devinit _volume_out(struct snd_emu10k1_fx8010_code *icode, u32 *ptr, u32 dst, u32 src, u32 vol){	OP(icode, ptr, iANDXOR, C_00000000, vol, C_ffffffff, C_7fffffff);	OP(icode, ptr, iSKIP, GPR_COND, GPR_COND, CC_REG_NONZERO, C_00000002);	OP(icode, ptr, iACC3, dst, src, C_00000000, C_00000000);	OP(icode, ptr, iSKIP, C_00000000, C_7fffffff, C_7fffffff, C_00000001);	OP(icode, ptr, iMAC0, dst, C_00000000, src, vol);}#define VOLUME(icode, ptr, dst, src, vol) \		_volume(icode, ptr, GPR(dst), GPR(src), GPR(vol))#define VOLUME_IN(icode, ptr, dst, src, vol) \		_volume(icode, ptr, GPR(dst), EXTIN(src), GPR(vol))#define VOLUME_ADD(icode, ptr, dst, src, vol) \		_volume_add(icode, ptr, GPR(dst), GPR(src), GPR(vol))#define VOLUME_ADDIN(icode, ptr, dst, src, vol) \		_volume_add(icode, ptr, GPR(dst), EXTIN(src), GPR(vol))#define VOLUME_OUT(icode, ptr, dst, src, vol) \		_volume_out(icode, ptr, EXTOUT(dst), GPR(src), GPR(vol))#define _SWITCH(icode, ptr, dst, src, sw) \	OP((icode), ptr, iMACINT0, dst, C_00000000, src, sw);#define SWITCH(icode, ptr, dst, src, sw) \		_SWITCH(icode, ptr, GPR(dst), GPR(src), GPR(sw))#define SWITCH_IN(icode, ptr, dst, src, sw) \		_SWITCH(icode, ptr, GPR(dst), EXTIN(src), GPR(sw))#define _SWITCH_NEG(icode, ptr, dst, src) \	OP((icode), ptr, iANDXOR, dst, src, C_00000001, C_00000001);#define SWITCH_NEG(icode, ptr, dst, src) \		_SWITCH_NEG(icode, ptr, GPR(dst), GPR(src))static int __devinit _snd_emu10k1_init_efx(struct snd_emu10k1 *emu){	int err, i, z, gpr, tmp, playback, capture;	u32 ptr;	struct snd_emu10k1_fx8010_code *icode;	struct snd_emu10k1_fx8010_pcm_rec *ipcm = NULL;	struct snd_emu10k1_fx8010_control_gpr *controls = NULL, *ctl;	u32 *gpr_map;	mm_segment_t seg;	if ((icode = kzalloc(sizeof(*icode), GFP_KERNEL)) == NULL)		return -ENOMEM;	if ((icode->gpr_map = (u_int32_t __user *)	     kcalloc(256 + 160 + 160 + 2 * 512, sizeof(u_int32_t),		     GFP_KERNEL)) == NULL ||            (controls = kcalloc(SND_EMU10K1_GPR_CONTROLS,				sizeof(struct snd_emu10k1_fx8010_control_gpr),				GFP_KERNEL)) == NULL ||	    (ipcm = kzalloc(sizeof(*ipcm), GFP_KERNEL)) == NULL) {		err = -ENOMEM;		goto __err;	}	gpr_map = (u32 __force *)icode->gpr_map;	icode->tram_data_map = icode->gpr_map + 256;	icode->tram_addr_map = icode->tram_data_map + 160;	icode->code = icode->tram_addr_map + 160;		/* clear free GPRs */	for (i = 0; i < 256; i++)		set_bit(i, icode->gpr_valid);	/* clear TRAM data & address lines */	for (i = 0; i < 160; i++)		set_bit(i, icode->tram_valid);	strcpy(icode->name, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -