2016/02/02

SIMH上のUNIX V6とのファイル交換

SIMHのPDP-11上で動作するUNIX V6にファイルを送りこむため、仮想テープデバイスの動作を確認しておきます。仮想テープデバイスを有効にするには、構成ファイルに「attach tm0 working.tap」などと記述しておけば良いのですが、問題となるのは(この例なら)working.tapの方です。事前にファイルが存在しなければ、勝手に空ファイルとして作成されるのですが、それではテープに対する操作をした時にエラーが出ます。
# dd if=/etc/rc of=/dev/mt0
write: I/O error
0+1 records in
0+1 records out
SIMHが期待しているマーカーを入れたファイルを用意しておけばエラーにはならないようです。このファイルを作成するには、何かスクリプトを書いても良いし、コマンドラインからprintf(1)を使用して「printf "\0\2\0\0"」としても良いでしょう。
#!/usr/local/bin/python
def main():
        with open("working.tap", "wb") as fout:
                fout.write(bytearray([0,2,0,0]))

if __name__ == "__main__":
        main()
いずれにせよ、次のようなファイルが出来れば問題ありません。
furusawa% ll working.tap
-rw-r--r--  1 furusawa  furusawa  4  2月  2 08:32 working.tap
furusawa% od -tx1 working.tap
0000000    00  02  00  00
0000004
このファイルがあれば、エラーにはならなくなります。
# dd if=/etc/rc of=/dev/mt0
0+1 records in
0+1 records out
ddで書きこんだ結果、このファイルは次のようになっています。
furusawa% ll working.tap
-rw-r--r--  1 furusawa  furusawa  524  2月  2 08:52 working.tap
furusawa% od -tx1 working.tap
0000000    00  02  00  00  72  6d  20  2d  66  20  2f  65  74  63  2f  6d
0000020    74  61  62  0a  2f  65  74  63  2f  75  70  64  61  74  65  0a
0000040    2f  65  74  63  2f  6d  6f  75  6e  74  20  2f  64  65  76  2f
0000060    72  6b  31  20  2f  75  73  72  2f  73  6f  75  72  63  65  0a
0000100    2f  65  74  63  2f  6d  6f  75  6e  74  20  2f  64  65  76  2f
0000120    72  6b  32  20  2f  75  73  72  2f  64  6f  63  0a  00  00  00
0000140    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
*
0001000    00  00  00  00  00  02  00  00  00  00  00  00
0001014
仮想テープデバイスを経由すれば、UNIX V6と外部との間でファイル交換が出来そうです。ただし複数のファイルを交換したい場合には、どうすれば良いでしょうか。V6当時はtarは無かったようですし、sharを使おうにも、sedが無いようです。

最悪の場合1ファイルずつ上述した手順を地道に繰り返すしかないのですが、もうすこし効率的な方法を考えてみようと思います。

0 件のコメント:

コメントを投稿