Difference between revisions of "Running UNIX V6 on an -11/23"

From Computer History Wiki
Jump to: navigation, search
m (Avoid redir)
m (clarifications, +cat)
Line 4: Line 4:
  
 
* The lack of a [[console]] [[switch register]]
 
* The lack of a [[console]] [[switch register]]
* The lack (normally) of a clock
+
* The lack (normally) of a clock [[peripheral]]
 
* The ability of the /23 to have more than 256KB of [[main memory]]
 
* The ability of the /23 to have more than 256KB of [[main memory]]
  
All of them are fairly simple to deal with, but they require minor modifications to the system, so you will need a running V6 to do these; bringing it under a simulator, e.g. [[Installing UNIX Sixth Edition on Ersatz-11]], is therefore required.
+
All of them are fairly simple to deal with, but they require minor modifications to the system, so you will need a running V6 to do these; bringing it up under a [[simulator]], e.g. [[Installing UNIX Sixth Edition on Ersatz-11]], is therefore required.
  
Use the 'm40.s' machine language file, as the [[PDP-11 Memory Management|memory management]] supported by the /23 is the same 'simple' kind (i.e. without split I+D) as that on the [[PDP-11/40]].
+
Use the 'm40.s' [[assembly language]] file, as the [[PDP-11 Memory Management|memory management]] supported by the /23 is the same 'simple' kind (i.e. without split I+D) as that on the [[PDP-11/40]].
  
 
==Switch register==
 
==Switch register==
Line 19: Line 19:
 
The following can be used to do so:
 
The following can be used to do so:
  
* insert four lines into l.s (in the appropriate location in the source):
+
* insert four lines into l.s (in the appropriate location in the [[source code|source]]):
  
 
<pre>
 
<pre>
Line 34: Line 34:
 
</pre>
 
</pre>
  
* add the following three lines to main.c (last two go just after
+
* add the following three lines to main.c (the last two go just after
 
the check for the LTC)
 
the check for the LTC)
  
Line 48: Line 48:
 
==Clock==
 
==Clock==
  
V6 requires either a [[KW11-L Line Time Clock‏‎|KW11-L]] or [[KW11-P Programmable Real-Time Clock‏‎|KW11-P]] clock, and will 'panic' unless one or the other is found. The -11/23 does have a 60Hz clock, but... there is no control register. There are two ways to deal with this:
+
V6 requires either a [[KW11-L Line Time Clock‏‎|KW11-L]] or [[KW11-P Programmable Real-Time Clock‏‎|KW11-P]] clock, and will 'panic' unless one or the other is found. The -11/23 does have a 60Hz clock, but... there is no control [[register]]. There are two ways to deal with this:
  
 
# Install a [[BDV11]] card, which has a simulation of the KW11-L on it, or
 
# Install a [[BDV11]] card, which has a simulation of the KW11-L on it, or
Line 136: Line 136:
  
 
Edit the 'run' file that builds the system to use m23.o instead of m40.o, and that should do it.
 
Edit the 'run' file that builds the system to use m23.o instead of m40.o, and that should do it.
 +
 +
[[Category: UNIX Practical Guides‎]]

Revision as of 14:59, 14 December 2018

It is possible to run UNIX Sixth Edition on a PDP-11/23, although this is not a configuration supported 'out of the box' with the Version 6 distribution.

There are three issues which have to be addressed before V6 will run on a /23:

All of them are fairly simple to deal with, but they require minor modifications to the system, so you will need a running V6 to do these; bringing it up under a simulator, e.g. Installing UNIX Sixth Edition on Ersatz-11, is therefore required.

Use the 'm40.s' assembly language file, as the memory management supported by the /23 is the same 'simple' kind (i.e. without split I+D) as that on the PDP-11/40.

Switch register

V6 expects to see a switch register, and refers to it during booting to see whether to come up single-user or not.

The best general approach is to provide a 'software switch register'; a location in low memory whose contents are used as the switch register.

The following can be used to do so:

  • insert four lines into l.s (in the appropriate location in the source):
. = 50^.
.globl  _SW
_SW:    memcsw
memcsw: 173030 
  • change the last line of param.h to read:
extern	int	*SW;
  • add the following three lines to main.c (the last two go just after

the check for the LTC)

#define SWREG	0177570

if (fuiword(SWREG) != -1)
	SW = SWREG;
  • then recompile sys4.c and prf.c, plus the two files above.

Clock

V6 requires either a KW11-L or KW11-P clock, and will 'panic' unless one or the other is found. The -11/23 does have a 60Hz clock, but... there is no control register. There are two ways to deal with this:

  1. Install a BDV11 card, which has a simulation of the KW11-L on it, or
  2. Modify the OS

To do the latter, in main.c, change:

			panic("no clock");

to:

			{
			lks = 0;
			printf("No clock?\n");
			printf("On an 11/23, turn on clock now.\n");
			}

and change the:

	*lks = 0115;

to:

	if (lks != 0)
		*lks = 0115;

NOTE: It is critical to turn off the system's built-in clock (usually possible with a switch on the console) before and during booting, as a clock interrupt before UNIX is ready for it can trash the system (and has been observed to trash the disk, if you are really unlucky).

Larger main memory

All -11/23's after the (very rare) model A can support more than 256KB of main memory. If you put more than 256KB on an -11/23 and boot V6, it will ignore the extra memory above 256KB (technically, above 248KB).

That is because 22-bit operation must be explicitly enabled, using SSR3. So, make a copy of m40.s (m23.s seems the obvious name), and add the following:

	mov     $EN22BIT, *$SSR3	/ allow > 256KB

just before the

	inc	SSR0

You will also need to add:

SSR3	= 172516
EN22BIT	= 20

somewhere (probably at the end, with the other register definitions).

Finally, the PAR contents to reach the I/0 page are different in a 22-bit system from an 18-bit system, so change:

IO	= 7600

to:

IO	= 177600

You might also want to change this line:

	printf("mem = %l\n", maxmem*5/16);

in main.c to this:

	printf("mem = %l\n", (maxmem/16)*5);

to prevent overflow issues in machines with a lot of memory.

Edit the 'run' file that builds the system to use m23.o instead of m40.o, and that should do it.