*** empty log message ***
[h316.git] / pc-tools / ldc2 / src / silent_code.cpp
diff --git a/pc-tools/ldc2/src/silent_code.cpp b/pc-tools/ldc2/src/silent_code.cpp
new file mode 100644 (file)
index 0000000..0c00a32
--- /dev/null
@@ -0,0 +1,57 @@
+#include "silent_code.hh"
+
+//#include <stdio.h>
+
+unsigned char silent_demangle (unsigned char in)
+{
+    if (in & 64)
+       switch (in) {
+       case 0174:
+           return 05;
+           break;
+       case 0374:
+           return 045;
+           break;
+       case 0175:
+           return 012;
+           break;
+       case 0375:
+           return 052;
+           break;
+       case 0176:
+           return 021;
+           break;
+       case 0376:
+           return 061;
+           break;
+       case 0177:
+           return 023;
+           break;
+       case 0377:
+           return 063;
+           break;
+       default: // Illegal branch
+           return 0;
+           break;
+    } else {
+       if (in & 128)
+           in |= 32;
+       return in;
+    }
+    return 0; // Never executed
+}
+
+unsigned short combine466 (unsigned char *raw) {
+    unsigned short r1, r2, r3;
+    unsigned short result=0;
+    r1 = silent_demangle ((raw)[0]) & 017;
+    r2 = silent_demangle ((raw)[1]) & 077;
+    r3 = silent_demangle ((raw)[2]) & 077;
+
+    result=r3;
+    result|=r2<<6;
+    result|=r1<<12;
+ //    printf ("data: %02x %02x %02x   %04x \n",r1,r2,r3,result);
+    return result;
+}
+