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.

ORGAN KEYBOARD INTERFACE 317<br />

SERCTL $0800 6850 SERIAL I/O CHIP CONTROL REGISTER<br />

SERSTS $0800 6850 STATUS REGISTER<br />

SEROTA $0801 6850 TRANSMIT AND RECEIVE DATA REGISTER<br />

------ - --- --- ------------ -----<br />

INIT LOA #$17 INITIALIZE 6850 SERIAL I/O CHIP<br />

STA SERCTL<br />

LOA #$15<br />

STA SERCTL<br />

----. - ----- - - - ------------ ----<br />

STATIC SEI DISABLE INTERRUPTS WHILE STORING EVENT<br />

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

LOA #$90 KEY DOWN EVENT ON MIDI CHANNEL MIOICH<br />

ORA MIOICH<br />

STA EVQU ,X STORE I N QUEUE<br />

INX INCREMENT QUEUE POINTER<br />

CPX #$20 WRAPAROUND THE POINTER IF NECESSARY<br />

BNE STATIO<br />

LOX #0<br />

STATIO TYA GET KEY NUMBER<br />

CLC ADJUST TO MIDI STANDARD OF 60=MIOOLE C<br />

AOC #60-24 THIS GIVES 2 OCTAVES BELOW AND 3 ABOVE<br />

STA EVQU ,X ; STORE RESULT I N QUEUE<br />

INX ; INCREMENT AND WRAPAROUND QUEUE POINTER<br />

CPX #$20<br />

BNE STATIE<br />

LOX #0<br />

STATIE STX QUIP SAVE QUEUE POINTER TEMPORARILY<br />

LOA MKYBST, Y GET VELOCITY COUNT, RANGE 0-63<br />

LSR A<br />

LSR A<br />

TAX LOOKUP APPROPRIATE MIDI VELOCITY<br />

LOA VELTAB,X IN A TABLE<br />

LOX QUIP RESTORE QUEUE POINTER<br />

STA EVQU ,X STORE THE VELOCITY IN THE QUEUE<br />

INX INCREMENT AND WRAPAROUND QUEUE POINTER<br />

CPX #$20<br />

BNE STATlF<br />

LOX #0<br />

STATIF STA QUIP STORE THE UPDATED QUEUE POINTER<br />

eLI RE-ENABLE INTERRUPTS<br />

LOA #2 SET KEY STATE TO 2<br />

STA MKYBST. Y<br />

JMp· SCNREN RESUME SCANNING<br />

------ --- ---- - - ------ ----- - ---<br />

STAnc SEI ; DISABLE INTERRUPTS WHILE STORING EVENT<br />

LOX QUIP ; OUTPUT AN EVENT, GET QUEUE INPUT POINTER<br />

LOA #$80 KEY UP EVENT ON MIDI CHANNEL MIOICH<br />

ORA MIDICH<br />

STA EVQU,X STORE IN QUEUE<br />

INX<br />

INCREMENT QUEUE POINTER<br />

CPX #$20 WRAPAROUND THE POINTER IF NECESSARY<br />

BNE STAnD<br />

LOX #0<br />

STAno TVA GET KEY NUMBER<br />

CLC ADJUST TO MIDI STANDARD<br />

AOC #60-24<br />

STA EVQU ,X ; STORE RESULT IN OUEUE<br />

INX ; INCREMENT AND WRAPAROUND QUEUE POINTER<br />

CPX #$20<br />

BNE STAT3E<br />

LOX #0<br />

STAnE STX QUIP SAVE QUEUE POINTER TEMPORARILY<br />

LOA MKYBST, Y GET VELOCITY COUNT, RANGE 0-63<br />

LSR A<br />

LSR A<br />

TAX LOOKUP APPROPRIATE MIDI VELOCITY<br />

LOA VELTAB,X IN A TABLE<br />

LOX QUIP RESTORE OUEUE POINTER<br />

STA EVQU ,X ; STORE THE VELQCITY IN THE QUEUE<br />

INX ; INCREMENT AND WRAPAROUND OUEUE POINTER<br />

CPX #$20<br />

8NE sTAnF<br />

LOX #0<br />

STAnF STA QUIP STORE THE UPDATED DUEUE POINTfR<br />

CLl RE -ENABLE INTERRUPTS<br />

LOA #0 SET KEY STATE TO 0 (INACTIVE)<br />

STA MKYBST. Y<br />

JMP SCNREN RESUME SCANNING<br />

Fig. 9-12. Modified code segments for MIDI

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

Saved successfully!

Ooh no, something went wrong!