[net.bugs.4bsd] system generation probs with tu80 on uab1

damonp@tektronix.UUCP (03/01/84)

I recently had to install 4.1BSD on a 750 with an ra81 and
tu80. The tu80 was on uba1. I encountered a multitude of problems.

Initially, the TS boot programme that one has to type in on the console
is only for UBA0. For 750 UBA1, use f32000, and for 750 umem1, use fbe000.
These changes appear near the top of page 8 of the September 9, 1981
'Installing and operating 4.1BSD'.

Once I was able to read the tape, I discoverd that the stand-alone
restore programme could not read the TU80. The problem is that in the
stand-alone TS driver, the call to ubasetup() to map in the command
structure, (struct ts ts;), which is pointed to by the ctsbuf structure,
always maps it into the uba0 address space.
This is because to io_unit is not set correctly in the ctsbuf structure.
The following is extracted from /sys/stand/ts.c, routine tsopen().
The 4.2 ts.c has the same bug.

	if (tsaddr->tssr&TS_NBA) {
		int i;

		ctsbuf.i_ma = (caddr_t) &ts;
		ctsbuf.i_cc = sizeof(ts);
|		/*
|		 * If we find that we have already mapped ctsbuf in, check that
|		 * it is in the correct UBA. If not, free and change it.
|		 * This is not too likely in a stand alone system, but at least
|		 * it is (I hope) correct.
|		 * -dap@tek
|		 */
|		if (ts_ubaddr
|		&&	(UNITTOUBA(ctsbuf.i_unit) != UNITTOUBA(io->i_unit))) {
|			ubafree(&ctsbuf, (2 << 28));
|			ts_ubaddr = 0;
|		}
|		ctsbuf.i_unit = io->i_unit;	/* get UBA right; -dap@tek		*/
		if (ts_ubaddr == 0)
			ts_ubaddr = (struct ts *)ubasetup(&ctsbuf, 2);

I also discovered that the CSR addr for the UDA driver was incorrect in
the stand-alone i/o stuff.
In /sys/stand/uda.c, the line
u_short adastd[] = { 777550 };
thould be
u_short udastd[] = { 772150 };