Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
cpm:crc [2013/12/16 16:10] – volkerp | cpm:crc [2014/03/11 09:18] (aktuell) – volkerp | ||
---|---|---|---|
Zeile 8: | Zeile 8: | ||
Als Startwert wird eigentlich immer 0FFFFh genommen. | Als Startwert wird eigentlich immer 0FFFFh genommen. | ||
+ | |||
+ | :!: In der DDR-Literatur liest man auch oft " | ||
In Perl kann man die CRC so berechnen (nicht optimiert, reine Umsetzung des Polynoms!). Die Und-Verknüpfung mit 0x8000 erfolgt zur Maskierung des Hi-Bits 15; Die Und-Verknüpfung mit 0xFFFF ist nötig, um das Ergebnis als 16Bit-Zahl zu belassen. | In Perl kann man die CRC so berechnen (nicht optimiert, reine Umsetzung des Polynoms!). Die Und-Verknüpfung mit 0x8000 erfolgt zur Maskierung des Hi-Bits 15; Die Und-Verknüpfung mit 0xFFFF ist nötig, um das Ergebnis als 16Bit-Zahl zu belassen. | ||
- | < | + | < |
$buf = ....; | $buf = ....; | ||
$len = 2048; | $len = 2048; | ||
Zeile 54: | Zeile 56: | ||
out: HL = CRC | out: HL = CRC | ||
- | < | + | < |
+ | ; | ||
+ | ; CRC berechnen | ||
+ | ; Routine aus EPROMA2 | ||
+ | ; in DE = Startadr., BC = Länge, out HL=CRC | ||
+ | ; CRC-CCITT (CRC-16) x16 + x12 + x5 + 1 | ||
+ | ; | ||
crc: | crc: | ||
crc1: | crc1: | ||
Zeile 90: | Zeile 98: | ||
jr nz, crc1 | jr nz, crc1 | ||
ret | ret | ||
+ | </ | ||
+ | |||
+ | und hier eine direkte Implementierung ohne Optimierung (und dadurch langsamer, aber leichter zu verstehen) | ||
+ | |||
+ | <code z80> | ||
+ | ; | ||
+ | ; CRC berechnen | ||
+ | ; Routine aus FA 11/86 | ||
+ | ; ab HL, bis DE, ret HL=CRC (SDLC x16+x12+x5+x1) | ||
+ | ; | ||
+ | |||
+ | ; ab DE, BC Bytes, ret HL=CRC | ||
+ | crc_fa0 ld h, | ||
+ | ld l,e | ||
+ | dec bc | ||
+ | add hl,bc | ||
+ | ex hl,de | ||
+ | ld (arg2), | ||
+ | |||
+ | ; ab HL, bis (arg2), ret HL=CRC | ||
+ | crc_fa ld de, | ||
+ | bytecrc ld b, | ||
+ | crclp1 sla e ; | ||
+ | rl d | ||
+ | sbc a, | ||
+ | xor (hl) ; | ||
+ | and b | ||
+ | jr z,crc0 | ||
+ | ; | ||
+ | ld a,e | ||
+ | xor 21h ; | ||
+ | ld e,a | ||
+ | ld a,d | ||
+ | xor 10h ; | ||
+ | ld d,a | ||
+ | crc0 srl b | ||
+ | jr nc, | ||
+ | ; | ||
+ | ld bc, | ||
+ | xor a ; Cy -> 0 | ||
+ | sbc hl,bc | ||
+ | add hl,bc | ||
+ | inc hl | ||
+ | jr nz, | ||
+ | ex de, | ||
+ | ret | ||
+ | |||
+ | arg2 ds 2 | ||
+ | |||
+ | end | ||
</ | </ | ||
Zeile 96: | Zeile 154: | ||
* http:// | * http:// | ||
* http:// | * http:// | ||
+ | * http:// | ||
===== Hardware ===== | ===== Hardware ===== |