|
|
1.1 root 1: /*
2: * print an instruction
3: */
4:
5: #include "defs.h"
6:
7: typedef unsigned char uchar;
8: typedef unsigned short ushort;
9: typedef unsigned long ulong;
10: static ADDR p;
11: static int isp;
12: long ddisp();
13:
14: #define IHEX 0 /* give up */
15: #define IDISP 1 /* 1 displacement op */
16: #define IFF 2 /* float, float */
17: #define IIF 3 /* int, float */
18: #define IFI 4 /* float, int */
19: #define III 5 /* int, int */
20: #define III3 6 /* int, int; 3 byte instr */
21: #define II 7 /* int */
22: #define IMD 8 /* enter: reg mask, disp */
23: #define IN 9 /* exit, restore: rev reg mask */
24: #define IQI 10 /* quick, int */
25: #define IIID3 11 /* int, int, disp; 3 byte instr */
26: #define INONE 12 /* no operands */
27: #define IDPC 13 /* pc-relative displacement */
28: #define II3 14 /* int; 3 byte */
29: #define IRII 15 /* reg, int, int */
30: #define IRIID 16 /* reg, int, int, disp */
31: #define IM 17 /* reg mask (save) */
32: #define IDMOD 18 /* disp which is really a module number */
33: #define INONE3 19 /* 3-byte no-operand (string stuff) */
34: #define II3X 20 /* 3 byte 1 operand sort of (sfsr) */
35: #define IMR 21 /* mem mgt instructions */
36: #define IPR 22 /* preg instructions */
37: #define ICFG 23 /* setcfg */
38:
39: static
40: struct
41: {
42: uchar f;
43: ushort m;
44: ushort v;
45: char *s;
46: } t[] = {
47: /* begin */
48: III3, 0x3fff, 0x304e, "absb",
49: III3, 0x3fff, 0x334e, "absd",
50: IFF, 0x3fff, 0x35be, "absf",
51: IFF, 0x3fff, 0x34be, "absl",
52: III3, 0x3fff, 0x314e, "absw",
53: IQI, 0x3f, 0x4c, "acbb",
54: IQI, 0x3f, 0x4d, "acbw",
55: IQI, 0x3f, 0x4f, "acbd",
56: III, 0x3f, 0x00, "addb",
57: III, 0x3f, 0x01, "addw",
58: III, 0x3f, 0x03, "addd",
59: III, 0x3f, 0x10, "addcb",
60: III, 0x3f, 0x13, "addcd",
61: III, 0x3f, 0x11, "addcw",
62: IFF, 0x3fff, 0x01be, "addf",
63: IFF, 0x3fff, 0x00be, "addl",
64: III3, 0x3fff, 0x3c4e, "addpb",
65: III3, 0x3fff, 0x3f4e, "addpd",
66: III3, 0x3fff, 0x3d4e, "addpw",
67: IQI, 0x3f, 0x0c, "addqb",
68: IQI, 0x3f, 0x0d, "addqw",
69: IQI, 0x3f, 0x0f, "addqd",
70: III, 0x3f, 0x24, "addrb",
71: III, 0x3f, 0x27, "addrd",
72: III, 0x3f, 0x25, "addrw",
73: II, 0x7ff, 0x57c, "adjspb",
74: II, 0x7ff, 0x57f, "adjspd",
75: II, 0x7ff, 0x57d, "adjspw",
76: III, 0x3f, 0x28, "andb",
77: III, 0x3f, 0x2b, "andd",
78: III, 0x3f, 0x29, "andw",
79: III3, 0x3fff, 0x044e, "ashb",
80: III3, 0x3fff, 0x074e, "ashd",
81: III3, 0x3fff, 0x054e, "ashw",
82: IDPC, 0xff, 0x3a, "bcc",
83: IDPC, 0xff, 0x2a, "bcs",
84: IDPC, 0xff, 0x0a, "beq",
85: IDPC, 0xff, 0x1a, "bne",
86: IDPC, 0xff, 0x9a, "bfc",
87: IDPC, 0xff, 0x8a, "bfs",
88: IDPC, 0xff, 0xda, "bge",
89: IDPC, 0xff, 0x6a, "bgt",
90: IDPC, 0xff, 0x4a, "bhi",
91: IDPC, 0xff, 0xba, "bhs",
92: IDPC, 0xff, 0x5a, "bls",
93: IDPC, 0xff, 0x7a, "ble",
94: IDPC, 0xff, 0xaa, "blo",
95: IDPC, 0xff, 0xca, "blt",
96: III, 0x3f, 0x08, "bicb",
97: III, 0x3f, 0x09, "bicw",
98: III, 0x3f, 0x0b, "bicd",
99: II, 0x3ff, 0x17c, "bicpsrb",
100: II, 0x3ff, 0x17d, "bicpsrw",
101: II, 0x3ff, 0x37c, "bispsrb",
102: II, 0x3ff, 0x37d, "bispsrw",
103: INONE, 0xff, 0xf2, "bpt",
104: IDPC, 0xff, 0xea, "br",
105: IDPC, 0xff, 0x02, "bsr",
106: II, 0x7ff, 0x77c, "caseb",
107: II, 0x7ff, 0x77d, "casew",
108: II, 0x7ff, 0x77f, "cased",
109: III3, 0x3fff, 0x084e, "cbitb",
110: III3, 0x3fff, 0x0b4e, "cbitd",
111: III3, 0x3fff, 0x0c4e, "cbitib",
112: III3, 0x3fff, 0x0f4e, "cbitid",
113: III3, 0x3fff, 0x0d4e, "cbitiw",
114: III3, 0x3fff, 0x094e, "cbitw",
115: IRII, 0x7ff, 0x0ee, "checkb",
116: IRII, 0x7ff, 0x1ee, "checkw",
117: IRII, 0x7ff, 0x3ee, "checkd",
118: III, 0x3f, 0x04, "cmpb",
119: III, 0x3f, 0x05, "cmpw",
120: III, 0x3f, 0x07, "cmpd",
121: IFF, 0x3fff, 0x09be, "cmpf",
122: IFF, 0x3fff, 0x08be, "cmpl",
123: IIID3, 0x3fff, 0x04ce, "cmpmb",
124: IIID3, 0x3fff, 0x05ce, "cmpmw",
125: IIID3, 0x3fff, 0x07ce, "cmpmd",
126: IQI, 0x7f, 0x1c, "cmpqb",
127: IQI, 0x7f, 0x1d, "cmpqw",
128: IQI, 0x7f, 0x1f, "cmpqd",
129: INONE3, 0xffffff, 0x00040e, "cmpsb",
130: INONE3, 0xffffff, 0x00050e, "cmpsw",
131: INONE3, 0xffffff, 0x00070e, "cmpsd",
132: INONE3, 0xffffff, 0x00840e, "cmpst",
133: INONE3, 0xffffff, 0x01040e, "cmpsbb",
134: INONE3, 0xffffff, 0x01050e, "cmpswb",
135: INONE3, 0xffffff, 0x01070e, "cmpsdb",
136: INONE3, 0xffffff, 0x01840e, "cmpstb",
137: INONE3, 0xffffff, 0x02040e, "cmpsbw",
138: INONE3, 0xffffff, 0x02050e, "cmpsww",
139: INONE3, 0xffffff, 0x02070e, "cmpsdw",
140: INONE3, 0xffffff, 0x02840e, "cmpstw",
141: INONE3, 0xffffff, 0x03040e, "cmpsbbw",
142: INONE3, 0xffffff, 0x03050e, "cmpswbw",
143: INONE3, 0xffffff, 0x03070e, "cmpsdbw",
144: INONE3, 0xffffff, 0x03840e, "cmpstbw",
145: INONE3, 0xffffff, 0x06040e, "cmpsbu",
146: INONE3, 0xffffff, 0x06050e, "cmpswu",
147: INONE3, 0xffffff, 0x06070e, "cmpsdu",
148: INONE3, 0xffffff, 0x06840e, "cmpstu",
149: INONE3, 0xffffff, 0x07040e, "cmpsbbu",
150: INONE3, 0xffffff, 0x07050e, "cmpswbu",
151: INONE3, 0xffffff, 0x07070e, "cmpsdbu",
152: INONE3, 0xffffff, 0x07840e, "cmpstbu",
153: III3, 0x3fff, 0x344e, "comb",
154: III3, 0x3fff, 0x374e, "comd",
155: III3, 0x3fff, 0x354e, "comw",
156: IRII, 0x7ff, 0x36e, "cvtp",
157: IDMOD, 0xff, 0x22, "cxp",
158: II, 0x3ff, 0x07f, "cxpd",
159: III3, 0x3fff, 0x2cce, "deib",
160: III3, 0x3fff, 0x2dce, "deiw",
161: III3, 0x3fff, 0x2dce, "deid",
162: INONE, 0xff, 0xc2, "dia",
163: III3, 0x3fff, 0x3cce, "divb",
164: III3, 0x3fff, 0x3fce, "divd",
165: IFF, 0x3fff, 0x21be, "divf",
166: IFF, 0x3fff, 0x20be, "divl",
167: III3, 0x3fff, 0x3dce, "divw",
168: IMD, 0xff, 0x82, "enter",
169: IN, 0xff, 0x92, "exit",
170: IRIID, 0x7ff, 0x02e, "extb",
171: IRIID, 0x7ff, 0x12e, "extw",
172: IRIID, 0x7ff, 0x32e, "extd",
173: III3, 0x3fff, 0x0cce, "extsb",
174: III3, 0x3fff, 0x0dce, "extsw",
175: III3, 0x3fff, 0x0fce, "extsd",
176: III3, 0x3fff, 0x046e, "ffsb",
177: III3, 0x3fff, 0x056e, "ffsw",
178: III3, 0x3fff, 0x076e, "ffsd",
179: INONE, 0xff, 0xd2, "flag",
180: IFI, 0x3fff, 0x3c3e, "floorfb",
181: IFI, 0x3fff, 0x3f3e, "floorfd",
182: IFI, 0x3fff, 0x3d3e, "floorfw",
183: IFI, 0x3fff, 0x383e, "floorlb",
184: IFI, 0x3fff, 0x3b3e, "floorld",
185: IFI, 0x3fff, 0x393e, "floorlw",
186: III3, 0x3fff, 0x384e, "ibitb",
187: III3, 0x3fff, 0x3b4e, "ibitd",
188: III3, 0x3fff, 0x394e, "ibitw",
189: IRII, 0x7ff, 0x42e, "indexb",
190: IRII, 0x7ff, 0x52e, "indexw",
191: IRII, 0x7ff, 0x72e, "indexd",
192: IRIID, 0x7ff, 0x0ae, "insb",
193: IRIID, 0x7ff, 0x1ae, "insw",
194: IRIID, 0x7ff, 0x3ae, "insd",
195: III3, 0x3fff, 0x08ce, "inssb",
196: III3, 0x3fff, 0x09ce, "inssw",
197: III3, 0x3fff, 0x0bce, "inssd",
198: II, 0x7ff, 0x67f, "jsr",
199: II, 0x3ff, 0x27f, "jump",
200: II3, 0x7ffff, 0x00f3e, "lfsr",
201: IMR, 0x7fff, 0x0b1e, "lmr",
202: IPR, 0x7f, 0x6c, "lprb",
203: IPR, 0x7f, 0x6d, "lprw",
204: IPR, 0x7f, 0x6f, "lprd",
205: III3, 0x3fff, 0x144e, "lshb",
206: III3, 0x3fff, 0x174e, "lshd",
207: III3, 0x3fff, 0x154e, "lshw",
208: III3, 0x3ff, 0x24ce, "meib",
209: III3, 0x3ff, 0x25ce, "meiw",
210: III3, 0x3ff, 0x27ce, "meid",
211: III3, 0x3fff, 0x38ce, "modb",
212: III3, 0x3fff, 0x3bce, "modd",
213: III3, 0x3fff, 0x39ce, "modw",
214: III, 0x3f, 0x14, "movb",
215: IIF, 0x3fff, 0x043e, "movbf",
216: IIF, 0x3fff, 0x003e, "movbl",
217: III, 0x3f, 0x17, "movd",
218: IIF, 0x3fff, 0x073e, "movdf",
219: IIF, 0x3fff, 0x033e, "movdl",
220: IFF, 0x3fff, 0x05be, "movf",
221: IIF, 0x3fff, 0x1b3e, "movfl",
222: IFF, 0x3fff, 0x04be, "movl",
223: IIF, 0x3fff, 0x163e, "movlf",
224: III, 0x3f, 0x15, "movw",
225: IIF, 0x3fff, 0x053e, "movwf",
226: IIF, 0x3fff, 0x013e, "movwl",
227: III3, 0x3fff, 0x1cce, "movxbd",
228: III3, 0x3fff, 0x10ce, "movxbw",
229: III3, 0x3fff, 0x1dce, "movxwd",
230: III3, 0x3fff, 0x18ce, "movzbd",
231: III3, 0x3fff, 0x14ce, "movzbw",
232: III3, 0x3fff, 0x19ce, "movzwd",
233: III3, 0x3fff, 0x00ce, "movmb",
234: III3, 0x3fff, 0x01ce, "movmw",
235: III3, 0x3fff, 0x03ce, "movmd",
236: IQI, 0x7f, 0x5c, "movqb",
237: IQI, 0x7f, 0x5d, "movqw",
238: IQI, 0x7f, 0x5f, "movqd",
239: INONE3, 0xffffff, 0x00000e, "movsb",
240: INONE3, 0xffffff, 0x00010e, "movsw",
241: INONE3, 0xffffff, 0x00030e, "movsd",
242: INONE3, 0xffffff, 0x00800e, "movst",
243: INONE3, 0xffffff, 0x01000e, "movsbb",
244: INONE3, 0xffffff, 0x01010e, "movswb",
245: INONE3, 0xffffff, 0x01030e, "movsdb",
246: INONE3, 0xffffff, 0x01800e, "movstb",
247: INONE3, 0xffffff, 0x02000e, "movsbw",
248: INONE3, 0xffffff, 0x02010e, "movsww",
249: INONE3, 0xffffff, 0x02030e, "movsdw",
250: INONE3, 0xffffff, 0x02800e, "movstw",
251: INONE3, 0xffffff, 0x03000e, "movsbbw",
252: INONE3, 0xffffff, 0x03010e, "movswbw",
253: INONE3, 0xffffff, 0x03030e, "movsdbw",
254: INONE3, 0xffffff, 0x03800e, "movstbw",
255: INONE3, 0xffffff, 0x06000e, "movsbu",
256: INONE3, 0xffffff, 0x06010e, "movswu",
257: INONE3, 0xffffff, 0x06030e, "movsdu",
258: INONE3, 0xffffff, 0x06800e, "movstu",
259: INONE3, 0xffffff, 0x07000e, "movsbbu",
260: INONE3, 0xffffff, 0x07010e, "movswbu",
261: INONE3, 0xffffff, 0x07030e, "movsdbu",
262: INONE3, 0xffffff, 0x07800e, "movstbu",
263: III3, 0x3fff, 0x0cae, "movsub",
264: III3, 0x3fff, 0x0dae, "movsuw",
265: III3, 0x3fff, 0x0fae, "movsud",
266: III3, 0x3fff, 0x1cae, "movusb",
267: III3, 0x3fff, 0x1dae, "movusw",
268: III3, 0x3fff, 0x1fae, "movusd",
269: III3, 0x3fff, 0x20ce, "mulb",
270: III3, 0x3fff, 0x23ce, "muld",
271: IFF, 0x3fff, 0x31be, "mulf",
272: IFF, 0x3fff, 0x30be, "mull",
273: III3, 0x3fff, 0x21ce, "mulw",
274: III3, 0x3fff, 0x204e, "negb",
275: III3, 0x3fff, 0x234e, "negd",
276: IFF, 0x3fff, 0x15be, "negf",
277: IFF, 0x3fff, 0x14be, "negl",
278: III3, 0x3fff, 0x214e, "negw",
279: INONE, 0xff, 0xa2, "nop",
280: III3, 0x3fff, 0x244e, "notb",
281: III3, 0x3fff, 0x274e, "notd",
282: III3, 0x3fff, 0x254e, "notw",
283: III, 0x3f, 0x18, "orb",
284: III, 0x3f, 0x1b, "ord",
285: III, 0x3f, 0x19, "orw",
286: III3, 0x3fff, 0x30ce, "quob",
287: III3, 0x3fff, 0x33ce, "quod",
288: III3, 0x3fff, 0x31ce, "quow",
289: II3, 0x7ffff, 0x0031e, "rdval",
290: III3, 0x3fff, 0x34ce, "remb",
291: III3, 0x3fff, 0x37ce, "remd",
292: III3, 0x3fff, 0x35ce, "remw",
293: IN, 0xff, 0x72, "restore",
294: IDISP, 0xff, 0x12, "ret",
295: INONE, 0xff, 0x52, "reti",
296: INONE, 0xff, 0x42, "rett",
297: III3, 0x3fff, 0x004e, "rotb",
298: III3, 0x3fff, 0x034e, "rotd",
299: III3, 0x3fff, 0x014e, "rotw",
300: IFI, 0x3fff, 0x243e, "roundfb",
301: IFI, 0x3fff, 0x273e, "roundfd",
302: IFI, 0x3fff, 0x253e, "roundfw",
303: IFI, 0x3fff, 0x203e, "roundlb",
304: IFI, 0x3fff, 0x233e, "roundld",
305: IFI, 0x3fff, 0x213e, "roundlw",
306: IDISP, 0xff, 0x32, "rxp",
307: II, 0x7ff, 0x1bc, "sccb",
308: II, 0x7ff, 0x1bf, "sccd",
309: II, 0x7ff, 0x1bd, "sccw",
310: II, 0x7ff, 0x13c, "scsb",
311: II, 0x7ff, 0x13f, "scsd",
312: II, 0x7ff, 0x13d, "scsw",
313: II, 0x7ff, 0x03c, "seqb",
314: II, 0x7ff, 0x03f, "seqd",
315: II, 0x7ff, 0x03d, "seqw",
316: II, 0x7ff, 0x4bc, "sfcb",
317: II, 0x7ff, 0x4bf, "sfcd",
318: II, 0x7ff, 0x4bd, "sfcw",
319: II, 0x7ff, 0x43c, "sfsb",
320: II, 0x7ff, 0x43f, "sfsd",
321: II, 0x7ff, 0x43d, "sfsw",
322: II, 0x7ff, 0x6bc, "sgeb",
323: II, 0x7ff, 0x6bf, "sged",
324: II, 0x7ff, 0x6bd, "sgew",
325: II, 0x7ff, 0x33c, "sgtb",
326: II, 0x7ff, 0x33f, "sgtd",
327: II, 0x7ff, 0x33d, "sgtw",
328: II, 0x7ff, 0x23c, "shib",
329: II, 0x7ff, 0x23f, "shid",
330: II, 0x7ff, 0x23d, "shiw",
331: II, 0x7ff, 0x5bc, "shsb",
332: II, 0x7ff, 0x5bf, "shsd",
333: II, 0x7ff, 0x5bd, "shsw",
334: II, 0x7ff, 0x3bc, "sleb",
335: II, 0x7ff, 0x3bf, "sled",
336: II, 0x7ff, 0x3bd, "slew",
337: II, 0x7ff, 0x53c, "slob",
338: II, 0x7ff, 0x53f, "slod",
339: II, 0x7ff, 0x53d, "slow",
340: II, 0x7ff, 0x2bc, "slsb",
341: II, 0x7ff, 0x2bf, "slsd",
342: II, 0x7ff, 0x2bd, "slsw",
343: II, 0x7ff, 0x63c, "sltb",
344: II, 0x7ff, 0x63f, "sltd",
345: II, 0x7ff, 0x63d, "sltw",
346: II, 0x7ff, 0x0bc, "sneb",
347: II, 0x7ff, 0x0bf, "sned",
348: II, 0x7ff, 0x0bd, "snew",
349: IM, 0xff, 0x62, "save",
350: III3, 0x3fff, 0x184e, "sbitb",
351: III3, 0x3fff, 0x1b4e, "sbitd",
352: III3, 0x3fff, 0x1c4e, "sbitib",
353: III3, 0x3fff, 0x1f4e, "sbitid",
354: III3, 0x3fff, 0x1d4e, "sbitiw",
355: III3, 0x3fff, 0x194e, "sbitw",
356: ICFG, 0xf87fff, 0x000b0e, "setcfg",
357: II3X, 0xf83fff, 0x00373e, "sfsr",
358: INONE3, 0xffffff, 0x000c0e, "skpsb",
359: INONE3, 0xffffff, 0x000d0e, "skpsw",
360: INONE3, 0xffffff, 0x000f0e, "skpsd",
361: INONE3, 0xffffff, 0x008c0e, "skpst",
362: INONE3, 0xffffff, 0x010c0e, "skpsbb",
363: INONE3, 0xffffff, 0x010d0e, "skpswb",
364: INONE3, 0xffffff, 0x010f0e, "skpsdb",
365: INONE3, 0xffffff, 0x018c0e, "skpstb",
366: INONE3, 0xffffff, 0x020c0e, "skpsbw",
367: INONE3, 0xffffff, 0x020d0e, "skpsww",
368: INONE3, 0xffffff, 0x020f0e, "skpsdw",
369: INONE3, 0xffffff, 0x028c0e, "skpstw",
370: INONE3, 0xffffff, 0x030c0e, "skpsbbw",
371: INONE3, 0xffffff, 0x030d0e, "skpswbw",
372: INONE3, 0xffffff, 0x030f0e, "skpsdbw",
373: INONE3, 0xffffff, 0x038c0e, "skpstbw",
374: INONE3, 0xffffff, 0x060c0e, "skpsbu",
375: INONE3, 0xffffff, 0x060d0e, "skpswu",
376: INONE3, 0xffffff, 0x060f0e, "skpsdu",
377: INONE3, 0xffffff, 0x068c0e, "skpstu",
378: INONE3, 0xffffff, 0x070c0e, "skpsbbu",
379: INONE3, 0xffffff, 0x070d0e, "skpswbu",
380: INONE3, 0xffffff, 0x070f0e, "skpsdbu",
381: INONE3, 0xffffff, 0x078c0e, "skpstbu",
382: IMR, 0x7fff, 0x0f1e, "smr",
383: IPR, 0x7f, 0x2c, "sprb",
384: IPR, 0x7f, 0x2d, "sprw",
385: IPR, 0x7f, 0x2f, "sprd",
386: III, 0x3f, 0x20, "subb",
387: III, 0x3f, 0x30, "subcb",
388: III, 0x3f, 0x33, "subcd",
389: III, 0x3f, 0x31, "subcw",
390: III, 0x3f, 0x23, "subd",
391: IFF, 0x3fff, 0x11be, "subf",
392: IFF, 0x3fff, 0x10be, "subl",
393: III3, 0x3fff, 0x2c4e, "subpb",
394: III3, 0x3fff, 0x2f4e, "subpd",
395: III3, 0x3fff, 0x2d4e, "subpw",
396: III, 0x3f, 0x21, "subw",
397: INONE, 0xff, 0xe2, "svc",
398: III, 0x3f, 0x34, "tbitb",
399: III, 0x3f, 0x37, "tbitd",
400: III, 0x3f, 0x35, "tbitw",
401: IFI, 0x3fff, 0x2c3e, "truncfb",
402: IFI, 0x3fff, 0x2f3e, "truncfd",
403: IFI, 0x3fff, 0x2d3e, "truncfw",
404: IFI, 0x3fff, 0x283e, "trunclb",
405: IFI, 0x3fff, 0x2b3e, "truncld",
406: IFI, 0x3fff, 0x293e, "trunclw",
407: INONE, 0xff, 0xb2, "wait",
408: II3, 0x7ffff, 0x0071e, "wrval",
409: III, 0x3f, 0x38, "xorb",
410: III, 0x3f, 0x3b, "xord",
411: III, 0x3f, 0x39, "xorw",
412: /* end */
413: IHEX, 0x0, 0x0, "hex",
414: };
415:
416: printins(asp)
417: int asp;
418: {
419: register long o;
420: register i, f;
421: ADDR orig;
422:
423: isp = asp;
424: o = ltow(lget(dot, asp));
425: p = dot;
426: orig = dot;
427: for(i=0; t[i].f; i++)
428: if((o&t[i].m) == t[i].v)
429: break;
430: printf("%s ", t[i].s);
431: switch(t[i].f) {
432: case IHEX:
433: p += 1;
434: printf("%02x", o & 0377);
435: break;
436:
437: case INONE:
438: p += 1;
439: break;
440:
441: case INONE3:
442: p += 3;
443: break;
444:
445: case IDISP:
446: p += 1;
447: psymoff((WORD)ddisp(), isp, "");
448: break;
449:
450: case IDMOD:
451: p += 1;
452: psymoff((WORD)mtotext(ddisp(), isp), isp, "");
453: break;
454:
455: case IDPC:
456: p += 1;
457: psymoff((WORD)(ddisp()+dot), isp, "");
458: break;
459:
460: case IFF:
461: p += 3;
462: f = (o>>8)|2;
463: addr2((int)(o>>14), f, f);
464: break;
465:
466: case IIF:
467: p += 3;
468: i = (o>>8);
469: f = (o>>10)|2;
470: addr2((int)(o>>14), i, f);
471: break;
472:
473: case IFI:
474: p += 3;
475: i = (o>>8);
476: f = (o>>10)|2;
477: addr2((int)(o>>14), f, i);
478: break;
479:
480: case III:
481: p += 2;
482: i = o;
483: addr2((int)(o>>6), i, i);
484: break;
485:
486: case III3:
487: p += 3;
488: i = (o>>8);
489: addr2((int)(o>>14), i, i);
490: break;
491:
492: case IIID3:
493: p += 3;
494: i = (o>>8);
495: addr2((int)(o>>14), i, i);
496: printf(",%r", ddisp());
497: break;
498:
499: case II:
500: p += 2;
501: i = o;
502: dgen((int)(o>>11), i, -1);
503: break;
504:
505: case II3:
506: p += 3;
507: dgen((int)(o>>19), 3, -1);
508: break;
509:
510: case II3X:
511: p += 3;
512: dgen((int)(o>>14), 3, -1);
513: break;
514:
515: case IMD:
516: p += 2;
517: mask((int)(o>>8)&0xff);
518: printf(",%R", ddisp());
519: break;
520:
521: case IM:
522: p += 2;
523: mask((int)(o>>8)&0xff);
524: break;
525:
526: case IN:
527: p += 2;
528: rmask((int)(o>>8)&0xff);
529: break;
530:
531: case IQI:
532: p += 2;
533: i = o;
534: printf("$");
535: quick((int)(o>>7));
536: printf(",");
537: dgen((int)(o>>11), o, -1);
538: break;
539:
540: case IRII:
541: p += 3;
542: printf("r%d,", (int)(o>>11)&0x7);
543: i = o;
544: addr2((int)(o>>14), i, i);
545: break;
546:
547: case IRIID:
548: p += 3;
549: printf("r%d,", (int)(o>>11)&0x7);
550: i = o;
551: addr2((int)(o>>14), i, i);
552: printf(",");
553: psymoff((WORD)ddisp(), isp, "");
554: break;
555:
556: case ICFG:
557: p += 3;
558: printf("[");
559: if (o & 0x8000)
560: printf("I");
561: if (o & 0x10000)
562: printf("F");
563: if (o & 0x20000)
564: printf("M");
565: if (o & 0x40000)
566: printf("C");
567: printf("]");
568: break;
569:
570: case IPR:
571: p += 2;
572: prreg((o >> 7) & 0xf);
573: printf(",");
574: dgen(o >> 11, o, -1);
575: break;
576:
577: case IMR:
578: p += 1;
579: prmr((o >> 15) & 0xf);
580: printf(",");
581: dgen(o >> 19, 3, -1);
582: break;
583: }
584: dotinc = p - orig;
585: }
586:
587: static
588: addr2(o, i1, i2)
589: {
590: register x1, x2, t;
591:
592: x1 = -1;
593: x2 = -1;
594: t = (o >> 5) & 0x1f;
595: if (28 <= t && t <= 31) /* index mode */
596: x1 = cget(p++, isp);
597: t = o & 0x1f;
598: if (28 <= t && t <= 31)
599: x2 = cget(p++, isp);
600: dgen(o>>5, i1, x1);
601: printf(",");
602: dgen(o, i2, x2);
603: }
604:
605: static
606: dgen(g, i, t)
607: {
608: register long v, v1;
609: register uchar pp;
610:
611: switch(g &= 0x1f) {
612: default:
613: printf("gok%d", g & 0x1f);
614: break;
615:
616: case 0:
617: case 1:
618: case 2:
619: case 3:
620: case 4:
621: case 5:
622: case 6:
623: case 7:
624: printf("r%d", g);
625: break;
626:
627: case 8:
628: case 9:
629: case 10:
630: case 11:
631: case 12:
632: case 13:
633: case 14:
634: case 15:
635: v = ddisp();
636: psymoff((WORD)v, isp, "");
637: printf("(r%d)", g-8);
638: break;
639:
640: case 16:
641: case 17:
642: case 18:
643: v = ddisp();
644: v1 = ddisp();
645: psymoff((WORD)v1, isp, "(");
646: psymoff((WORD)v, isp, "");
647: printf("(%c%c))", "fss"[g-16], "ppb"[g-16]);
648: break;
649:
650: case 20:
651: v = 0;
652: pp = cget(p, isp);
653: if(pp & 0200)
654: switch(i & 3) {
655: case 2: break;
656: case 3: break;
657: case 1: v = 0xffff0000L; break;
658: case 0: v = 0xffffff00L; break;
659: }
660: switch(i & 3) {
661: case 2: p += 4;
662: case 3: v |= (long)cget(p++, isp) << 24;
663: v |= (long)cget(p++, isp) << 16;
664: case 1: v |= (long)cget(p++, isp) << 8;
665: case 0: v |= (long)cget(p++, isp);
666: }
667: printf("$");
668: psymoff((WORD)v, isp, "");
669: break;
670:
671: case 21:
672: v = ddisp();
673: printf("*");
674: psymoff((WORD)v, isp, "");
675: break;
676:
677: case 22:
678: v = ddisp();
679: v1 = ddisp();
680: psymoff((WORD)(mtodata(v, isp)+v1), isp, "");
681: break;
682:
683: case 23:
684: printf("tos");
685: break;
686:
687: case 24:
688: case 25:
689: case 26:
690: case 27:
691: v = ddisp();
692: psymoff((WORD)v, isp, "");
693: printf("(%c%c)", "fssp"[g-24], "ppbp"[g-24]);
694: break;
695:
696: case 28:
697: case 29:
698: case 30:
699: case 31:
700: if (t == -1)
701: t = cget(p++, isp);
702: dgen(t>>3, i, -1);
703: printf("[r%d:%c]", t&07, "bwdq"[g&03]);
704: break;
705: }
706: }
707:
708: static long
709: ddisp()
710: {
711: register long o;
712:
713: o = cget(p++, isp);
714: if(!(o & 0x80)) {
715: if(o & 0x40)
716: o |= 0xffffff80;
717: return o;
718: }
719: o = (o<<8) | cget(p++, isp);
720: if(!(o & 0x4000)) {
721: o &= 0x3fff;
722: if(o & 0x2000)
723: o |= 0xffffc000;
724: return o;
725: }
726: o = (o<<8) | cget(p++, isp);
727: o = (o<<8) | cget(p++, isp);
728: o &= 0x3fffffff;
729: if(o & 0x20000000)
730: o |= 0xc0000000;
731: return o;
732: }
733:
734: static
735: mask(m)
736: register int m;
737: {
738: register int i;
739: int first = 0;
740:
741: m &= 0xff;
742: printf("[");
743: for (i = 0; m; i++) {
744: if (m & (1<<i)) {
745: if (first++)
746: printf(",");
747: printf("r%d", i);
748: }
749: m &=~ (1<<i);
750: }
751: printf("]");
752: }
753:
754: static
755: rmask(m)
756: register int m;
757: {
758: register int i;
759: int first = 0;
760:
761: m &= 0xff;
762: printf("[");
763: for (i = 0; m; i++) {
764: if (m & (0x80>>i)) {
765: if (first++)
766: printf(",");
767: printf("r%d", i);
768: }
769: m &=~ (0x80>>i);
770: }
771: printf("]");
772: }
773:
774: static
775: quick(q)
776: register int q;
777: {
778:
779: q &= 0xf;
780: if (q & 0x8)
781: q |= ~0x7;
782: printf("%r", q);
783: }
784:
785: static char *pmrtab[] = {
786: "bpr0", "bpr1", "2", "3",
787: "pf0", "pf1", "6", "7",
788: "sc", "9", "msr", "bcnt",
789: "ptb0", "ptb1", "#d", "eia",
790: };
791:
792: static
793: prmr(r)
794: int r;
795: {
796:
797: printf("%s", pmrtab[r]);
798: }
799:
800: static char *pregtab[] = {
801: "upsr", "1", "2", "3",
802: "4", "5", "6", "7",
803: "fp", "sp", "sb", "#b",
804: "#c", "psr", "intbase", "mod",
805: };
806:
807: static
808: prreg(r)
809: int r;
810: {
811:
812: printf("%s", pregtab[r]);
813: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.