xref: /inferno-os/module/dis.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1*46439007SCharles.ForsythDis: module
2*46439007SCharles.Forsyth{
3*46439007SCharles.Forsyth	PATH:	con "/dis/lib/dis.dis";
4*46439007SCharles.Forsyth
5*46439007SCharles.Forsyth	XMAGIC:		con	819248;
6*46439007SCharles.Forsyth	SMAGIC:		con	923426;
7*46439007SCharles.Forsyth	MUSTCOMPILE:	con	1<<0;
8*46439007SCharles.Forsyth	DONTCOMPILE:	con 	1<<1;
9*46439007SCharles.Forsyth	SHAREMP:	con 	1<<2;
10*46439007SCharles.Forsyth	DYNMOD:	con	1<<3;
11*46439007SCharles.Forsyth	HASLDT0:	con	1<<4;
12*46439007SCharles.Forsyth	HASEXCEPT:	con	1<<5;
13*46439007SCharles.Forsyth	HASLDT:	con	1<<6;
14*46439007SCharles.Forsyth
15*46439007SCharles.Forsyth	AMP:	con 16r00;	# Src/Dst op addressing
16*46439007SCharles.Forsyth	AFP:	con 16r01;
17*46439007SCharles.Forsyth	AIMM:	con 16r02;
18*46439007SCharles.Forsyth	AXXX:	con 16r03;
19*46439007SCharles.Forsyth	AIND:	con 16r04;
20*46439007SCharles.Forsyth	AMASK:	con 16r07;
21*46439007SCharles.Forsyth
22*46439007SCharles.Forsyth	ARM:	con 16rC0;	# Middle op addressing
23*46439007SCharles.Forsyth	AXNON:	con 16r00;
24*46439007SCharles.Forsyth	AXIMM:	con 16r40;
25*46439007SCharles.Forsyth	AXINF:	con 16r80;
26*46439007SCharles.Forsyth	AXINM:	con 16rC0;
27*46439007SCharles.Forsyth
28*46439007SCharles.Forsyth	DEFZ:	con 0;
29*46439007SCharles.Forsyth	DEFB:	con 1;		# Byte
30*46439007SCharles.Forsyth	DEFW:	con 2;		# Word
31*46439007SCharles.Forsyth	DEFS:	con 3;		# Utf-string
32*46439007SCharles.Forsyth	DEFF:	con 4;		# Real value
33*46439007SCharles.Forsyth	DEFA:	con 5;		# Array
34*46439007SCharles.Forsyth	DIND:	con 6;		# Set index
35*46439007SCharles.Forsyth	DAPOP:	con 7;		# Restore address register
36*46439007SCharles.Forsyth	DEFL:	con 8;		# BIG
37*46439007SCharles.Forsyth	DMAX:	con 1<<4;
38*46439007SCharles.Forsyth
39*46439007SCharles.Forsyth	Inst: adt
40*46439007SCharles.Forsyth	{
41*46439007SCharles.Forsyth		op:	int;
42*46439007SCharles.Forsyth		addr:	int;
43*46439007SCharles.Forsyth		mid:	int;
44*46439007SCharles.Forsyth		src:	int;
45*46439007SCharles.Forsyth		dst:	int;
46*46439007SCharles.Forsyth	};
47*46439007SCharles.Forsyth
48*46439007SCharles.Forsyth	Type: adt
49*46439007SCharles.Forsyth	{
50*46439007SCharles.Forsyth		size:	int;
51*46439007SCharles.Forsyth		np:	int;
52*46439007SCharles.Forsyth		map:	array of byte;
53*46439007SCharles.Forsyth	};
54*46439007SCharles.Forsyth
55*46439007SCharles.Forsyth	Data: adt
56*46439007SCharles.Forsyth	{
57*46439007SCharles.Forsyth		op:	int;		# encoded op
58*46439007SCharles.Forsyth		n:	int;		# number of elements
59*46439007SCharles.Forsyth		off:	int;		# byte offset in data space
60*46439007SCharles.Forsyth		pick {
61*46439007SCharles.Forsyth		Zero =>		# DEFZ
62*46439007SCharles.Forsyth		Bytes =>		# DEFB
63*46439007SCharles.Forsyth			bytes:	array of byte;
64*46439007SCharles.Forsyth		Words =>		# DEFW
65*46439007SCharles.Forsyth			words:	array of int;
66*46439007SCharles.Forsyth		String =>		# DEFS
67*46439007SCharles.Forsyth			str:	string;
68*46439007SCharles.Forsyth		Reals =>		# DEFF
69*46439007SCharles.Forsyth			reals:	array of real;
70*46439007SCharles.Forsyth		Array =>		# DEFA
71*46439007SCharles.Forsyth			typex:	int;
72*46439007SCharles.Forsyth			length:	int;
73*46439007SCharles.Forsyth		Aindex =>		# DIND
74*46439007SCharles.Forsyth			index:	int;
75*46439007SCharles.Forsyth		Arestore =>	# DAPOP
76*46439007SCharles.Forsyth		Bigs =>		# DEFL
77*46439007SCharles.Forsyth			bigs:		array of big;
78*46439007SCharles.Forsyth		}
79*46439007SCharles.Forsyth	};
80*46439007SCharles.Forsyth
81*46439007SCharles.Forsyth	Link: adt
82*46439007SCharles.Forsyth	{
83*46439007SCharles.Forsyth		pc:	int;
84*46439007SCharles.Forsyth		desc:	int;
85*46439007SCharles.Forsyth		sig:	int;
86*46439007SCharles.Forsyth		name:	string;
87*46439007SCharles.Forsyth	};
88*46439007SCharles.Forsyth
89*46439007SCharles.Forsyth	Import: adt
90*46439007SCharles.Forsyth	{
91*46439007SCharles.Forsyth		sig:	int;
92*46439007SCharles.Forsyth		name:	string;
93*46439007SCharles.Forsyth	};
94*46439007SCharles.Forsyth
95*46439007SCharles.Forsyth	Except: adt
96*46439007SCharles.Forsyth	{
97*46439007SCharles.Forsyth		s:	string;
98*46439007SCharles.Forsyth		pc:	int;
99*46439007SCharles.Forsyth	};
100*46439007SCharles.Forsyth
101*46439007SCharles.Forsyth	Handler: adt
102*46439007SCharles.Forsyth	{
103*46439007SCharles.Forsyth		pc1:	int;
104*46439007SCharles.Forsyth		pc2:	int;
105*46439007SCharles.Forsyth		eoff:	int;
106*46439007SCharles.Forsyth		ne:	int;
107*46439007SCharles.Forsyth		t:	ref Type;
108*46439007SCharles.Forsyth		etab:	array of ref Except;
109*46439007SCharles.Forsyth	};
110*46439007SCharles.Forsyth
111*46439007SCharles.Forsyth	Mod: adt
112*46439007SCharles.Forsyth	{
113*46439007SCharles.Forsyth		name:	string;
114*46439007SCharles.Forsyth		srcpath:	string;
115*46439007SCharles.Forsyth
116*46439007SCharles.Forsyth		magic:	int;
117*46439007SCharles.Forsyth		rt:	int;
118*46439007SCharles.Forsyth		ssize:	int;
119*46439007SCharles.Forsyth		isize:	int;
120*46439007SCharles.Forsyth		dsize:	int;
121*46439007SCharles.Forsyth		tsize:	int;
122*46439007SCharles.Forsyth		lsize:	int;
123*46439007SCharles.Forsyth		entry:	int;
124*46439007SCharles.Forsyth		entryt:	int;
125*46439007SCharles.Forsyth
126*46439007SCharles.Forsyth		inst:	array of ref Inst;
127*46439007SCharles.Forsyth		types:	array of ref Type;
128*46439007SCharles.Forsyth		data:	list of ref Data;
129*46439007SCharles.Forsyth		links:	array of ref Link;
130*46439007SCharles.Forsyth		imports:	array of array of ref Import;
131*46439007SCharles.Forsyth		handlers:	array of ref Handler;
132*46439007SCharles.Forsyth
133*46439007SCharles.Forsyth		sign:	array of byte;
134*46439007SCharles.Forsyth	};
135*46439007SCharles.Forsyth
136*46439007SCharles.Forsyth	INOP,
137*46439007SCharles.Forsyth	IALT,
138*46439007SCharles.Forsyth	INBALT,
139*46439007SCharles.Forsyth	IGOTO,
140*46439007SCharles.Forsyth	ICALL,
141*46439007SCharles.Forsyth	IFRAME,
142*46439007SCharles.Forsyth	ISPAWN,
143*46439007SCharles.Forsyth	IRUNT,
144*46439007SCharles.Forsyth	ILOAD,
145*46439007SCharles.Forsyth	IMCALL,
146*46439007SCharles.Forsyth	IMSPAWN,
147*46439007SCharles.Forsyth	IMFRAME,
148*46439007SCharles.Forsyth	IRET,
149*46439007SCharles.Forsyth	IJMP,
150*46439007SCharles.Forsyth	ICASE,
151*46439007SCharles.Forsyth	IEXIT,
152*46439007SCharles.Forsyth	INEW,
153*46439007SCharles.Forsyth	INEWA,
154*46439007SCharles.Forsyth	INEWCB,
155*46439007SCharles.Forsyth	INEWCW,
156*46439007SCharles.Forsyth	INEWCF,
157*46439007SCharles.Forsyth	INEWCP,
158*46439007SCharles.Forsyth	INEWCM,
159*46439007SCharles.Forsyth	INEWCMP,
160*46439007SCharles.Forsyth	ISEND,
161*46439007SCharles.Forsyth	IRECV,
162*46439007SCharles.Forsyth	ICONSB,
163*46439007SCharles.Forsyth	ICONSW,
164*46439007SCharles.Forsyth	ICONSP,
165*46439007SCharles.Forsyth	ICONSF,
166*46439007SCharles.Forsyth	ICONSM,
167*46439007SCharles.Forsyth	ICONSMP,
168*46439007SCharles.Forsyth	IHEADB,
169*46439007SCharles.Forsyth	IHEADW,
170*46439007SCharles.Forsyth	IHEADP,
171*46439007SCharles.Forsyth	IHEADF,
172*46439007SCharles.Forsyth	IHEADM,
173*46439007SCharles.Forsyth	IHEADMP,
174*46439007SCharles.Forsyth	ITAIL,
175*46439007SCharles.Forsyth	ILEA,
176*46439007SCharles.Forsyth	IINDX,
177*46439007SCharles.Forsyth	IMOVP,
178*46439007SCharles.Forsyth	IMOVM,
179*46439007SCharles.Forsyth	IMOVMP,
180*46439007SCharles.Forsyth	IMOVB,
181*46439007SCharles.Forsyth	IMOVW,
182*46439007SCharles.Forsyth	IMOVF,
183*46439007SCharles.Forsyth	ICVTBW,
184*46439007SCharles.Forsyth	ICVTWB,
185*46439007SCharles.Forsyth	ICVTFW,
186*46439007SCharles.Forsyth	ICVTWF,
187*46439007SCharles.Forsyth	ICVTCA,
188*46439007SCharles.Forsyth	ICVTAC,
189*46439007SCharles.Forsyth	ICVTWC,
190*46439007SCharles.Forsyth	ICVTCW,
191*46439007SCharles.Forsyth	ICVTFC,
192*46439007SCharles.Forsyth	ICVTCF,
193*46439007SCharles.Forsyth	IADDB,
194*46439007SCharles.Forsyth	IADDW,
195*46439007SCharles.Forsyth	IADDF,
196*46439007SCharles.Forsyth	ISUBB,
197*46439007SCharles.Forsyth	ISUBW,
198*46439007SCharles.Forsyth	ISUBF,
199*46439007SCharles.Forsyth	IMULB,
200*46439007SCharles.Forsyth	IMULW,
201*46439007SCharles.Forsyth	IMULF,
202*46439007SCharles.Forsyth	IDIVB,
203*46439007SCharles.Forsyth	IDIVW,
204*46439007SCharles.Forsyth	IDIVF,
205*46439007SCharles.Forsyth	IMODW,
206*46439007SCharles.Forsyth	IMODB,
207*46439007SCharles.Forsyth	IANDB,
208*46439007SCharles.Forsyth	IANDW,
209*46439007SCharles.Forsyth	IORB,
210*46439007SCharles.Forsyth	IORW,
211*46439007SCharles.Forsyth	IXORB,
212*46439007SCharles.Forsyth	IXORW,
213*46439007SCharles.Forsyth	ISHLB,
214*46439007SCharles.Forsyth	ISHLW,
215*46439007SCharles.Forsyth	ISHRB,
216*46439007SCharles.Forsyth	ISHRW,
217*46439007SCharles.Forsyth	IINSC,
218*46439007SCharles.Forsyth	IINDC,
219*46439007SCharles.Forsyth	IADDC,
220*46439007SCharles.Forsyth	ILENC,
221*46439007SCharles.Forsyth	ILENA,
222*46439007SCharles.Forsyth	ILENL,
223*46439007SCharles.Forsyth	IBEQB,
224*46439007SCharles.Forsyth	IBNEB,
225*46439007SCharles.Forsyth	IBLTB,
226*46439007SCharles.Forsyth	IBLEB,
227*46439007SCharles.Forsyth	IBGTB,
228*46439007SCharles.Forsyth	IBGEB,
229*46439007SCharles.Forsyth	IBEQW,
230*46439007SCharles.Forsyth	IBNEW,
231*46439007SCharles.Forsyth	IBLTW,
232*46439007SCharles.Forsyth	IBLEW,
233*46439007SCharles.Forsyth	IBGTW,
234*46439007SCharles.Forsyth	IBGEW,
235*46439007SCharles.Forsyth	IBEQF,
236*46439007SCharles.Forsyth	IBNEF,
237*46439007SCharles.Forsyth	IBLTF,
238*46439007SCharles.Forsyth	IBLEF,
239*46439007SCharles.Forsyth	IBGTF,
240*46439007SCharles.Forsyth	IBGEF,
241*46439007SCharles.Forsyth	IBEQC,
242*46439007SCharles.Forsyth	IBNEC,
243*46439007SCharles.Forsyth	IBLTC,
244*46439007SCharles.Forsyth	IBLEC,
245*46439007SCharles.Forsyth	IBGTC,
246*46439007SCharles.Forsyth	IBGEC,
247*46439007SCharles.Forsyth	ISLICEA,
248*46439007SCharles.Forsyth	ISLICELA,
249*46439007SCharles.Forsyth	ISLICEC,
250*46439007SCharles.Forsyth	IINDW,
251*46439007SCharles.Forsyth	IINDF,
252*46439007SCharles.Forsyth	IINDB,
253*46439007SCharles.Forsyth	INEGF,
254*46439007SCharles.Forsyth	IMOVL,
255*46439007SCharles.Forsyth	IADDL,
256*46439007SCharles.Forsyth	ISUBL,
257*46439007SCharles.Forsyth	IDIVL,
258*46439007SCharles.Forsyth	IMODL,
259*46439007SCharles.Forsyth	IMULL,
260*46439007SCharles.Forsyth	IANDL,
261*46439007SCharles.Forsyth	IORL,
262*46439007SCharles.Forsyth	IXORL,
263*46439007SCharles.Forsyth	ISHLL,
264*46439007SCharles.Forsyth	ISHRL,
265*46439007SCharles.Forsyth	IBNEL,
266*46439007SCharles.Forsyth	IBLTL,
267*46439007SCharles.Forsyth	IBLEL,
268*46439007SCharles.Forsyth	IBGTL,
269*46439007SCharles.Forsyth	IBGEL,
270*46439007SCharles.Forsyth	IBEQL,
271*46439007SCharles.Forsyth	ICVTLF,
272*46439007SCharles.Forsyth	ICVTFL,
273*46439007SCharles.Forsyth	ICVTLW,
274*46439007SCharles.Forsyth	ICVTWL,
275*46439007SCharles.Forsyth	ICVTLC,
276*46439007SCharles.Forsyth	ICVTCL,
277*46439007SCharles.Forsyth	IHEADL,
278*46439007SCharles.Forsyth	ICONSL,
279*46439007SCharles.Forsyth	INEWCL,
280*46439007SCharles.Forsyth	ICASEC,
281*46439007SCharles.Forsyth	IINDL,
282*46439007SCharles.Forsyth	IMOVPC,
283*46439007SCharles.Forsyth	ITCMP,
284*46439007SCharles.Forsyth	IMNEWZ,
285*46439007SCharles.Forsyth	ICVTRF,
286*46439007SCharles.Forsyth	ICVTFR,
287*46439007SCharles.Forsyth	ICVTWS,
288*46439007SCharles.Forsyth	ICVTSW,
289*46439007SCharles.Forsyth	ILSRW,
290*46439007SCharles.Forsyth	ILSRL,
291*46439007SCharles.Forsyth	IECLR,
292*46439007SCharles.Forsyth	INEWZ,
293*46439007SCharles.Forsyth	INEWAZ,
294*46439007SCharles.Forsyth	IRAISE,
295*46439007SCharles.Forsyth	ICASEL,
296*46439007SCharles.Forsyth	IMULX,
297*46439007SCharles.Forsyth	IDIVX,
298*46439007SCharles.Forsyth	ICVTXX,
299*46439007SCharles.Forsyth	IMULX0,
300*46439007SCharles.Forsyth	IDIVX0,
301*46439007SCharles.Forsyth	ICVTXX0,
302*46439007SCharles.Forsyth	IMULX1,
303*46439007SCharles.Forsyth	IDIVX1,
304*46439007SCharles.Forsyth	ICVTXX1,
305*46439007SCharles.Forsyth	ICVTFX,
306*46439007SCharles.Forsyth	ICVTXF,
307*46439007SCharles.Forsyth	IEXPW,
308*46439007SCharles.Forsyth	IEXPL,
309*46439007SCharles.Forsyth	IEXPF,
310*46439007SCharles.Forsyth	ISELF,
311*46439007SCharles.Forsyth	# add new instructions here
312*46439007SCharles.Forsyth	MAXDIS: con iota;
313*46439007SCharles.Forsyth
314*46439007SCharles.Forsyth	init:		fn();
315*46439007SCharles.Forsyth	loadobj:	fn(file: string): (ref Mod, string);
316*46439007SCharles.Forsyth	op2s:	fn(op: int): string;
317*46439007SCharles.Forsyth	inst2s:	fn(ins: ref Inst): string;
318*46439007SCharles.Forsyth	src:		fn(file: string): string;
319*46439007SCharles.Forsyth};
320*46439007SCharles.Forsyth#
321*46439007SCharles.Forsyth# derived by Vita Nuova Limited 1998 from /appl/wm/rt.b and /include/isa.h, both
322*46439007SCharles.Forsyth# Copyright © 1996-1999 Lucent Technologies Inc.  All rights reserved.
323*46439007SCharles.Forsyth#
324