trp.s 890 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. .define trp, fatal
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. fatal:
  8. push *RR14, R1
  9. inc R15, $2
  10. popl saveret, *RR14
  11. pop R1, *RR14 !trap number in R1
  12. push *RR14, R1
  13. push *RR14, R1
  14. dec R15, $4
  15. pop R1, *RR14 !restore R1
  16. inc R15, $2
  17. pushl *RR14, saveret
  18. calr trp
  19. push *RR14, $1
  20. jr EXIT
  21. !NOTREACHED
  22. trp:
  23. push *RR14, R1
  24. inc R15, $2
  25. popl saveret, *RR14
  26. pop R1, *RR14 !trap number in R1
  27. pushl *RR14, saveret
  28. push *RR14, R0
  29. dec R15, $2
  30. cp R1, $16
  31. jr UGE, 1f
  32. ld R0, trpim
  33. bit R0, R1
  34. jr NE, 2f !ignore
  35. 1: sub R15, $24
  36. ldm *RR14, R2, $12
  37. push *RR14, R1
  38. ld R1, trppc
  39. cp R1, $0
  40. jr EQ, 3f
  41. clr trppc
  42. call 0(R1)
  43. inc R15, $2
  44. ldm R2, *RR14, $12
  45. add R15, $24
  46. 2: pop R1, *RR14
  47. pop R0, *RR14
  48. ret
  49. 3: pop R1, *RR14
  50. push *RR14, R1
  51. push *RR14, R1
  52. push *RR14, $err
  53. calr printf
  54. push *RR14, $1
  55. jr EXIT
  56. !NOTREACHED
  57. .sect .data
  58. err: .asciz "trap error %d\n"