.sect .text .sect .rom .sect .data .sect .bss .sect .text _sigtrp: move.l (sp)+,d2 !save return address mov (sp)+,d1 !trapno in d1 mov (sp)+,d4 !signo in d4 extend d4 extend d1 comp #16,d4 bhi sig_bad tst.l d4 beq sig_bad move.l d4,a0 add.l a0,a0 add.l a0,a0 move.l #sig_trp-4,a1 add.l a0,a1 move.l (a1),d2 !previous trap number in d2 comp #256,d1 !-2 and -1 special bcc 1f move.l #sig_adr-4,d3 add.l a0,d3 !Get the pointer to the trap- bne 2f !procedure to give as argument to sig_bad: mov 22,-(sp) !_Xsignal. If pointer 0 trapping is mov 22,-(sp) !not legal jmp (a4) 1: comp #-3,d1 !-2:reset default , -3: ignore bmi sig_bad move.l d1,d3 ad #2,d3 !0:reset default for signal, -1: ignore 2: move.l d1,(a1) !set new trapno move.l d3,-(sp) !set arguments to signal: mov d4,-(sp) !pointer ,signo to be trapped bsr _Xsignal jmp (a4) .sect .data sig_adr: .data4 sig1 ; .data4 sig2 ; .data4 sig3 ; .data4 0 .data4 0 ; .data4 0 ; .data4 0 ; .data4 0 .data4 0 ; .data4 0 ; .data4 sig11 ; .data4 sig12 .data4 sig13 ; .data4 sig14 ; .data4 sig15 ; .data4 sig16 sig_trp: .data4 -2 ; .data4 -2 ; .data4 -2 ; .data4 -2 .data4 -2 ; .data4 -2 ; .data4 -2 ; .data4 -2 .data4 -2 ; .data4 -2 ; .data4 21 ; .data4 25 .data4 -2 ; .data4 -2 ; .data4 -2 ; .data4 -2 .sect .text !the next procedures map the catched signal to em errors. The em error !procedure will handle this. sig1: pea retutrap move.l sig_trp,d0 mov d0,-(sp) bra error sig2: pea retutrap move.l sig_trp+4,d0 mov d0,-(sp) bra error sig3: pea retutrap move.l sig_trp+8,d0 mov d0,-(sp) bra error sig8: pea retutrap move.l sig_trp+28,d0 mov d0,-(sp) bra error sig13: pea retutrap move.l sig_trp+48,d0 mov d0,-(sp) bra error sig14: pea retutrap move.l sig_trp+52,d0 mov d0,-(sp) bra error sig15: pea retutrap move.l sig_trp+56,d0 mov d0,-(sp) bra error sig16: pea retutrap move.l sig_trp+60,d0 mov d0,-(sp) bra error retutrap: add.l #4,sp !remove signumber rtr sig12: pea sig12 mov #12,-(sp) bsr _Xsignal bsr e_badmon rtr sig11: move.l 4(a5),d0 sub.l sp,d0 bcs e_memflt !in this case error handling possible move.l ml,sp !refresh stack and stop . bra notrap1