xref: /inferno-os/lib/acid/arm (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1*46439007SCharles.Forsyth// ARM support
2*46439007SCharles.Forsyth
3*46439007SCharles.Forsythdefn acidinit()			// Called after all the init modules are loaded
4*46439007SCharles.Forsyth{
5*46439007SCharles.Forsyth	bpl = {};
6*46439007SCharles.Forsyth	bpid = -1;
7*46439007SCharles.Forsyth	bpfmt = 'X';
8*46439007SCharles.Forsyth	nopstop = 0;
9*46439007SCharles.Forsyth
10*46439007SCharles.Forsyth	srcpath = {
11*46439007SCharles.Forsyth		"./",
12*46439007SCharles.Forsyth	};
13*46439007SCharles.Forsyth
14*46439007SCharles.Forsyth	srcfiles = {};			// list of loaded files
15*46439007SCharles.Forsyth	srctext = {};			// the text of the files
16*46439007SCharles.Forsyth}
17*46439007SCharles.Forsyth
18*46439007SCharles.Forsythdefn linkreg(addr)
19*46439007SCharles.Forsyth{
20*46439007SCharles.Forsyth	return 0;
21*46439007SCharles.Forsyth}
22*46439007SCharles.Forsyth
23*46439007SCharles.Forsythdefn stk()			// trace
24*46439007SCharles.Forsyth{
25*46439007SCharles.Forsyth	_stk(*PC, *SP, linkreg(0), 0);
26*46439007SCharles.Forsyth}
27*46439007SCharles.Forsyth
28*46439007SCharles.Forsythdefn lstk()			// trace with locals
29*46439007SCharles.Forsyth{
30*46439007SCharles.Forsyth	_stk(*PC, *SP, linkreg(0), 1);
31*46439007SCharles.Forsyth}
32*46439007SCharles.Forsyth
33*46439007SCharles.Forsythdefn kstk()
34*46439007SCharles.Forsyth{
35*46439007SCharles.Forsyth	local lab;
36*46439007SCharles.Forsyth	complex Proc proc;
37*46439007SCharles.Forsyth	lab = proc.sched;
38*46439007SCharles.Forsyth	complex Label lab;
39*46439007SCharles.Forsyth	_stk(lab.pc\X, lab.sp\X, linkreg(0), 0);
40*46439007SCharles.Forsyth}
41*46439007SCharles.Forsyth
42*46439007SCharles.Forsythdefn lkstk()
43*46439007SCharles.Forsyth{
44*46439007SCharles.Forsyth	local lab;
45*46439007SCharles.Forsyth	complex Proc proc;
46*46439007SCharles.Forsyth	lab = proc.sched;
47*46439007SCharles.Forsyth	complex Label lab;
48*46439007SCharles.Forsyth	_stk(lab.pc\X, lab.sp\X, linkreg(0), 1);
49*46439007SCharles.Forsyth}
50*46439007SCharles.Forsyth
51*46439007SCharles.Forsythdefn gpr()				// print general purpose registers
52*46439007SCharles.Forsyth{
53*46439007SCharles.Forsyth	print("R0\t", *R0, " R1\t", *R1, " R2\t", *R2, " R3\t", *R3, "\n");
54*46439007SCharles.Forsyth	print("R4\t", *R4, " R5\t", *R5, " R6\t", *R6, " R7\t", *R7, "\n");
55*46439007SCharles.Forsyth	print("R8\t", *R8, " R9\t", *R9, " R10\t", *R10, " R11\t", *R11, "\n");
56*46439007SCharles.Forsyth	print("R12\t", *R12, "\n");
57*46439007SCharles.Forsyth	return 0;
58*46439007SCharles.Forsyth}
59*46439007SCharles.Forsyth
60*46439007SCharles.Forsythdefn spr()				// print special processor registers
61*46439007SCharles.Forsyth{
62*46439007SCharles.Forsyth	local pc;
63*46439007SCharles.Forsyth	local cause;
64*46439007SCharles.Forsyth	local lr;
65*46439007SCharles.Forsyth
66*46439007SCharles.Forsyth	pc = *PC;
67*46439007SCharles.Forsyth	lr = *LINK;
68*46439007SCharles.Forsyth	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
69*46439007SCharles.Forsyth	pfl(pc);
70*46439007SCharles.Forsyth	print("LINK\t", lr, " ", fmt(lr, 'a'), "  ");
71*46439007SCharles.Forsyth	pfl(lr);
72*46439007SCharles.Forsyth	print("TYPE: ", reason(*TYPE), "\n");
73*46439007SCharles.Forsyth	print("SP\t", *SP, "\n");
74*46439007SCharles.Forsyth
75*46439007SCharles.Forsyth	return 0;
76*46439007SCharles.Forsyth}
77*46439007SCharles.Forsyth
78*46439007SCharles.Forsythdefn regs()				// print all registers
79*46439007SCharles.Forsyth{
80*46439007SCharles.Forsyth	spr();
81*46439007SCharles.Forsyth	gpr();
82*46439007SCharles.Forsyth}
83*46439007SCharles.Forsyth
84*46439007SCharles.Forsythprint("$ROOT/lib/acid/arm");
85