2016/01/13

UNIX V6環境(Unix-v6-Ken-Wellsch.tapを利用する場合)

PDP-11/40にUNIX第6版をインストールする手順は「SETTING UP UNIX - Sixth Edition」に記述されています。SIMHとUnix-v6-Ken-Wellsch.tapを使うと追体験することが出来ます。詳しい手順が「Installing Unix v6 (PDP-11) on SIMH」にあるので、これを参考にしながらインストールしてみます。

オリジナルのドキュメントが想定しているのはPDP-11/40にTU10テープドライブやRK05ディスクパックが接続されている環境のようです。まずはじめにおこなうのは、テープからコピー用ツールを起動させて、UNIXのバイナリをディスクに書き込むことです。このために以下に示すファイルを用意してSIMHを動かします。
set cpu 11/40
set tm0 locked
attach tm0 Unix-v6-Ken-Wellsch.tap
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
d cpu 100000 012700
d cpu 100002 172526
d cpu 100004 010040
d cpu 100006 012740
d cpu 100010 060003
d cpu 100012 000777
g 10000
0
100000番地から指定されているのが、コピー用ツールをテープからメモリに読み込むためのプログラムです。100002番地の172526というのは、TM11におけるmemory address (MTCMA)として割り当てられている772526番地のミラーとして参照できるようです。この数値を172524番地(byte record counter (MTBRC))に格納しています。8進数の172526は10進数なら62806で、512×123よりも僅かに小さな値です。読み込もうとしているツールはテープの先頭100ブロックに入っているので、123ブロックでは読み込み過ぎなのですが、少ないよりも多い分には構わないということなのでしょう。172526という数値を、アドレスとしても、読み込むバイト数としても利用しており、トリッキーと言えるかもしれません。

次に060003を172522番地(command (MTC))に入れて、無限ループに入ります。マニュアル「TM11 DECmagtape system (DEC-11-HTMAA-D-D)」の4-6頁にある「4.2.2 Command Register (MTC)」の説明によると、bit14(DEN 8)とbit13(DEN 5)の組み合わせでテープ密度を指定します。この場合は11なので「800 bits/inch, 9-channel tape」ということになります。bit3からbit1はFunction Bitsで、ここでは001なので「Read」を指定しています。そしてbit0はGOを指定するビットなので、指定された処理が開始されます。

TM10に繋がれたTU10はマニュアル「TU10 DECmagtape maintenance manual (EK-TU10-MM-007)」の「Table 1-2 TU10 DECmagtape Specification」によるとテープ速度は45 ipsだそうです。512バイトで123ブロックを読み込むためには、テープ密度が800 bpiなら78.72秒かかります。実際にはモーターが回りだしたり、テープをシークしたりして、数分間くらいかかったかもしれません。しかしSIMHは物理的な機械があるわけではないので、一瞬で処理が終わります。

無限ループしているプログラムをCtrl-Eで止めて、0番地からプログラムを動かすとコピー用ツールのプロンプトが現れます。オリジナルドキュメントではテープの100ブロック目から4000ブロック分に入っているUNIXバイナリを1ブロックと3999ブロックに分けてRK05にコピーしています。その手順を忠実に守っても良いでしょうし、いきなり4000ブロック分をコピーしても良いのではないかと思います。

次にディスクにコピーしたUNIXを起動して細々とした設定をおこないます。このために以下に示すファイルを用意してSIMHを動かします。
set cpu 11/40
set tm0 locked
attach tm0 Unix-v6-Ken-Wellsch.tap
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
d sr 173030
boot rk0
 ここでSIMHにはブート用のコマンドが用意されていますので、それを利用します。オリジナルのドキュメントには起動用のコマンドが指定されていますので、それを使っても構いません。ただし「d sr 173030」という指定の有無で起動した時の様子が変わります。

指定があれば、いきなりコマンド入力用のプロンプトが出ます。
PDP-11 simulator V3.9-0
Disabling XQ
@rkunix
mem = 1035
RESTRICTED RIGHTS

Use, duplication or disclosure is subject to
restrictions stated in Contract with Western
Electric Company, Inc.
#
指定しないと、ログインプロンプトが出ます。
PDP-11 simulator V3.9-0
Disabling XQ
@rkunix

login: root
#
「d sr 173030」というのが何をしているのか説明するドキュメントは見つかりませんでした。

この後の設定は細々としている作業が続くので、誤入力を防ぐために別に用意しておいたファイルから入力を与えるようにしました。ただし、コマンドによっては入力が受け付けられないことがあり、また文字をとりこぼすことがあったので、複数ファイルに分割しました。

オリジナルのドキュメントにあるように、UNIX V6は多くの種類のデバイスを制御できるドライバがついています。Lions本で勉強する分には次のデバイスがあれば十分なので、これを前提として環境を整えます。
  • RK05
  • TU10
  • DC11
  • LP11
設定作業に用いた入力ファイルの1番目の内容は次のとおりです。
: # Fixing the Terminal
stty -lcase
: # Rebuilding the kernel
chdir /usr/sys/conf
cc mkconf.c
mv a.out mkconf
: # ./mkconf
: # rk
: # tm
: # 8dc
: # lp
: # done
設定作業に用いた入力ファイルの2番目の内容は次のとおりです。
 : # Rebuilding the kernel
chdir /usr/sys/conf
as m40.s
mv a.out m40.o
cc -c c.c
as l.s
ld -x a.out m40.o c.o ../lib1 ../lib2
mv a.out /unix
ls -l /unix
: # building device files
/etc/mknod /dev/rk0 b 0 0
/etc/mknod /dev/rk1 b 0 1
/etc/mknod /dev/rk2 b 0 2
/etc/mknod /dev/rrk0 c 9 0
/etc/mknod /dev/rrk1 c 9 1
/etc/mknod /dev/rrk2 c 9 2
/etc/mknod /dev/mt0 b 3 0
/etc/mknod /dev/rmt0 c 12 0
/etc/mknod /dev/lp0 c 2 0
/etc/mknod /dev/tty0 c 3 1
/etc/mknod /dev/tty1 c 3 2
/etc/mknod /dev/tty2 c 3 3
/etc/mknod /dev/tty3 c 3 4
/etc/mknod /dev/tty4 c 3 5
/etc/mknod /dev/tty5 c 3 6
/etc/mknod /dev/tty6 c 3 7
chmod 640 /dev/*rk*
chmod 640 /dev/*mt*
: # Restoring the rest of the OS
dd if=/dev/mt0 of=/dev/rk1 count=4000 skip=4100
/etc/mount /dev/rk1 /usr/source
dd if=/dev/mt0 of=/dev/rk2 count=4000 skip=8100
mkdir /usr/doc
/etc/mount /dev/rk2 /usr/doc
設定作業に用いた入力ファイルの3番目の内容は次のとおりです。
 : # configure boot
echo /etc/mount /dev/rk1 /usr/source >> /etc/rc
echo /etc/mount /dev/rk2 /usr/doc >> /etc/rc
: # rebuild the df command
echo /rp0/d > /tmp/eddf.cmd
echo .-2a >> /tmp/eddf.cmd
echo \"/dev/rk0\", >> /tmp/eddf.cmd
echo \"/dev/rk1\", >> /tmp/eddf.cmd
echo . >> /tmp/eddf.cmd
echo w >> /tmp/eddf.cmd
echo q >> /tmp/eddf.cmd
chdir /usr/source/s1
cat /tmp/eddf.cmd | ed df.c
cc -s -O df.c
cp a.out /bin/df
rm a.out
: # check filesystems
icheck /dev/rrk0
dcheck /dev/rrk0
icheck /dev/rrk1
dcheck /dev/rrk1
icheck /dev/rrk2
dcheck /dev/rrk2
: # enable multiuser
echo 1,8s/\^0/1/p > /tmp/edttys.cmd
echo w >> /tmp/edttys.cmd
echo q >> /tmp/edttys.cmd
cat /tmp/edttys.cmd | ed /etc/ttys
: # reboot
sync
sync
sync
sync
以上で設定が終わったので、今後は以下に示すファイルを用意してSIMHを動かします。
set cpu 11/40
set cpu idle
;set tto 7b
;set tm0 locked
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
attach lpt lp11.out
set dci en
set dci lines=8
;set dco 7b
attach dci 5555
boot rk0
bye
上述した一連の手順のログは次のようになります。
C:\Users\FURUSAWA\Documents\PDPUNIX\Wellsch>..\pdp11 TapeBoot.cfg

PDP-11 simulator V3.9-0
Disabling XQ
RK: creating new file
RK: creating new file
RK: creating new file

Simulation stopped, PC: 100012 (BR 100012)
sim> g 0
=tmrk
disk offset
0
tape offset
100
count
1
=tmrk
disk offset
1
tape offset
101
count
3999
=
Simulation stopped, PC: 137274 (TSTB @#177560)
sim>
sim>
sim>
sim> bye
Goodbye

C:\Users\FURUSAWA\Documents\PDPUNIX\Wellsch>..\pdp11 DiskInstall.cfg

PDP-11 simulator V3.9-0
Disabling XQ
@rkunix
mem = 1035
RESTRICTED RIGHTS

Use, duplication or disclosure is subject to
restrictions stated in Contract with Western
Electric Company, Inc.
# : # FIXING THE TERMINAL
# STTY -LCASE
# : # Rebuilding the kernel
# chdir /usr/sys/conf
# cc mkconf.c
mv a.out mkconf
: # ./mkconf# #
# : # rk
# : # tm
# : # 8dc
# : # lp
# : # done
# ./mkconf
rk
tm
8dc
lp
done
# : # Rebuilding the kernel
# chdir /usr/sys/conf
# as m40.s
mv # a.out m40.o
# cc -c c.c
as # l.s
l# d -x a.out m40.o c.o ../lib1 ../lib2
mv a.ou# t /unix
# ls -l /unix
-rwxrwxrwx  1 root    29764 Oct 10 12:30 /unix
# : # building device files
# /etc/mknod /dev/rk0 b 0 0
# /etc/mknod /dev/rk1 b 0 1
# /etc/mknod /dev/rk2 b 0 2
# /etc/mknod /dev/rrk0 c 9 0
# /etc/mknod /dev/rrk1 c 9 1
# /etc/mknod /dev/rrk2 c 9 2
# /etc/mknod /dev/mt0 b 3 0
# /etc/mknod /dev/rmt0 c 12 0
# /etc/mknod /dev/lp0 c 2 0
# /etc/mknod /dev/tty0 c 3 1
# /etc/mknod /dev/tty1 c 3 2
/# etc/mknod /dev/tty2 c 3 3
# /etc/mknod /dev/tty3 c 3 4
# /etc/mknod /dev/tty4 c 3 5
# /etc/mknod /dev/tty5 c 3 6
# /etc/mknod /dev/tty6 c 3 7
# chmod 640 /dev/*rk*
# chmod 640 /dev/*mt*
# : # Restoring the rest of the OS
# dd if=/dev/mt0 of=/dev/rk1 count=4000 skip=4100
/etc/mount /dev/rk1 /usr/source
dd if=/dev/mt0 of=/dev/rk2 count=4000 skip=8100
mkdir /usr/doc
/etc/mount /dev/rk2 /usr/doc
4000+0 records in
4000+0 records out
# # 4000+0 records in
4000+0 records out
# # # : # configure boot
# echo /etc/mount /dev/rk1 /usr/source >> /etc/rc
# echo /etc/mount /dev/rk2 /usr/doc >> /etc/rc
# : # rebuild the df command
# echo /rp0/d > /tmp/eddf.cmd
# echo .-2a >> /tmp/eddf.cmd
# echo \"/dev/rk0\", >> /tmp/eddf.cmd
# echo \"/dev/rk1\", >> /tmp/eddf.cmd
# echo . >> /tmp/eddf.cmd
# echo w >> /tmp/eddf.cmd
# echo q >> /tmp/eddf.cmd
# chdir /usr/source/s1
# cat /tmp/eddf.cmd | ed df.c
1282
1293
# cc -s -O df.c
cp a.ou# t /bin/df
# rm a.out
# : # check filesystems
# icheck /dev/rrk0
/dev/rrk0:
dspcl      20
files    295
large     96
direc     25
indir     96
ucsed    2920
free     993
# heck /dev/rrk0
/dev/rrk0:
# icheck /dev/rrk1
/dev/rrk1:
dspcl       0
files    595
large     98c
direc     34
indir     98
used    2973
free     940
# heck /dev/rrk1
/dev/rrk1:
# icheck /dev/rrk2
/dev/rrk2:
dbad freeblock
missing 1499
spcl       0
files    337
large     69
direc     25
indir     69
used    2222
free     192
# check /dev/rrk2
/dev/rrk2:
# : # enable multiuser
# echo 1,8s/\^0/1/p > /tmp/edttys.cmd
# echo w >> /tmp/edttys.cmd
# echo q >> /tmp/edttys.cmd
# cat /tmp/edttys.cmd | ed /etc/ttys
112
170
112
# : # reboot
# sync
# sync
# sync
# sync
#
Simulation stopped, PC: 002502 (MOV (SP)+,177776)
sim> bye
Goodbye

C:\Users\FURUSAWA\Documents\PDPUNIX\Wellsch>..\pdp11 Wellsch.cfg

PDP-11 simulator V3.9-0
Disabling XQ
LPT: creating new file
Listening on port 5555 (socket 280)
@unix

login: root
# ls -l
total 246
drwxrwxr-x  2 bin      1104 May 14 00:47 bin
drwxrwxr-x  2 bin      1824 Oct 10 12:30 dev
drwxrwxr-x  2 bin       496 Oct 10 12:31 etc
-rwxrwxrwx  1 root    29074 Oct 10 12:28 hpunix
drwxrwxr-x  2 bin       464 May 13 23:35 lib
drwxrwxr-x  2 bin        32 May 13 20:01 mnt
-rwxrwxrwx  1 root    28836 Oct 10 12:22 rkunix
-rwxrwxrwx  1 root    29020 Oct 10 12:25 rpunix
drwxrwxrwx  2 bin       272 Oct 10 12:31 tmp
-rwxrwxrwx  1 root    29764 Oct 10 12:30 unix
drwxrwxr-x 15 bin       240 Oct 10 12:30 usr
# sync
# sync
# sync
# sync
#
Simulation stopped, PC: 003244 (SOB R1,3240)
Goodbye

C:\Users\FURUSAWA\Documents\PDPUNIX\Wellsch>

0 件のコメント:

コメントを投稿