stcatch.s 761 B

123456789101112131415161718192021222324252627282930313233
  1. #define FREEREGS d0-d1/a0-a1
  2. .define __begsig
  3. .extern __vectab
  4. .extern __M
  5. .sect .text
  6. .sect .rom
  7. .sect .data
  8. .sect .bss
  9. mtype = 2 ! M+mtype = &M.m_type
  10. .sect .text
  11. __begsig:
  12. movem.l FREEREGS,-(sp)
  13. clr.l d0
  14. #ifdef ALCYON
  15. move.w 24(sp),d0 ! d0 = signal number
  16. #else
  17. move.w 16(sp),d0 ! d0 = signal number
  18. #endif
  19. move.w __M+mtype,-(sp) ! push status of last system call
  20. move.w d0,-(sp) ! func called with signal number as arg
  21. asl.l #2,d0 ! pointers are four bytes on 68000
  22. move.l #__vectab,a0
  23. move.l -4(a0,d0),a0 ! a0 = address of routine to call
  24. jsr (a0)
  25. back:
  26. add.l #2,sp ! get signal number off stack
  27. move.w (sp)+,__M+mtype ! restore status of previous system call
  28. movem.l (sp)+,FREEREGS
  29. add.l #2,sp ! remove signal number from stack
  30. rtr