135 lines
1.9 KiB
ArmAsm
135 lines
1.9 KiB
ArmAsm
|
.define Trap
|
||
|
|
||
|
! 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 STACK
|
||
|
dex
|
||
|
dex
|
||
|
txs
|
||
|
rts
|
||
|
|
||
|
|