-struct buf rupbuf; /* Buffer for raw i/o */
-
-/* Drive commands, placed in upcs1 */
-#define GO 01 /* Go bit, set in all commands */
-#define PRESET 020 /* Preset drive at init or after errors */
-#define OFFSET 014 /* Offset heads to try to recover error */
-#define RTC 016 /* Return to center-line after OFFSET */
-#define SEARCH 030 /* Search for cylinder+sector */
-#define SEEK 04 /* Seek to cylinder */
-#define RECAL 06 /* Recalibrate, needed after seek error */
-#define DCLR 010 /* Drive clear, after error */
-#define WCOM 060 /* Write */
-#define RCOM 070 /* Read */
-
-/* Other bits of upcs1 */
-#define IE 0100 /* Controller wide interrupt enable */
-#define TRE 040000 /* Transfer error */
-#define RDY 0200 /* Transfer terminated */
-
-/* Drive status bits of upds */
-#define PIP 020000 /* Positioning in progress */
-#define ERR 040000 /* Error has occurred, DCLR necessary */
-#define VV 0100 /* Volume is valid, set by PRESET */
-#define DPR 0400 /* Drive has been preset */
-#define MOL 010000 /* Drive is online, heads loaded, etc */
-#define DRY 0200 /* Drive ready */
-
-/* Bits of upcs2 */
-#define CLR 040 /* Controller clear */
-/* Bits of uper1 */
-#define DCK 0100000 /* Ecc error occurred */
-#define ECH 0100 /* Ecc error was unrecoverable */
-#define WLE 04000 /* Attempt to write read-only drive */
-
-/* Bits of upof; the offset bits above are also in this register */
-#define FMT22 010000 /* 16 bits/word, must be always set */
+struct upst {
+ short nsect;
+ short ntrak;
+ short nspc;
+ short ncyl;
+ struct size *sizes;
+} upst[] = {
+ 32, 19, 32*19, 823, up_sizes, /* 9300/cdc */
+/* 9300 actually has 815 cylinders... */
+ 32, 10, 32*10, 823, fj_sizes, /* fujitsu 160m */
+ 32, 16, 32*16, 1024, am_sizes, /* ampex capricorn */
+};