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