.define trp, fatal .sect .text .sect .rom .sect .data .sect .bss .sect .text fatal: push *RR14, R1 inc R15, $2 popl saveret, *RR14 pop R1, *RR14 !trap number in R1 push *RR14, R1 push *RR14, R1 dec R15, $4 pop R1, *RR14 !restore R1 inc R15, $2 pushl *RR14, saveret calr trp push *RR14, $1 jr EXIT !NOTREACHED trp: push *RR14, R1 inc R15, $2 popl saveret, *RR14 pop R1, *RR14 !trap number in R1 pushl *RR14, saveret push *RR14, R0 dec R15, $2 cp R1, $16 jr UGE, 1f ld R0, trpim bit R0, R1 jr NE, 2f !ignore 1: sub R15, $24 ldm *RR14, R2, $12 push *RR14, R1 ld R1, trppc cp R1, $0 jr EQ, 3f clr trppc call 0(R1) inc R15, $2 ldm R2, *RR14, $12 add R15, $24 2: pop R1, *RR14 pop R0, *RR14 ret 3: pop R1, *RR14 push *RR14, R1 push *RR14, R1 push *RR14, $err calr printf push *RR14, $1 jr EXIT !NOTREACHED .sect .data err: .asciz "trap error %d\n"