0c00a322fcce869b96718bcf1af1d88d4ae76fca
[h316.git] / pc-tools / ldc2 / src / silent_code.cpp
1 #include "silent_code.hh"
2
3 //#include <stdio.h>
4
5 unsigned char silent_demangle (unsigned char in)
6 {
7 if (in & 64)
8 switch (in) {
9 case 0174:
10 return 05;
11 break;
12 case 0374:
13 return 045;
14 break;
15 case 0175:
16 return 012;
17 break;
18 case 0375:
19 return 052;
20 break;
21 case 0176:
22 return 021;
23 break;
24 case 0376:
25 return 061;
26 break;
27 case 0177:
28 return 023;
29 break;
30 case 0377:
31 return 063;
32 break;
33 default: // Illegal branch
34 return 0;
35 break;
36 } else {
37 if (in & 128)
38 in |= 32;
39 return in;
40 }
41 return 0; // Never executed
42 }
43
44 unsigned short combine466 (unsigned char *raw) {
45 unsigned short r1, r2, r3;
46 unsigned short result=0;
47 r1 = silent_demangle ((raw)[0]) & 017;
48 r2 = silent_demangle ((raw)[1]) & 077;
49 r3 = silent_demangle ((raw)[2]) & 077;
50
51 result=r3;
52 result|=r2<<6;
53 result|=r1<<12;
54 // printf ("data: %02x %02x %02x %04x \n",r1,r2,r3,result);
55 return result;
56 }
57