.define .csb8 .sect .text .sect .rom .sect .data .sect .bss ECASE=20 .sect .text .csb8: ! case descriptor in a0 ! index in (sp) move.l (a0)+, a1 ! default jump address move.l (sp)+, d2 move.l (sp), a2 ! index in d2:a2 move.l d7, (sp) add.l #4, a0 move.l (a0)+, d1 ! # entries (assuming <= 65536) beq 3f sub.l #1, d1 1: move.l (a0)+, d0 move.l (a0)+, d7 ! descriptor's index in d0:d7 add.l #4, a0 sub.l a2, d7 subx.l d2, d0 ! descriptor's index - our index dbeq d1, 1b bne 3f move.l (-4,a0), a1 ! jump address 3: move.l (sp)+, d7 ! caller's d7 move.l a1, d0 beq 4f jmp (a1) 4: move.l #ECASE, -(sp) jmp (.fatal) .align 2