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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

310 MUSICAL ApPLICATIONS OF MICROPROCESSORS<br />

0164 FCDO DOCE BNE SCNREN RE-ENTER SCAN LOOP<br />

0165 FCDF 9B STATIC TVA OUTPUT A KEY PRESS EVENT<br />

0166 FCEO 0980 ORA #$80 FIRST BYTE = KEY 10 NUMBER, DEPRESS<br />

0167 FCE2 78 SEI DISABLE TIMER INTERRUPT WHILE OUEUEING<br />

0168 FCE3 A63D LOX QUIP GET QUEUE INPUT POINTER<br />

0169 FCE5 953F STA EVQU,X STORE FIRST BYTE<br />

0170 FCE7 B90000 LOA MKYBST,Y GET KEY STATE<br />

0171 FCEA 4A LSR A ISOLATE AND RIGHT JUSTIFY VELOCITY COUNT<br />

0172 FCEB 4A LSR A<br />

0173 FCEC 9540 STA EVQU+1,X ; OUTPUT AS SECOND BYTE OF EVENT<br />

0174 FCEE A55F LOA TIME ; GET LOW BYTE OF TIME<br />

0175 FCFO 9541 STA EVQU+2,X ; OUTPUT AS THIRD BYTE<br />

0176 FCF2 A560 LOA TIME+l ; GET HIGH BYTE OF TIME<br />

0177 FCF4 9542 STA EVQU+3,X ; OUTPUT AS FOURTH BYTE<br />

0178 FCF6 8A TXA ; MOVE QUEUE INPUT POINTER UP 1 NOTCH<br />

0179 FCF7 18 CLC<br />

0180 FCF8 6904 ADC #4<br />

0181 FCFA 291F AND #$IF WITH WRAPAROUND<br />

0182 FCFC 8530 STA QUIP<br />

0183 FCFE 58 CLI RE-ENA8LE INTERRUPTS<br />

0184 FCFF A902 LOA #2 SET KEY STATE TO 2<br />

0185 FOOl 990000 STA MKY8ST,Y<br />

0186 FD04 DOA7 BNE SCNREN RESUME SCANNING<br />

0187 FD06<br />

0188 FD06<br />

0189 FD06 B94004 STAT2 I.~A MKY8L,Y TEST KEY CONTACT WITH LOWER BUS<br />

0190 FD09 10A2 8PL SCNREN RESUME SCANNING IF IN CONTACT<br />

0191 FDOB A903 LOA #3 SET THE STATE TO 3 AND ZERO VELOCITY<br />

0192 FOOD 990000 STA MKYBST, Y COUNT IF NO CONTACT<br />

0193 FDI0 D09B BNE SCNREN AND RESUME SCANNING<br />

0194 F012<br />

0195 FD12<br />

0196 F012 B94004 STAT3 LOA MKYBL,Y ; TEST KEY CONTACT WITH LOWER BUS<br />

0197 FD15 3007 BMI STAnA ; JUMP IF NOT CONTACTING IT<br />

0198 F017 A902 LOA #2 ; SET STATE TO 2 AND CLEAR VELOCITY COUNT<br />

0199 F019 990000 STA MKYBST,Y ; IF CONTACTING LOWER BUS<br />

0200 FDIC DD8F BNE SCNREN ; RE-ENTER SCAN LOOP<br />

0201 FDIE B90004 STAT3A LOA MKYBU,Y ; TEST KEY CONTACT WITH UPPER BUS<br />

0202 FD21 1010 BPL STAnc ; JUMP IF CONTACTING IT<br />

0203 FD23 B90000 LOA MKYBST,Y ; IF NOT, GET KEY STATE AND INCREMENT THE<br />

0204 F026 18 CLC ; VELOCITY COUNT<br />

0205 FD27 6904 ADC #4<br />

0206 F029 9002 BCC STAT3B SKIP IF NO OVERFLOW<br />

0207 F02B E904 SBC #4 RESTORE MAX VELOCITY COUNT IF OVERFLOW<br />

0208 FD20 990000 STAT3B STA MKYBST,Y<br />

0209 FD30 4CADFC JMP SCNREN RE-ENTER SCAN LOOP<br />

0210 FD33 78 STAnc SEI DISABLE TIMER INPURRUPT WHILE OUEUEING<br />

0211 FD34 A630 LOX QUIP OUTPUT AN EVENT, GET QUEUE INPUT POINTER<br />

0212 F036 943F STY EVQU,X STORE FIRST BYTE = KEY 10 NUMBER, RELEASE<br />

0213 F038 B9OO00 LOA MKYBST,Y GET KEY STATE<br />

0214 FD3B 4A LSR A ISOLATE AND RIGHT JUSTIFY VELOCITY COUNT<br />

0215 FD3C 4A LSR A<br />

0216 F030 9540 STA EVQU+! ,X OUTPUT AS SECOND BYTE OF EVENT<br />

0217 F03F A55F LOA TIME GET LOW 8YTE OF TIME<br />

0218 FD41 9541 STA EVQU+2,X OUTPUT AS THIRD BYTE<br />

0219 FD43 A560 LOA TIME+! ; GET HIGH BYTE OF TIME<br />

0220 FD45 9542 STA EVQU+3,X ; OUTPUT AS FOURTH BYTE<br />

0221 F047 8A TXA ; MOVE QUEUE INPUT POINTER UP 1 NOTCH<br />

0222 F048 18 CLC<br />

0223 FD49 6904 AOC #4<br />

0224 F04B 291F AND #$IF ; WITH WRAPAROUND<br />

0225 F040 8530 STA QUIP<br />

0226 FD4F 58 CLI ; RE-ENABLE INTERRUPTS<br />

0227 FD50 A900 LOA #0 ; SET KEY STATE TO 0 (INACTIVE)<br />

Fig. ~9. Listing <strong>of</strong> keyboard control program (cont.)

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

Saved successfully!

Ooh no, something went wrong!