Hi Scampy;

Here is a code i do some time go to interface a 93c46 using both MSSP and Shift. Hope ot will be useful to you;

Code:
'****************************************************************
'*  Name    : 93C46N EEPROM + MSSP                              *
'*  Author  : [GADELHAS]                                        *
'*  Notice  : Copyright (c) 2012                                *
'*          : All Rights Reserved                               *
'*  Date    : 08-02-2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          : EASYPICV6 + PIC16F887 + 93C46N - FARCHILD         *
'****************************************************************
'                              CONFIGS
' ================================================================
@ __CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _BOR_OFF & _DEBUG_OFF & _LVP_OFF & _FCMEN_ON & _IESO_OFF  
@ __CONFIG _CONFIG2, _WRT_OFF & _BOR40V

'                          DEFINES & INCLUDES
' ================================================================
 DEFINE OSC 8

'                REGISTERS AND PINOUT ( 1 = IN; 0 = OUT )
' ================================================================
           '76543210          '76543210
 TRISA   = %00000000: PORTA = %00000000 
 TRISB   = %00000000: PORTB = %00000000
 TRISC   = %00010000: PORTC = %00000000
 TRISD   = %00000000: PORTD = %00000000
 TRISE   = %00000000: PORTE = %00000000
 ADCON0  = %00000000
 ADCON1  = %00000000
 ANSEL   = %00000000 
 ANSELH  = %00000000
 CM1CON0 = %00000000
 CM2CON0 = %00000000
 
 SSPSTAT = %00000000  'Configures the SPI Module ( Read DataSheet )	
 SSPCON  = %00110001  'Configures the SPI Module ( Read DataSheet )		
 
'                         ALIAS & MODIFIERS
' ================================================================
   CS VAR PORTC.1  'Pin 1 of the 93C46N - PDIP CASE ( CS )
  CLK VAR PORTC.3  'Pin 2 of the 93C46N - PDIP CASE ( SK )
  SDI VAR PORTC.4  'Pin 4 of the 93C46N - PDIP CASE ( DO )
  SDO VAR PORTC.5  'Pin 3 of the 93C46N - PDIP CASE ( DI )
  
'                        VARIABLES & COSTANTS
' ================================================================
 ADDRESS VAR BYTE  'Address position to read or write
     BT0 VAR BYTE  'Byte 0 to read or write
     BT1 VAR BYTE  'Byte 1 to read or write
       I VAR BYTE

'                              DEFINES
' ====================================================================
 DEFINE LCD_DREG PORTB       ' LCD Data bits on PORTB
 DEFINE LCD_DBIT 0           ' PORTB starting address
 DEFINE LCD_RSREG PORTB      ' LCD RS bit on PORTB
 DEFINE LCD_RSBIT 4          ' LCD RS bit address
 DEFINE LCD_EREG PORTB       ' LCD E bit on PORTB
 DEFINE LCD_EBIT 5           ' LCD E bit address
 DEFINE LCD_BITS 4           ' LCD in 4-bit mode
 DEFINE LCD_LINES 2          ' LCD has 2 rows
 DEFINE LCD_COMMANDUS 2000   ' Set command delay time in us
 DEFINE LCD_DATAUS 50        ' Set data delay time in us
 
 DEFINE DEBUG_REG PORTC  
 DEFINE DEBUG_BIT 6
 DEFINE DEBUG_BAUD 19200
 DEFINE DEBUG_MODE 0
 
'                           PROGRAM INIT
' ================================================================
                   '0123456789012345              
    LCDOUT $FE, 1, " 93C46   EEPROM "
    PAUSE 2000   
    DEBUG "Start", 13,10,13,10
    
'                            MAIN LOOP
' ================================================================
MAIN:
    FOR I = 0 TO 63
        GOSUB READ2BYTES
        LCDOUT $FE, 1, "Iteracao: ", DEC I
        LCDOUT $FE,$C0,"BT0:", HEX BT0, " - BT1:", HEX BT1
        DEBUG "Iteracao: ", DEC I," - ", HEX BT0,HEX BT1,13,10
    NEXT
    STOP
    GOTO MAIN
'                              SUB - ROTINES
' ================================================================  
WRITE2BYTES:
    CS=1                      'Enable Device
    SSPBUF = $1               'Start Bit
    SSPBUF = $30              'Command to Write                                                                                      
    CS=0                      'Disable Device

    CS=1                      'Select Device
    SSPBUF = $1               'Start Bit
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    SSPBUF = $40 | ADDRESS    '01000000 Ored with ADDRESS
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    SSPBUF = BT0              'Data 00
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    SSPBUF = BT1              'Data 01
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set                                                                           
    CS=0                      'Disable Device
    PAUSE 5                   'Insure that you don't work you the device for 5ms
RETURN

READ2BYTES:
    CS=1                      'Enable Device
    SSPBUF = $1               'Start Bit
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    SSPBUF = $80 | ADDRESS    '10000000 Ored with ADDRESS
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    SSPCON.4=0                'Change Signal Clock "DataSheet of the PIC"
    SSPBUF = $0               'Send Something
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    BT0=SSPBUF                'Read the SSPBUF to the BT0 Variable
    SSPBUF = $0               'Send Something
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    BT1=SSPBUF   	          'Read the SSPBUF to the BT1 Variable
    CS=0                      'Disable Device  
    SSPCON.4=1                'Change the clock to initial state
    PAUSE 5                   'Insure that you don't work you the device for 5ms
RETURN

ERASEALL:
    CS = 1                    'Enable Device
    SSPBUF = $1               'Start Bit
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    SSPBUF = $20              'Command to Erase ALL
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    CS = 0                    'Disable Device 
    PAUSE 5                   'Insure that you don't work you the device for 5ms
RETURN

WRITEALL:
    CS = 1                    'Enable Device
    SSPBUF = $1               'Start Bit
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    SSPBUF = $10              'Command to Erase ALL
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    SSPBUF = BT0              'Data Pattern 00
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set
    SSPBUF = BT1              'Data Pattern 01
    WHILE SSPSTAT.0=0:WEND    'Wait for the BF flag to be Set    	
    CS = 0                    'Disable Device 
    PAUSE 5                   'Insure that you don't work you the device for 5ms
RETURN          
END


Code:
'****************************************************************
'*  Name    : 93C46N EEPROM                                     *
'*  Author  : [GADELHAS]                                        *
'*  Notice  : Copyright (c) 2012                                *
'*          : All Rights Reserved                               *
'*  Date    : 08-02-2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          : EASYPICV6 + PIC16F887 + 93C46N - FARCHILD         *
'****************************************************************
'                              CONFIGS
' ================================================================
@ __CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _BOR_OFF & _DEBUG_OFF & _LVP_OFF & _FCMEN_ON & _IESO_OFF  
@ __CONFIG _CONFIG2, _WRT_OFF & _BOR40V

'                          DEFINES & INCLUDES
' ================================================================
 DEFINE OSC 8

'                REGISTERS AND PINOUT ( 1 = IN; 0 = OUT )
' ================================================================
           '76543210          '76543210
 TRISA   = %00000000: PORTA = %00000000 
 TRISB   = %00000000: PORTB = %00000000
 TRISC   = %10101101: PORTC = %00000000
 TRISD   = %00000000: PORTD = %00000000
 TRISE   = %00000000: PORTE = %00000000
 ADCON0  = %00000000
 ADCON1  = %00000000
 ANSEL   = %00000000 
 ANSELH  = %00000000
 CM1CON0 = %00000000
 CM2CON0 = %00000000	
 
'                         ALIAS & MODIFIERS
' ================================================================
   CS VAR PORTC.1  'Pin 1 of the 93C46N - PDIP CASE ( CS )
  CLK VAR PORTC.3  'Pin 2 of the 93C46N - PDIP CASE ( SK )
  SDI VAR PORTC.4  'Pin 4 of the 93C46N - PDIP CASE ( DO )
  SDO VAR PORTC.5  'Pin 3 of the 93C46N - PDIP CASE ( DI )
  
'                        VARIABLES & COSTANTS
' ================================================================
 ADDRESS VAR BYTE  'Address position to read or write
     BT0 VAR BYTE  'Byte 0 to read or write
     BT1 VAR BYTE  'Byte 1 to read or write
       I VAR BYTE

'                              DEFINES
' ====================================================================
 DEFINE LCD_DREG PORTB       ' LCD Data bits on PORTB
 DEFINE LCD_DBIT 0           ' PORTB starting address
 DEFINE LCD_RSREG PORTB      ' LCD RS bit on PORTB
 DEFINE LCD_RSBIT 4          ' LCD RS bit address
 DEFINE LCD_EREG PORTB       ' LCD E bit on PORTB
 DEFINE LCD_EBIT 5           ' LCD E bit address
 DEFINE LCD_BITS 4           ' LCD in 4-bit mode
 DEFINE LCD_LINES 2          ' LCD has 2 rows
 DEFINE LCD_COMMANDUS 2000   ' Set command delay time in us
 DEFINE LCD_DATAUS 50        ' Set data delay time in us
 
 DEFINE DEBUG_REG PORTC  
 DEFINE DEBUG_BIT 6
 DEFINE DEBUG_BAUD 19200
 DEFINE DEBUG_MODE 0
 
'                           PROGRAM INIT
' ================================================================
                   '0123456789012345              
    LCDOUT $FE, 1, " 93C46   EEPROM "
    PAUSE 2000   
    DEBUG "Start",13,10,13,10
    
'                            MAIN LOOP
' ================================================================
MAIN:
    FOR I = 0 TO 63
        GOSUB READ2BYTES
        LCDOUT $FE, 1, "Iteracao: ", DEC I
        LCDOUT $FE,$C0,"BT0:", HEX BT0, " - BT1:", HEX BT1
        DEBUG "Iteracao: ", DEC I," - ", HEX BT0,HEX BT1,13,10
    NEXT
    STOP
    GOTO MAIN
'                              SUB - ROTINES
' ================================================================  
WRITE2BYTES:
    CS = 1                                                                      
    SHIFTOUT SDO,CLK,1,[%10011,0\4]  'Enable write          
    PAUSE 5                                                                                                 
    CS = 0                                                                                     
                                                                                                             
    CS = 1                                                                         
    SHIFTOUT SDO, CLK, 1, [%101\3,ADDRESS\6,BT0,BT1]  'Two bytes at a time                                                     
    PAUSE 5                                                                                                  
    CS = 0  
RETURN

READ2BYTES:
    CS=1
    SHIFTOUT SDO,CLK,1,[%110\3,ADDRESS\6]
    SHIFTIN SDI,CLK,2,[BT0,BT1]  'Two bytes at a time  
    PAUSE 5  
    CS=0
RETURN

ERASEALL:
    CS = 1                                                                      
    SHIFTOUT SDO,CLK,1,[%10010,0\4]             
    PAUSE 5                                                                                                  
    CS = 0
RETURN

WRITEALL:
    CS = 1                                                                  
    SHIFTOUT SDO,CLK,1,[%10001,0\4,BT0,BT1]  'Two bytes data pattern              
    PAUSE 5                                                                                                 
    CS = 0
RETURN          
END