22.09.2015 Views

of Microprocessors

Musical-Applications-of-Microprocessors-2ed-Chamberlin-H-1987

Musical-Applications-of-Microprocessors-2ed-Chamberlin-H-1987

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

664 MUSICAL ApPLICATIONS OF MICROPROCESSORS<br />

0222 1l0A ; WAVEFORM TABLE FILL USING FOURIER SERIES<br />

0223 1l0A<br />

0224 1l0A *~ $80 STORAGE IN PAGE ZERO<br />

0225 0080 HRMACC *=*+ 2 HARMONIC ACCUMULATOR<br />

0226 0082 PNTNO *=*+ 1 POINT NUMBER WITHIN CYCLE OF WAVE<br />

0227 0083 NDXACC *=*+ 1 INDEXING ACCUMULATOR<br />

0228 0084 HRMCNT *=*+ 1 HARMONIC COUNTER<br />

0229 0085 MAX *=*+ 1 MAXIMUM WAVEFORM AMPLITUDE<br />

0230 0086 WAVETB *=*+ 2 ADDRESS OF WAVEFORM TABLE TO FILL<br />

0231 0088<br />

0232 0088 NHARM *=*+ 1 HIGHEST HARMONIC TO GENERATE (16 MAX)<br />

0233 0089 FSRAM *=*+ 32" ROOM FOR 16 HARMONIC AMPLITUDES AND<br />

0234 00A9 PHASES<br />

0235 00A9<br />

0236 00A9 *~ $2000 PROGRAM ORIGIN<br />

0237 2000<br />

0238 2000 WAVEFORM TABLE FILL ROUTINE<br />

0239 2000 THIS SUBROUTINE FILLS THE WAVEFORM TABLE AT WAVETB WITH 256<br />

0240 2000 SAMPLES OF THE WAVEFORM SPECIFIED BY THE SPECTRUM AT FSRAM.<br />

0241 2000 MAX MUST HAVE BEEN PREVIOUSLY SET GREATER THAN TWICE THE<br />

0242 2000 ABSOLUTE VALUE OF THE LARGEST SAMPLE THAT WILL BE ENCOUNTERED.<br />

0243 2000<br />

0244 2000 A900 FILL LOA #0 ZERO THE POINT NUMBER<br />

0245 2002 8582 STA PNTNO<br />

0246 2004 204020 FILL! JSR FSEVAL EVALUATE A WAVEFORM POINT<br />

0247 2007 A580 LOA HRMACC DIVIDE POINT BY MAXIMUM POINT FOR SCALING<br />

0248 2009 85BO STA ACCH FIRST TRANSFER POINT TO PSEUDO<br />

0249 200B A581 LOA HRMACC+1 ACCUMULATOR FOR USE AS THE DIVIDEND<br />

0250 2000 85Bl STA ACCL<br />

0251 200F A585 LOA MAX LOAD MAX AS THE DIVISOR (UNSIGNED)<br />

0252 2011 20C710 JSR DIV2Q DO A TWO QUADRANT DIVIDE<br />

0253 2014 A5B1 LOA ACCL GET THE SIGNED QUOTIENT<br />

0254 2016 A482 LOY PNTNO GET THE POINT NUMBER<br />

0255 2018 9186 STA (WAVETB). Y STORE RESULT IN WAVEFORM TABLE<br />

0256 20IA E682 INC PNTNO INCREMENT THE POINT NUMBER<br />

0257 20IC DOE6 BNE FILL! GO FOR ANOTHER POINT IF NOT FINISHED<br />

0258 201E 60 RTS RETURN WHEN FINISHED<br />

0259 201F<br />

0260 201F SCALE FACTOR DETERMINATION SUBROUTINE<br />

0261 201F THIS SUBROUTINE GOES THROUGH ONE CYCLE OF THE WAVEFORM DEFINED<br />

0262 201F BY THE SPECTRUM AT FSRAM AND FINDS THE POINT WITH THE MAXIMUM<br />

0263 201F MAGNITUDE.<br />

0264 201F THIS MAGNITUDE IS THEN DOUBLED AND INCREMENTED BY ONE AND<br />

0265 201F STORED AS AN UNSIGNED NUMBER.<br />

0266 201F<br />

0267 201F A900 SCALE LOA #0 ZERO THE POINT NUMBER<br />

0268 2021 8582 STA PNTNO<br />

0269 2023 8585 STA MAX ZERO THE MAXIMUM MAGNITUDE<br />

0270 2025 204020 SCALEl JSR FSEVAL EVALUATE A WAVEFORM POINT<br />

0271 2028 A58D LOA HRMACC GET UPPER BYTE OF THE POINT<br />

on 2 202A 1005 BPL SCALE2 SKIP IF POSITIVE<br />

0273 202C 49FF EOR #$FF NEGATE IF NEGATIVE<br />

0274 202E 18 CLC<br />

0275 202F 6901 ADC #1<br />

0276 2031 C585 SCALE2 CMP MAX COMPARE WITH CURRENT MAXIMUM<br />

0277 2033 3002 8MI SCALE3 SKIP IF NOT GREATER<br />

0278 2035 8585 STA MAX UPDATE MAXIMUM IF GREATER<br />

0279 2037 E682 SCALE3 INC PNTNO INCREMENT POINT NUM8ER<br />

0280 2039 DOEA BNE SCALEI GO FOR NEXT POINT IF NOT DONE<br />

0281 203B 0685 ASL MAX DOUBLE AND THEN INCREMENT MAXIMUM VALUE<br />

0282 2030 E685 INC MAX TO AVOID POSSIBLE DIVISON OVERFLOW<br />

0283 203F 60 RTS AND RETURN<br />

0284 2040<br />

0285 2040 FOURIER SERIES POINT EVALUATOR<br />

0286 2040 THIS SUBROUTINE EVALUATES A POINT ON THE WAVEFORM SPECIFIED BY<br />

0287 2040 THE SPECTRUM AT FSRAM.<br />

0288 2040 NHARM SPECIFIES THE HIGHEST HARMONIC TO BE INCLUDED

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!