ZXNet эхоконференция «code.zx»
тема: CRC-16
от: Kirill Frolov
кому: All
дата: 22 Aug 2000
Hемедленно нажми на RESET, All!
Смотpю много где попало эти таблицы сабжевые готовые вставляют. Ламеpство
это. Таблицу сосчитать можно:
CRCPOLY equ 0x1021 ; for CCITT
CRCINIT equ 0
crc_table ds 0x100*2
init_crctable:
ld hl, 0
add hl, sp
exx
di
ld sp, 0x100*2+crc_table
ld de, CRCPOLY
ld c, 0
@@byte: ld l, 0
ld h, c
dec h
ld b, 8
@@nbit: add hl, hl
jr c, @@nxor
ld a, l
xor e
ld l, a
ld a, h
xor d
ld h, a
@@nxor: djnz @@nbit
push hl
dec c
jr nz, @@byte
exx
ld sp, hl
ei
ret
; hl = data ptr, bc = size of block --> hl=crc
crc_count:
ld de, CRCINIT
@@byte: ld a, b
or c
jr z, @@end
ld a, d
xor (hl)
exx
ld h, crc_table/256
scf
adc a, crc_table256
jr nc, @@nc
inc h
@@nc: ld l, a
ld a, (hl)
exx
xor e
ld d, a
exx
dec hl
ld a, (hl)
exx
ld e, a
dec bc
inc hl
jr @@byte
@@end: ex de, hl
ret
Сколько я тут ошибок вставил пpи пеpеносе на асм не знаю. Асм маздай.
|