;MFF0DRVR.SC1
;-------
PRCSBYTE LDA PHASE
         CMP #DELTA0
         BNE PHDELT1
         LDA #$00
         STA DELTATIM
         STA DELTATIM+1
         STA DELTATIM+2
         STA DELTATIM+3
         LDA INBYTE
         STA DELTATIM
         BEQ DELTAEQ0        ;GET DELTA TIME
         BPL DELTA7F
         LDA #DELTA1         ;IF >127 - MORE TO FETCH
         STA PHASE
         RTS
DELTAEQ0 LDA #GETINST        ;IF 0 - WILL GET INSTRUCTION NEXT TIME
         STA PHASE
         RTS
DELTA7F  JSR COUNT
         LDA #GETINST       ;IF <=127 - DELAY, THEN GET INSTRUCTION NEXT TIME
         STA PHASE
         RTS
;                            ;NEED TO CONVERT DELTA TIME BYTES TO COUNTER
COUNT    LDA DELTATIM
         STA DELTACTR
         LDA #$00
         STA DELTACTR+1
         LDA DELTATIM+1      ;USE ONLY FIRST 2 BYTES OF DELTATIM
         BEQ DOCOUNT         
         AND #$7F            ;IF NON-ZERO HI BYTE, MOVE LO BIT
         LSR A
         STA DELTACTR+1
         BCC DOCOUNT
         LDA DELTACTR
         ORA #$80            ;TO HI BIT OF LO BYTE
         STA DELTACTR
DOCOUNT  DEC DELTACTR
         LDA DELTACTR
         CMP #$FF
         BNE DECR1
         DEC DELTACTR+1
DECR1    LDA DELTACTR+1
         CMP #$FF
         BEQ DONECNT
         LDA SPEED
         JSR MONWAIT
         CLV
         BVC DOCOUNT
DONECNT  RTS
;
PHDELT1  CMP #DELTA1
         BNE PHDELT2
         LDA DELTATIM
         STA DELTATIM+1
         LDA INBYTE
         STA DELTATIM
         BPL DELT1A
         LDA #DELTA2
         STA PHASE
         RTS
DELT1A   JSR COUNT
         LDA #GETINST
         STA PHASE
         RTS
;-------
PHDELT2  CMP #DELTA2
         BNE PHDELT3
         LDA DELTATIM+1
         STA DELTATIM+2
         LDA DELTATIM
         STA DELTATIM+1
         LDA INBYTE
         STA DELTATIM
         BPL DELT2A
         LDA #DELTA3
         STA PHASE
         RTS
DELT2A   JSR COUNT
         LDA #GETINST
         STA PHASE
         RTS
;-------
PHDELT3  CMP #DELTA3
         BNE PHINST
         LDA DELTATIM+2
         STA DELTATIM+3
         LDA DELTATIM+1
         STA DELTATIM+2
         LDA DELTATIM
         STA DELTATIM+1
         LDA INBYTE
         STA DELTATIM
         BPL DELT3A
         LDA PLAYPTR+1
         JSR PRINTHEX
         LDA PLAYPTR
         JSR PRINTHEX
         BRK
DELT3A   JSR COUNT
         LDA #GETINST
         STA PHASE
         RTS
;-------
PHINST   CMP #GETINST
         BEQ PHINST0
         JMP PHDATA3
PHINST0  LDA PAUSEFLG        ;12/8/95-STEP THRU EVENTS WITH ESC
         BEQ PHINST1
         JSR WAITKEY
PHINST1  LDA INBYTE
         BPL RUNNING
;
         CMP #$F0
         BCS CHKF0
;
         STA LASTSTAT
         STA XMITSTS
         CMP #$E0
         BCS TWOBYTES
         CMP #$C0
         BCC TWOBYTES
;
         LDA #1
         STA DBYTES
         LDA #DATA1
         STA PHASE
         RTS
;
TWOBYTES LDA #2
         STA DBYTES
         LDA #DATA2
         STA PHASE
         RTS
;
CHKF0    BNE CHKF7
         LDA #SYSX0
         STA PHASE
         LDA #$F0
         JSR XMITBYTE
         RTS
;
XMITBYTE JSR XMITONE ;ANNUNCIATOR MIDI DRIVER
         RTS
;
CHKF7    CMP #$F7
         BNE CHKFF
         LDA #SYSX0
         STA PHASE
         RTS
;
CHKFF    CMP #$FF
         BNE INVAL
         LDA #META0
         STA PHASE
         RTS
;
INVAL    BRK
;
RUNNING  LDA LASTSTAT
         STA XMITSTS
         LDA INBYTE
         STA XMITBYT1
         LDA #$FF
         STA XMITBYT2
         LDA DBYTES
         CMP #1
         BEQ SENDMSG
         LDA #DATA3
         STA PHASE
         RTS
;
PHDATA3  CMP #DATA3
         BNE PHDATA2
         LDA INBYTE
         STA XMITBYT2
         LDA #$FF
         STA XMITBYT3
         JMP SENDMSG
;
PHDATA2  CMP #DATA2
         BNE PHDATA1
         LDA INBYTE
         STA XMITBYT1
         LDA #DATA2B
         STA PHASE
         RTS
;
PHDATA1  CMP #DATA1
         BNE PHDATA2B
         LDA INBYTE
         STA XMITBYT1
         LDA #$FF
         STA XMITBYT2
         JMP SENDMSG
;
PHDATA2B CMP #DATA2B
         BNE PHSYSX
         LDA INBYTE
         STA XMITBYT2
         LDA #$FF
         STA XMITBYT3
         JMP SENDMSG
;
SENDMSG  LDX #$01 
SEND0    LDA XMITMSG,X
         CMP #$FF
         BEQ SEND2
         JSR XMITONE ;ANNUNCIATOR MIDI DRIVER
         INX
         BNE SEND0
SEND2    LDA PIANOSCR        ;ADDED 12/9/95-PIANO SCREEN OPTION
         BEQ SENDEXIT
         LDA XMITSTS
         LDX XMITBYT1
         LDY XMITBYT2
         JSR MIDIPOKE
SENDEXIT LDA #DELTA0
         STA PHASE
         RTS
;
PHSYSX   CMP #SYSX0
         BNE PHSYSX1
         LDA INBYTE
         STA SYSXLEN
         BPL GOODSLEN
         LDA PLAYPTR+1
         JSR PRINTHEX
         LDA PLAYPTR
         JSR PRINTHEX
         BRK                 ;SYSX OVER 127 BYTES NOT SUPPORTED
GOODSLEN LDA #SYSX1
         STA PHASE
         RTS
PHSYSX1  CMP #SYSX1
         BNE PHMETA0
         LDA INBYTE
         JSR XMITBYTE
         DEC SYSXLEN
         LDA SYSXLEN
         BNE MORESYSX
         LDA #DELTA0
         STA PHASE
MORESYSX RTS
;--------
PHMETA0  CMP #META0
         BNE PHMETA1
;
         LDA #$00
         STA TEXTEVT
         LDA INBYTE
         CMP #$2F
         BNE CHKTEXT
         LDA #$01
         STA ENDOFTRK
         RTS
;
CHKTEXT  CMP #$0F
         BCS CHKTMPO
         LDA #$01
         STA TEXTEVT
         LDA #META1
         STA PHASE
         RTS
;
CHKTMPO  CMP #$51
         BNE CHKKYSG
         LDA #TEMPO1
         STA PHASE
         RTS
;
CHKKYSG  CMP #$59
         BNE OTHER
         LDA #KEYSIG1
         STA PHASE
         RTS
;
OTHER    LDA #META1
         STA PHASE
         RTS
;
PHMETA1  CMP #META1
         BNE PHMETA2
STORMLEN LDA INBYTE
         STA METALEN
         BPL GOODMLEN
         LDA PLAYPTR+1
         JSR PRINTHEX
         LDA PLAYPTR+2
         JSR PRINTHEX
         BRK                 ;META OVER 127 BYTES NOT SUPPORTED
GOODMLEN LDA #META2
         STA PHASE
         RTS
PHMETA2  CMP #META2
         BNE PHTEMPO1
         LDA TEXTEVT
         BEQ NOTTEXT
         LDA LYRICS
         BEQ NOTTEXT         ;BYPASS IF USER DOESNT WANT LYRICS
         LDA INBYTE
         CMP #$0D
         BEQ PRCSCR
NOTUC    ORA #$80  ;DISPLAY IN NORMAL TEXT
         JSR COUT
NOTTEXT  DEC METALEN
         LDA METALEN
         BNE MOREMETA
         LDA #DELTA0
         STA PHASE
MOREMETA RTS
;
PRCSCR   ORA #$80  ;PRINT CR
         JSR COUT
         LDA KARALOOK
         BEQ NOKARA
         JSR KARASCAN  ;KARAOKE LOGIC TO SCAN AHEAD ONE LINE & PRINT LINE 24
NOKARA   JMP NOTTEXT
;
PRINTHEX PHA       ;CLONE OF $FDDA BUT USING $FDF0 OUTPUT
         LSR A
         LSR A
         LSR A
         LSR A
         JSR PRNTHEX1
         PLA
         AND #$0F
PRNTHEX1 ORA #$B0
         CMP #$BA
         BCC PRNTHEX2
         ADC #$06
PRNTHEX2 JMP COUT
;
         CHN MFF0DRVR.SC2
