Suma kontrolna SIO

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 22:49, 8 kwi 2010
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 17:09, 18 sty 2011
Xxl (Dyskusja | wkład)
(tu po ADC #$00 znacznik C zawsze = 0)
Next diff →
Linia 10: Linia 10:
LDX #$00 LDX #$00
STX CHKSUM STX CHKSUM
- CRC LDA DATA,X 
CLC CLC
 + CRC LDA DATA,X
ADC CHKSUM ADC CHKSUM
ADC #$00 ADC #$00

Wersja z dnia 17:09, 18 sty 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);
    }
Personal tools