'**************************************************************** '* Name : MIDI Sniffer.PBP * '* Author : Robert Joseph Korn * '* Notice : Copyright (c) 2011 Open Valley Consulting Corp * '* : All Rights Reserved * '* Date : 3/11/2011 * '* Version : 1.5 * '* Notes : * '* : * '**************************************************************** DEFINE OSC 4 DEFINE LCD_RSREG PORTB ' LCD Register Select port DEFINE LCD_RSBIT 5 ' LCD Register Select bit DEFINE LCD_EREG PORTB ' LCD Enable port DEFINE LCD_EBIT 4 ' LCD Enable bit DEFINE LCD_DREG PORTB ' LCD Data port DEFINE LCD_DBIT 0 ' starting Data bit (0 or 4) if 4-bit bus DEFINE LCD_BITS 4 ' LCD bus size (4 or 8 bits) DEFINE LCD_LINES 2 ' Number of lines on LCD DEFINE HSER_RCSTA 90h DEFINE HSER_TXSTA 20h DEFINE HSER_BAUD 31250 DEFINE HSER_CLROERR 1 char var byte cmd var byte command var byte channel var byte sysex var byte message var byte value var byte state var byte LCDOUT $FE,1 PAUSE 200 on interrupt goto serial INTCON = %11000000 PIE1 = %00100000 STATE = 0 SYSEX = 0 clr: LCDOUT "OVCCorp MIDI Sniffer" LCDOUT $FE,$C0," Copyright 2011 " lp: if portc.4 = 0 then clr goto lp disable serial: hserin 0,endisr,[char] if char.7 = 1 then ' Realtime ' 0 DATA BYTE COMMANDS F6, F8, FA, FB, FC, FE, FF ' UNDEFINED COMMANDS F4, F5, F9, FD ' SYSEX PATCH START F0 END F7 SELECT CASE Char case $F0 SYSEX = 1 state = 0 LCDOUT $FE,$C0," ",$FE,$C0," Data: F0 x" case $F7 SYSEX = 0 state = 0 case $F1,$F2,$F3,$F4,$F5,$F6 LCDOUT $FE,$C0," ",$FE,$C0," Data:" case $F8,$F9,$FB,$FD,$FE,$FF LCDOUT $FE,$C0," ",$FE,$C0," Data:" CASE $FA LCDOUT $FE,$C0," ",$FE,$C0," Data:" CASE $FC LCDOUT $FE,$C0," ",$FE,$C0," Data:" CASE ELSE STATE = 2 command = char CHANNEL = COMMAND AND $0F LCDOUT $FE,$C0," ",$FE,$C0," Data:" END SELECT ENDIF if state = 3 then STATE = 2 VALUE = CHAR ' Process 2 DATA BYTE COMMANDS 8x, 9x, Ax, Bx, Ex, F2 endif if state = 2 then message = char ' Process 1 DATA BYTE COMMANDS Cx, Dx, F1, F3 cmd = command AND $F0 select case cmd case $C0 case $D0 case $F0 case else STATE = 3 end select ENDIF if sysex = 0 then lcdout " ", HEX2 char," " endisr: resume enable end