Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Suche optimale Prüfsumme/Signatur (Z80) » Themenansicht

Autor Thread - Seiten: -1-
000
Heute, 14:13 Uhr
Bert



Hallo Forum!

Ich bin auf der Suche nach einer 'optimalen' Prüfsumme für den KC85.
Optimal bedeutet in diesem Fall:
(A) kurze Laufzeit
(B) eindeutige Signatur, auch bei Datenblöcken mit leerem Inhalt (alles FFs oder alles 0)
(C) ein gewisser Fehlerschutz vor fehlerhaften Bytes oder Burstfehlern
Die Codegröße ist nicht ganz so entscheidend.

Was ich mir schon angeschaut habe:

XOR
Vorteil: schnell (A)
Nachteil: keine eindeutige Signatur bei identischem Inhalt (B) und geringer Fehlerschutz (C)

SUM16
Vorteil: schnell (A)
Nachteil: geringer Fehlerschutz (C)

Fletcher-16
(die Variante mit a = 0, b = 0, M = 255)
Vorteil: guter Fehlerschutz (C und B)
Nachteil: nicht so schnell (A)

Fletcher-16
(die Variante mit a = 0, b = 0, M = 256)
Vorteil: ähnlich schnell wie SUM16 (A)
Nachteil: keine eindeutige Signatur (C)

Fletcher-KC
(die Variante mit a = data[0], b = 0, M = 256)
Vorteil: ähnlich schnell wie SUM16 (A)
Nachteil: kein Standard

Adler-16
(Variante von Fletcher mit a = 1, b = 0, M = 251)
Vorteil: eindeutige Signatur (C)
Nachteil: nur mittelschnell (A)

Alle Algorithmen laufen auf dem PC (C++) und dem KC85 (C und Assembler).

Die Assemblervariante ist i.d.R. fünf bis zehnmal schneller als die C-Variante:


Letztendlich bräuchte ich einen Algorithmus der den Rest der Division (=Modulo-Operation) mit 255 oder 251 schnell ausrechnet um von der Geschwindigkeit in die Nähe von SUM16 zu kommen.

Wer sich da mal angucken will, ich hab die Quelltexte (und mehr) hier abgelegt:
https://github.com/boert/KC85-Programme_in_C/tree/main/Pruefsummenvergleich

Vielleicht hat ja noch jemand eine gute Idee!
--
Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
Heute, 17:01 Uhr
maleuma



Ich habe in meinem Flash-Programm für CAOS eine modifizierte Fletcher-Routine eingebaut.
Da die Original-Fletcher-Routine für alles 0 und alles FF das gleiche Ergebnis liefert, habe ich statt ADD einfach den Z80-Befehl ADC genommen. Damit ist die Routine genauso schnell, liefert jedoch unterschiedliche Werte bei 00 und FF.
Nachteil: kein Standard und schlechter am PC nachbildbar.

Quellcode:

; Fletcher-Pruefsumme berechnen:
; PE:   HL      Anfangsadresse
;       (PAR1)  Adresse zur Ablage der CRC-Summe
; PA:   DE      CRC
CRCC:   LD      HL,0C000H       ; Anfangsadresse
CRC:    LD      BC,2000H        ; Laenge immer 8 KByte
        LD      DE,'KC'         ; Startwert
; Adjust 16-bit length for 2x8-bit loops
        inc     b               ; BC = 2100H
        dec     bc              ; BC = 20FFH
        inc     c               ; BC = 2000H          Takte:
FLLOOP: ld      a,(hl)          ;                       7
        inc     hl              ;                       6
        add     a,e             ; sum1 += data          4
        ld      e,a             ;                       4
        adc     a,d             ; sum2 += sum1 + cy     4
        ld      d,a             ;                       4
        dec     c               ;                       4
        jp      nz,FLLOOP       ;                       10
        djnz    FLLOOP          ;                          13 (8)


--
Mario.

Dieser Beitrag wurde am 17.05.2026 um 17:07 Uhr von maleuma editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek