1*30309Skarels /* machdep.c 1.2 86/12/18 */ 225869Ssam 325869Ssam #include "../tahoe/mem.h" 425869Ssam #include "../tahoe/mtpr.h" 525869Ssam #include "../tahoe/SYS.h" 625869Ssam 7*30309Skarels .set _scb, 0x0 825869Ssam .set HIGH, 0x1f # mask for total disable 925869Ssam .set BERVEC, 0x80 # offset into scb of the bus error vector 1025869Ssam .set RESTVEC, 0x8 # offset into scb of the restart vector 1125869Ssam 1225869Ssam ENTRY(mtpr, 0) 1325869Ssam mtpr 8(fp),4(fp) 1425869Ssam ret 1525869Ssam 1625869Ssam ENTRY(mfpr, 0) 1725869Ssam mfpr 4(fp),r0 1825869Ssam ret 1925869Ssam 2025869Ssam ENTRY(bcopy, R2|R1|R0) 2125869Ssam movl 4(fp),r0 2225869Ssam movl 8(fp),r1 2325869Ssam movl 12(fp),r2 2425869Ssam movblk 2525869Ssam ret 2625869Ssam 2725869Ssam /* 2825869Ssam * badaddr(addr, len) 2925869Ssam * see if access addr with a len type instruction causes a machine check 3025869Ssam * len is length of access (1=byte, 2=short, 4=long) 3125869Ssam * r0 = 0 means good(exists); r0 =1 means does not exist. 3225869Ssam */ 3325869Ssam ENTRY(badaddr, R5|R4|R3|R2|R1) 3425869Ssam mfpr $IPL,r1 3525869Ssam mtpr $HIGH,$IPL 3625869Ssam mfpr $SCBB,r5 3725869Ssam mtpr $0,$SCBB 3825869Ssam movl *$BERVEC,r2 3925869Ssam movl 4(fp),r3 4025869Ssam movl 8(fp),r4 4125869Ssam movab 9f,*$BERVEC 4225869Ssam bbc $0,r4,1f; tstb (r3) 4325869Ssam 1: bbc $1,r4,1f; tstw (r3) 4425869Ssam 1: bbc $2,r4,1f; tstl (r3) 4525869Ssam 1: clrl r0 # made it w/o machine checks 4625869Ssam 2: movl r2,*$BERVEC 4725869Ssam mtpr r1,$IPL 4825869Ssam mtpr r5,$SCBB 4925869Ssam ret 5025869Ssam 5125869Ssam .align 2 5225869Ssam 9: # Here we catch buss error (if it comes) 5325869Ssam andl3 4(sp),$ERRCD,r0 5425869Ssam cmpl r0,$APE 5525869Ssam jneq 1f 5625869Ssam halt # Address parity error !!! 5725869Ssam 1: cmpl r0,$VBE 5825869Ssam jneq 1f 5925869Ssam halt # Versabus error 6025869Ssam 1: 6125869Ssam movl $1,r0 # Anything else = bad address 6225869Ssam movab 8(sp),sp # discard buss error trash 6325869Ssam movab 2b,(sp) # new program counter on stack. 6425869Ssam rei 6525869Ssam 6625869Ssam ENTRY(movow, 0) 6725869Ssam movow 10(fp),*4(fp) 6825869Ssam ret 6925869Ssam 7025869Ssam ENTRY(movob, 0) 71*30309Skarels movob 11(fp),*4(fp) 7225869Ssam ret 73