123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- .define Trap
- .sect .text
- .sect .rom
- .sect .data
- .sect .bss
- .sect .text
- ! This subroutine performs the trap instruction.
- Trap:
- txa
- cmp #64
- bcc 1f
- 2: jmp Dotrap
- 1: bmi 2b
- pha
- lda IGNMASK ! get bitmask (lowbyte)
- sta ARTH
- lda IGNMASK+1 ! get bitmask (highbyte)
- 2: lsr a
- ror ARTH ! shiftright bitmask n times
- dex
- bne 2b
- lda #1
- and ARTH
- bne 3f
- pla ! clear hardware_stack
- jmp Dotrap
- 3: pla ! clear hardware_stack
- rts
- Dotrap:
- sta TRAPVAL
- lda #0
- cmp ERRPROC+1
- bne 1f ! ERRPROC <> 0 (highbyte)
- cmp ERRPROC
- bne 1f ! ERRPROC <> 0 (lowbyte)
- jmp Mtrap
- 1: lda #0
- ldx #RETURN
- jsr Ldi ! save return area
- lda hol0+5
- ldx hol0+4
- jsr Push ! save filename pointer
- lda hol0+1
- ldx hol0
- jsr Push ! save linenumber
- lda ERRPROC
- sta ADDR ! address of errorhandler (lowbyte)
- lda ERRPROC+1
- sta ADDR+1 ! address of errorhandler (highbyte)
- lda #0
- sta ERRPROC ! reset ERRPROC (lowbyte)
- sta ERRPROC+1 ! reset ERRPROC (highbyte)
- ldx TRAPVAL
- jsr Push
- jmp (ADDR) ! proceed with errorhandler
- Mtrap:
- cpx #0
- bne 1f
- lda #[EARRAY].h
- ldx #[EARRAY].l
- jsr Mprint
- jmp errorend
- 1: cpx #1
- bne 1f
- lda #[ERANGE].h
- ldx #[ERANGE].l
- jsr Mprint
- jmp errorend
- 1: cpx #2
- bne 1f
- lda #[ESET].h
- ldx #[ESET].l
- jsr Mprint
- jmp errorend
- 1: cpx #3
- bne 1f
- lda #[EIOVFL].h
- ldx #[EIOVFL].l
- jsr Mprint
- jmp errorend
- 1: cpx #10
- bne 1f
- lda #[ECONV].h
- ldx #[ECONV].l
- jsr Mprint
- jmp errorend
- 1: cpx #16
- bne 1f
- lda #[ESTACK].h
- ldx #[ESTACK].l
- jsr Mprint
- jmp errorend
- 1: cpx #17
- bne 1f
- lda #[EHEAP].h
- ldx #[EHEAP].l
- jsr Mprint
- jmp errorend
- 1: cpx #19
- bne 1f
- lda #[EODDZ].h
- ldx #[EODDZ].l
- jsr Mprint
- jmp errorend
- 1: cpx #20
- bne 1f
- lda #[ECASE].h
- ldx #[ECASE].l
- jsr Mprint
- jmp errorend
- 1: cpx #25
- bne 1f
- lda #[EBADMON].h
- ldx #[EBADMON].l
- jsr Mprint
- jmp errorend
- 1: cpx #26
- bne 1f
- lda #[EBADLIN].h
- ldx #[EBADLIN].l
- jsr Mprint
- jmp errorend
- 1: cpx #27
- bne errorend
- lda #[EBADGTO].h
- ldx #[EBADGTO].l
- jsr Mprint
- errorend:
- ldx TRAPVAL
- jmp EXIT
|