123456789101112131415161718192021222324252627282930313233 |
- #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
|