# 기본 모드 체크섬

기본 모드 파일 전송 명령에서 사용하는 체크섬은 표준 16비트 CRC(순환 중복 검사)입니다. CRC를 계산하는 알고리즘은 다음과 같습니다. 이 예에서 변수 CRC는 부호 없는 16비트이고 입력 바이트는 8비트입니다.

1. CRC를 0으로 설정합니다.
2. 데이터 스트림에서 다음 바이트를 가져옵니다.

3. CRC의 최상위 비트와 입력 바이트를 테스트하고 다음을 수행합니다.

   동일하면 CRC 왼쪽으로 1만큼 이동합니다.

   한 비트가 0이고 다른 비트가 1이면 CRC를 왼쪽으로 1만큼 이동하고 4129와 XOR을 수행합니다.

4. 입력 바이트를 왼쪽으로 1 이동합니다.
5. 입력 바이트를 8번 이동하지 않았다면 3단계로 이동합니다.
6. 데이터 스트림에 남은 바이트가 있으면 2단계로 이동합니다.

이 알고리즘에 대한 이론적 설명은 C:The Art of Scientific Computing의 Numerical Recipes.1 Press, William H., et al. Cambridge, MA: Cambridge University Press, 1992, 896-901에 있습니다.
한 번에 한 비트씩 CRC를 계산하는 AC 함수는 다음과 같습니다.

    unsigned short CalculateCRC(char* buffer, int size)
    {
      unsigned short cword = 0;
      unsigned short ch;
      int i,j;
      for (i = 0; i < size; i++) {
        ch = buffer[i] << 8;
        for (j = 0; j < 8; j++) {
          if ((ch & 0x8000) ^ (cword & 0x8000)) {
            cword = (cword << 1) ^ 4129;
          }
          else {
            cword <<= 1;
          }
          ch <<= 1;
        }
      }
      return cword;
    }

비전 시스템은 16진수로 인코딩된 파일 콘텐츠의 ASCII 문자 값에서 전송되는 파일의 체크섬을 계산합니다. 예:

파일 내용 | 0xAB 0xCD 0xEF 0x01
ASCII 값 | ABCDEF01
검사할 바이트 값 | 0x41 0x42 0x43 0x44 0x45 0x46 0x30 0x31

기본 모드 명령을 통한 파일 전송을 위해 이 인코딩을 사용하면 80자마다 캐리지 리턴과 줄 바꿈 문자가 추가됩니다.