+#define VP_ERROR 0100000
+#define VP_DTCINTR 0040000
+#define VP_DMAACT 0020000
+#define VP_READY 0000200
+#define VP_IENABLE 0000100
+#define VP_TERMCOM 0000040
+#define VP_FFCOM 0000020
+#define VP_EOTCOM 0000010
+#define VP_CLRCOM 0000004
+#define VP_RESET 0000002
+#define VP_SPP 0000001
+
+struct vp_softc {
+ int sc_state;
+ int sc_count;
+ int sc_bufp;
+ struct buf *sc_bp;
+ int sc_ubinfo;
+} vp_softc[NVP];
+
+/* sc_state bits */
+#define VPSC_BUSY 0001000
+#define VPSC_MODE 0000700
+#define VPSC_SPP 0000400
+#define VPSC_PLOT 0000200
+#define VPSC_PRINT 0000100
+#define VPSC_CMNDS 0000076
+#define VPSC_OPEN 0000001
+
+struct uba_device *vpdinfo[NVP];
+
+#define VPUNIT(dev) (minor(dev))
+
+struct buf rvpbuf[NVP];
+
+int vpprobe(), vpattach();
+struct uba_device *vpdinfo[NVP];
+u_short vpstd[] = { 0777500, 0 };
+struct uba_driver vpdriver =
+ { vpprobe, 0, vpattach, 0, vpstd, "vp", vpdinfo };
+
+vpprobe(reg)
+ caddr_t reg;
+{
+ register int br, cvec; /* value-result */
+ register struct vpdevice *vpaddr = (struct vpdevice *)(reg-010);
+
+#ifdef lint
+ br = 0; cvec = br; br = cvec;
+ vpintr(0);
+#endif
+ vpaddr->prcsr = VP_IENABLE|VP_DTCINTR;
+ vpaddr->pbaddr = 0;
+ vpaddr->pbxaddr = 0;
+ vpaddr->prbcr = 1;
+ DELAY(10000);
+ vpaddr->prcsr = 0;
+#ifdef ERNIE
+ /* UNTIL REWIRED, GET INTERRUPT AT 200 BUT WANT 174 */
+ if (cvec == 0200) {
+ printf("vp reset vec from 200 to 174\n");
+ cvec = 0174;
+ }
+#endif
+}
+
+/*ARGSUSED*/
+vpattach(ui)
+ struct uba_device *ui;
+{
+
+ ui->ui_addr -= 010;
+ ui->ui_physaddr -= 010;
+}
+
+vpopen(dev)
+ dev_t dev;