CPU実験室

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

T805

ISERVER解析

ビルドしたISERVERがちゃんと動作しない原因を調べてます。指定したブータブルファイルがT805まで転送されているのは間違いなさそうですが、ボード上で起動してない感があります。考えられるのは ①展開されるメモリアドレスが違う ②使用しているリンクポート…

コードアセンブラ化

Cで書いたソースを見直してみると、ほとんどが周辺のレジスタアクセスでありバッファも100H境界に置いてレジスタペアをインデックスとして下位バイトのみインクリメントすればモジュロ演算をするまでもなく自動的にリングになる訳でアセンブラでの記述も容易…

プロトコルコンバータ

ホストPCと64180ボードとの仮想COMポートを通じた接続がうまくいったので次はリンクアダプタIMSC011のドライバを組み合わせてトランスピュータT805側と接続させます。データの流れを模式的に書くとこういう感じです ホストPCのアプリケーションISERVERはWrit…

シリアル入出力(2)

仮想COMポートをさらにエミュレートした環境で、実在しないレジスタを直叩きなんていうことが果たしてできるのかとかなり懐疑的だったのですが、なんとこれがちゃんとできるのです。モードの初期化、1文字入出力関数ともにDosBox内で正常動作しました そう…

シリアル入出力

ホストPCと64180ボードを接続する手段は仮想COMポートを介したシリアル通信しかないのでホスト側アプリはこのCOMポートをアクセスするプログラムを書かなければなりません。しかも16bitアプリで、ということになります そもそもDOSエミュレータのDosBoxから…

I/F改造

ISERVERのオリジナルコードをビルドできることが確認出来たところでI/F部分の差し替えを考えることになります。現状のコードは実行しているCPUのバスに直接接続したリンクアダプタをアクセスしているので、これを64180ボードを介したものにしなければなりま…

仮ビルド

ISERVERのソースファイルは入手出来ていてこんなファイル構成になっています。ファイルの数は多いですが1つ1つは比較的小さいようです MAKEFILEはいろいろな環境向けに対応できるようになっていて、ここではホストマシンがIBM-PC、ターゲットボードがINMOSの…

ISERVER構成

64180ボードのハードができたのでこれに載せるISERVERの構成を検討しています まずINMOSが想定している開発環境の例ですが、ホストPC(IBM-PC)の拡張スロットにトランスピュータボードが挿入され、ISERVERがボード上のリンクアダプタをアクセスする形になりま…

マルチプロセッサでLチカ(3)

3枚のT805ボード間に渡るリンクの接続状況です。LINK0がチャネル通信の受信、LINK1が送信に割り当てられ、トークンがそこを巡回しています。各リンクポート毎に受信Rxに緑、送信Txに赤のLEDインジケータが点灯していますが送受両方点灯するのは送受信データ…

マルチプロセッサでLチカ(2)

なんでカウントが1づつなのか、ということを考えると1つ前のノードからデータを受け取るプロセスin0 ? xと1つ先のノードへデータを出力するプロセスout1 ! yがPARステートメントで並列実行されてしまい更新前のデータを各ノード間で勝手にやり取りしていた…

マルチプロセッサでLチカ

チャネルを通して他のプロセッサ上にあるプロセスと同期できる・・・ということでこんな構成を考えました。リンクでつながれた3つのトランスピュータでそれぞれ入力値に+1するだけのプロセスを実行させると1周する間に値が3づつ増えるのではないかと。3枚作…

チャネル通信

シングルプロセッサで並列処理がどう動くのかまだ腑に落ちてないんですが、先にOCCAMのもう一つの特長であるチャネル通信の動作を確かめてみました チャネル通信はプロセス間で値やメッセージのやり取りに使えるとあります。CHAN OFステートメントでINT型チ…

並列実行

トランスピュータでの並列実行とは一体どんなものなのか・・セーター屋さんの例ではどうしようもないのでコンパイルが通る最小限のコードを書いてみました 左側が通常の順次処理、右側が一部にPARステートメントを使った並列処理を含みます ともに変数xに3を…

サブルーチン作成

OCCAMによるT805ボードの開発がうまくいきそうなのでデバッグ用のシリアル入出力ルーチンを準備しておきました とりあえず1文字入出力putcom/getcom、文字列出力putstr、数値表示decdspあたりがあればOKです 基本的にC言語の記述と同じで中括弧{}で括るとこ…

OCCAMでLチカ(2)

インストラクションCSUB0の機能をマニュアルで調べてみると スタックに積まれた値の大小関係でエラーフラグをセットするとあります。CSUB0が実行されるタイミングではスタックにはAregに#100(256)、Bregにledプロシージャの引数dataが積まれてるのでINT型のd…

OCCAMでLチカ

I/Oポートのアクセスは出来ているようなのでパラレルLEDにインクリメントデータを出力してLEDチカチカをやってみます OCCAMで書いたソースはこうなりました。mainプロシージャの中でLEDへデータを出力するledプロシージャと時間待ちをするwaitプロシージャを…

OCCAMプログラミング(3)

OCCAMソースをコンパイルしてT805ボード上で動作するバイナリを得るバッチはこのように組んでいます icollect.exeが出力するnon_bootaleファイルにはやはり情報ヘッダが付加されますがOCCAMの場合は何故か32byteになるのでヘッダ削除Cutbin.exeは少し改造し…

OCCAMプログラミング(2)

SCN2681のOPCレジスタに0セットで全ビット出力、SETCレジスタに$AA(10101010)RSTCレジスタに$55(01010101)セットすることで1個おきにLED点灯・・・ これはうまくいきました とさらっと書きましたが実はここに来るまでいろいろ紆余曲折があったのです ひ…

OCCAMプログラミング

OCCAMのプログラムがエミュレータ上で動作したので、今度はT805ボードでの動作を確かめてみます。 といってもOCCAMの文法は全く判らずINMOSのマニュアルを読み解いているのですが先ずサンプルコードから要らない部分をできる限り取り除いて「空のコード」を…

OCCAM処理系

C言語でトランスピュータのプログラムを書くという当初の目的は達成していますが残件はいろいろあります ①静的変数が使えない・・これは大問題②ヒープが使えない・・・直接malloc()/free()が使えないのはあまり影響なし sprintf()系関数は代替関数を手作りし…

プログラミングモデル(2)

正式なスタートアップルーチンがリンクされるビルド方法を探ってますが苦戦しています。 マニュアルを見るとボードのハード環境(プロセッサ構成、メモリ配置など)を記述したCFSファイルを食わせる「configured」なビルドをするとスタートアップに静的変数…

プログラミングモデル

INMOS-Cでのプログラミング問題点いろいろの中、エントリーポイントを必ず先頭にするためにmain()をコールするだけのスタートアップルーチン:entry()を先頭にリンクする・・で一応解決。 静的変数やヒープの初期化もおこなう完全なスタートアップルーチンの…

メモリ配置変更

INMOS-Cで書いたプログラムがスタートアップで固まる事象でここ数日嵌まってます。 ダイレクトにmain()からなら実行できるのでやはり静的変数やヒープがとられる領域に問題がありそうでスタートアップの内容から見直しが要りそうです。 ではメーカが提供する…

INMOS-Cプログラミング

Cソースをビルドしてできたnon-bootableファイル(.rsc拡張子)からヘッダ40byteを削除したバイナリファイルをT805ボードの0x00000000番地からロード、0x00000000番地から実行で今のところうまくいっています。シリアル1文字入出力putcom(),getcom()もCの関…

バイナリ生成

ツールチェインによりエミュレータ上で動作するバイナリが生成できているようなので今度は実機上で動かす方法を検討してみました。 先ず用意したソースファイルは自作T805ボード上のLEDをチカチカさせるものでSCN2681のパラレルポートにインクリメントデータ…

エミュレータ動作

マニュアルによるとトランスピュータ開発のツールチェインはこのようになっています。C言語もoccamもコンパイラを通すと.tco(トランスピュータCOFFファイル)に落ちるのでその後の取り扱いは同等でいけるようです ここでは実機ボードと接続しようとするISER…

開発環境検討

これは困りました・・開発対象のハードが動いていないとそのハードの開発ツールが使えないというのは自己矛盾を抱え込んでいるようにも思えますがどうなんでしょう。 ともかく開発ターゲットであり開発ツールの走行環境でもあるIMSB008ボードの構成がどうな…

コンパイル実行

開発ツールのセットアップはインストールマニュアルに懇切丁寧に説明してありディスクイメージから問題なくPCへ展開できました。ただし自己解凍ファイルやツール自体が16bitアプリなのでDOS互換BOX内での作業になります 適宜環境変数などを設定した後、マニ…

開発ツール

しばらくぶりにトランスピュータのプログラムを書いていますがやり方を結構忘れてます。 SCN2681のパラレルポートを介したLEDの点灯、DIPSwの読取りルーチン、待ちタイマ等のサブルーチンを書いてLEDチカチカ程度からリハビリしてますがどうにもここから進展…

3枚完成

ということでIMST805ボード3枚完成しました 各ボードのIDは左からお約束でMelchior、Balthasar、Casparにしておきましょう さてこれらの組立てですが三角柱状に配置して 台座に電源やインターフェースを収めてCRAY-1風にしようかとも思いましたが嵩張ってし…