trp.s 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
  2. .define .trp
  3. ! $Id$
  4. .trp:
  5. pushl r0
  6. movl 8(sp),r0
  7. movl 4(sp),8(sp)
  8. movl (sp)+,(sp)
  9. cmpl r0,$16
  10. bgequ I1 ! a trapnumber >= 16 cannot be ignored
  11. bbc r0,.trpim,I1
  12. movl (sp)+,r0
  13. rsb
  14. I1:
  15. pushr $017776 ! save registers
  16. pushl r0 ! trapnumber on stack
  17. movl .trppc,r0
  18. beql I2 ! is there a user defined traphandler?
  19. clrl .trppc
  20. calls $1,(r0) ! if so, call it
  21. popr $017776 ! restore registers
  22. movl (sp)+,r0
  23. rsb
  24. I2:
  25. ! Put the (octal) trapnumber in the zeroes in Iemes[].
  26. movl $Iemesend-9,r1 ! Addres after last '0'.
  27. movl $5,r2 ! Max number of digits.
  28. movl (sp),r0 ! Trap number in r0.
  29. I3:
  30. bicw3 $0177770,r0,r3 ! Lower 3 bits form lower octal digit.
  31. bisb2 r3,-(r1) ! Put them in the '0'.
  32. ashl $-3,r0,r0 ! Shift the 3 bits off.
  33. sobgtr r2,I3
  34. pushl $Iemesend-Iemes
  35. pushab Iemes
  36. pushl $2
  37. calls $3,WRITE
  38. bpt
  39. .sect .data
  40. Iemes:
  41. .data1 'E','M',' ','t','r','a','p',' ','0','0','0','0','0',' ','(','o','c','t','a','l',')',0xa
  42. Iemesend:
  43. .align 2