xref: /plan9/sys/lib/acid/68020 (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1219b2ee8SDavid du Colombier// 68020 support
2219b2ee8SDavid du Colombier
3219b2ee8SDavid du Colombierdefn acidinit()			// Called after all the init modules are loaded
4219b2ee8SDavid du Colombier{
5219b2ee8SDavid du Colombier	bplist = {};
6219b2ee8SDavid du Colombier	bpfmt = 'x';
7219b2ee8SDavid du Colombier
8219b2ee8SDavid du Colombier	srcpath = {
9219b2ee8SDavid du Colombier		"./",
10219b2ee8SDavid du Colombier		"/sys/src/libc/port/",
11219b2ee8SDavid du Colombier		"/sys/src/libc/9sys/",
12219b2ee8SDavid du Colombier		"/sys/src/libc/68020/"
13219b2ee8SDavid du Colombier	};
14219b2ee8SDavid du Colombier
15219b2ee8SDavid du Colombier	srcfiles = {};			// list of loaded files
16219b2ee8SDavid du Colombier	srctext = {};			// the text of the files
17*7dd7cddfSDavid du Colombier}
18*7dd7cddfSDavid du Colombier
19*7dd7cddfSDavid du Colombierdefn linkreg(addr)
20*7dd7cddfSDavid du Colombier{
21*7dd7cddfSDavid du Colombier	return 0;
22219b2ee8SDavid du Colombier}
23219b2ee8SDavid du Colombier
24219b2ee8SDavid du Colombierdefn stk()				// trace
25219b2ee8SDavid du Colombier{
26*7dd7cddfSDavid du Colombier	_stk(*PC, *A7, 0, 0);
27219b2ee8SDavid du Colombier}
28219b2ee8SDavid du Colombier
29219b2ee8SDavid du Colombierdefn lstk()				// trace with locals
30219b2ee8SDavid du Colombier{
31*7dd7cddfSDavid du Colombier	_stk(*PC, *A7, 0, 1);
32219b2ee8SDavid du Colombier}
33219b2ee8SDavid du Colombier
34219b2ee8SDavid du Colombierdefn gpr()				// print general purpose registers
35219b2ee8SDavid du Colombier{
36219b2ee8SDavid du Colombier	print("R0\t", *R0, "R1\t", *R1, "R2\t", *R2, "R3\t", *R3, "\n");
37219b2ee8SDavid du Colombier	print("R4\t", *R4, "R5\t", *R5, "R6\t", *R6, "R7\t", *R7, "\n");
38219b2ee8SDavid du Colombier	print("A0\t", *A0, "A1\t", *A1, "A2\t", *A2, "A3\t", *A3, "\n");
39219b2ee8SDavid du Colombier	print("A4\t", *A4, "A5\t", *A5, "A6\t", *A6, "A7\t", *A7, "\n");
40219b2ee8SDavid du Colombier}
41219b2ee8SDavid du Colombier
42219b2ee8SDavid du Colombierdefn spr()				// print special processor registers
43219b2ee8SDavid du Colombier{
44219b2ee8SDavid du Colombier	local pc;
45219b2ee8SDavid du Colombier	local cause;
46219b2ee8SDavid du Colombier
47219b2ee8SDavid du Colombier	pc = *PC;
48219b2ee8SDavid du Colombier	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
49219b2ee8SDavid du Colombier	pfl(pc);
50219b2ee8SDavid du Colombier	print("SP\t", *A7, " MAGIC\t", *MAGIC, "\n");
51219b2ee8SDavid du Colombier
52219b2ee8SDavid du Colombier	cause = *VO;
53219b2ee8SDavid du Colombier	print("SR\t", *SR, "VO ", cause, " ", reason(cause), "\n");
54219b2ee8SDavid du Colombier}
55219b2ee8SDavid du Colombier
56219b2ee8SDavid du Colombierdefn regs()				// print all registers
57219b2ee8SDavid du Colombier{
58219b2ee8SDavid du Colombier	spr();
59219b2ee8SDavid du Colombier	gpr();
60219b2ee8SDavid du Colombier}
61219b2ee8SDavid du Colombier
62219b2ee8SDavid du Colombierdefn pstop(pid)
63219b2ee8SDavid du Colombier{
64219b2ee8SDavid du Colombier	local l;
65219b2ee8SDavid du Colombier	local pc;
66219b2ee8SDavid du Colombier
67219b2ee8SDavid du Colombier	pc = *PC;
68219b2ee8SDavid du Colombier
69219b2ee8SDavid du Colombier	print(pid,": ", reason(*VO), "\t");
70219b2ee8SDavid du Colombier	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
71219b2ee8SDavid du Colombier
72219b2ee8SDavid du Colombier	if notes then {
73219b2ee8SDavid du Colombier		if notes[0] != "sys: breakpoint" then {
74219b2ee8SDavid du Colombier			print("Notes pending:\n");
75219b2ee8SDavid du Colombier			l = notes;
76219b2ee8SDavid du Colombier			while l do {
77219b2ee8SDavid du Colombier				print("\t", head l, "\n");
78219b2ee8SDavid du Colombier				l = tail l;
79219b2ee8SDavid du Colombier			}
80219b2ee8SDavid du Colombier		}
81219b2ee8SDavid du Colombier	}
82219b2ee8SDavid du Colombier}
83219b2ee8SDavid du Colombier
84219b2ee8SDavid du Colombieraggr Ureg
85219b2ee8SDavid du Colombier{
86219b2ee8SDavid du Colombier	'U' 0 r0;
87219b2ee8SDavid du Colombier	'U' 4 r1;
88219b2ee8SDavid du Colombier	'U' 8 r2;
89219b2ee8SDavid du Colombier	'U' 12 r3;
90219b2ee8SDavid du Colombier	'U' 16 r4;
91219b2ee8SDavid du Colombier	'U' 20 r5;
92219b2ee8SDavid du Colombier	'U' 24 r6;
93219b2ee8SDavid du Colombier	'U' 28 r7;
94219b2ee8SDavid du Colombier	'U' 32 a0;
95219b2ee8SDavid du Colombier	'U' 36 a1;
96219b2ee8SDavid du Colombier	'U' 40 a2;
97219b2ee8SDavid du Colombier	'U' 44 a3;
98219b2ee8SDavid du Colombier	'U' 48 a4;
99219b2ee8SDavid du Colombier	'U' 52 a5;
100219b2ee8SDavid du Colombier	'U' 56 a6;
101219b2ee8SDavid du Colombier	'U' 60 sp;
102219b2ee8SDavid du Colombier	'U' 64 usp;
103219b2ee8SDavid du Colombier	'U' 68 magic;
104219b2ee8SDavid du Colombier	'u' 72 sr;
105219b2ee8SDavid du Colombier	'U' 74 pc;
106219b2ee8SDavid du Colombier	'u' 78 vo;
107219b2ee8SDavid du Colombier	'a' 80 microstate;
108219b2ee8SDavid du Colombier};
109219b2ee8SDavid du Colombier
110219b2ee8SDavid du Colombierdefn
111219b2ee8SDavid du ColombierUreg(addr) {
112219b2ee8SDavid du Colombier	complex Ureg addr;
113219b2ee8SDavid du Colombier	print("	r0	", addr.r0, "\n");
114219b2ee8SDavid du Colombier	print("	r1	", addr.r1, "\n");
115219b2ee8SDavid du Colombier	print("	r2	", addr.r2, "\n");
116219b2ee8SDavid du Colombier	print("	r3	", addr.r3, "\n");
117219b2ee8SDavid du Colombier	print("	r4	", addr.r4, "\n");
118219b2ee8SDavid du Colombier	print("	r5	", addr.r5, "\n");
119219b2ee8SDavid du Colombier	print("	r6	", addr.r6, "\n");
120219b2ee8SDavid du Colombier	print("	r7	", addr.r7, "\n");
121219b2ee8SDavid du Colombier	print("	a0	", addr.a0, "\n");
122219b2ee8SDavid du Colombier	print("	a1	", addr.a1, "\n");
123219b2ee8SDavid du Colombier	print("	a2	", addr.a2, "\n");
124219b2ee8SDavid du Colombier	print("	a3	", addr.a3, "\n");
125219b2ee8SDavid du Colombier	print("	a4	", addr.a4, "\n");
126219b2ee8SDavid du Colombier	print("	a5	", addr.a5, "\n");
127219b2ee8SDavid du Colombier	print("	a6	", addr.a6, "\n");
128219b2ee8SDavid du Colombier	print("	sp	", addr.sp, "\n");
129219b2ee8SDavid du Colombier	print("	usp	", addr.usp, "\n");
130219b2ee8SDavid du Colombier	print("	magic	", addr.magic, "\n");
131219b2ee8SDavid du Colombier	print("	sr	", addr.sr, "\n");
132219b2ee8SDavid du Colombier	print("	pc	", addr.pc, "\n");
133219b2ee8SDavid du Colombier	print("	vo	", addr.vo, "\n");
134219b2ee8SDavid du Colombier	print("	microstate	", addr.microstate, "\n");
135219b2ee8SDavid du Colombier};
136219b2ee8SDavid du Colombier
137219b2ee8SDavid du Colombierprint("/sys/lib/acid/68020");
138