145 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
_sigtrp:	move.l	(sp)+,d2	!save return address
 | 
						|
		mov	(sp)+,d1	!trapno in d1
 | 
						|
		mov	(sp)+,d4	!signo in d4
 | 
						|
		extend	d4
 | 
						|
		extend	d1
 | 
						|
		comp	#16,d4
 | 
						|
		bhi	sig_bad
 | 
						|
		tst.l	d4
 | 
						|
		beq	sig_bad
 | 
						|
		move.l	d4,a0
 | 
						|
		add.l	a0,a0
 | 
						|
		add.l	a0,a0
 | 
						|
		move.l	#sig_trp-4,a1
 | 
						|
		add.l	a0,a1
 | 
						|
		move.l	(a1),d2		!previous trap number in d2
 | 
						|
		comp	#256,d1		!-2 and -1 special
 | 
						|
		bcc	1f
 | 
						|
		add.l	#sig_adr-4,a0
 | 
						|
		move.l	(a0),d3		!Get the pointer to the trap- 
 | 
						|
		bne	2f		!procedure to give as argument to
 | 
						|
sig_bad:	mov	#22,-(sp)	!_Xsignal. If pointer 0 trapping is
 | 
						|
		mov	#22,-(sp)	!not legal
 | 
						|
		jmp	(a4)
 | 
						|
1:		comp	#-3,d1		!-2:reset default , -3: ignore
 | 
						|
		bmi	sig_bad
 | 
						|
		move.l	d1,d3
 | 
						|
		ad	#2,d3		!0:reset default for signal, -1: ignore
 | 
						|
2:		move.l	d1,(a1)		!set new trapno
 | 
						|
		move.l	d3,-(sp)		!set arguments to signal:
 | 
						|
		mov	d4,-(sp)		!pointer ,signo to be trapped
 | 
						|
		bsr	_Xsignal
 | 
						|
		jmp	(a4)
 | 
						|
	.sect .data
 | 
						|
sig_adr:	.data4	sig1 ;	.data4	sig2 ;	.data4 sig3 ;	.data4	0
 | 
						|
		.data4	0 ;	.data4	0 ;	.data4 0 ;	.data4	0
 | 
						|
		.data4	0 ;	.data4	sig10 ;	.data4 sig11 ;	.data4	sig12
 | 
						|
		.data4	sig13 ;	.data4	sig14 ;	.data4 sig15 ;	.data4	sig16
 | 
						|
sig_trp:	.data4	-2  ;	.data4	-2  ;	.data4	-2  ;	.data4	-2  
 | 
						|
		.data4	-2  ;	.data4	-2  ;	.data4	-2  ;	.data4	-2  
 | 
						|
		.data4	-2  ;	.data4	22  ;	.data4	21  ;	.data4	25  
 | 
						|
		.data4	-2  ;	.data4	-2  ;	.data4	-2  ;	.data4	-2  
 | 
						|
	.sect .text
 | 
						|
!the next procedures map the catched signal to em errors. The em error
 | 
						|
!procedure will handle this.
 | 
						|
sig1:		pea	retutrap
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif
 | 
						|
		move.l	sig_trp,d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		bra	error
 | 
						|
sig2: 		pea	retutrap
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif
 | 
						|
		move.l	sig_trp+4,d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		bra	error
 | 
						|
sig3:		pea	retutrap
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif
 | 
						|
		move.l	sig_trp+8,d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		bra	error
 | 
						|
sig8: 		pea	retutrap
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif
 | 
						|
		move.l	sig_trp+28,d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		bra	error
 | 
						|
sig13:		pea	retutrap
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif
 | 
						|
		move.l	sig_trp+48,d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		bra	error
 | 
						|
sig14:		pea	retutrap
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif
 | 
						|
		move.l	sig_trp+52,d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		bra	error
 | 
						|
sig15:		pea	retutrap
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif
 | 
						|
		move.l	sig_trp+56,d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		bra	error
 | 
						|
sig16:		pea	retutrap
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif
 | 
						|
		move.l	sig_trp+60,d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		bra	error
 | 
						|
retutrap:	add.l	#4,sp		!remove signumber
 | 
						|
		rtr
 | 
						|
 | 
						|
sig12:		pea	sig12
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif
 | 
						|
		mov	#12,-(sp)
 | 
						|
		bsr	_Xsignal
 | 
						|
		bsr	e_badmon
 | 
						|
		rtr
 | 
						|
sig11:
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif		
 | 
						|
		bra	e_memflt
 | 
						|
sig10:
 | 
						|
#ifdef __BSD4_2
 | 
						|
		jsr	setmask
 | 
						|
#endif		
 | 
						|
		bra	e_badptr
 | 
						|
 | 
						|
#ifdef __BSD4_2
 | 
						|
setmask:
 | 
						|
		move.l	mask,-(sp)
 | 
						|
		jsr	_sigsetmask
 | 
						|
		add.l	#4,sp
 | 
						|
		rts
 | 
						|
 | 
						|
getmask:
 | 
						|
		clr.l	-(sp)
 | 
						|
		jsr	_sigblock
 | 
						|
		add.l	#4,sp
 | 
						|
		move.l	d0,mask
 | 
						|
		rts
 | 
						|
 | 
						|
.sect .data
 | 
						|
mask:	
 | 
						|
	.data4 0
 | 
						|
#endif
 |