| // 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); |