Suma kontrolna SIO

Z Atariki
Wersja z 9 kwi 2010, 00:42 autorstwa KMK (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Z angielskiego cyclic redundancy check, czyli cykliczny kod nadmiarowy, liczba dołączana do bloku przesyłanych danych, 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
CRC LDA DATA,X
    CLC
    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);
    }