42 lines
		
	
	
	
		
			878 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			878 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define _begsig
 | |
| .sect .text; .sect .rom; .sect .data
 | |
| .extern _begsig
 | |
| .extern _vectab, _M
 | |
| mtype = 2			! M+mtype = &M.m_type
 | |
| .sect .text
 | |
| _begsig:
 | |
| 	push ax			! after interrupt, save all regs
 | |
| 	push bx
 | |
| 	push cx
 | |
| 	push dx
 | |
| 	push si
 | |
| 	push di
 | |
| 	push bp
 | |
| 	push ds
 | |
| 	push es
 | |
| 	mov bx,sp
 | |
| 	mov bx,18(bx)		! bx = signal number
 | |
| 	mov ax,bx		! ax = signal number
 | |
| 	dec bx			! vectab[0] is for sig 1
 | |
| 	add bx,bx		! pointers are two bytes on 8088
 | |
| 	mov bx,_vectab(bx)	! bx = address of routine to call
 | |
| 	push (_M+mtype)		! push status of last system call
 | |
| 	push ax			! func called with signal number as arg
 | |
| 	call (bx)
 | |
| back:
 | |
| 	pop ax			! get signal number off stack
 | |
| 	pop (_M+mtype)		! restore status of previous system call
 | |
| 	pop es			! signal handling finished
 | |
| 	pop ds
 | |
| 	pop bp
 | |
| 	pop di
 | |
| 	pop si
 | |
| 	pop dx
 | |
| 	pop cx
 | |
| 	pop bx
 | |
| 	pop ax
 | |
| 	pop (dummy)		! remove signal number from stack
 | |
| 	iret
 | |
| 
 | |
| .sect .data 
 | |
| dummy: .data2 0
 |