; TITLE "SCRC2 - Syslib 4.0" NAME ('CRC2') ;================================================================= ; The Libraries, Version 4, (C) 1989 by Alpha Systems Corp. ;----------------------------------------------------------------- ; Author : Harold F. Bower ; Derived from SCRC2.Z80 Ver 1.1 by Richard Conn ; Date : 17 Sep 89 ; Version : 1.2 ; Module : SCRC2 ; Abstract: This module contains the routines CRC2CLR, CRC2DONE ; and CRC2UPD which implement the Cyclic Redundance Code ; error checking method used in the CRCK 4.2 program. It ; was adapted from Keith Petersen's program originally by ; Fred Gutman. This is from "EDN" magazine, June 5, 1979 ; issue, page 84. ; These routines are typically used as follows: ; CRC$MAKE: ; ROUTINE TO ESTABLISH CRC VALUE ; CALL CRC2CLR ; CLEAR CRC ; ; ACQUIRE VALUES ; CALL CRC2DONE ; GET VALUE ; LD (CRCVAL),HL ; SAVE VALUE ; CRC$CHECK: ; ROUTINE TO CHECK CRC VALUE ; CALL CRC2CLR ; CLEAR CRC ; ; ACQUIRE VALUES ; CALL CRC2DONE ; NOW DONE ; EX DE,HL ; DE=RETURNED CRC ; LD HL,(CRCVAL) ; FROM BEFORE ; CALL COMPHD ; COMPARE HL TO DE FOR EQUALITY ; JP NZ,ERROR ; ERROR IF NOT EQUAL ; Revision: ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Module Entry Points PUBLIC CRC2CLR, CRC2DONE, CRC2UPD .Z80 CSEG ;=============================================================== ; NAME - CRC2CLR ; Entry: - None ; Exit : - None ; Uses : - None ; Special Requirements: None ;=============================================================== CRC2CLR: PUSH HL LD HL,0 ; Set CRC to Zero LD (CRCVAL),HL POP HL RET ;=============================================================== ; NAME - CRC2UPD ; Entry: A - Contains the char to add to CRC calculation ; Exit : - None ; Uses : - None ; Special Requirements: None ;=============================================================== CRC2UPD: PUSH HL ; Save HL PUSH BC ; Save BC PUSH AF ; Save byte to update LD B,A ; Save byte in B LD HL,(CRCVAL) ; Get remainder LD A,H AND 128 ; Q-Bit mask PUSH AF ; Save stausS ADD HL,HL ; 2 X R(X) LD A,B ; Get byte ADD A,L LD L,A POP AF JR Z,CRCU1 ; If Q-Bit is zero LD A,H XOR 0A0H ; MS half of Gen. Poly LD H,A LD A,L XOR 97H ; LS half of Gen. Poly LD L,A CRCU1: LD (CRCVAL),HL ; Save result POP AF ; Restore regs POP BC POP HL RET ;=============================================================== ; NAME - CRC2DONE ; Entry: - None ; Exit : HL - Contains final bytes to send (first H, then L) ; Uses : HL ; Special Requirements: None ;=============================================================== CRC2DONE: LD HL,(CRCVAL) ; Return CRC value in HL RET ; Buffer for CRC value DSEG ; Put in Data Segment CRCVAL: DEFS 2 END