ついでに、テーブルを使わないでCRCを計算する関数も作成しました。どうしても使用するプログラムメモリを削減したい場合向け。 テーブルを使って高速に計算する関数はこちら /* CRC-16-CCITT を計算する // wikipediaにある実装例の通り(wikipediaの例は多項式が反転、シフトの向きが右) // http://ja.wikipedia.org/wiki/%E5%B7%A1%E5%9B%9E%E5%86%97%E9%95%B7%E6%A4%9C%E6%9F%BB MB8877のデータシートに X^0+X^5+X^12+X^16 と書いてあったので、フロッピーのCRCは CRC-16-CCITT 2014年9月2日作成 */ unsigned short crc_1byte(unsigned char in, unsigned short crc) { /* 1byteづつCRCを計算する wikipediaにある実装例を、テーブルを使わないように書き換えただけ。 unsigned short crc; crc = 0xffff; // 初期値 crc = crc_1byte(0xA1, crc); crc = crc_1byte(0xA1, crc); crc = crc_1byte(0xA1, crc); crc = crc_1byte(0xFE, crc); // A1 A1 A1 FE : ID ADDRESS MARK crc = crc_1byte(0x02, crc); // C crc = crc_1byte(0x00, crc); // H crc = crc_1byte(0x03, crc); // R crc = crc_1byte(0x02, crc); // N これで crc に計算結果が入る (0x4165) */ #define polynomial 0x1021 // 多項式 CRC-16-CCITT X^16+X^12+X^5+X^0 (1 0001 0000 0010 0001) // 0x8005 // CRC-16-IBM X^16...