Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
// 386 support
2
 
3
defn acidinit()			// Called after all the init modules are loaded
4
{
5
	bplist = {};
6
	bpfmt = 'b';
7
 
8
	srcpath = {
9
		"./",
10
		"/sys/src/libc/port/",
11
		"/sys/src/libc/9sys/",
12
		"/sys/src/libc/386/"
13
	};
14
 
15
	srcfiles = {};			// list of loaded files
16
	srctext = {};			// the text of the files
17
}
18
 
19
defn linkreg(addr)
20
{
21
	return 0;
22
}
23
 
24
defn stk()				// trace
25
{
26
	_stk(*PC, *SP, 0, 0);
27
}
28
 
29
defn lstk()				// trace with locals
30
{
31
	_stk(*PC, *SP, 0, 1);
32
}
33
 
34
defn gpr()		// print general(hah hah!) purpose registers
35
{
36
	print("AX\t", *AX, " BX\t", *BX, " CX\t", *CX, " DX\t", *DX, "\n");
37
	print("DI\t", *DI, " SI\t", *SI, " BP\t", *BP, "\n");
38
}
39
 
40
defn spr()				// print special processor registers
41
{
42
	local pc;
43
	local cause;
44
 
45
	pc = *PC;
46
	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
47
	pfl(pc);
48
	print("SP\t", *SP, " ECODE ", *ECODE, " EFLAG ", *EFLAGS, "\n");
49
	print("CS\t", *CS, " DS\t ", *DS, " SS\t", *SS, "\n");
50
	print("GS\t", *GS, " FS\t ", *FS, " ES\t", *ES, "\n");
51
 
52
	cause = *TRAP;
53
	print("TRAP\t", cause, " ", reason(cause), "\n");
54
}
55
 
56
defn regs()				// print all registers
57
{
58
	spr();
59
	gpr();
60
}
61
 
62
defn fpr()
63
{
64
	print("F0\t",  *F0, "\n");
65
	print("F1\t",  *F1, "\n");
66
	print("F2\t",  *F2, "\n");
67
	print("F3\t",  *F3, "\n");
68
	print("F4\t",  *F4, "\n");
69
	print("F5\t",  *F5, "\n");
70
	print("F6\t",  *F6, "\n");
71
	print("F7\t",  *F7, "\n");
72
	print("control\t", *fmt(E0, 'x'), "\n");
73
	print("status\t", *fmt(E1, 'x'), "\n");
74
	print("tag\t", *fmt(E2, 'x'), "\n");
75
	print("ip offset\t", *fmt(E3, 'X'), "\n");
76
	print("cs selector\t", *fmt(E4, 'x'), "\n");
77
	print("opcode\t", *fmt(E4>>8, 'x'), "\n");
78
	print("data operand offset\t", *fmt(E5, 'x'), "\n");
79
	print("operand selector\t", *fmt(E6, 'x'), "\n");
80
}
81
 
82
defn mmregs()
83
{
84
	print("MM0\t", *MM0, " MM1\t", *MM1, "\n");
85
	print("MM2\t", *MM2, " MM3\t", *MM3, "\n");
86
	print("MM4\t", *MM4, " MM5\t", *MM5, "\n");
87
	print("MM6\t", *MM6, " MM7\t", *MM7, "\n");
88
}
89
 
90
defn pstop(pid)
91
{
92
	local l;
93
	local pc;
94
 
95
	pc = *PC;
96
 
97
	print(pid,": ", reason(*TRAP), "\t");
98
	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
99
 
100
	if notes then {
101
		if notes[0] != "sys: breakpoint" then {
102
			print("Notes pending:\n");
103
			l = notes;
104
			while l do {
105
				print("\t", head l, "\n");
106
				l = tail l;
107
			}
108
		}
109
	}
110
}
111
 
112
aggr Ureg
113
{
114
	'X' 0 di;
115
	'X' 4 si;
116
	'X' 8 bp;
117
	'X' 12 nsp;
118
	'X' 16 bx;
119
	'X' 20 dx;
120
	'X' 24 cx;
121
	'X' 28 ax;
122
	'X' 32 gs;
123
	'X' 36 fs;
124
	'X' 40 es;
125
	'X' 44 ds;
126
	'X' 48 trap;
127
	'X' 52 ecode;
128
	'X' 56 pc;
129
	'X' 60 cs;
130
	'X' 64 flags;
131
	{
132
	'X' 68 usp;
133
	'X' 68 sp;
134
	};
135
	'X' 72 ss;
136
};
137
 
138
defn
139
Ureg(addr) {
140
	complex Ureg addr;
141
	print("	di	", addr.di, "\n");
142
	print("	si	", addr.si, "\n");
143
	print("	bp	", addr.bp, "\n");
144
	print("	nsp	", addr.nsp, "\n");
145
	print("	bx	", addr.bx, "\n");
146
	print("	dx	", addr.dx, "\n");
147
	print("	cx	", addr.cx, "\n");
148
	print("	ax	", addr.ax, "\n");
149
	print("	gs	", addr.gs, "\n");
150
	print("	fs	", addr.fs, "\n");
151
	print("	es	", addr.es, "\n");
152
	print("	ds	", addr.ds, "\n");
153
	print("	trap	", addr.trap, "\n");
154
	print("	ecode	", addr.ecode, "\n");
155
	print("	pc	", addr.pc, "\n");
156
	print("	cs	", addr.cs, "\n");
157
	print("	flags	", addr.flags, "\n");
158
	print("	sp	", addr.sp, "\n");
159
	print("	ss	", addr.ss, "\n");
160
};
161
sizeofUreg = 76;
162
 
163
print("/sys/lib/acid/386");