ASMB NAM CRC16,7 . 92080-1X010 REV.2026 800515 * * SOURCE 92080-18010 * SPC 2 ************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ************************************************************** SPC 2 * ********************************************************************** * * * THIS SUBROUTINE IS USED TO COMPUTE THE CRC-16 * * CHECKSUM OF A BUFFER * * * * CALLING PARAMETERS : * * * * IBUF : BUFFER * * IL : BUFFER LENGTH IN BYTES * * IWD : CHECKSUM WORD * * * ********************************************************************** * * ENT CRC16 EXT .ENTR * * GET CALLING PARAMETER ADDRESS * IBUF NOP BUFFER ADDRESS IL NOP BUFER LENGTH IN BYTES IWD NOP CHECKSUM WORD CRC16 NOP ENTRY POINT JSB .ENTR DEF IBUF * LDA IL,I GET # OF BYTES CMA,INA MAKE IT NEGATIVE SSA,RSS IS POSITIVE JMP CRC16,I YES ERROR ! STA COUNT OK STORE IN COUNTER LDB IBUF GET BUFFER ADDRESS CLE,ELB MULTIPLY BY TWO TO HAVE BYTE ADDRESS * LP1 LBT GET NEXT BYTE IN BUFFER STB IBUF SAVE ADDRESS OF NEXT BYTE LDB A SWAP A AND B REGISTER LDA IWD,I GET OLD CHECKSUM WORD JSB EBCLC COMPUTE NEW CHECSUM STA IWD,I STORE IT LDB IBUF RESTORE B REGISTER ISZ COUNT INCREMENT COUNTER JMP LP1 NOT FINISHED GO TO NEXT BYTE JMP CRC16,I FINISHED RETURN * * SUBROUTINE TO COMPUTE CRC-16 CHECKSUM * EBCLC NOP ENTRY POINT XOR B SLA,RAR XOR POLY SLA,RAR XOR POLY SLA,RAR XOR POLY SLA,RAR XOR POLY SLA,RAR XOR POLY SLA,RAR XOR POLY SLA,RAR XOR POLY SLA,RAR XOR POLY JMP EBCLC,I RETURN * * DATA,CONSTANTS,STORAGE... * A EQU 0 B EQU 1 COUNT NOP POLY OCT 20001 * END CRC16