#include "P18F4455.INC" ORG 0X00 CBLOCK D'0' VAR0 HASH TMP TMP1 TMP2 ENDC GOTO SETUP ;;;;;; function that places 1,2,3,4, .. into memory ;;;;;;; ;;;;;; BANK-ul 2 este de la: 200h-2FFh ;;;;;;;;; PUT_VALS: CLRF FSR0L CLRF FSR0H BSF FSR0H,1 ; 200H MOVLW D'255' MOVWF VAR0 NEXT: INCF VAR0,1 MOVFF VAR0,POSTINC0 BTFSS FSR0H,0 GOTO NEXT RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SETUP: CALL PUT_VALS ;;;;;;;;;; calculate function ;;;;;;;;; ;;; ~( ( ( bank[2][10] << 3 )^( bank[2][50] >> 2 ) )^( bank[2][200] >>> 2 ) )^235 ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ( bank[2][10] << 3 ) LFSR FSR0,D'522' MOVF INDF0,W MULLW 8 MOVFF PRODL,TMP ; ( bank[2][50] >> 2 ) LFSR FSR0,D'562' MOVFF INDF0,TMP1 RRCF TMP1,1 BCF STATUS,C RRCF TMP1,1 BCF STATUS,C ; ( bank[2][10] << 3 )^( bank[2][50] >> 2 ) MOVF TMP,W XORWF TMP1,1 ; ( bank[3][200] >>> 2 ) LFSR FSR0,D'712' MOVFF INDF0,TMP2 RRNCF TMP2,1 RRNCF TMP2,1 ; ( ( bank[2][10] << 3 )^( bank[2][50] >> 2 ) )^( bank[3][200] >>> 2 ) ) MOVF TMP1,W XORWF TMP2,1 ; ( ( ( bank[2][10] << 3 )^( bank[2][50] >> 2 ) )^( bank[3][200] >>> 2 ) )^235 ) MOVLW D'235' XORWF TMP2,1 ; ~REZ NEGF TMP2 DECF TMP2,1 MAIN: ; CLRF FSR0L MOVLW H'00' MOVWF FSR0L CLRF FSR0H BSF FSR0H,1 ; 200H ;;;;; init hash rezult ;;;; MOVLW D'235' MOVWF HASH NEXT1: ; MOVLW D'255' BTFSS FSR0H,0 GOTO PROCESS ; END OF STEPPING THROUGH ; GOTO MAIN PROCESS: MOVFF HASH,TMP MOVFF HASH,TMP1 ; (hash << 2) MOVF TMP,W MULLW 4 MOVFF PRODL,TMP ; (hash >> 3) RRCF TMP1,1 BCF STATUS,C RRCF TMP1,1 BCF STATUS,C RRCF TMP1,1 ; (hash << 2) ^ (hash >> 3) MOVF TMP,W XORWF TMP1,1 ; hash = ((hash << 2) ^ (hash >> 3)) ^ (*str) MOVF POSTINC0,W XORWF TMP1,1 MOVFF TMP1,HASH GOTO NEXT1 END