trap.s 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. .define Trap
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! This subroutine performs the trap instruction.
  8. Trap:
  9. txa
  10. cmp #64
  11. bcc 1f
  12. 2: jmp Dotrap
  13. 1: bmi 2b
  14. pha
  15. lda IGNMASK ! get bitmask (lowbyte)
  16. sta ARTH
  17. lda IGNMASK+1 ! get bitmask (highbyte)
  18. 2: lsr a
  19. ror ARTH ! shiftright bitmask n times
  20. dex
  21. bne 2b
  22. lda #1
  23. and ARTH
  24. bne 3f
  25. pla ! clear hardware_stack
  26. jmp Dotrap
  27. 3: pla ! clear hardware_stack
  28. rts
  29. Dotrap:
  30. sta TRAPVAL
  31. lda #0
  32. cmp ERRPROC+1
  33. bne 1f ! ERRPROC <> 0 (highbyte)
  34. cmp ERRPROC
  35. bne 1f ! ERRPROC <> 0 (lowbyte)
  36. jmp Mtrap
  37. 1: lda #0
  38. ldx #RETURN
  39. jsr Ldi ! save return area
  40. lda hol0+5
  41. ldx hol0+4
  42. jsr Push ! save filename pointer
  43. lda hol0+1
  44. ldx hol0
  45. jsr Push ! save linenumber
  46. lda ERRPROC
  47. sta ADDR ! address of errorhandler (lowbyte)
  48. lda ERRPROC+1
  49. sta ADDR+1 ! address of errorhandler (highbyte)
  50. lda #0
  51. sta ERRPROC ! reset ERRPROC (lowbyte)
  52. sta ERRPROC+1 ! reset ERRPROC (highbyte)
  53. ldx TRAPVAL
  54. jsr Push
  55. jmp (ADDR) ! proceed with errorhandler
  56. Mtrap:
  57. cpx #0
  58. bne 1f
  59. lda #[EARRAY].h
  60. ldx #[EARRAY].l
  61. jsr Mprint
  62. jmp errorend
  63. 1: cpx #1
  64. bne 1f
  65. lda #[ERANGE].h
  66. ldx #[ERANGE].l
  67. jsr Mprint
  68. jmp errorend
  69. 1: cpx #2
  70. bne 1f
  71. lda #[ESET].h
  72. ldx #[ESET].l
  73. jsr Mprint
  74. jmp errorend
  75. 1: cpx #3
  76. bne 1f
  77. lda #[EIOVFL].h
  78. ldx #[EIOVFL].l
  79. jsr Mprint
  80. jmp errorend
  81. 1: cpx #10
  82. bne 1f
  83. lda #[ECONV].h
  84. ldx #[ECONV].l
  85. jsr Mprint
  86. jmp errorend
  87. 1: cpx #16
  88. bne 1f
  89. lda #[ESTACK].h
  90. ldx #[ESTACK].l
  91. jsr Mprint
  92. jmp errorend
  93. 1: cpx #17
  94. bne 1f
  95. lda #[EHEAP].h
  96. ldx #[EHEAP].l
  97. jsr Mprint
  98. jmp errorend
  99. 1: cpx #19
  100. bne 1f
  101. lda #[EODDZ].h
  102. ldx #[EODDZ].l
  103. jsr Mprint
  104. jmp errorend
  105. 1: cpx #20
  106. bne 1f
  107. lda #[ECASE].h
  108. ldx #[ECASE].l
  109. jsr Mprint
  110. jmp errorend
  111. 1: cpx #25
  112. bne 1f
  113. lda #[EBADMON].h
  114. ldx #[EBADMON].l
  115. jsr Mprint
  116. jmp errorend
  117. 1: cpx #26
  118. bne 1f
  119. lda #[EBADLIN].h
  120. ldx #[EBADLIN].l
  121. jsr Mprint
  122. jmp errorend
  123. 1: cpx #27
  124. bne errorend
  125. lda #[EBADGTO].h
  126. ldx #[EBADGTO].l
  127. jsr Mprint
  128. errorend:
  129. ldx TRAPVAL
  130. jmp EXIT