● TE16って?
Version 7 Unix の
Setup Docutment
に出てくる
TE16
って、
実はただの 1/2 inch の磁気テープユニットのみらしい。
で、コンピュータと接続するためには
テープユニット・コントローラーが必要で、
それが
TM03
ってわけです。
実際 PDP-11 や VAX-11 から制御するのは
TM03
なので、
そのプログラミング情報が手に入らない限り、
手も足も出ない。
(そんな事情は知らないから、
長いこと
TE16
で検索しまくっていたんですが)
で、 TM03 の マニュアル を見つけました。この TM03 って、 もともと PDP-10 のために開発されたものらしくて、 それ故にか Massbus デバイスです。 マニュアルの 1-3 ページに絵があるように、 テープユニットのキャビネットの下半分に 収まっていたらしい。(そんなの分かるか!)
ちなみに、この TE16 を接続できる Unibus デバイスのコントローラもあるらしい(だから混乱したけど)んですが、 Unix では TM03 を制御する ht ドライバしかないので、 TE16 も Massbus デバイスと理解した方が良いでしょう。
● SIMH の DEVICE を書く戦略
で、SIMH にこの
TE16
でサポートさせるわけですが、
もちろん SIMH の中をほとんど知らない私ですから、
例によって
GODZILLA
アプローチ
(適当な雛型を持ってきて、
適当に直していく)
で臨みます。
SIMH で新しいデバイスをサポートするには、
の DEVICE を書く必要があります。
ソースの中に
pdp11_XX.c
とかありますよね?
あれです。
SIMH の本体は
scp.c
にあるのですが、
これは起動時に立ち上がる
例のコマンドインタプリターが実装されています。
また、
エミュレータエンジンは
PDP-11
の場合
pdp11_cpu.c
の中の
sim_intr()
って関数に記述されています。
で、この2系統の呼び出し、
つまり
ATTACH
とか
DETACH
といった
SIMH
のコマンドを実行する部分、
それから
sim_intr()
から呼び出される入出力処理エミュレーションの部分を
pdp11_XX.c
に実装するというお約束になっています。
さらに SIMH には
Magnetic Tape Emulation Library
というライブラリがあるので、
例のテープイメージファイルへの操作は
このライブラリを使って行うのもお約束みたい。
(詳しい話は
"Writing a Simulator for the SIMH System"
を読んでね)
そこで基本的な戦略なんだけど、、、
まず、テープ周りに関わる部分、
つまり
SIMH
のコマンドを実行する部分と
テープイメージファイルへの操作の部分は、
PDP-10
の
RH11/TM03/TU45
のエミュレータである
pdp11_tu.c
からパチッて来ることにします。
だって磁気テープの物理的な要素まで、
エミュレートするわけではないからね。
で、入出力処理エミュレーションの部分は
Massbus
デバイスの
RP04/RP05/RP06
のエミュレータである
pdp11_rp.c
からパチッて来ることにします。
コマンド/ステータスレジスタとかの
操作はおそらく一緒だと思うし、、、