A2NoSlotMIDI/LEGACY/MFF0DRVR.SC4.txt

94 lines
2.3 KiB
Plaintext

;------------
;MFF0DRVR.SC4 - KARAOKE SCAN AHEAD LOGIC
;------------
; THIS LOGIC IS CALLED WHENEVER A CARRIAGE RETURN ($0D) IS FOUND.
; IT WILL SCAN AHEAD IN THE BUFFER TO FIND THE NEXT CARRIAGE RETURN
; BY LOOKING FOR TEXT META EVENTS. IT WILL PRINT UP TO 79 CHARACTERS.
; IT WILL EXIT WHEN EITHER A NEW CARRIAGE RETURN IS FOUND, 79 CHARACTERS
; HAVE BEEN PRINTED, THE END OF TRACK MARKER (FF 2F) IS FOUND, OR THE
; POINTER REACHES THE END OF THE CURRENT BUFFER.
;
MYPTR EQU $08
MYXCOORD DFB $00
MYENDFLG DFB $00
MYBYTE DFB $00
MYLENGTH DFB $00
MYSTOP DFB $00
;
KARASCAN LDA PLAYPTR ;SET OUR POINTER TO CURRENT POSITION
STA MYPTR
LDA PLAYPTR+1
STA MYPTR+1
LDA #$00
STA MYXCOORD
STA MYENDFLG
LDA PLAYSTOP+1
STA MYSTOP
KARALOOP LDY #$00
LDA (MYPTR),Y
CMP #$FF
BEQ FOUNDFF
KARALOO1 JSR INCMYPT
LDA MYENDFLG
BEQ KARALOOP
KARADONE LDA #$8D ;PRINT CR
JSR COUT
RTS
;
FOUNDFF JSR INCMYPT
LDA MYENDFLG
BNE KARADONE
LDA MYBYTE
CMP #$2F
BEQ KARADONE
CMP #$10
BCS KARALOO1 ;NOT TEXT EVENT
JSR INCMYPT
LDA MYENDFLG
BNE KARADONE
LDA MYBYTE
BMI KARALOO1 ;DON'T SUPPORT META > 127 CHARS-LOOK FOR MORE
BEQ KARALOO1 ;TEXT LEN OF 0
STA MYLENGTH
PRLOOP JSR INCMYPT
LDA MYENDFLG
BNE KARADONE
JSR PRINT24 ;PRINT THE CHAR
LDA MYENDFLG
BNE KARADONE
DEC MYLENGTH
LDA MYLENGTH
BNE PRLOOP
BEQ KARALOO1
;
INCMYPT INC MYPTR
BNE INCMYP2
INC MYPTR+1
LDA MYPTR+1
CMP MYSTOP
BCC INCMYP2
INC MYENDFLG
RTS
INCMYP2 LDY #$00
LDA (MYPTR),Y
STA MYBYTE
RTS
;
PRINT24 LDY #23
LDX MYXCOORD
LDA MYBYTE
CMP #$0D
BEQ SETEND
CMP #$20 ;DON'T PRINT CONTROL CHARS
BCC PRINT24A
ORA #$80
JSR COUT
INX
STX MYXCOORD
CPX #79
BNE PRINT24A
SETEND INC MYENDFLG
PRINT24A RTS
;
CHN MFF0DRVR.SC5