	LIST P=16F877
	#INCLUDE"P16F877.INC"
	__CONFIG	_HS_OSC&_LVP_OFF&_WDT_OFF&_PWRTE_ON&_BODEN_ON
	CBLOCK 0X20
	LOOP1, LOOP2, LOOP3, LCDMEM, ADDHI, ADDLO, MEM, SPIDATA,
	ENDC
	ORG	0X000

START

	#DEFINE	ECS		PORTD,7 ;EPROM CHIP SELECT
	#DEFINE	EHOLD	PORTD,6 ;EPROM HOLD
	BCF		STATUS,RP0
	BCF		STATUS,RP1
	CLRF	PORTB
	CLRF	PORTD
	CLRF	PORTC
	BSF		STATUS,RP0
	MOVLW	B'00000000'
	MOVWF	PORTB
	MOVLW	B'00000001'
	MOVWF	PORTD
	MOVLW	B'11010111'
	MOVWF	TRISC
	CLRF	PIE1
	CLRF	INTCON
	MOVLW	B'01001000' ;sc001000' s:SMP,c:CKE
	MOVWF	SSPSTAT
	BCF		STATUS,RP0
	MOVLW	D'14'
	MOVWF	ADCON1
	MOVLW	B'00100010' ;FOSC/16
;0010 0000 :FOSC/4
;0010 0001 ;FOSC/16
;0010 0010 ;FOSC/64
	MOVWF	SSPCON
	BSF		ECS
	BSF		EHOLD
	CALL	DELAY
;-----------------------------------------------------------------

RSTATUS

	BCF		ECS
	MOVLW	B'00000110' ;EPROM WRITE ENABLE
	CALL	SPIW
	BSF		ECS
	CALL	DELAY
	BCF		ECS
	MOVLW	B'00000101' ;EPROM READ STATUS REG
	CALL	SPIW
	CALL	SPIR
	BSF		ECS
	MOVFW	SPIDATA
	MOVWF	PORTB
	GOTO	STOP


;------------------------------------------------------------------------

SPIW

	MOVWF	SSPBUF
	BSF		STATUS,RP0
SPILOOP
	BTFSS	SSPSTAT,BF
	GOTO	SPILOOP
	BCF		STATUS,RP0
	MOVF	SSPBUF,0
	MOVWF	SPIDATA
	RETURN

SPIR

	MOVLW	B'00000000'
	MOVWF	SSPBUF
	BSF		STATUS,RP0
SPILOOP2
	BTFSS	SSPSTAT,BF
	GOTO	SPILOOP2
	BCF		STATUS,RP0
	MOVF	SSPBUF,0
	MOVWF	SPIDATA
	RETURN


DELAY
	MOVLW	D'28' ;30
	MOVWF	LOOP1
OUTER
	MOVLW	D'100' ;100
	MOVWF	LOOP2
INNER
	NOP
	NOP
	DECFSZ	LOOP2,F
	GOTO	INNER
	DECFSZ	LOOP1,F
	GOTO	OUTER
	RETURN


STOP

	NOP
	GOTO	STOP

END