signal.s 729 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. .define _signal
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. .extern _signal
  8. NSIG=32
  9. _signal:
  10. move.w 4(sp), d0
  11. ext.l d0
  12. cmp.l #NSIG,d0
  13. bcc 1f
  14. move.l 6(sp),d1
  15. move.l d0,a0
  16. add.l a0,a0
  17. add.l a0,a0
  18. add.l #dvect,a0
  19. move.l (a0),a1
  20. move.l d1,(a0)
  21. beq 2f
  22. btst #0,d1
  23. bne 2f
  24. move.l #enter,d1
  25. 2:
  26. move.l d1,-(sp)
  27. move.l d0,-(sp)
  28. clr.l -(sp)
  29. trap #0
  30. .data2 48
  31. add.l #12,sp
  32. bcs 3f
  33. btst #0,d0
  34. bne 4f
  35. move.l a1,d0
  36. 4:
  37. clr.l d1
  38. rts
  39. 1:
  40. move.l #22,d0
  41. 3:
  42. jmp cerror
  43. enter:
  44. movem.l d0/d1/a0/a1,-(sp)
  45. move.l 16(sp),a0
  46. move.l a0,-(sp)
  47. add.l a0,a0
  48. add.l a0,a0
  49. add.l #dvect,a0
  50. move.l (a0),a0
  51. jsr (a0)
  52. add.l #4,sp
  53. movem.l (sp)+,d0/d1/a0/a1
  54. add.l #4,sp
  55. rtr
  56. .sect .bss
  57. dvect: .space 4*NSIG
  58. .sect .text