Difference between revisions of "Running UNIX V6 on an -11/23"
(For now, insts - will add links later) |
(No difference)
|
Revision as of 13:13, 5 February 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:
- The lack of a console switch register
- The lack (normally) of a clock
- 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.
Use the 'm40.s' machine 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 (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:
- Install a BDV11 card, which has a simulation of the KW11-L on it, or
- 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 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
Edit the 'run' file that builds the system to use m23.o instead of m40.o, and that should do it.