crc.c 626 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include "data.h"
  2. word crc_update (char far *data, word size)
  3. {
  4. word i;
  5. word j;
  6. word crc=0;
  7. for (j=0; j<size; j++){
  8. crc = crc ^ ((word)data[j]<< 8);
  9. for (i=0; i<8; i++){
  10. if (crc & 0x8000)
  11. crc = (crc << 1) ^ 0x1021;
  12. else
  13. crc <<= 1;
  14. }
  15. }
  16. return crc;
  17. }
  18. word crc_update_mem (unsigned long addr, word size)
  19. {
  20. word i;
  21. word j;
  22. word crc=0;
  23. for (j=0; j<size; j++){
  24. crc = crc ^ ((word) *(byte*)(addr+j)<< 8);
  25. for (i=0; i<8; i++){
  26. if (crc & 0x8000)
  27. crc = (crc << 1) ^ 0x1021;
  28. else
  29. crc <<= 1;
  30. }
  31. }
  32. return crc;
  33. }