signal.s 999 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "sys.h"
  2. EINVAL = 026
  3. .define _signal
  4. .extern _errno
  5. NSIGNALS = 024
  6. tvect:
  7. jsr r0,1f
  8. jsr r0,1f
  9. jsr r0,1f
  10. jsr r0,1f
  11. jsr r0,1f
  12. jsr r0,1f
  13. jsr r0,1f
  14. jsr r0,1f
  15. jsr r0,1f
  16. jsr r0,1f
  17. jsr r0,1f
  18. jsr r0,1f
  19. jsr r0,1f
  20. jsr r0,1f
  21. jsr r0,1f
  22. jsr r0,1f
  23. jsr r0,1f
  24. jsr r0,1f
  25. jsr r0,1f
  26. jsr r0,1f
  27. 1:
  28. mov r1,-(sp)
  29. mov r2,-(sp)
  30. mov r3,-(sp)
  31. mov r4,-(sp)
  32. sub $tvect+4,r0
  33. asr r0
  34. mov r0,-(sp)
  35. asr (sp)
  36. jsr pc,*dvect(r0)
  37. tst (sp)+
  38. mov (sp)+,r4
  39. mov (sp)+,r3
  40. mov (sp)+,r2
  41. mov (sp)+,r1
  42. mov (sp)+,r0
  43. rtt
  44. _signal:
  45. mov r5,-(sp)
  46. mov sp,r5
  47. mov 4(r5),r1
  48. cmp r1,$NSIGNALS
  49. bhis 2f
  50. mov 6(r5),r0
  51. mov r1,0f+2
  52. asl r1
  53. mov dvect(r1),-(sp)
  54. mov r0,dvect(r1)
  55. mov r0,0f+4
  56. beq 1f
  57. bit $1,r0
  58. bne 1f
  59. asl r1
  60. add $tvect,r1
  61. mov r1,0f+4
  62. 1:
  63. sys indir; .data2 0f
  64. bcs 3f
  65. bit $1,r0
  66. beq 1f
  67. mov r0,(sp)
  68. 1:
  69. mov (sp)+,r0
  70. mov (sp)+,r5
  71. rts pc
  72. 2:
  73. mov $EINVAL,r0
  74. 3:
  75. mov r0,_errno
  76. mov $-1,r0
  77. mov (sp)+,r5
  78. rts pc
  79. .sect .data
  80. 0:
  81. sys signal
  82. .data2 0, 0
  83. .sect .bss
  84. dvect: .space [NSIGNALS*2]