- if ((((struct tsdevice *)reg)->tssr & TS_NBA) == 0)
- return(0);
- /* IT'S TOO HARD TO MAKE THIS THING INTERRUPT JUST TO FIND ITS VECTOR */
- cvec = ((unsigned)reg) & 07 ? 0260 : 0224;
- br = 0x15;
+ if ((addr->tssr & TS_NBA) == 0)
+ return (0);
+
+ /*
+ * Make it interrupt.
+ * TS_SETCHR|TS_IE alone refuses to interrupt for me.
+ */
+ sc = &ts_softc[ctlr];
+ tsmap(sc, numuba, &a);
+ i = (int)&sc->sc_ubaddr->t_char;
+ sc->sc_ts.t_cmd.c_loba = i;
+ sc->sc_ts.t_cmd.c_hiba = (i >> 16) & 3;
+ sc->sc_ts.t_cmd.c_size = sizeof(struct ts_char);
+ sc->sc_ts.t_cmd.c_cmd = TS_ACK | TS_SETCHR;
+ sc->sc_ts.t_char.char_addr = (int)&sc->sc_ubaddr->t_sts;
+ sc->sc_ts.t_char.char_size = sizeof(struct ts_sts);
+ sc->sc_ts.t_char.char_mode = 0; /* mode is unimportant */
+ addr->tsdb = sc->sc_uba;
+ DELAY(20000);
+ sc->sc_ts.t_cmd.c_cmd = TS_ACK | TS_CVC | TS_IE | TS_SENSE;
+ sc->sc_ts.t_cmd.c_repcnt = 1;
+ addr->tsdb = sc->sc_uba;
+ DELAY(20000);
+ /* should have interrupted by now */
+
+ if (cvec == 0 || cvec == 0x200) /* no interrupt */
+ ubarelse(numuba, &a);
+