本物のローグ


昔、会社にVAX750があって、4.2BSDが動いてました。

空調の効いた部屋に、テープドライブと一緒にあったのを覚えています。

端末はVT100が数台あったと思います。ハード屋さんとして入社したので、

いつもVAXを使っていたわけではありませんが、

それでも、お昼休みにローグをやっていました。

FreeBSDが好きなのも、この影響ですね(笑)。

さて、SIMHを使うとVAX780のコードがPCで実行できます。

4.2BSDのテープイメージがあり、その中には本物のローグが入っています。

ただ、残念ながらこの中にはソースコードは入っていません。バイナリのみです。

本物のローグをWin7のPCで動かす手順を紹介します。



2016年
7月18日

実行環境は
32ビットのWin7です。64ビットでも動くと思います。

まずは参考になるWEBページです。
Installing 4.2 BSD on SIMH
SIMH - 懐かしの4.2BSD

上のInstalling 4.2 BSD on SIMHのページはオペレーションが重複して、
ちょっと分かりにくいです。今回は前処理をcygwinで行いました。要はbzip2gzipが動けばいいわけで、これが動けば、仮想環境でもWin7の解凍ソフトでもいいです。ただし、このページの通りにやっても、最新のバージョンのSIMHではうまく動かなかったり、4.2BSDのアーカイブがリンク切れになっていたりします。このページではがcygwin、C:\4.2BSD>がWin7のコマンドウインド、が4.2BSDのプロンプトです。作業はC:\4.2BSDで行います。

4.2BSDのテープイメージは1本になったものをここからダウンロードします。ファイルは4.2bsd.tap.bz2です。C:\4.2BSDコピーします。cygwinで
% bzip2 -d  4.2bsd.tap.bz2
とするとbz2がとれ解凍されて
4.2bsd.tapができます

後で出てくるiniファイルに合うように名前を変更しておきます。
% mv 4.2bsd.tap 42.tap
% ls -l 42.tap
-rwxrwx---+ 1 Administrators None 69943640 7月  11 22:54 42.tap
ファイルの長さが一致しているか確認します。

もうひとつ必要なminirootをここからダウンロードします。
miniroot.gzのみでいいです。C:\4.2BSDコピーします。
% gzip -d  miniroot.gz
% ls -l miniroot
-rwxrwx---+ 1 Administrators None  2099200 7月  15 05:28 miniroot
解凍してファイルの長さを確認します。

次にVAX780のシミュレータをダウンロードします。現在のバージョンはv3.9-0ですが、これを使うとブートの途中でズッコケます。SIMH - 懐かしの4.2BSDの通りv3.8-1を使うと正常に動作します。このバージョンはここからsimhv38-1-exe-ether.zipをダウンロードします。適当な所で解凍して、vax780.exevmb.exeをC:\4.2BSDにコピーします。

続いて、ここからboot42をダウンロードします。ここからダウンロードできるのは素のバイナリなので変換などをする必要はありません。
C:\4.2BSDコピーします。
% ls -l boot42
-rwxrwx---+ 1 Administrators None     6600 7月  15 05:15 boot42
ファイルの長さが一致しているか確認します。

install.iniファイルをC:\4.2BSD作ります。
set rq0 ra81
at rq0 miniroot
set rq1 ra81
at rq1 rq.dsk
set rq1 dis
set rq2 dis
set rq3 dis
set rp dis
set lpt dis
set rl dis
set tq dis
set tu dis
att ts 42.tap
set tti 7b
set tto 7b
load -o boot42 0
d r10 9
d r11 0
run 2
Win7のコマンドウインドを立ち上げて、ファイルがあるC:\4.2BSDディレクトリに移動して
C:\4.2BSD>vax780 install.ini
と実行します。
VAX780 simulator V3.8-1
RQ: creating new file
1.txt> set rq1 dis
Command not allowed
loading ra(0,0)boot
Boot
: ra(0,0)vmunix
199488+56036+51360 start 0x11a0 // <---- v3.9-0を使うと、ここでエラーストップします。
4.2 BSD UNIX #9: Wed Nov 2 16:00:29 PST 1983
real mem = 8384512
avail mem = 7073792
using 102 buffers containing 835584 bytes of memory
mcr0 at tr1
mcr1 at tr2
uba0 at tr3
hk0 at uba0 csr 177440 vec 210, ipl 15
rk0 at hk0 slave 0
rk1 at hk0 slave 1
uda0 at uba0 csr 172150 vec 774, ipl 15
ra0 at uda0 slave 0
ra1 at uda0 slave 1
zs0 at uba0 csr 172520 vec 224, ipl 15
ts0 at zs0 slave 0
dz0 at uba0 csr 160100 vec 300, ipl 15
dz1 at uba0 csr 160110 vec 310, ipl 15
dz2 at uba0 csr 160120 vec 320, ipl 15
dz3 at uba0 csr 160130 vec 330, ipl 15
root on ra0
WARNING: clock gained 94 days -- CHECK AND RESET THE DATE!
WARNING: should run interleaved swap with >= 2Mb
erase ^?, kill ^U, intr ^C
#
ここまでくればもう、動いています。後はInstalling 4.2 BSD on SIMHの通りコマンドを実行します。

# cd /dev
# ./MAKEDEV ra1
# cd /
# disk=ra1 type=ra81 tape=ts xtr
ファイルシステムが作られ、fsckが走ります。

Build root file system
Warning: 538 sector(s) in last cylinder unallocated
/dev/rra1a:     15884 sectors in 23 cylinders of 14 tracks, 51 se
        8.1Mb in 2 cyl groups (16 c/g, 5.85Mb/g, 1856 i/g)
super-block backups (for fsck -b#) at:
 32, 11520,
Check the file system
** /dev/rra1a
** Last Mounted on
** Phase 1 - Check Blocks and Sizes
                   ・
                   ・
313 files, 3568 used, 3861 free (21 frags, 480 blocks)
Root filesystem extracted

If this is a 780, update floppy
If this is a 730, update the cassette

# sync
# sync
# sync

ctrl-Eを押して、エミュレータに戻ります。

Simulation stopped, PC: 80001620 (FFS #0,#20,8003ED44,R0)
sim> q
Goodbye

C:\4.2BSD>

boot.iniファイルを
C:\4.2BSD作ります。

set rq0 ra81
att rq0 rq.dsk
set rq1 dis
set rq2 dis
set rq3 dis
set rp dis
set lpt dis
set rl dis
set tq dis
set tu dis
att ts 42.tap
set tti 7b
set tto 7b
load -o boot42 0
d r10 9
d r11 0
run 2

新しく作ったboot.iniで起動します。
C:\4.2BSD>vax780 boot.ini

VAX780 simulator V3.8-1
TS: creating new file
loading ra(0,0)boot
Boot
: ra(0,0)vmunix
199488+56036+51360 start 0x11a0
4.2 BSD UNIX #9: Wed Nov 2 16:00:29 PST 1983
real mem  = 8384512
avail mem = 7073792
using 102 buffers containing 835584 bytes of memory
                   ・
                   ・
Can't open checklist file: /etc/fstab
Automatic reboot failed... help!
erase ^?, kill ^U, intr ^C
#

ディスクを初期化します。

# disk=ra
# name=ra0h;type=ra81
# cd /dev
# ./MAKEDEV ts0;sync
# cd /
# newfs $name $type


Warning: 28 sector(s) in last cylinder unallocated
/dev/rra0h:     759668 sectors in 1064 cylinders of 14 tracks, 51 sectors
        389.0Mb in 67 cyl groups (16 c/g, 5.85Mb/g, 2048 i/g)
super-block backups (for fsck -b#) at:
 32, 11512, 22992, 34472, 45952, 57432, 68912, 80392, 91872, 103352,
                        ・
                        ・
 686144, 697624, 709104, 720584, 731168, 742648, 754128,
#

ファイルシステムが作られます。その後、地道に以下のコマンドを実行します。

# mount /dev/$name /usr
# cd /usr
# mkdir sys
# cd sys
# mt rew
# mt fsf 3
# tar xpbf 20 /dev/rmt12
# cd ..
# mt fsf
# tar xpbf 20 /dev/rmt12
# cd /
# chmod 755 / /usr /usr/sys
# rm -rf sys
# ln -s /usr/sys sys
# umount /dev/$name
# fsck /dev/r$name

fsckが走ります。

** /dev/rra0h
** Last Mounted on /usr
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
3735 files, 25550 used, 336310 free (166 frags, 84036 blocks)
#

後、もう少しです(笑)。fstabを設定します。

# cd /etc
# cp fstab.ra81 fstab
# newfs ra0g ra81

Warning: 30 sector(s) in last cylinder unallocated
/dev/rra0g:     82080 sectors in 115 cylinders of 14 tracks, 51 sectors
        42.0Mb in 8 cyl groups (16 c/g, 5.85Mb/g, 2048 i/g)
super-block backups (for fsck -b#) at:
 32, 11512, 22992, 34472, 45952, 57432, 68912, 80392,

ファイルシステムが作られます。
一旦、リブートします。

# sync
# reboot
syncing disks... done

Reboot requested, PC: 80021716 (ADDL2 #8,SP)
sim> q
Goodbye

ここまでで、基本インストール終了です。以下でマルチユーザで立ち上がります。

C:\4.2BSD>vax780.exe boot.ini
VAX780 simulator V3.8-0
loading ra(0,0)boot
Boot
: ra(0,0)vmunix
199488+56036+51360 start 0x11a0
                        ・
                        ・
starting network: rshd rexecd rlogind rwhod.
Mon Feb  6 05:21:18 PST 1984

4.2 BSD UNIX (myname)

login: root
4.2 BSD UNIX #9: Wed Nov 2 16:00:29 PST 1983

Would you like to play a game?

You have mail.
Don't login as root, use su
myname#


直ぐに、ローグを動かしたい気持ちを抑えて(笑)、まずは端末の設定です。ローグやviを使うためにはtermcapを使っている端末と合わせる必要があります。シミュレータはWin7のコマンドウインドで動いていますが、これに合うtermcapは直ぐには有りません。そこで、SIMHのマニュアルをみるとコンソールをtelnetに設定できると書いてあります。上記のboot.iniの先頭に"set con telnet=4000"の一行を追加します。後はTeraTermのTCP/IPの設定をlocalhost(127.0.0.1)の4000ポートにすれば、4.2BSDのコンソールがTeraTermに切り替わります。TeraTerm内の端末の設定はvt100に設定しておきます。その他の設定はSIMH - 懐かしの4.2BSDの通りです。1文字取り消しはバックスペースにしておいた方が良いです。

# stty
new tty, speed 38400 baud; -tabs ff1 crt
decctlq
erase = ^H
無事、viが起動します。


viの画面が乱れていないことを確認して〜
# cd /usr/games
# rouge
おめでとうございます(笑)。1986〜7年頃の記憶がよみがえる〜当時、地下5階くらいまでは行ったと思いますが。



7月29日
追加情報です。
SIMH - 懐かしの4.2BSDStep 5.マルチユーザモードでの起動の下に4.2BSDのソースの展開のしかたが書いてあります。早速実行。

# cd /usr
# mkdir src
# cd src
# mt rew
# mt fsf 6
# tar xvpbf 20 /dev/rmt12
# cd /usr/src/bin/csh
# ls

Makefile    getpwuid.c  sh.dol.c    sh.h        sh.parse.c  sh.sig.c
alloc.c     malloc.c    sh.err.c    sh.hist.c   sh.print.c  sh.time.c
doprnt.c    printf.c    sh.exec.c   sh.init.c   sh.proc.c
errlst.c    sh.c        sh.exp.c    sh.lex.c    sh.proc.h
getpwent.c  sh.dir.c    sh.func.c   sh.local.h  sh.sem.c
getpwnam.c  sh.dir.h    sh.glob.c   sh.misc.c   sh.set.c


# head -20 sh.c
static  char *sccsid = "@(#)sh.c 4.12 6/11/83";


#include "sh.h"
#include <sys/ioctl.h>
/*
 * C Shell
 *
 * Bill Joy, UC Berkeley, California, USA
 * October 1978, May 1980
 *
 * Jim Kulp, IIASA, Laxenburg, Austria
 * April 1980
 */

char    *pathlist[] =   { ".", "/usr/ucb", "/bin", "/usr/bin", 0 };
char    *dumphist[] =   { "history", "-h", 0, 0 };

ビル・ジョイのヘッダがありました。

また、テープの読み書きでは外の世界とファイルのやり取りをする方法も書いてあります。
SIMHで古代UNIXを再現(2)にあるmktape.cとrdtape.cの2つのソースをコピー&ペーストして用意します。

rdtape.cのchar buf[512];をchar buf[512*20];に変更します。
(PDP-11のV7 UNIXから4.2BSDへの変更)

cygwinで2つのツールをコンパイル
% cc -o rdtape rdtape.c
% cc -o mktape mktape.c

[winから4.2BSDへ]
cygwinでrdtapeを使ってSIMHのテープ形式のファイルを作ります。-oフラグを付けます。
% tar cvf - -o rdtape.c | ./mktape > import.tar
rdtape.c

シミュレータを中断し、tsから42.tapをデタッチし、その後、上で作ったimport.tarをアタッチしてシミュレータを再開します。
<sim>
^E
Simulation stopped, PC: 80001620 (FFS #0,#20,8003ED44,R0)
sim> detach ts
sim> att ts import.tar
sim> c

tarで解凍します。
<4.2BSD>
# tar xvf /dev/rmt0
rdtape.cができます。

[4.2BSDからwinへ]
シミュレータを中断し、tsからimport.tarをデタッチして、その後、export.tarをアタッチし、シミュレータを再開します。
<sim>
^E
Simulation stopped, PC: 80001620 (FFS #0,#20,8003ED44,R0)
sim> detach ts
sim> att ts export.tar
sim> c

t.cをtarで作成します。
<4.2BSD>
# tar cvf /dev/rmt0 t.c

cygwinでrdtapeを使ってSIMHのテープ形式のexport.tarを解凍します。
% ./rdtape < export.tart | tar xf -

% cat t.c


#include <stdio.h>
int main()
{
int i;

        for (i=0; i<99; i++)
                printf("%d\n", i);
}


t.sファイルがコピーできましました。
vax780のts(TS11 Magnetic Tape)は4.2BSD内では/dev/rmt0になるようです。




back







line