Цитата Сообщение от CityAceE Посмотреть сообщение
boo_boo, я брал эту процедуру в готовм виде из ZX-Ревю. Так что предложить что-то другое не могу. Но точно знаю, что elf/2 разобрлася с процедурой и перевёл её на ПЦ для поддержки в своём плагине для FAR. Может быть он поделится своим наработками?
Код:
WORD crc(BYTE* ptr, WORD len)
{
  WORD crc = 0;
  
  for(; len; len--)
  {
    BYTE tmp = crc ^ *ptr++;
    
    WORD bCRC = 0;
    for(int i = 0; i < 8; ++i)
    {
      WORD lBit = bCRC & 1;
      bCRC >>= 1; bCRC |= lBit<<15; // RRA crc

      if((tmp & 1) ^ lBit) bCRC ^= 0xA001;
      tmp >>= 1;
    }
    crc = bCRC ^ (crc<<8 | crc>>8);
  }
  return (crc<<8 | crc>>8);
}

WORD Manager::calcDScrc(void)
{
  return crc(zeroTrk+9*sectorSize+2, 256+9+11*noFolders);
}
вот как-то так