CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

プログラム配信(2)

リンクの下位に伝達していくたびにヘッダを取り除く方式はTCP/IPプロトコルスタックと同様ですがいざコーディングしようとするといろいろ問題があります

・階層の数だけローダを付加するので深い階層に送るペイロードほどサイズ大きくなる

・階層によりローダに与えるメモリアドレス、レングスのパラメータが変わるので同じローダが使えない

そこでこれを改善してみました。リンク下位に送るペイロードとして実行中のローダ自身含めメモリの先頭番地からそっくり複製②してしまいます。こうすることでローダは1種1個のみ、各階層での操作も同じになりリンク階層の深さにも制限がなくなります

ただしこれにも欠点があり最下層のトランスピュータはさらに下位にトランスピュータがあることを期待してプログラム転送をしようとしますが、無いものからは応答が無いのでそこでハングアップしてしまいます。これの対策としては最下層の下にリンク入力に対して無条件にACK応答を返す模擬的なノード・・リンクターミネータとでも言うもの、例えばリンクアダプタIMSC011を置けば良さそうです

 

といってもすぐにハードは用意できるわけではないのでここではネットワークプロトコルに倣いTime to Live(TTL変数を用意してみました。ここには初期値として階層数n-1をセット、次の階層に複製されるとき1づつ減算するようにしておき、TTL=0となった階層ではさらに下位への転送は禁止するという仕組みです

これらを具体的にコーディングしたローダはこのようになっています

先頭部分に0x100のエリアを空けているのはユーザアプリケーションを先頭部分にリロケーションするための隙間です。これがないと転送処理BLKMOVが自分自身をデータ上書きして破壊してしまいます

このローダをTTL初期値=1としてtransputer1ボード上で実行させるとtransputer1transputer2の両方で同じユーザアプリケーション(LEDチカチカ)が実行されました。

ただしボードが2枚しかないのでn≧2での検証はできてません