.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 add.l #sig_adr-4,a0 move.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 sig10 ; .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 22 ; .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 #ifdef __BSD4_2 jsr setmask #endif move.l sig_trp,d0 mov d0,-(sp) bra error sig2: pea retutrap #ifdef __BSD4_2 jsr setmask #endif move.l sig_trp+4,d0 mov d0,-(sp) bra error sig3: pea retutrap #ifdef __BSD4_2 jsr setmask #endif move.l sig_trp+8,d0 mov d0,-(sp) bra error sig8: pea retutrap #ifdef __BSD4_2 jsr setmask #endif move.l sig_trp+28,d0 mov d0,-(sp) bra error sig13: pea retutrap #ifdef __BSD4_2 jsr setmask #endif move.l sig_trp+48,d0 mov d0,-(sp) bra error sig14: pea retutrap #ifdef __BSD4_2 jsr setmask #endif move.l sig_trp+52,d0 mov d0,-(sp) bra error sig15: pea retutrap #ifdef __BSD4_2 jsr setmask #endif move.l sig_trp+56,d0 mov d0,-(sp) bra error sig16: pea retutrap #ifdef __BSD4_2 jsr setmask #endif move.l sig_trp+60,d0 mov d0,-(sp) bra error retutrap: add.l #4,sp !remove signumber rtr sig12: pea sig12 #ifdef __BSD4_2 jsr setmask #endif mov #12,-(sp) bsr _Xsignal bsr e_badmon rtr sig11: #ifdef __BSD4_2 jsr setmask #endif bra e_memflt sig10: #ifdef __BSD4_2 jsr setmask #endif bra e_badptr #ifdef __BSD4_2 setmask: move.l mask,-(sp) jsr _sigsetmask add.l #4,sp rts getmask: clr.l -(sp) jsr _sigblock add.l #4,sp move.l d0,mask rts .sect .data mask: .data4 0 #endif