CPU実験室

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

T805

プログラム配信(2)

リンクの下位に伝達していくたびにヘッダを取り除く方式はTCP/IPのプロトコルスタックと同様ですがいざコーディングしようとするといろいろ問題があります ・階層の数だけローダを付加するので深い階層に送るペイロードほどサイズ大きくなる ・階層によりロ…

プログラム配信

リンクの上位側にあるトランスピュータが下位のトランスピュータにプログラムを送信してブートさせることができましたが、さらに下位のリンクがある場合、最初に送信するプログラムにローダを含めて入れ子構造にしておかなければなりません こうなると上位側…

ブート処理(3)

もうひとつPRGDLLというサブルーチンを作っておきました。これはリンク先のボードへバイナリコードを指定バイト分POKEコマンドを使って転送します。 これらを組み立てたブート処理の流れです。まず別途アセンブルしておいたアプリケーションプログラム:LED…

ブート処理(2)

リンク先のボードをブートするコードはこうなります。 まず制御コード1バイト:BOOT_CMDの内容はジャンプコード(J 0x00000000)の長さ8バイトを示す0x08を送り、その後ジャンプコードの実体が続きます では実際に動作させるユーザアプリケーションの方はとい…

ブート処理

リンク先ボードのメモリに読み書きができたので今度はそのボード上でプログラムの実行を指示する必要があります。 リセット後最初に受け取る制御コードが0x00のときはPOKE、0x01のときはPEEKでしたが1より大きい(2以上)ときは続くコードを制御コードの数だけ…

メモリ読み書き(2)

ボード間でメモリ読み書きの動作テストをしてみます これはTransputer1ボード上で動作するプログラムでPEEK/POKE処理をサブルーチン化してあります。Transputer2のメモリを読むためには対象アドレスをスタックにプッシュした後PEEKルーチンを呼ぶとAレジスタ…

メモリ読み書き

トランスピュータは自身でROMブートせずにリンクからプログラムを注入して起動するブートストラップの機能があります。そのためROMが無い構成(オンチップRAMだけで済めば外付けRAMも無し)も可能でその機能も確認しておきました まずブートストラップを機能…

リンク入出力

ハードウェアの準備ができたのでトランスピュータ最大の特徴であるリンク動作の確認をしてみました。2枚のボードにロードするプログラムは以下のようなものです。 トランスピュータ1(上段)にはbuff領域(0x00001000)から16バイトのデータをLINK0ポートか…

CPU並列化

2枚作ってしばらく放置していたトランスピュータIMST805ボード、やっと再開します。まず2枚をスペーサでスタックし双方のLINK0チャネルをクロスケーブルで接続しました 電源もパラでつなぎますが、それぞれのボードのモニタ制御用のRS232Cポートは最初だけ…

追いハンダ

前段に入るバッファ74HC245はフットプリントも合っているしちゃんと付いていそうなのでUART:SCN2681のデータバスD1(18ピン)に注目してみます。 バッファからのパタン引き回しはこんな感じ。 PLCCソケットの裏のハンダ状態ですが・・スルーホールにちゃん…

文字化け

電源ONで起動するモニタですがそのオープニングメッセージが微妙に文字化けしています。 本来 *** Transputer IMST805 micro monitor Ver00.05 *** となる文字列が ((( Tpalqputep IMQT805 miapm mmlitmp Tep00,05 ((( になってるわけで例えば先頭の”*”が”…

部品実装完了

ここまで来ればあとは速いです。手持ちの部品をさくさく挿していきました CPLDのロジックやROMのファームも1枚目で動作実績があるのでそのままプログラムしてあります。ただ久々にやってみるとROMに焼き込むコードのロケーションに迷ったりするので自分用の…

挿入品完了

2枚目トランスピュータボードへのICソケットやコネクタなどスルーホール部品の取り付けも完了しました。Q3とU9はCOM2ポートから外部リセットをかけるための回路ですが今回使わないので未実装としておきます 左側が今回作成のボードですが右側の完成済ボード…

表面実装完了

並行して進めていたプロジェクトのうち2枚目のトランスピュータボード作成のほうはやっと表面実装部品の取り付けが終わりました 表面は何も付いてないのと見た目変わらないので裏面を見るとこんな感じです このうち左端にあるRS232CレベルコンバータMAX202…

2枚目着工

仕掛かり中の案件はいろいろあるのですがしばらく放置していたトランスピュータT805ボードの2枚目にやっと着手しました パスコン0.1uFを10個ほど付けたところで集中力途切れ今日はここまで。 前回と全く同じ実装をする予定ですが、トランスピュータ自体は外…

画像ツール修正

マンデルブロ集合の実行テストはCPUボードにプログラムをロード実行させ、生成された画像データを吸い上げ、表示する自作の汎用ツールを使っています。結構前にやっつけの作りっぱなしだったので今回少しメンテしました ・ボードとのセッションが垂れ流しだ…

浮動小数点テスト(4)

公式ルールでマンデルブロ集合描画を実行しました。開始座標SX,SY、描画幅WIDTHと打切り回数NMAX=8192はソースに埋め込んであります 256×256メッシュで実行時間は約40分でした さて他のCPUボードとの比較ですが・・・ 20MHz80386+80387と倍速386+387の間くら…

浮動小数点テスト(3)

このボードもNS32032と同じステップを踏んで高精細モードでやってみます。ボードに実行を指令、計算されたピクセルデータを吸い上げて表示する自作汎用ツールが使えるようにボード側プログラムのI/Fも変更しました 256×256メッシュで計算時間は53秒。 打切り…

浮動小数点テスト(2)

実数演算を含むプログラムも動きそうなのでいつものマンデルブロ集合描画をやってみます。 先ずオペランドに即値が置けないので使いそうな1,2,3,4・・・といった定数をデータ定義しておきます。また変数も領域確保のため初期値0で同様に定義します 複素数c=a…

プリプロセッサ

ソースファイル中に含まれる浮動小数点数値を変換するプリプロセッサを作りました。入力テキストファイルを行単位で出力ファイルにコピーしますが行の中に新たに定義した「DOUBLE」(またはREAL8)か「FLOAT」(またはREAL4)の文字列が含まれていたら後続す…

浮動小数点テスト

現状のボードで確認できることとして内蔵のFPUの動作を見ておきます。やることはNS320C32ボードでやった例題と全く同じ、実数同士の足し算です。まずマニュアルを読んでトランスピュータでの浮動小数点数値の扱いで判ったことですが ・機能は単精度倍精度の…

ハードソフトほぼ完成

最後に残っていた外付けSRAM:HM62256(256kbit)×4個を装着。ボードのハードウェアはこれでほぼ完成です。リンク接続用のコネクタの実装がまだですがこれは自己折返しかもう一枚ボードを作って実験するときでよいでしょう ROMからブートするモニタも原始モニタ…

アセンブラ動作

モニタプログラムの修正をやっていますが機能追加でだんだんサイズが大きくなっていく過程で全く動作しないプログラムができることがあります。アセンブル、飛び先修正が正常に終了しているのに何故なんだろうと。改造の時に変な処理を入れ込んだのかとソー…

エラー対策(2)

飛び先ラベルとの間に無駄コードの詰め物をして語長を増やす対策ですが数行追加でOKになる場合もありますが数十行挿入しても全く語長が変わらないこともあります。相対アドレスの算出ミスの規則性が全くわかりません。 以下の例では正しい相対アドレスは 0x7…

エラー対策

正しい相対アドレスが既存の語長に収まらない時はどうするか・・ですが対策として無駄なコードを挿入して境界を跨がないようにするしかありません。以下は文字列入力ルーチンSTRINで発生したエラー対策の具体例です 左列は元のソースをそのままアセンブルし…

飛び先修正ツールの修正

アセンブル後のバイナリファイルを拙作ツール:Transputer Convergence Correctorで修正しモニタ上で動作させるという一連の開発手順が確立してきました。ところがデバッグを繰り返しているうちどうも変換に失敗し正常に動作しない場合があることに気付きま…

飛び先修正ツール

モニタ上でプログラムのロード、実行が簡単にできるようになりましたが、アセンブラが出力するコードは相対アドレスの飛び先に誤りがあるという問題は解決していません。使い方が間違っているのか、アセンブラ自体のバグなのかよくわかりません。 アセンブラ…

モニタ改造

ワークスペースの確保ができCALL/RETによるサブルーチンが使えるはずなので、原始モニタ環境でもう少し実用性のあるモニタを作ってみました。 修正したいのは 1.汎用ルーチンをサブルーチン化 2.「L」ロードコマンドでバイナリ転送終了したらコマンドプ…

メモリ使用状況

ボードのハードはあと外付けSRAMの実装が残っていますがここで改めてメモリ配置をまとめておきました。 ROM256KB、RAM128kB、トランスピュータ内蔵RAM領域4kBで計388kB。4GBのリニアな全メモリ空間の実に0.009%しか使っていません スカスカですが未使用部分…

モニタ始動

ROM上で動作する原始モニタが動作し始めました。シリアルから入力したプログラムコードをオンチップRAMの0x8000200番地からセットするロード「L」と0x8000200番地に制御を移す実行「G」だけしかありませんが、いままでプログラムを変更するたびにROM4個を焼…