33 lines
		
	
	
	
		
			761 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			761 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #define FREEREGS d0-d1/a0-a1
 | |
| 
 | |
| .define	__begsig
 | |
| .extern	__vectab
 | |
| .extern	__M
 | |
| .sect	.text
 | |
| .sect	.rom
 | |
| .sect	.data
 | |
| .sect	.bss
 | |
| 
 | |
| 
 | |
| mtype = 2			! M+mtype = &M.m_type
 | |
| .sect	.text
 | |
| __begsig:
 | |
| 	movem.l	FREEREGS,-(sp)
 | |
| 	clr.l	d0
 | |
| #ifdef ALCYON
 | |
| 	move.w	24(sp),d0	! d0 = signal number
 | |
| #else
 | |
| 	move.w	16(sp),d0	! d0 = signal number
 | |
| #endif
 | |
| 	move.w	__M+mtype,-(sp)	! push status of last system call
 | |
| 	move.w	d0,-(sp)	! func called with signal number as arg
 | |
| 	asl.l	#2,d0		! pointers are four bytes on 68000
 | |
| 	move.l	#__vectab,a0
 | |
| 	move.l	-4(a0,d0),a0	! a0 = address of routine to call
 | |
| 	jsr	(a0)
 | |
| back:
 | |
| 	add.l	#2,sp		! get signal number off stack
 | |
| 	move.w	(sp)+,__M+mtype	! restore status of previous system call
 | |
| 	movem.l	(sp)+,FREEREGS
 | |
| 	add.l	#2,sp		! remove signal number from stack
 | |
| 	rtr
 |