139 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.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 STACK
 | 
						|
	dex
 | 
						|
	dex
 | 
						|
	txs
 | 
						|
	rts
 | 
						|
 | 
						|
 |