; THIS ROUTE IS USED FOR 93C46 (Configue as
; 16 bits organizatio) READ & WRITE ROUTE

RA	EQU	5
RB	EQU	6

BIT-COUNT EQU


DATA_HI EQU	10H	; HI half of words
DATA_LO EQU	11H	; LO half of words
ROM_AD	EQU	12H	; the address of 93c46

TEMR	EQU	13H	;
BIT_COUNT EQU	14H
;
CM_EWEN EQU	30H
CM_EWDS EQU	0H
;RA
CS	EQU	0
SK	EQU	1
DI	EQU	2


;---------------
;used transmiting the first bits in commands
START_BITS
	BCF	RA,SK
	NOP
	BSF	RA,CS
	NOP
	BSF	RA,DI
	NOP
	BSF	RA,SK
	NOP
	BCF	RA,SK
	RETLW	0
;------------------
;the route of transmitting a byte
TRMIT			;
	MOVLW	8
	MOVWF	BIT_COUNT
TRM0
	BCF	3,0
	BCF	RA,SK
	RLF	TEMR
	BTFSS	3,0
	GOTO	^+3
	BSF	RA,DI
	GOTO	^+2
	BCF	RA,DI
	NOP
	BSF	RA,SK
	DECFSZ	BIT_COUNT
	GOTO	TRM0
	RETLW	0H
;---------------------
;the route of receiving a byte
RECEIVE
	MOVLW	8H
	MOVWF	BIT_COUNT
	CLRF	TEMR
RV0
	BSF	RA,SK
	NOP
	NOP
	BSF	3,0
	BCF	RA,SK
	NOP
	BTFSS	RA,DO
	BCF	3,0
	RLF	TEMR
	DECFSZ	BIT_COUNT
	GOTO	RV0
	RETLW	0H
;=============================
; read a word data.
; the data in ROM_AD is the address of
; the word, which come from main route
RD_ROM
	MOVLW	080H
	IORWF	ROM_AD
	MOVFW	ROM_AD
	MOVWF	TEMR

	CALL	START_BITS
	CALL	TRMIT
RC_DA
	NOP
	BCF	RA,SK
	NOP
	BTFSC	RA,DO
	RETLW	0FFH
	CALL	RECEIVE
	MOVFW	TEMR
	MOVWF	DATA_HI

	CALL	RECEIVE
	MOVFW	TEMR
	MOVWF	DATA_LO
	BCF	RA,CS
	RETLW	0
;=============================
; write a word data.
; the data in ROM_AD is the address of
; the word, which come from main route
WRT
	MOVLW	40H
	IORWF	ROM_AD
	MOVFW	ROM_AD
	MOVWF	TEMR

	CALL	START_BITS
	CALL	TRMIT

	MOVFW	DATA_HI
	MOVWF	TEMR
	CALL	TRMIT
	MOVFW	DATA_LO
	MOVWF	TEMR
	BCF	RA,CS
	RETLW	0H

;-----------------------------
EWEN
	MOVLW	CM_EWEN
	GOTO	EWDS+1
EWDS
	MOVLW	CM_EWDS
	MOVWF	ROM_AD
	MOVFW	ROM_AD
	MOVWF	TEMR

	CALL	START_BITS
	CALL	TRMIT
	BCF	RA,CS
	RETLW	0H

