title Hamming Korrektur name ('HAMMING') entry fsend,fempf ; ; Ermitteln des Hamming-Bytes aus einem Zeichen ; ; Eingabe: Zeichen im Akku ; Ausgabe: Hamming-Byte im Akku ; Zeichen im Register C ; fsend equ $ hamming: call hamm ; Hamming-Byte ermitteln add a,' ' ; Als ASCII zurueck ret ; ; Zeichen restaurieren ; ; Eingabe: Hamming-Byte im Akku ; Zeichen in Register C ; Ausgabe: Zeichen im Akku und Register B ; Im Fehlerfall ist Carry gesetzt ; und Akku haelt Fragezeichen ; fempf equ $ dehamming: sub ' ' ; ASCII-Offset entfernen ld d,a ; Hamming-Byte retten ld a,c ; Zeichen holen call corr ; Korrektur ermitteln ld b,a ; Zeichen abspeichern ret nc ld a,'?' ; Fehler - Fragezeichen einsetzen ret ; ; Hamming-Code berechnen ; hamm: ld c,a ; Zeichen retten ld e,a xor a ; Ergebnis initialisieren ld b,7 ; Zaehler fuer 7 Bit ld hl,tab+6 ; Tabelle laden hamm1: sla e ; Zeichen schieben jp p,hamm2 ; Bit testen xor (hl) ; Boole'sche Addition hamm2: dec hl djnz hamm1 ret corr: call hamm ; Hamming-Code berechnen xor d ; Bits vergleichen ld e,01000000b ld b,7 ; Zaehler fuer 7 Bit ld hl,tab+6 ; Tabelle laden corr2: cp (hl) ; Vergleich jr z,corr3 srl e cp e jr z,corr4 dec hl djnz corr2 scf ; Korrektur nicht moeglich ld a,c ret corr3: ld a,c xor e ; Korrigieren ret corr4: ld a,c or a ret ; tab: db 1+8,1+16,1+32 db 2+8,2+16,2+32 db 4+8 end