; *************************************************************************** ; copyright : (C) 2023 by Martin Preuss ; email : martin@libchipcard.de ; ; *************************************************************************** ; * This file is part of the project "AqHome". * ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** ; *************************************************************************** ; defines .equ CRC8_POLYNOMIAL = 0x97 ; HD=4 up to 119 bytes, e.g. detects all 1 to 3 bit errors .cseg ; --------------------------------------------------------------------------- ; calc crc8 checksum using given polynomial ; ; IN: ; - X : pointer to data to calc crc8 for ; - r18: number of bytes to calc crc8 for ; OUT: ; - r16: crc8 checksum ; - X : point directly behind the checked area ; MODIFIED REGS: R16, R17, R18, R19, R20, X crc8Calc: ldi r16, 0xff ; crc ldi r19, CRC8_POLYNOMIAL crc8Calc_loop1: ld r17, X+ ; running var eor r16, r17 ldi r20, 8 ; counter for loop2 crc8Calc_loop2: lsl r16 brcc crc8Calc_l1 eor r16, r19 crc8Calc_l1: dec r20 brne crc8Calc_loop2 dec r18 brne crc8Calc_loop1 ret