trp.s 725 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #
  2. .define .trp
  3. .sect .text
  4. .sect .rom
  5. .sect .data
  6. fmt: .asciz "%s\n"
  7. .sect .bss
  8. .sect .text
  9. .trp:
  10. movem.l d0/d1/a0, -(sp)
  11. move.l (12, sp), a0 ! return address
  12. move.l (16, sp), d0 ! error number
  13. move.l a0, (16, sp)
  14. move.l d0, (12, sp)
  15. cmp.l #16, d0
  16. bcc 1f
  17. move.l (.ignmask), d1
  18. btst d0, d1
  19. bne 3f
  20. 1:
  21. move.l (.trppc), a0
  22. move.l a0, d1
  23. beq 9f
  24. clr.l (.trppc)
  25. movem.l d2-d7/a1-a5,-(sp)
  26. #if _M68881
  27. fmovem.x fp0-fp7,-(sp)
  28. #endif
  29. move.l d0,-(sp)
  30. jsr (a0)
  31. add.l #4, sp
  32. #if _M68881
  33. fmovem.x (sp)+,fp0-fp7
  34. #endif
  35. movem.l (sp)+,d2-d7/a1-a5
  36. 3:
  37. movem.l (sp)+, d0/d1/a0
  38. add.l #4, sp
  39. rts
  40. 9:
  41. move.l d0,-(sp)
  42. jsr (__trpstr)
  43. move.l d0,(sp)
  44. pea (fmt)
  45. jsr (.diagnos)
  46. lea (4, sp), sp
  47. illegal
  48. jmp (EXIT)
  49. .align 2