2026/02/12

TangConsoleDCJ11MEMへの2.11BSDのインストール

この文書には改定版が存在します。こちらを参照してください。改訂版 

 TangConsoleDCJ11MEMに2.11BSDをインストールする方法を簡単に説明します。要点だけ書きますので、きちんとした手順書にはなっていません。ご承知おきください。

前提条件

Windows 11とLinux(WSL上で動作するUbuntu) での操作を前提に説明します。読者はそれぞれの環境でのコマンド実行などについては特に説明を要しないものとします。

環境構築

LinuxでSIMHとretro-fuseをインストールします。retro-fuseはソースからビルドします。

参照する情報

  1. 2.11BSDの文書 211bsd-setup.pdf
  2. SIMHに2.11BSDをインストールする手順 Installation of 2.11BSD on SIMH 
  3. retro-fuseの使い方 retro-fuse/wiki 

用意するもの

  1. 2.11BSDの配布ファイル 2.11BSD
  2. Pmod0に接続するmicroSDカードインタフェース
  3. 2.11BSDのソースコードに適用するパッチ bsd211.patch

 概略手順

  1. SIMHをインストール
  2. SIMHに2.11BSDをインストール
  3. retro-fuseをインストール
  4. TangConsoleDCJ11MEMに2.11BSDをインストール
  5. インストールしたdiskイメージを書き換える

詳細手順

上記概略手順の4.と5.についてはもう少し詳しく説明します。

テープイメージの作成

2.11BSDの配布ファイルがある場所で以下のコマンドでテープイメージを作成します。

dd if=mtboot    of=211bsd.img conv=notrunc
dd if=mtboot    of=211bsd.img conv=notrunc seek=1
dd if=boot      of=211bsd.img conv=notrunc seek=2

dd if=disklabel of=211bsd.img conv=notrunc seek=65536
dd if=mkfs      of=211bsd.img conv=notrunc seek=131072
dd if=restor    of=211bsd.img conv=notrunc seek=196608
dd if=icheck    of=211bsd.img conv=notrunc seek=262144
dd if=root.dump of=211bsd.img conv=notrunc seek=327680
dd if=file6.tar of=211bsd.img conv=notrunc seek=393216
dd if=file7.tar of=211bsd.img conv=notrunc seek=458752
dd if=file8.tar of=211bsd.img conv=notrunc seek=524288

インストール

テープから起動してルートファイルシステムをmkfs, restorします。

 @100000g
100026
@0g
73Boot from tm(0,0,0) at 0172522
: tm(0,2)
Boot: bootdev=0402 bootcsr=0172522
Mkfs
file system: rk(0,0)
rk(0,0,0) disklabel missing/corrupt
file sys size [0]: 3072
bytes per inode [4096]: 
interleaving factor (m; 2 default): 
interleaving modulus (n; 100 default): 
isize = 768
m/n = 2 100
Exit called

73Boot from tm(0,0,2) at 0172522
: tm(0,3)
Boot: bootdev=0403 bootcsr=0172522
Restor
Tape? tm(0,5)
Disk? rk(0,0)
Last chance before scribbling on disk. End of tape ### ここでRETを入力

73Boot from tm(0,0,3) at 0172522
: rk(0,0)unix
Boot: bootdev=03000 bootcsr=0177404

2.11 BSD UNIX #115: Sat Apr 22 19:07:25 PDT 2000
    sms1@curly.2bsd.com:/usr/src/sys/GENERIC

panic: iinit
no fs on dev 6/0
syncing disks... done

006102
@

オリジナルのカーネルではルートファイルシステムがマウントできないのでpanicします。 

 置き換えるファイルの作成

カスタマイズされたカーネルとRK11用のブートブロックを作成します。

  1. SIMHのディスクイメージをretro-fuseでマウント
  2. ソースコードにパッチを適用
  3. ディスクイメージをアンマウント
  4. SIMHを起動
  5. カーネルとブートブロックをビルド(SIMHで作業、手順は後述)
  6. SIMHを終了 
  7. SIMHのディスクイメージをretro-fuseでマウント
  8. ビルドしたカーネルとブートブロックをホストにコピー
  9. ディスクイメージをアンマウント
次に、カスタマイズされたカーネルとブートブロックをmicroSDカードイメージに書き込みます。 
  • 2.11BSDがインストールされたmicroSDカードイメージを取得
microSDカード全体のイメージを取得します(rk11.img)
  • カードイメージ上のRK11のディスクイメージをretro-fuseでマウント
 $ bsd211fs -o fsoffset=512 -o mapuid=1000:0 -o mapgid=1000:20  rk11.img /tmp/bsd
  • カーネルをコピー
  • ディスクイメージをアンマウント
  • ブートブロックをディスクイメージに書き込む
$ dd if=rkuboot of=rk11.img seek=1024 conv=notrunc

ディスクイメージをmicroSDカードに書き戻せば準備完了です。 

カーネルとブートブロックのビルド手順

カーネルとブートブロックのビルド手順は以下の通りです。

# cd /usr/src/sys/conf
# ./config SMALL
# cd ../SMALL
# make all
# cd ../mdec
# make

最初のmakeでカーネル(unix)が、次のmakeでブートブロック(rkuboot)が生成されます。 

補足

2.11BSDを動かすためにはFPGAの実装の変更が必要です。オリジナルからforkした、こちらのリポジトリを参照してください。forkしたリポジトリ 

0 件のコメント:

コメントを投稿

TangConsoleDCJ11MEMにおける2BSDの誤動作の調査 その3

誤動作の原因の二つ目が判明しました。 符号なし2進数と符号付2進数の比較 後述するSOFUB_MAPの実装に符号なし2進数と符号付2進数を比較しているコードがありました。直接の比較ではありませんでしたが、符号なし整数の値を符号付整数の変数に代入し、その変数と定数を比較していたため...