xref: /csrg-svn/sys/tahoe/stand/machdep.c (revision 30309)
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