// 68020 support

defn acidinit()			// Called after all the init modules are loaded
{
	bplist = {};
	bpfmt = 'x';

	srcpath = {
		"./",
		"/sys/src/libc/port/",
		"/sys/src/libc/9sys/",
		"/sys/src/libc/68020/"
	};

	srcfiles = {};			// list of loaded files
	srctext = {};			// the text of the files
}

defn linkreg(addr)
{
	return 0;
}

defn stk()				// trace
{
	_stk(*PC, *A7, 0, 0);
}

defn lstk()				// trace with locals
{
	_stk(*PC, *A7, 0, 1);
}

defn gpr()				// print general purpose registers
{
	print("R0\t", *R0, "R1\t", *R1, "R2\t", *R2, "R3\t", *R3, "\n");
	print("R4\t", *R4, "R5\t", *R5, "R6\t", *R6, "R7\t", *R7, "\n");
	print("A0\t", *A0, "A1\t", *A1, "A2\t", *A2, "A3\t", *A3, "\n");
	print("A4\t", *A4, "A5\t", *A5, "A6\t", *A6, "A7\t", *A7, "\n");
}

defn spr()				// print special processor registers
{
	local pc;
	local cause;

	pc = *PC;
	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
	pfl(pc);
	print("SP\t", *A7, " MAGIC\t", *MAGIC, "\n");

	cause = *VO;
	print("SR\t", *SR, "VO ", cause, " ", reason(cause), "\n");
}

defn regs()				// print all registers
{
	spr();
	gpr();
}

defn pstop(pid)
{
	local l;
	local pc;

	pc = *PC;

	print(pid,": ", reason(*VO), "\t");
	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");

	if notes then {
		if notes[0] != "sys: breakpoint" then {
			print("Notes pending:\n");
			l = notes;
			while l do {
				print("\t", head l, "\n");
				l = tail l;
			}
		}
	}
}

aggr Ureg
{
	'U' 0 r0;
	'U' 4 r1;
	'U' 8 r2;
	'U' 12 r3;
	'U' 16 r4;
	'U' 20 r5;
	'U' 24 r6;
	'U' 28 r7;
	'U' 32 a0;
	'U' 36 a1;
	'U' 40 a2;
	'U' 44 a3;
	'U' 48 a4;
	'U' 52 a5;
	'U' 56 a6;
	'U' 60 sp;
	'U' 64 usp;
	'U' 68 magic;
	'u' 72 sr;
	'U' 74 pc;
	'u' 78 vo;
	'a' 80 microstate;
};

defn
Ureg(addr) {
	complex Ureg addr;
	print("	r0	", addr.r0, "\n");
	print("	r1	", addr.r1, "\n");
	print("	r2	", addr.r2, "\n");
	print("	r3	", addr.r3, "\n");
	print("	r4	", addr.r4, "\n");
	print("	r5	", addr.r5, "\n");
	print("	r6	", addr.r6, "\n");
	print("	r7	", addr.r7, "\n");
	print("	a0	", addr.a0, "\n");
	print("	a1	", addr.a1, "\n");
	print("	a2	", addr.a2, "\n");
	print("	a3	", addr.a3, "\n");
	print("	a4	", addr.a4, "\n");
	print("	a5	", addr.a5, "\n");
	print("	a6	", addr.a6, "\n");
	print("	sp	", addr.sp, "\n");
	print("	usp	", addr.usp, "\n");
	print("	magic	", addr.magic, "\n");
	print("	sr	", addr.sr, "\n");
	print("	pc	", addr.pc, "\n");
	print("	vo	", addr.vo, "\n");
	print("	microstate	", addr.microstate, "\n");
};

print(acidfile);
