|
;Do CRC Verify
;8 byte (1 family[0x7F], 6 key[END_0x7E..BEGIN_0x79], 1 crc[0x78])
movlw 0x7F ; start add FSR
movwf FSR
movlw .7
movwf CountByte ; 7 byte data
clrf CRC8 ; clear CRC8 var
crc_1
movlw .8
movwf Count ; 8 bit data
movf INDF,w ; copy to W byte
movwf tmp ; save byte
crc_2
вот тут не совсем понятно...
movf tmp,w ; скопировали в W
xorwf CRC8,w ; хорим с CRC8, но ничего не трогая кладем
результат в W
movwf CRC8d ; пишем в CRC8d
rrf CRC8d,w ; сдвигаем вправо на шаг эту CRC8d
movf CRC8,w ; уже кладем CRC8 в W проигнорировав
CRC8d ??? то есть она не нужна?
btfsc STATUS,C
xorlw 0x18 ; xor with fixed
movwf CRC8 ; store new CRC
rrf CRC8,f ; update new CRC
зачем эта переменная CRC8d??? без нее разве нельзя?
почему тоже самое не делается с CRC8 без CRC8d
Чего я тут не понимаю???
bcf STATUS,C
rrf tmp,f ; next bit
decfsz Count ; count bits
goto crc_2
decf FSR,f ; 1 step byte <<
decfsz CountByte,f ; all byte?
goto crc_1 ; not, next do
bcf STATUS,Z ; clear bit Z
movlw 0x78 ; add crc ReadROM to FSR
movwf FSR
movf INDF,w ; Copy byte to W
subwf CRC8,f ; W=CRC8
btfsc STATUS,Z ; W=CRC8???
bsf TIn,1 ; yes, enabled bit
E-mail: info@telesys.ru