signal.s 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. .define _signal
  2. .extern _signal
  3. .sect .text
  4. .sect .rom
  5. .sect .data
  6. .sect .bss
  7. .sect .text
  8. NSIG=32
  9. _signal:
  10. move.l 4(sp), d0
  11. cmp.l #NSIG,d0
  12. bcc 1f
  13. move.l 8(sp),d1
  14. move.l d0,a0
  15. add.l a0,a0
  16. add.l a0,a0
  17. add.l #dvect,a0
  18. move.l (a0),a1
  19. move.l d1,(a0)
  20. beq 2f
  21. btst #0,d1
  22. bne 2f
  23. move.l #jmptab,d1
  24. add.l d0,d1
  25. add.l d0,d1
  26. 2:
  27. move.l d0,a0
  28. move.w #0x30,d0
  29. trap #0
  30. bcs 3f
  31. btst #0,d0
  32. bne 4f
  33. move.l a1,d0
  34. 4:
  35. clr.l d1
  36. rts
  37. 1:
  38. move.l #22,d0
  39. 3:
  40. jmp cerror
  41. jmptab: bsr enter
  42. bsr enter
  43. bsr enter
  44. bsr enter
  45. bsr enter
  46. bsr enter
  47. bsr enter
  48. bsr enter
  49. bsr enter
  50. bsr enter
  51. bsr enter
  52. bsr enter
  53. bsr enter
  54. bsr enter
  55. bsr enter
  56. bsr enter
  57. bsr enter
  58. bsr enter
  59. bsr enter
  60. bsr enter
  61. bsr enter
  62. bsr enter
  63. bsr enter
  64. bsr enter
  65. bsr enter
  66. bsr enter
  67. bsr enter
  68. bsr enter
  69. bsr enter
  70. bsr enter
  71. bsr enter
  72. bsr enter
  73. enter:
  74. movem.l d0/d1/a0/a1,-(sp)
  75. move.l 16(sp),d0
  76. sub.l #jmptab+2,d0
  77. asr.l #1,d0
  78. move.l d0,-(sp)
  79. move.l d0,a0
  80. add.l a0,a0
  81. add.l a0,a0
  82. add.l #dvect,a0
  83. move.l (a0),a0
  84. jsr (a0)
  85. add.l #4,sp
  86. movem.l (sp)+,d0/d1/a0/a1
  87. add.l #4,sp
  88. rtr
  89. .sect .bss
  90. dvect: .space 4*NSIG