Suma kontrolna SIO
From Atariki
(Różnice między wersjami)
Wersja z dnia 17:09, 18 sty 2011 Xxl (Dyskusja | wkład) (tu po ADC #$00 znacznik C zawsze = 0) ← Previous diff |
Wersja z dnia 20:30, 23 maj 2011 Krótki (Dyskusja | wkład) (CRC moved to Suma kontrolna SIO: Artykuł de facto opisuje sumę kontrolną SIO, hasło "CRC" tylko komplikuje sprawę.) Next diff → |
Wersja z dnia 20:30, 23 maj 2011
Z angielskiego cyclic redundancy check, czyli cykliczny kod nadmiarowy, obliczana w pewien określony z góry sposób i dołączana do bloku przesyłanych danych wartość, zapewniająca weryfikację poprawności przesłania.
W praktyce skrót CRC stosuje się często (acz niezbyt prawidłowo) na określenie sumy kontrolnej.
Suma kontrolna SIO
SIO oblicza sumę kontrolną dodając do siebie kolejne bajty przesyłanego bloku, przy czym do wyniku każdego z dodawań dodawane jest przeniesienie. Przykład obliczenia sumy kontrolnej 256 bajtów umieszczonych pod arbitralnie wybranym adresem w pamięci (oznaczonym etykietą DATA):
LDX #$00 STX CHKSUM CLC CRC LDA DATA,X ADC CHKSUM ADC #$00 STA CHKSUM INX BNE CRC
W języku C (wynik w zmiennej cks):
unsigned char cks = 0; unsigned short nck; int i; for (i = 0; i < 256; i++) { nck = cks + data[i]; cks = (nck > 0x00ff) ? ((nck & 0x00ff) + 1) : (nck & 0x00ff); }