パスコンやアナログ部の外付けCR類もすべて入力、部品の位置関係も見直しています。オーディオ入出力ジャックは外付けとしデータメモリ空間のSRAM3個は基板裏面に移動しています。 オートルータ実行したところ約1時間で布線完了。直後に390個くらいあったビ…
アナログ部分も含め主要部品をスケマチック図面に配置、100×100mmボードにざっくり並べてみました。ADSP-2101基板の構成とほとんど同じです。SRAM6個、PLCCのROM3個は何とか載りました。 あ、オーディオ入出力用のジャックがはみ出てる・・・ SRAM3個は基板…
メモリ配置をいろいろ検討してましたが、結局128kwordのSRAMを6個使うのが最も効率が良くデコードもシンプルにまとまりました プログラムメモリとデータメモリが物理的にも別々になるのでグルーロジックも単純化します。手元に1MbitSRAM:HM678127がまとまっ…
DSPに外付けするメモリ構成を検討しました。DSP56001はプログラムメモリ空間とデータメモリ空間が分離されたハーバードアーキテクチャですがバスはスイッチングして共用しているので単一のメモリ空間にオーバーレイできます。プログラム空間64kwordとデータ…
DSP56Kシリーズはオリジナルのモトローラからfreescaleに移管された後、それがNXPに吸収されても脈々と継承され直系のDSP563xxはまだ現行品のようです マニュアルを見ながらシステム構成を考えてみました。まずメモリですがプログラムメモリ空間が64kbyte、…
486、トランスピュータも動作を確認したところで放置冷却状態ですが、またまた別の石に目移りしてます。 68k→32k→29kと来たのでここでいよいよ56k(DSP56001)に出番が回ってきました。でもよく見るとこれは「XSP56001」ですね。モトローラの品番で先頭をXに…
リンクの下位に伝達していくたびにヘッダを取り除く方式はTCP/IPのプロトコルスタックと同様ですがいざコーディングしようとするといろいろ問題があります ・階層の数だけローダを付加するので深い階層に送るペイロードほどサイズ大きくなる ・階層によりロ…
リンクの上位側にあるトランスピュータが下位のトランスピュータにプログラムを送信してブートさせることができましたが、さらに下位のリンクがある場合、最初に送信するプログラムにローダを含めて入れ子構造にしておかなければなりません こうなると上位側…
もうひとつPRGDLLというサブルーチンを作っておきました。これはリンク先のボードへバイナリコードを指定バイト分POKEコマンドを使って転送します。 これらを組み立てたブート処理の流れです。まず別途アセンブルしておいたアプリケーションプログラム:LED…
リンク先のボードをブートするコードはこうなります。 まず制御コード1バイト:BOOT_CMDの内容はジャンプコード(J 0x00000000)の長さ8バイトを示す0x08を送り、その後ジャンプコードの実体が続きます では実際に動作させるユーザアプリケーションの方はとい…
リンク先ボードのメモリに読み書きができたので今度はそのボード上でプログラムの実行を指示する必要があります。 リセット後最初に受け取る制御コードが0x00のときはPOKE、0x01のときはPEEKでしたが1より大きい(2以上)ときは続くコードを制御コードの数だけ…
ボード間でメモリ読み書きの動作テストをしてみます これはTransputer1ボード上で動作するプログラムでPEEK/POKE処理をサブルーチン化してあります。Transputer2のメモリを読むためには対象アドレスをスタックにプッシュした後PEEKルーチンを呼ぶとAレジスタ…
トランスピュータは自身でROMブートせずにリンクからプログラムを注入して起動するブートストラップの機能があります。そのためROMが無い構成(オンチップRAMだけで済めば外付けRAMも無し)も可能でその機能も確認しておきました まずブートストラップを機能…
ハードウェアの準備ができたのでトランスピュータ最大の特徴であるリンク動作の確認をしてみました。2枚のボードにロードするプログラムは以下のようなものです。 トランスピュータ1(上段)にはbuff領域(0x00001000)から16バイトのデータをLINK0ポートか…
2枚作ってしばらく放置していたトランスピュータIMST805ボード、やっと再開します。まず2枚をスペーサでスタックし双方のLINK0チャネルをクロスケーブルで接続しました 電源もパラでつなぎますが、それぞれのボードのモニタ制御用のRS232Cポートは最初だけ…
ウェイト数を削減した効果をはっきりさせるために単純なループで比べてみます。ここでやったLEDチカチカプログラムと同じものですが先頭でキャッシュを明示的に無効にしました これを実行させるとPAポートの最下位ビットは約127kHzでトグルします これは4wai…
CPU冷却ファンを元の30mm角に戻し、さらにヒートシンクをCPUに熱伝導両面テープで貼り付け固定。サーミスタの接着もやり直しました。 この状態で念のため温度変動をプロットしてみると・・・あららこちらもハンチングが収まらなくなりました。 ヒートシンク…
現状486CPUの冷却ファンは30mm角のものを使っていて、いまいち頼りない気もしていたのですが40mm角のものを見つけました。この手のファンはDC12Vのものが多いですがこれはDC5Vで動作します ヒートシンクにもぴったり乗っかります。またこのファンにはセンサ…
SRAMのウェイトを4wait→1waitに変えたことでSRAM上で動作するアプリケーションは相当高速化されるんじゃ?とマンデルブロ集合プログラムをDLLして実行しました ところが・・実行時間は4waitのときの388秒と全く変わってません ん?何かミスったか、と一瞬思…
去年からの懸案、CPLD内のウェイトジェネレータの修正をしてみました。現状では全アクセスエリアで4waitかかってしまいますが、SRAMはアクセスタイムが20nsなのでウェイトはもっと少なくてもよいはずです。 そこで以下のようにロジックを追加しました。SRAM…
今年のCPUいじり初めは辰年にちなみi486ボードでドラゴン曲線を描いてみました。ドラゴン曲線は自己相似性フラクタル図形の一種で次のような簡単な漸化式を再帰的に呼ぶことで描画できます 点a(x、y)と点b(x,y)間に次数nのドラゴン曲線を描画するdrawDragon()…
マンデルブロ集合を計算するプログラムの中でバッファに判定結果をセットするcalc()を疑似乱数を埋め込むルーチンに差し替えてみました。256×256のセルをクリアした後xrand()で発生させた0~255の乱数列の2個づつをx,yとし、指定されたセルをインクリメント…
全体でキャッシュ無効とすると計算速度まで落ちてしまいますが、メモリ上だけで数値演算しているときはキャッシュ有効にして、データを転送するルーチンdata_out()の直前にcache_ctl(0)を挿入しキャッシュ禁止とするように変更しました データ転送ルーチンda…
生成画像に黒い筋が入る件、どうしても理由がわからず送出するビットマップを差し替えたり受信側をラインモニタに置き換えて電文をそのまま表示させたりしていたのですがやっと原因がわかりました。 ボード側プログラムの先頭で設定していたi486のキャッシュ…
i486ボードにマンデルブロ集合プログラムをダウンロードして実行させてみました。Re:-2~+1、Im:-1.5~+1.5の範囲を256×256メッシュ、打切り回数256回で描画させると実行時間8秒でいつもの画像が得られました ですが生成画像をよく見ると何か黒い縦筋が入っ…
CPUの識別情報を取り出すためのCPUID命令を実行してみました ・・・"CPUID"はちょっとタイプミスすると"CUPID"になってカワイイ。 当然Cでは記述できないのでインラインアセンブラでレジスタから大域変数にコピーしてます x86系インストラクションとしてのCP…
前項のLEDチカチカのCソースコードに全く手を加えずLSI-C86でコンパイルしてみました。アセンブリ中間コードはこんな感じです。x86のリアルモードならどのCPUでも動くはずです ループ構造はGCCと同じくこれ以上簡単にならない出来ですが重要なのはoutp()関数…
電源配線を強化してから動作は安定するようになったようです。LEDチカチカで長時間ランニングテストをやってますが暴走したり勝手にリセットは起きていません。 たとえば簡単なCソースコード:8255のPAにインクリメントコードを出力 これをDJGPPでコンパイル…
486CPUの動作とは全く関係のないファン制御に熱中してたのが一段落してその熱も冷め(ファンだけに)さて本筋に戻って486ボード上のアプリに取り組もう、としていたのですが最近どうもボードの動作が変なのです モニタは起動してアプリもロードできるのに実…
486CPUボードのハード、モニタ・ファンコントローラのファームもできたのでボード完成となります LEDチカチカのみ実行させて約1A程度流れています 未知のCPUだとここからソフト開発の試行錯誤が始まるところですが、このボードに関してはリアルモードではLSI…