задачка - crc16 ccitt на Z80.
Алгоритм такой:
На асме у меня получилось такое:Код:// Update the CRC for transmitted and received data using // the CCITT 16bit algorithm (X^16 + X^12 + X^5 + 1). unsigned char ser_data; static unsigned int crc; crc = (unsigned char)(crc >> 8) | (crc << 8); crc ^= ser_data; crc ^= (unsigned char)(crc & 0xff) >> 4; crc ^= (crc << 8) << 4; crc ^= ((crc & 0xff) << 4) << 1;
Кто быстрее? Только чур без использования таблиц!... =)Код:;hl - from ;b - how many ;de - crc value crc16: ld de,#ffff loop: ld a,d ld d,e xor (hl) inc hl ld e,a rrca rrca rrca rrca and #0f xor e ld e,a rrca rrca rrca ld c,a rrca and #f0 xor d ld d,a ld a,c and #1f xor d ld d,a ld a,c and #e0 xor e ld e,a djnz loop ret
набор тестовых векторов:
Код:одна латинская буква "A" 0xB915 9 символов "123456789" 0x29B1 256 латинских букв "A" подряд 0xEA0B




Ответить с цитированием
