📄 rotating_speaker.asm
字号:
/* test current sine value to pan left or right, if + then pan left, if - then pan right */
r4 = pass r4;
IF LE JUMP (pc, pan_right_channel);
pan_left_channel:
/* write tremolo result sample to left/right output channels */
DM(Left_Channel_Out) = r5;
r6 = 0x00000000;
DM(Right_Channel_Out) = r6;
JUMP (pc, tremolo_done);
pan_right_channel:
/* write tremolo result sample to left/right output channels */
r6 = 0x00000000;
DM(Left_Channel_Out) = r6;
DM(Right_Channel_Out) = r5;
tremolo_done:
rts;
/* ------------------------------------------------------------------------------------ */
mono_tremolo_effect:
/* get generated sine value from wavetable generator, where r4 = sin(2*pi*fc*t) */
r4 = dm(sine_value);
r5 = r0 * r4 (SSFR);
/* write tremolo result sample to left/right output channels */
dm(Left_Channel_Out) = r5; /* left output sample */
dm(Right_Channel_Out) = r5; /* right output sample */
RTS;
/* ------------------------------------------------------------------------------------ */
/* */
/* IRQ1 Pushbutton Interrupt Service Routine */
/* */
/* This routine allows the user to modify tremolo rate with 5 presets. */
/* */
/* Default before 1st IRQ push: */
/* 1st Pushbutton Press: */
/* 2nd Pushbutton Press: */
/* 3rd Pushbutton Press: */
/* 4th Pushbutton Press: */
/* 5th Pushbutton Press: */
/* 6th Pushbutton Press: Reverts back to 1st Pushbutton Press */
/* */
/* The pushbutton setting is shown by the active LED setting, all others are off */
/* ------------------------------------------------------------------------------------ */
change_speaker_rotate_rate:
bit set mode1 SRRFH; /* enable background register file */
NOP; /* 1 CYCLE LATENCY FOR WRITING TO MODE1 REGISER!! */
r13 = 6; /* number of presets */
r15 = DM(IRQ1_counter); /* get preset count */
r15 = r15 + 1; /* increment preset */
comp (r15, r13);
if ge r15 = r15 - r15; /* reset to zero */
DM(IRQ1_counter) = r15; /* save preset count */
r10 = pass r15; /* get preset mode */
if eq jump rate_setting_2; /* check for count == 0 */
r10 = r10 - 1;
if eq jump rate_setting_3; /* check for count == 1 */
r10 = r10 - 1;
if eq jump rate_setting_4; /* check for count == 3 */
r10 = r10 - 1;
if eq jump rate_setting_5; /* check for count == 4 */
rate_setting_1: /* count therefore, is == 5 if you are here */
r14 = 12; DM(modulation_rate) = r14;
r14 = 1; DM(sin_inc) = r14;
r14 = -2; DM(pitch_bend) = r14;
bit set ustat1 0x3D; /* turn on Flag5 LED */
bit clr ustat1 0x02;
dm(IOSTAT)=ustat1;
jump done;
rate_setting_2:
r14 = 6; DM(modulation_rate) = r14;
r14 = 1; DM(sin_inc) = r14;
r14 = -3; DM(pitch_bend) = r14;
bit set ustat1 0x3B; /* turn on Flag6 LED */
bit clr ustat1 0x04;
dm(IOSTAT)=ustat1;
jump done;
rate_setting_3:
r14 = 3; DM(modulation_rate) = r14;
r14 = 1; DM(sin_inc) = r14;
r14 = -5; DM(pitch_bend) = r14;
bit set ustat1 0x37; /* turn on Flag7 LED */
bit clr ustat1 0x08;
dm(IOSTAT)=ustat1;
jump done;
rate_setting_4:
r14 = 2; DM(modulation_rate) = r14;
r14 = 1; DM(sin_inc) = r14;
r14 = -5; DM(pitch_bend) = r14;
bit set ustat1 0x2F; /* turn on Flag8 LED */
bit clr ustat1 0x10;
dm(IOSTAT)=ustat1;
jump done;
rate_setting_5:
r14 = 1; DM(modulation_rate) = r14;
r14 = 1; DM(sin_inc) = r14;
r14 = -6; DM(pitch_bend) = r14;
bit set ustat1 0x1F; /* turn on Flag9 LED */
bit clr ustat1 0x20;
dm(IOSTAT)=ustat1;
done:
rti(db);
bit clr mode1 SRRFH; /* switch back to primary register set */
nop;
/* ------------------------------------------------------------------------------------ */
/* */
/* IRQ2 Pushbutton Interrupt Service Routine */
/* */
/* This routine selects between mono or stereo tremolo, and the info is passed to */
/* the SPORT0 rx ISR. */
/* */
/* The pushbutton setting is shown by the FLAG4 LED. */
/* ------------------------------------------------------------------------------------ */
select_tremolo_effect:
bit set mode1 SRRFH; /* enable background register file */
NOP; /* 1 CYCLE LATENCY FOR WRITING TO MODE1 REGISER!! */
r13 = 2; /* number of presets */
r15 = DM(IRQ2_counter); /* get preset count */
r15 = r15 + 1; /* increment preset */
comp (r15, r13);
if ge r15 = r15 - r15; /* reset to zero */
DM(IRQ2_counter) = r15; /* save preset count */
r10 = pass r15; /* get preset mode */
if eq jump select_stereo; /* check for count == 0 */
select_mono: /* count therefore, is == 1 if you are here */
r14 = 0x00000000;
DM(Effect_Ctrl) = r14;
bit clr ustat1 0x01; /* turn on Flag4 LED */
dm(IOSTAT)=ustat1;
jump exit;
select_stereo:
r14 = 0x00000001;
DM(Effect_Ctrl) = r14;
bit set ustat1 0x01; /* turn off Flag4 LED */
dm(IOSTAT)=ustat1;
exit:
rti(db);
bit clr mode1 SRRFH; /* switch back to primary register set */
nop;
.endseg;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -