|
|
1.1 root 1: /* opcd.c */
2: # include "mode.h"
3: # include "extern.h"
4: # include "functs.h"
5: # include "defs.h"
6:
7: /* The following array contains the number of
8: extra parcels for the instruction getter. It
9: contains the assembler format for the
10: instruction printer. It is machine dependent.
11: */
12:
13: struct itable itable[ ] = {
14: {"ERR %d%d%d", 0, 0 },
15: {(char *)0, 0, 0200},
16: {(char *)0, 0, 0222},
17: {(char *)0, 0, 0233},
18: {"EX %d%d%d", 0, 0 },
19: {"J B%w%d%d", 0, 0 },
20: {"J %d%d%d%8O", 1, 0 },
21: {"R %d%d%d%8O", 1, 0 },
22: /* 010 starting the conditional jumps */
23: {(char *)0, 1, 0240},
24: {(char *)0, 1, 0242},
25: {(char *)0, 1, 0244},
26: {(char *)0, 1, 0246},
27: {(char *)0, 1, 0250},
28: {(char *)0, 1, 0252},
29: {(char *)0, 1, 0254},
30: {(char *)0, 1, 0256},
31: /* 020 transmits */
32: {"A%d %d%d%8O", 1, 0 },
33: {"A%d #%d%d%8O", 1, 0 },
34: {"A%d %d%d", 0, 0 },
35: {(char *)0, 0, 0260},
36: {"A%d B%d%d", 0, 0 },
37: {"B%w%d%d A%b%b%b%d", 0, 0 },
38: {(char *)0, 0, 0262},
39: {(char *)0, 0, 0265},
40: /* 030 a-register arithmetic and register load */
41: {(char *)0, 0, 0267},
42: {(char *)0, 0, 0272},
43: {"A%d A%d*A%d", 0, 0 },
44: {(char *)0, 0, 0276},
45: {"B%w%d%d,A%b%b%b%d 0,A0", 0, 0 },
46: {"0,A0 B%w%d%d,A%b%b%b%d",0, 0 },
47: {"T%w%d%d,A%b%b%b%d 0,A0", 0, 0 },
48: {"0,A0 T%w%d%d,A%b%b%b%d",0, 0 },
49: /* 040 */
50: {"S%d %d%d%8O", 1, 0 },
51: {"S%d #%d%d%8O", 1, 0 },
52: {(char *)0, 0, 0301},
53: {(char *)0, 0, 0304},
54: {(char *)0, 0, 0306},
55: {(char *)0, 0, 0311},
56: {(char *)0, 0, 0313},
57: {(char *)0, 0, 0316},
58: /* 050 logical arithmetic and shifting */
59: {(char *)0, 0, 0323},
60: {(char *)0, 0, 0325},
61: {"S0 S%d<%d%d", 0, 0 },
62: {"S0 S%d>0100-%d%d",0, 0 },
63: {"S%d S%b%d<%d%d", 0, 0 },
64: {"S%d S%b%d>0100-%d%d",0, 0 },
65: {(char *)0, 0, 0332},
66: {(char *)0, 0, 0335},
67: /* 060 floating-point arithmetic */
68: {"S%d S%d+S%d", 0, 0 },
69: {(char *)0, 0, 0340},
70: {(char *)0, 0, 0342},
71: {(char *)0, 0, 0344},
72: {"S%d S%d*FS%d", 0, 0 },
73: {"S%d S%d*HS%d", 0, 0 },
74: {"S%d S%d*RS%d", 0, 0 },
75: {"S%d S%d*IS%d", 0, 0 },
76: /* 070 transmits */
77: {"S%d \\HS%d", 0, 0 },
78: {(char *)0, 0, 0346},
79: {(char *)0, 0, 0356},
80: {(char *)0, 0, 0361},
81: {"S%d T%d%d", 0, 0 },
82: {"T%w%d%d S%b%b%b%d", 0, 0 },
83: {"S%d V%d,A%d", 0, 0 },
84: {(char *)0, 0, 0370},
85: /* 0100 read from memory to a-register */
86: {(char *)0, 1, 0372},
87: {(char *)0, 1, 0372},
88: {(char *)0, 1, 0372},
89: {(char *)0, 1, 0372},
90: {(char *)0, 1, 0372},
91: {(char *)0, 1, 0372},
92: {(char *)0, 1, 0372},
93: {(char *)0, 1, 0372},
94: /* 0110 write from a-register to memory */
95: {(char *)0, 1, 0375},
96: {(char *)0, 1, 0375},
97: {(char *)0, 1, 0375},
98: {(char *)0, 1, 0375},
99: {(char *)0, 1, 0375},
100: {(char *)0, 1, 0375},
101: {(char *)0, 1, 0375},
102: {(char *)0, 1, 0375},
103: /* 0120 read from memory to s-register */
104: {(char *)0, 1, 0400},
105: {(char *)0, 1, 0400},
106: {(char *)0, 1, 0400},
107: {(char *)0, 1, 0400},
108: {(char *)0, 1, 0400},
109: {(char *)0, 1, 0400},
110: {(char *)0, 1, 0400},
111: {(char *)0, 1, 0400},
112: /* 0130 write from s-register to memory */
113: {(char *)0, 1, 0403},
114: {(char *)0, 1, 0403},
115: {(char *)0, 1, 0403},
116: {(char *)0, 1, 0403},
117: {(char *)0, 1, 0403},
118: {(char *)0, 1, 0403},
119: {(char *)0, 1, 0403},
120: {(char *)0, 1, 0403},
121: /* 0140 v-register logical instructions */
122: {"V%d S%d&V%d", 0, 0 },
123: {"V%d V%d&V%d", 0, 0 },
124: {(char *)0, 0, 0406},
125: {"V%d V%d!V%d", 0, 0 },
126: {"V%d S%d\\V%d", 0, 0 },
127: {(char *)0, 0, 0410},
128: {(char *)0, 0, 0412},
129: {"V%d V%d!V%d&VM", 0, 0 },
130: /* 0150 shifting and v-register integer arithmetic */
131: {(char *)0, 0, 0414},
132: {(char *)0, 0, 0416},
133: {(char *)0, 0, 0420},
134: {(char *)0, 0, 0422},
135: {"V%d S%d+V%d", 0, 0 },
136: {"V%d V%d+V%d", 0, 0 },
137: {(char *)0, 0, 0424},
138: {"V%d V%d-V%d", 0, 0 },
139: /* 0160 v-register floating-point arithmetic */
140: {"V%d S%d*FV%d", 0, 0 },
141: {"V%d V%d*FV%d", 0, 0 },
142: {"V%d S%d*HV%d", 0, 0 },
143: {"V%d V%d*HV%d", 0, 0 },
144: {"V%d S%d*RV%d", 0, 0 },
145: {"V%d V%d*RV%d", 0, 0 },
146: {"V%d S%d*IV%d", 0, 0 },
147: {"V%d V%d*IV%d", 0, 0 },
148: /* 0170 v-register floating-point, vector masking,etc. */
149: {(char *)0, 0, 0426},
150: {"V%d V%d+FV%d", 0, 0 },
151: {(char *)0, 0, 0430},
152: {"V%d V%d-FV%d", 0, 0 },
153: {(char *)0, 0, 0432},
154: {(char *)0, 0, 0435},
155: {(char *)0, 0, 0445},
156: {(char *)0, 0, 0450},
157:
158: /* Subinstructions for instruction type 001 */
159: {"CA,A%w%d A%d", 0, 0 },
160: {"CL,A%w%d A%d", 0, 0 },
161: {"CI,A%w%d", 0, 0 },
162: {"MC,A%w%d", 0, 0 },
163: {"XA A%w%d", 0, 0 },
164: {"RT S%w%d", 0, 0 },
165: {"SIPI %w%d", 0, 0 },
166: {"CIPI", 0, 0 },
167: {"CLN %w%d", 0, 0 },
168: {"PCI S%w%d", 0, 0 },
169: {"CCI", 0, 0 },
170: {"ECI", 0, 0 },
171: {"DCI", 0, 0 },
172: {"select perf mon", 0, 0 },
173: {"set maint read", 0, 0 },
174: {"load diag byte", 0, 0 },
175: {"set maint write 1", 0, 0 },
176: {"set maint write 2", 0, 0 },
177: /* Subinstructions for instruction type 002 */
178: {"VL A%w%w%d", 0, 0 },
179: {"VL 1", 0, 0 },
180: {"EFI", 0, 0 },
181: {"DFI", 0, 0 },
182: {"ERI", 0, 0 },
183: {"DRI", 0, 0 },
184: {"DBM", 0, 0 },
185: {"EBM", 0, 0 },
186: {"CMR", 0, 0 },
187: /* Subinstructions for instruction type 003 */
188: {"VM S%w%d", 0, 0 },
189: {"VM 0", 0, 0 },
190: {"SM%w%d%d 1,TS", 0, 0 },
191: {"SM%w%d%d 0", 0, 0 },
192: {"SM%w%d%d 1", 0, 0 },
193: /* Subinstructions for instruction type 010 */
194: {"JAZ %d%d%d%8O", 1, 0 },
195: {"A0 %d%d%d%8O", 1, 0 },
196: /* Subinstructions for instruction type 011 */
197: {"JAN %d%d%d%8O", 1, 0 },
198: {"A1 %d%d%d%8O", 1, 0 },
199: /* Subinstructions for instruction type 012 */
200: {"JAP %d%d%d%8O", 1, 0 },
201: {"A2 %d%d%d%8O", 1, 0 },
202: /* Subinstructions for instruction type 013 */
203: {"JAM %d%d%d%8O", 1, 0 },
204: {"A3 %d%d%d%8O", 1, 0 },
205: /* Subinstructions for instruction type 014 */
206: {"JSZ %d%d%d%8O", 1, 0 },
207: {"A4 %d%d%d%8O", 1, 0 },
208: /* Subinstructions for instruction type 015 */
209: {"JSN %d%d%d%8O", 1, 0 },
210: {"A5 %d%d%d%8O", 1, 0 },
211: /* Subinstructions for instruction type 016 */
212: {"JSP %d%d%d%8O", 1, 0 },
213: {"A6 %d%d%d%8O", 1, 0 },
214: /* Subinstructions for instruction type 017 */
215: {"JSM %d%d%d%8O", 1, 0 },
216: {"A7 %d%d%d%8O", 1, 0 },
217: /* Subinstructions for instruction type 023 */
218: {"A%d S%d", 0, 0 },
219: {"A%d VL", 0, 0 },
220: /* Subinstructions for instruction type 026 */
221: {"A%d PS%d", 0, 0 },
222: {"A%d QS%d", 0, 0 },
223: {"A%d SB%d", 0, 0 },
224: /* Subinstructions for instruction type 027 */
225: {"A%d ZS%d", 0, 0 },
226: {"SB%w%d A%b%b%d", 0, 0 },
227: /* Subinstructions for instruction type 030 */
228: {"A%d A%d+A%d", 0, 0 },
229: {"A%d A%w%d", 0, 0 },
230: {"A%d A%d+1", 0, 0 },
231: /* Subinstructions for instruction type 031 */
232: {"A%d A%d-A%d", 0, 0 },
233: {"A%d -1", 0, 0 },
234: {"A%d -A%w%d", 0, 0 },
235: {"A%d A%d-1", 0, 0 },
236: /* Subinstructions for instruction type 033 */
237: {"A%d CI", 0, 0 },
238: {"A%d CA,A%d", 0, 0 },
239: {"A%d CE,A%d", 0, 0 },
240: /* Subinstructions for instruction type 042 */
241: {"S%d <0100-%d%d", 0, 0 },
242: {"S%d 1", 0, 0 },
243: {"S%d -1", 0, 0 },
244: /* Subinstructions for instruction type 043 */
245: {"S%d >%d%d", 0, 0 },
246: {"S%d 0", 0, 0 },
247: /* Subinstructions for instruction type 044 */
248: {"S%d S%d&S%d", 0, 0 },
249: {"S%d S%d&SB", 0, 0 },
250: {"S%d SB&S%d", 0, 0 },
251: /* Subinstructions for instruction type 045 */
252: {"S%d #S%w%d&S%b%b%d",0, 0 },
253: {"S%d #SB&S%d", 0, 0 },
254: /* Subinstructions for instruction type 046 */
255: {"S%d S%d\\S%d", 0, 0 },
256: {"S%d S%d\\SB", 0, 0 },
257: {"S%d SB\\S%d", 0, 0 },
258: /* Subinstructions for instruction type 047 */
259: {"S%d #S%d\\S%d", 0, 0 },
260: {"S%d #S%w%d", 0, 0 },
261: {"S%d #S%d\\SB", 0, 0 },
262: {"S%d #SB\\S%d", 0, 0 },
263: {"S%d #SB", 0, 0 },
264: /* Subinstructions for instruction type 050 */
265: {"S%d S%d!S%b%b%d&S%w%d",0,0 },
266: {"S%d S%d!S%b%b%d&SB",0, 0 },
267: /* Subinstructions for instruction type 051 */
268: {"S%d S%d!S%d", 0, 0 },
269: {"S%d S%w%d", 0, 0 },
270: {"S%d S%d!SB", 0, 0 },
271: {"S%d SB!S%d", 0, 0 },
272: {"S%d SB", 0, 0 },
273: /* Subinstructions for instruction type 056 */
274: {"S%d S%b%d,S%d<A%d",0, 0 },
275: {"S%d S%b%d,S%d<1",0, 0 },
276: {"S%d S%b%d<A%d", 0, 0 },
277: /* Subinstructions for instruction type 057 */
278: {"S%d S%d,S%b%b%d>A%w%d",0,0 },
279: {"S%d S%d,S%b%b%d>1",0, 0 },
280: {"S%d S%b%d>A%w%d",0, 0 },
281: /* Subinstructions for instruction type 061 */
282: {"S%d S%d-S%d", 0, 0 },
283: {"S%d -S%w%d", 0, 0 },
284: /* Subinstructions for instruction type 062 */
285: {"S%d S%d+FS%d", 0, 0 },
286: {"S%d +FS%w%d", 0, 0 },
287: /* Subinstructions for instruction type 063 */
288: {"S%d S%d-FS%d", 0, 0 },
289: {"S%d -FS%w%d", 0, 0 },
290: /* Subinstructions for instruction type 071 */
291: {"S%d A%w%d", 0, 0 },
292: {"S%d +A%w%d", 0, 0 },
293: {"S%d +FA%w%d", 0, 0 },
294: {"S%d 0.6", 0, 0 },
295: {"S%d 0.4", 0, 0 },
296: {"S%d 1.", 0, 0 },
297: {"S%d 2.", 0, 0 },
298: {"S%d 4.", 0, 0 },
299: /* Subinstructions for instruction type 072 */
300: {"S%d RT", 0, 0 },
301: {"S%d SM", 0, 0 },
302: {"S%d ST%d", 0, 0 },
303: /* Subinstructions for instruction type 073 */
304: {"S%d VM", 0, 0 },
305: {"S%d SR%d", 0, 0 },
306: {"read perf count", 0, 0 },
307: {"incr perf count", 0, 0 },
308: {"clear maint modes", 0, 0 },
309: {"SM S%d", 0, 0 },
310: {"ST%w%d S%b%b%d", 0, 0 },
311: /* Subinstructions for instruction type 077 */
312: {"V%d,A%w%d S%b%b%d", 0, 0 },
313: {"V%d,A%w%d 0", 0, 0 },
314: /* Subinstructions for instruction type 10h */
315: {"A%d %d%d%8O,A%d", 1, 0 },
316: {"A%d %d%d%8O,0", 1, 0 },
317: {"A%d 0,A%w%w%w%d", 1, 0 },
318: /* Subinstructions for instruction type 11h */
319: {"%w%d%d%8O,A%d A%b%b%b%b%b%d",1,0 },
320: {"%w%d%d%8O,0 A%b%b%b%b%d",1,0 },
321: {"0,A%w%w%w%w%d A%b%b%b%b%b%d",1,0 },
322: /* Subinstructions for instruction type 12h */
323: {"S%d %d%d%8O,A%d", 1, 0 },
324: {"S%d %d%d%8O,0", 1, 0 },
325: {"S%d 0,A%w%w%w%d", 1, 0 },
326: /* Subinstructions for instruction type 13h */
327: {"%w%d%d%8O,A%d S%b%b%b%b%b%d",1,0 },
328: {"%w%d%d%8O,0 S%b%b%b%b%d",1,0 },
329: {"0,A%w%w%w%w%d S%b%b%b%b%b%d",1,0 },
330: /* Subinstructions for instruction type 142 */
331: {"V%d S%d!V%d", 0, 0 },
332: {"V%d V%w%d", 0, 0 },
333: /* Subinstructions for instruction type 145 */
334: {"V%d V%d\\V%d", 0, 0 },
335: {"V%d 0", 0, 0 },
336: /* Subinstructions for instruction type 146 */
337: {"V%d S%d!V%d&VM", 0, 0 },
338: {"V%d #VM&V%w%d", 0, 0 },
339: /* Subinstructions for instruction type 150 */
340: {"V%d V%d<A%d", 0, 0 },
341: {"V%d V%d<1", 0, 0 },
342: /* Subinstructions for instruction type 151 */
343: {"V%d V%d>A%d", 0, 0 },
344: {"V%d V%d>1", 0, 0 },
345: /* Subinstructions for instruction type 152 */
346: {"V%d V%d,V%b%d<A%d",0, 0 },
347: {"V%d V%d,V%b%d<1",0, 0 },
348: /* Subinstructions for instruction type 153 */
349: {"V%d V%d,V%b%d>A%d",0, 0 },
350: {"V%d V%d,V%b%d>1",0, 0 },
351: /* Subinstructions for instruction type 156 */
352: {"V%d S%d-V%d", 0, 0 },
353: {"V%d -V%w%d", 0, 0 },
354: /* Subinstructions for instruction type 170 */
355: {"V%d S%d+FV%d", 0, 0 },
356: {"V%d +FV%w%d", 0, 0 },
357: /* Subinstructions for instruction type 172 */
358: {"V%d S%d-FV%d", 0, 0 },
359: {"V%d -FV%w%d", 0, 0 },
360: /* Subinstructions for instruction type 174 */
361: {"V%d \\HV%d", 0, 0 },
362: {"V%d PV%d", 0, 0 },
363: {"V%d QV%d", 0, 0 },
364: /* Subinstructions for instruction type 175 */
365: {"VM V%w%d,Z", 0, 0 },
366: {"VM V%w%d,N", 0, 0 },
367: {"VM V%w%d,P", 0, 0 },
368: {"VM V%w%d,M", 0, 0 },
369: {"V%d,VM V%d,Z", 0, 0 },
370: {"V%d,VM V%d,N", 0, 0 },
371: {"V%d,VM V%d,P", 0, 0 },
372: {"V%d,VM V%d,M", 0, 0 },
373: /* Subinstructions for instruction type 176 */
374: {"V%d ,A0,A%w%d", 0, 0 },
375: {"V%d ,A0,1", 0, 0 },
376: {"V%d ,A0,V%w%d", 0, 0 },
377: /* Subinstructions for instruction type 177 */
378: {",A0,A%w%w%d V%b%b%d",0, 0 },
379: {",A0,1 V%w%d", 0, 0 },
380: {",A0,V%w%w%d V%b%b%d",0, 0 },
381: };
382:
383: /* The second parameter ins is the numeric op code for the instruction.
384: */
385: void printins(idsp, ins)
386: int idsp;
387: long ins;
388: {
389: long ops[5];
390: long blank = -99;
391: int itaboffs;
392: if (dot & 01) {
393: adbpr("not on parcel boundary\n");
394: return;
395: }
396: ins = ins >> 48;
397: ins = ins & 0177777;
398: dotinc = setins ( (unsigned long)ins, dot , idsp);
399: ops[0] = instr.opi;
400: ops[1] = instr.opj;
401: ops[2] = instr.opk;
402: ops[3] = instr.opother;
403: ops[4] = instr.oph;
404: if (itable[instr.opcode].iformat == 0) {
405: itaboffs = getoffs (itable[instr.opcode].ioffset);
406: adbpr (itable[itaboffs].iformat, blank, ops);
407: }
408: else
409: adbpr ( itable[instr.opcode].iformat , blank, ops );
410: }
411:
412: /* Routine setins is used by the disassembler and by
413: the instruction stepper to build the global instr
414: structure and to set dotinc to the size of the
415: instruction. Upon entry, the first parcel of the
416: instruction is in the unsigned long w.
417: */
418: int setins ( w, mydot, idsp)
419: register unsigned long w;
420: long mydot;
421: int idsp;
422: {
423: instr.opcode = (w >> 9) & 0177;
424: instr.oph = (w >> 9) & 07;
425: instr.opi = (w >> 6) & 07;
426: instr.opj = (w >> 3) & 07;
427: instr.opk = (w) & 07;
428: parcels = itable[instr.opcode].iparcels;
429: if (parcels == 1)
430: instr.opother = (unsigned long)(get(mydot+2,idsp)>>48);
431: return(2 * (1+parcels));
432: }
433:
434: /* Routine getoffs is what is used to handle those opcodes that could
435: represent more than one instruction. This routine is simply one large
436: switch with a manual lookup into the subinstruction part of the table
437: */
438: int
439: getoffs (ioffs)
440: int ioffs;
441: {
442: switch (ioffs) {
443: /*001*/ case 0200: switch(instr.opi) {
444: case 0: break;
445: case 1: ioffs += 01; break;
446: case 2: if(instr.opk == 0) ioffs += 02;
447: else ioffs += 03;
448: break;
449: case 3: ioffs += 04; break;
450: case 4: switch(instr.opk) {
451: case 0: if (instr.opj == 2) ioffs += 07;
452: else ioffs += 05;
453: break;
454: case 1: ioffs += 06; break;
455: case 3:
456: case 4:
457: case 5:
458: case 6:
459: case 7:
460: ioffs = ioffs + 05 + instr.opk;
461: break;
462: }
463: case 5: if (instr.opk == 0) ioffs += 015;
464: else ioffs = ioffs + 016 + instr.opj;
465: break;
466: }
467: /*002*/ case 0222: if (instr.opk != 0) break;
468: else ioffs = ioffs + 01 + instr.opi;
469: break;
470: /*003*/ case 0233: switch(instr.opi) {
471: case 0: if (instr.opj != 0) break;
472: else ioffs += 01;
473: break;
474: case 4: ioffs += 02; break;
475: case 6: ioffs += 03; break;
476: case 7: ioffs += 04; break;
477: }
478: /*010*/ case 0240:
479: /*011*/ case 0242:
480: /*012*/ case 0244:
481: /*013*/ case 0246:
482: /*014*/ case 0250:
483: /*015*/ case 0252:
484: /*016*/ case 0254:
485: /*017*/ case 0256: if ((instr.opi>>2)&01 == 1) ioffs += 01;
486: break;
487: /*023*/ case 0260: if (instr.opk == 1)
488: ioffs += 01;
489: break;
490: /*026*/ case 0262: switch(instr.opk) {
491: case 0: break;
492: case 1: ioffs += 01; break;
493: case 7: ioffs += 02; break;
494: }
495: /*027*/ case 0265: if (instr.opk == 7)
496: ioffs += 01;
497: break;
498: /*030*/ case 0267: if (instr.opj == 0) ioffs += 01;
499: if (instr.opk == 0) ioffs += 02;
500: break;
501: /*031*/ case 0272: if (instr.opj == 0) {
502: if (instr.opk == 0) ioffs += 01;
503: else ioffs += 02;
504: break;
505: }
506: if (instr.opk == 0) ioffs += 03;
507: break;
508: /*033*/ case 0276: if (instr.opj == 0) break;
509: if (instr.opk == 0) ioffs += 01;
510: else ioffs += 02;
511: break;
512: /*042*/ case 0301: if ((instr.opj==0)&(instr.opk == 0)) ioffs += 02;
513: if ((instr.opj==7)&(instr.opk == 7)) ioffs += 01;
514: break;
515: /*043*/ case 0304: if ((instr.opj == 0) & (instr.opk == 0)) ioffs += 01;
516: break;
517: /*044*/ case 0306: switch (instr.opk) {
518: case 0: if (instr.opj == 0) ioffs += 01;
519: else ioffs += 02;
520: break;
521: default: break;
522: }
523: /*045*/ case 0311:
524: /*050*/ case 0323:
525: /*150*/ case 0414:
526: /*151*/ case 0416:
527: /*152*/ case 0420:
528: /*153*/ case 0422:
529: if (instr.opk == 0) ioffs += 01;
530: break;
531: /*046*/ case 0313: switch (instr.opk) {
532: case 0: if (instr.opj == 0) ioffs += 01;
533: else ioffs += 02;
534: break;
535: default: break;
536: }
537: /*047*/ case 0316:
538: /*051*/ case 0325:
539: if (instr.opk == 0) {
540: if (instr.opj == 0) ioffs += 04;
541: else ioffs += 03;
542: break;
543: }
544: else if (instr.opj == 0) ioffs += 01;
545: break;
546: /*056*/ case 0332:
547: /*057*/ case 0335:
548: if (instr.opj == 0) ioffs += 02;
549: if (instr.opk == 0) ioffs += 01;
550: break;
551: /*061*/ case 0340:
552: /*062*/ case 0342:
553: /*063*/ case 0344:
554: /*077*/ case 0370:
555: /*142*/ case 0406:
556: /*146*/ case 0412:
557: /*156*/ case 0424:
558: /*170*/ case 0426:
559: /*172*/ case 0430:
560: if (instr.opj == 0) ioffs += 01;
561: break;
562: /*071*/ case 0346: ioffs += instr.opj;
563: break;
564: /*072*/ case 0356: switch (instr.opk) {
565: case 0: break;
566: case 2: ioffs += 01; break;
567: case 3: ioffs += 02; break;
568: }
569: /*073*/ case 0361: switch (instr.opk) {
570: case 0: break;
571: case 1: ioffs = ioffs + 01 + instr.opj; break;
572: case 2: ioffs += 05; break;
573: case 3: ioffs += 06; break;
574: }
575: /*10h*/ case 0372:
576: /*11h*/ case 0375:
577: /*12h*/ case 0400:
578: /*13h*/ case 0403:
579: if (instr.oph == 0) ioffs += 01;
580: else if((instr.opj==0)&(instr.opk==0)&(instr.opother==0))
581: ioffs += 02;
582: break;
583: /*145*/ case 0410: if ((instr.opi == instr.opj) == instr.opk)
584: ioffs += 01;
585: break;
586: /*174*/ case 0432:
587: /*175*/ case 0435:
588: ioffs += instr.opk;
589: break;
590: /*176*/ case 0445: if (instr.opj == 1) ioffs += 02;
591: else if (instr.opk == 0) ioffs += 01;
592: break;
593: /*177*/ case 0450: if (instr.opi == 1) {ioffs += 02; break;}
594: if (instr.opk == 0) ioffs += 01;
595: break;
596: }
597: return (ioffs);
598: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.