CPU実験室

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

鳴りモノ系IC(3)

電子回路にとってノイズはいつも邪魔者扱いですが、時として積極的に発生させたいこともあるわけで、そんな用途のICです MM5837 Digital Noise Source 中身はLFSR(線形帰還シフトレジスタ)による疑似乱数発生器で最上位ビットのランダムな0/1の状態がビット…

鳴りモノ系IC(2)

部品箱虫干しのつづきです SAA1099 Microprocessor Controlled Stereo Sound Generator for Sound Effects and Music Synthesis (3個の矩形波発振+ノイズ)×ステレオ出力が18ピンDIPに収まっています つまりPSG(AY-3-8910)かDCSG(SN76489)相当が2個集積…

鳴りモノ系IC

海外のショップから部品を買うとき、目的のものの他に使うかどうかわからないけどついついポチっとしてそのまま仕舞いこみというはありがちですが、その中でも鳴りモノ系(音源用IC)をちょっと整理してました TMS3631 これは電子楽器用LSIでCPUコンパチバス…

SRAM構成

486

i486CPUでのメモリ構成を考えています。Pentiumとちがいi486ではBUS SIZE CONTROLピン:BS8#,BS16#を使ってバスサイジングが可能であるとされていてそれならブートROMは1個にできるかもと考えていました。ところがマニュアルをよく見ると8、16ビット幅のメ…

演算コプロセッサ

74ナンバー(〇しのライセンスではない)なのに標準ロジックではない変な機能のICというのがありますが前から気になっていたSN74S516が某オークションに出品されてました。(外観はここからですが) これは16ビットの乗除算器でかなり昔のトラ技に3次元ベク…

グルーロジック検討

486

大まかな基板配置が決まったところでCPU周辺ロジックにどれくらいの規模が必要か検討してみました。これが今想定しているCPLD:EPM7064で収まるかどうかにかかわってきます 動作実績がある以前の自作手製ボードを参考にしてみます CPUの左側の大きいPLCC:XC…

シンボル作成

486

ターゲットCPUはi486DX2/DX4ODPRに定め、まず面倒なシンボル作成に取り掛かりました。ピン数は多いですが機能は整理されていてデータバス32本、アドレスバス32本、電源関係52本はひたすらコピペ。全く使用しないつもりのキャッシュ、バースト制御、JTAG関連…

方針転換

486

Pentiumプロセッサの64bitメモリシステムと電源供給を2層基板で実現するのはやはりいろいろ問題を起こしそうな気がしてきました。4層以上の多層基板の価格がこなれてくるまで保留にしておきます。 そこで早くもコンティンジェンシープランを発動しました。プ…

ピン配置

486

基板CADの部品ライブラリにはPentiumなんて当然ないのでシンボル、フットプリントは自作しなければなりません。マニュアルのPINOUTを見るとやはり電源ピンが相当数あります。細いボンディングワイヤで合計3A流す必要があるわけでこれは仕方ありません。 ピン…

部品レイアウト

486

主要な部品を仮に基板上にレイアウトしてみました。基板サイズは安価にできる100×100mmはさすがに無理なので100×150mmでやってみます。 基板の左側半分弱を占める巨大な水色の四角はPentiumプロセッサ、本体だけでも約55×55mmありますが専用ZIFソケットがレ…

バスサイジング

486

Pentium(tm)プロセッサのマニュアルをつらつら読んでいたのですが ちょっとまずいところが見えてきました。 前からうすうす気づいてはいたのですがPentiumプロセッサはデータバスのダイナミックバスサイジングをサポートしないようです これはつまりデータバ…

新プロジェクト検討

486

トランスピュータボードの製作でネックになったのが意外にもICソケット(84ピンPGA)だったわけで、レトロCPUをいじるときそれが特殊パッケージだったりすると要注意です。思うに古い機器を廃棄するときソケットに実装されているICは回収されてリサイクルさ…

画像ツール修正

マンデルブロ集合の実行テストは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個を焼…

量産計画

トランスピュータが動きそうとだいたい分かった時点で実はもう1個発注していました。せっかくリンク機構があるのでそれを確かめたいし、1人では寂しかろうと・・こうしてCPU多頭飼育崩壊が始まってます 前回と同じ業者で同価格、2週間くらいで到着しました…

飛び先修正

条件付き分岐CJの飛び先相対アドレスが何か間違っているんじゃ・・となると無条件分岐Jもヤバいのではないかと原始モニタのソースコードから相対ジャンプする行を抜き出してみました。 next Iptrはジャンプ命令の次の命令のインストラクションポインタ、dest…

条件分岐

1文字入出力、メモリ書込み、ジャンプができればそれらの組合せでモニタを作るのは簡単なはずなんですがいろいろつまづいてます。 たとえば以下は原始モニタでターミナルホストから入力された1文字コマンド(「L」:ロード、「G」:実行)でそれぞれの処理…