PDA

Просмотр полной версии : CRC-16 bit



Orionsoft
03.12.2006, 12:13
кто подскажет процедуру которая считает сабж , но не ограничена 256 байтами как в извесном исходнике ...

Orionsoft
03.12.2006, 12:43
о нашел и проверил , она правильно расчитывает в формате cciit


CRC16:
;Borrowed from http://zilog.sh.cvut.cz/~base/misc/z80bits.html
; and moddified to be a loop
;The arrow comments show what lines I added or commented out from the original.
;Inputs: de->data bc=number of bytes
;Outputs: hl=CRC16
push bc ;<---<<<
push de ;<---<<<
push af ;<---<<<
ld hl,$FFFF
push bc ;<---<<<
CRC16_Read:
ld a,(de)
inc de
xor h
ld h,a
ld b,8
CRC16_CrcByte:
add hl,hl
jr nc,CRC16_Next
ld a,h
xor $10
ld h,a
ld a,l
xor $21
ld l,a
CRC16_Next:
djnz CRC16_CrcByte
; dec c ;>>>--->
pop bc ;<---<<<
dec bc ;<---<<<
push bc ;<---<<<
ld a,b ;<---<<<
or c ;<---<<<
jr nz,CRC16_Read
pop bc ;<---<<<
pop af ;<---<<<
pop de ;<---<<<
pop bc ;<---<<<
ret

jtn
03.12.2006, 12:48
кто подскажет процедуру которая считает сабж , но не ограничена 256 байтами как в извесном исходнике ...исходник hrust2.x

fk0
03.12.2006, 13:51
кто подскажет процедуру которая считает сабж , но не ограничена 256 байтами как в извесном исходнике ...

Для X-modem:



crc=0;
for (i=0; i<block_size; i++) {
if (ptr >= sizeof(buff)) {
debug0("buffer overflow!\n");
send_break("buffer overflow!");
return 0;
}
while (1) {
CHECK_TIMEOUT;
if (kbhit()) {
buff[ptr+i] = c = getch();
crc^=((unsigned)c<<8)&0xff00;
b=8;
do {
if (crc&0x8000) crc<<=1, crc^=0x1021;
else crc<<=1;
} while (--b!=0);
break;
}
}
}


А вообще в своё время в CODE.ZX этот вопрос был рассмотрен, приведено всяческих процедур, и по-моему даже объяснено, что та табличка строится просто через безтабличный алгоритм и может запросто генерироваться динамически, когда нужна скорость и компактность. И даже в моей zxlib есть такой алгоритм:

Только вставить мне его не получилось. Сообщение понимаешь-ли длинное. И мучаться в окошке размером в 1/16 монитора тоже удовольствия мало. Поэтому не буду я тут больше ничего осмысленного писать. Только бредить и абастряться. Спрашивай в fido7.zx.spectrum.

axor
15.12.2006, 17:26
Вот от fk0.