comparison src/os9/crc.c @ 57:2088fd998865

sbc09 directry clean up
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 23 Jul 2018 16:07:12 +0900
parents os9/crc.c@9a224bd9b45f
children
comparison
equal deleted inserted replaced
56:4fa2bdb0c457 57:2088fd998865
1 #include <stdio.h>
2
3 #include "os9.h"
4
5 int os9_crc(OS9_MODULE_t *mod)
6 {
7 int i;
8 u_char crc[3] = {0xff, 0xff, 0xff};
9 u_char *ptr = (u_char *) mod;
10 u_char a;
11
12 for (i = 0; i < INT(mod->size); i++)
13 {
14 a = *(ptr++);
15
16 a ^= crc[0];
17 crc[0] = crc[1];
18 crc[1] = crc[2];
19 crc[1] ^= (a >> 7);
20 crc[2] = (a << 1);
21 crc[1] ^= (a >> 2);
22 crc[2] ^= (a << 6);
23 a ^= (a << 1);
24 a ^= (a << 2);
25 a ^= (a << 4);
26 if (a & 0x80) {
27 crc[0] ^= 0x80;
28 crc[2] ^= 0x21;
29 }
30 }
31 if ((crc[0] == OS9_CRC0) &&
32 (crc[1] == OS9_CRC1) &&
33 (crc[2] == OS9_CRC2))
34 return 1;
35
36 return 0;
37 }
38
39 int os9_header(OS9_MODULE_t *mod)
40 {
41 u_char tmp = 0x00;
42 u_char *ptr = (u_char *) mod;
43 int i;
44
45 for (i = 0; i < OS9_HEADER_SIZE; i++)
46 tmp ^= *(ptr++);
47
48 return tmp;
49 }