signal.s 667 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. .define _signal
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .extern _signal
  7. NSIG=32
  8. .sect .text
  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 d0,a0
  27. move.w #0x30,d0
  28. trap #0
  29. bcs 3f
  30. btst #0,d0
  31. bne 4f
  32. move.l a1,d0
  33. 4:
  34. rts
  35. 1:
  36. move.l #22,d0
  37. 3:
  38. jmp cerror
  39. enter:
  40. movem.l d0/d1/a0/a1,-(sp)
  41. move.l 16(sp),a0
  42. move.l a0,-(sp)
  43. add.l a0,a0
  44. add.l a0,a0
  45. add.l #dvect,a0
  46. move.l (a0),a0
  47. jsr (a0)
  48. add.l #4,sp
  49. movem.l (sp)+,d0/d1/a0/a1
  50. add.l #4,sp
  51. rtr
  52. .sect .bss
  53. dvect: .space 4*NSIG