annotate decode-mixed-mode.c @ 136:da4f7200665f default tip

buncha shit
author Paper <paper@tflc.us>
date Sat, 07 Mar 2026 18:04:10 -0500
parents 8c39820da60a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
1 #include <stdint.h>
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
2 #include <stdio.h>
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
3 #include <stdlib.h>
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
4 #include <inttypes.h>
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
5 #include <string.h>
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
6
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
7 static void decode_size(unsigned long x)
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
8 {
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
9 const char *lut[] = {"No", "One", "Two", "Four"};
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
10
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
11 printf("k%sByteCode", lut[x & 3]);
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
12 }
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
13
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
14 static void func_header(unsigned long x, unsigned long off)
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
15 {
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
16 unsigned long i;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
17 int ret;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
18
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
19 static const char *lut[] = {"void", "OMS_uint8", "OMS_uint16", "OMS_uint32"};
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
20
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
21 /* dont care */
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
22 x >>= 4;
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
23
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
24 printf("%s OMS_Unknown0x%02lX(", lut[x & 3], off);
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
25 ret = !!(x & 3);
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
26 x >>= 2;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
27
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
28 for (i = 1; x; i++, x >>= 2)
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
29 printf("%s%s p%ld", (i == 1) ? "" : ", ", lut[x & 3], i);
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
30
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
31 printf(")\n{\n\t");
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
32 if (ret) printf("return ");
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
33 printf("CallUniversalProc(OMS_InternalFuncTable[0x%02lX],\n\t\t", off);
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
34 }
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
35
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
36 static void gen(unsigned long x)
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
37 {
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
38 unsigned long i;
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
39
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
40 switch (x & 15) {
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
41 case 0:
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
42 printf("kPascalStackBased");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
43 break;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
44 case 1:
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
45 printf("kCStackBased");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
46 break;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
47 case 2:
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
48 printf("I'm too lazy for this!");
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
49 break;
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
50 case 5:
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
51 printf("kThinkCStackBased");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
52 break;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
53 case 8:
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
54 printf("kD0DispatchedPascalStackBased");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
55 break;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
56 case 9:
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
57 printf("kD0DispatchedCStackBased");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
58 break;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
59 case 12:
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
60 printf("kD1DispatchedPascalStackBased");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
61 break;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
62 case 14:
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
63 printf("kStackDispatchedPascalStackBased");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
64 break;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
65 default:
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
66 return;
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
67 }
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
68
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
69 x >>= 4;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
70
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
71 printf(" | RESULT_SIZE(");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
72 decode_size(x);
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
73 printf(")");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
74
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
75 /* trim the fat */
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
76 x >>= 2;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
77
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
78 /* hopefully we're using stack, since that's the ONLY thing i'm handling */
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
79 for (i = 1; x; i++, x >>= 2) {
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
80 printf(" | STACK_ROUTINE_PARAMETER(%lu, ", i);
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
81 decode_size(x);
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
82 printf(")");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
83 }
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
84 }
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
85
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
86 void func_footer(unsigned long x)
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
87 {
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
88 unsigned long i;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
89
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
90 x >>= 6;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
91
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
92 printf("\n\t");
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
93
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
94 for (i = 1; x; i++, x >>= 2)
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
95 printf(", p%lu", i);
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
96
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
97 printf(");\n}");
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
98 }
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
99
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
100 int main(int argc, char *argv[])
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
101 {
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
102 unsigned long x;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
103 int stubs;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
104 int inarg;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
105 unsigned long off;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
106
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
107 if (argc < 2) {
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
108 fprintf(stderr, "usage: decrypt-mixed-call <param>\n");
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
109 return 1;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
110 }
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
111
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
112 stubs = (argc > 2 && !strcmp(argv[1], "-gen-stub"));
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
113
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
114 if (stubs) {
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
115 inarg = 3;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
116 off = strtoul(argv[2], NULL, 0);
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
117 } else
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
118 inarg = 1;
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
119
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
120 x = strtoul(argv[inarg], NULL, 0);
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
121
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
122 if (stubs) {
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
123 func_header(x, off);
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
124 }
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
125 gen(x);
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
126 if (stubs) {
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
127 func_footer(x);
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents: 129
diff changeset
128 }
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
129
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
130 puts("");
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
131
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
132 return 0;
8c39820da60a add decode-mixed-mode.c
Paper <paper@tflc.us>
parents:
diff changeset
133 }