;************************************************ ;* * ;* CRCK.MAC * ;* * ;* CRC CHECK PROCEDURE FOR C/80 * ;* * ;* ENTER: TOS - 2 = OLDCRC * ;* TOS - 4 = BUFSIZE * ;* TOS - 6 = BUFPTR * ;* * ;* EXIT: HL = UPDATED CRC * ;* * ;************************************************ ;REVISION HISTORY ;07/31/82 CAF YAM8.CSM, FOR BDS C ;07/13/84 CEM MODIFY FOR C/80 ;08/18/87 CEM IMPROVE SPEED PUBLIC CRCK ;CRCK is a program to read any CP/M file and print ;a CYCLIC-REDUNDANCY-CHECK number based on the ;CCITT standard polynominal: ; X^16 + X^15 + X^13 + X^7 + X^4 + X^2 + X + 1 ; ;Useful for checking accuracy of file transfers. ;More accurate than a simple checksum. ; ;************************************************** ; ; unsigned crck(buffer, bufsize, oldcrc) ; ; At start of packet, oldcrc is set to 0 ; ; crc is accumulated by: ; oldcrc=crck(buffer, bufsize, oldcrc); CRCK: LXI H,7 DAD SP MOV D,M DCX H MOV E,M ;DE = BUFPTR DCX H MOV B,M DCX H MOV C,M ;BC = COUNT INX B ;ADJUST FOR LOOP ENTRY DCX H MOV A,M DCX H MOV L,M MOV H,A ;HL = CRC ; ;--------------------------------------------- ;An 8080 routine for generating a CYCLIC- ;REDUNDANCY-CHECK. Character leaves that ;character in location REM. By Fred Gutman. ;From 'EDN' magazine, June 5, 1979 issue, page 84. ; jmp QB2 ;enter at loop test DIVP: MOV A,H rlc ;cy = q-bit PUSH PSW ;SAVE STATUS DAD H ;2 X R(X) ldax d ;get next byte inx d ;inc bufptr ADD L MOV L,A POP PSW jnc QB2 ;IF Q-BIT IS ZERO MOV A,H XRI 0A0H ;MS HALF OF GEN. POLY MOV H,A MOV A,L XRI 97H ;LS HALF OF GEN. POLY MOV L,A QB2: dcx b ;decrement count mov a,b ora c ;more bytes to do? jnz DIVP ;yes RET END