1*25869Ssam /* machdep.c 1.1 86/01/12 */ 2*25869Ssam 3*25869Ssam #include "../tahoe/mem.h" 4*25869Ssam #include "../tahoe/mtpr.h" 5*25869Ssam #include "../tahoe/SYS.h" 6*25869Ssam 7*25869Ssam .set _scb, 0x0 # mask for total disable 8*25869Ssam .set HIGH, 0x1f # mask for total disable 9*25869Ssam .set BERVEC, 0x80 # offset into scb of the bus error vector 10*25869Ssam .set RESTVEC, 0x8 # offset into scb of the restart vector 11*25869Ssam 12*25869Ssam ENTRY(mtpr, 0) 13*25869Ssam mtpr 8(fp),4(fp) 14*25869Ssam ret 15*25869Ssam 16*25869Ssam ENTRY(mfpr, 0) 17*25869Ssam mfpr 4(fp),r0 18*25869Ssam ret 19*25869Ssam 20*25869Ssam ENTRY(bcopy, R2|R1|R0) 21*25869Ssam movl 4(fp),r0 22*25869Ssam movl 8(fp),r1 23*25869Ssam movl 12(fp),r2 24*25869Ssam movblk 25*25869Ssam ret 26*25869Ssam 27*25869Ssam /* 28*25869Ssam * badaddr(addr, len) 29*25869Ssam * see if access addr with a len type instruction causes a machine check 30*25869Ssam * len is length of access (1=byte, 2=short, 4=long) 31*25869Ssam * r0 = 0 means good(exists); r0 =1 means does not exist. 32*25869Ssam */ 33*25869Ssam ENTRY(badaddr, R5|R4|R3|R2|R1) 34*25869Ssam mfpr $IPL,r1 35*25869Ssam mtpr $HIGH,$IPL 36*25869Ssam mfpr $SCBB,r5 37*25869Ssam mtpr $0,$SCBB 38*25869Ssam movl *$BERVEC,r2 39*25869Ssam movl 4(fp),r3 40*25869Ssam movl 8(fp),r4 41*25869Ssam movab 9f,*$BERVEC 42*25869Ssam bbc $0,r4,1f; tstb (r3) 43*25869Ssam 1: bbc $1,r4,1f; tstw (r3) 44*25869Ssam 1: bbc $2,r4,1f; tstl (r3) 45*25869Ssam 1: clrl r0 # made it w/o machine checks 46*25869Ssam 2: movl r2,*$BERVEC 47*25869Ssam mtpr r1,$IPL 48*25869Ssam mtpr r5,$SCBB 49*25869Ssam ret 50*25869Ssam 51*25869Ssam .align 2 52*25869Ssam 9: # Here we catch buss error (if it comes) 53*25869Ssam andl3 4(sp),$ERRCD,r0 54*25869Ssam cmpl r0,$APE 55*25869Ssam jneq 1f 56*25869Ssam halt # Address parity error !!! 57*25869Ssam 1: cmpl r0,$VBE 58*25869Ssam jneq 1f 59*25869Ssam halt # Versabus error 60*25869Ssam 1: 61*25869Ssam movl $1,r0 # Anything else = bad address 62*25869Ssam movab 8(sp),sp # discard buss error trash 63*25869Ssam movab 2b,(sp) # new program counter on stack. 64*25869Ssam rei 65*25869Ssam 66*25869Ssam ENTRY(movow, 0) 67*25869Ssam movow 10(fp),*4(fp) 68*25869Ssam ret 69*25869Ssam 70*25869Ssam ENTRY(movob, 0) 71*25869Ssam movob 9(fp),*4(fp) 72*25869Ssam ret 73