        .MODEL  medium

        .CODE

; Hard wired for ^16+^12+^5+1, "CITT CRC16" - HDLC, X.25

        PUBLIC  _add2CRCCITTa
_add2CRCCITTa   PROC

        ARG     newData:BYTE, oldCRC:WORD
        push    BP
        mov     BP,SP

        push    DX

        mov     AX,[oldCRC]

;       oldCRC ^= newData
        xor     AL,[newData]

;       oldCRC  = (oldCRC >> 8) | (oldCRC << 8)
        xchg    AL,AH

;       oldCRC ^= (oldCRC & 0xFF00) << 4
        xor     DX,DX
        mov     DH,AH
        shl     DX,4
        xor     AX,DX

;       oldCRC ^= oldCRC >> 12
        xor     DX,DX
        mov     DL,AH
        shr     DX,4
        xor     AX,DX

;       oldCRC ^= (oldCRC & 0xFF00) >> 5
        xor     DX,DX
        mov     DH,AH
        shr     DX,5
        xor     AX,DX

        pop     DX
        pop     BP

        ret

_add2CRCCITTa   ENDP

        END

