.enabl lc .title fptrap .globl fptrap,cmemsg .mcall .sfpa fptrap: .sfpa #area,#fpt return fpt: mov r0,tmp0 ;save r0, but not on stack mov (sp)+,r0 ;get error code mov (sp)+,baddr ;and address of bad instr mov #baddr,-(sp) ;pointer to it is arg 2 for cmemsg asr r0 ;move into 1 - 7 range bic #^c7,r0 ;mask to legitimate range mov r0,-(sp) ;load it as function arg jsr pc,cmemsg ;call cmath error message function cmp (sp)+,(sp)+ ;pop 2 args off stack, from cmemsg call .sfpa #area,#fpt mov tmp0,r0 ;restore r0 rti baddr: .word 0 ;address of bad instruction goes here area: .blkw 2 tmp0: .word 0 .end