CPU実験室

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

痛恨の・・

486CPUの動作とは全く関係のないファン制御に熱中してたのが一段落してその熱も冷め(ファンだけに)さて本筋に戻って486ボード上のアプリに取り組もう、としていたのですが最近どうもボードの動作が変なのです モニタは起動してアプリもロードできるのに実…

ボード完成

486

486CPUボードのハード、モニタ・ファンコントローラのファームもできたのでボード完成となります LEDチカチカのみ実行させて約1A程度流れています 未知のCPUだとここからソフト開発の試行錯誤が始まるところですが、このボードに関してはリアルモードではLSI…

コントロールファームFIX

486

PI制御のオーバーシュートは、起動時してから温度が目標値に達してからはじめてファン制御を開始すれば回避できそうです。またゲインKpが大きいと温度入力のノイズをそのまま増幅してしまうのでこれは小さめに変更。 ということで電源ON後から目標値Sv=40℃の…

温度プロファイル

486

制御パラメータを変えて温度変化をプロットしてみました まずP(プロポーショナル)制御のみ、ゲインKp=1の場合です このファンは不感帯があってDUTY=30%くらい与えないと自力起動できません。温度にオーバーシュートがあるのはそのためです。その後は46~47…

PID制御

486

ファンのコントロールをPID制御でやってみます。 そこまで必要か?というのともはや486CPU関係無くなってますが・・ 制御量uは偏差eに対する比例項、積分項、微分項にそれぞれのゲインを乗じて合計した連続関数 で表されますが離散的な時間間隔では前状態と…

ON/OFF制御

486

ファンコントロールAPLのタイマイベントに取得した温度に対するファンの制御コマンドを追加し自動制御可能にしました まずは簡単なON/OFF制御(コタツ制御)です。目標温度40℃、ヒステリシス幅を±2℃(42℃でファンON、38℃でファンOFF)とした時の温度(赤色)…

コントロールAPL

486

ホストPC上で486CPUボードと通信するファンコントロールAPLを作ってみました。1秒のタイマイベントごとに486CPUボードへ「R」コマンドを送出してその返値を摂氏温度に変換して表示、ロギング。任意のタイミングで「W」コマンドによりファンを0~100%のデュー…

ファンコントロール(3)

486

ホストターミナル上でCPU温度やファンの制御量を見ることができるようになりましたが対話式の手動なのでデータのログやファンの最適化制御ができません。ここはさらに上位のホストPC側でのアプリケーションを作ってみます まず温度読取りがサーミスタ電圧そ…

ファンコントロール(2)

486

PICのシリアル入出力をそのままホストPCに接続すれば486CPUとは独立してファンの制御ができますが、ここはいったん486ボードのアプリケーションとして作ってみます。 前に書いたようにPICのシリアルはAm85C30のチャンネルBに直結できるので、チャンネルBの入…

ファンコントロール

486

基板裏面に実装したPIC12F1822に冷却ファンのコントロールFWを入れ込んでみます。 まずCPUの温度を測定するセンサですがプラスチックフィルムでラミネートされた超薄型サーミスタ103JTをヒートシンクに銅箔テープで貼り付けました これは25℃の時の抵抗値が10…

ハード完成

486

最後に残っていたパラレル拡張コネクタ20ピンをくっつけて実装部品がすべて完了しました。PPIのCS82C55Aがアクセス速度の問題かチップ自体の不良なのかよくわからないのですがときどき指定した通りの出力が出ずビット抜けすることがあるのでuPD71055-10に差…

ロジック変更

486

CPLD内でCPUへの信号線を制御するレジスタまわりの回路を変更しました。リセット解除時に/A20M、/KEN、/FLUSH、/IGNFEがネゲートされるように出力を反転。あと意図しない時に勝手に出力が変わってしまうのは、これは完全にロジック設計ミスでアドレスデコー…

モニタ起動

486

クロックソースはPCLKではなくRTxCが使われているようなのですが、いずれにしてもその値は8MHz。非同期通信のためClockModeは×16にしなければならないという条件でボーレートを他のCPU基板に合わせた38400bpsにするためのBRG分周比を以下の式で求めます 算出…

シリアル初期化

486

ROM化した高機能モニタですが、そのまま電源ONしても案の定全く動作せず。シリアルコントローラAm85C30を連続してアクセスしているにもかかわらずオープニングメッセージすら出ないのでここがちゃんと動作してないようです。まず送信バッファのデータが送出…

ROMスプリッタ

486

ハードの準備がほぼ完了したので、通例だとこのあとの手順は メモリの動作確認→シリアル入出力の確認→原始モニタの搭載→テストプログラムでハードウェア各部の詳細動作確認→高機能モニタの搭載 と進めるのですが486CPUに関しては既に動作実績のあるボードが…

ペリフェラル挿入

486

CPUまわりが動作しているようなので残りの周辺IC;シリアルコントローラAm85C30、パラレルコントローラCS82C55Aも挿入してしまいました 回路部品はすべて実装され、この状態での回路電流は約960mAでした。CPU単体の公称値より小さいですが内部モジュールがフ…

ウェイト変更

486

ウェイトジェネレータのカウンタはタップをQCに変更し、4waitとしました。以下はマニュアルのタイミングチャートを切り貼りして作ったイメージです RDY#は4カウント後にアサートされますがその間T2の後縁でチェックされウェイトサイクルが挿入されます。これ…

単純ループ実行

486

ROMにJMP$(0xEB/0xFE)を焼き込めたのでこれをさっそく実行してみました ch1:データバスD2 ch2:ROMのアドレスバスA0 見た感じ、安定にループしているようです。実行しているコードを確認するため、いつものようにロジアナをつなぐまでもなくバス各ピンのバ…

ROM焼き

486

テストコードをROMに焼き込んでみます。 自作ROMライタにワード幅4Mビットの27C4096の読み書きアルゴリズムはすでに用意していてDIP形状では正常処理を確認していましたがPLCC形状を使うのは初めて。ずいぶん前に作ったPLCC44-DIP40変換アダプタがやっと出番…

コード配置

486

バスのアクセス状況の確認のために安定にループするプログラムを作成します。例によってもっとも単純なプログラム、JUMP $から始めます。これはx86系でも何度も書いていてコードも覚えてしまいました。 EB FE JMP $ これを486CPUのリセットベクタに配置しま…

バス波形

486

FLUSH#をH固定にしたことでようやくCPUが正常起動しバスが駆動され始めました。 ch1:アドレスバスA0、ch2:ADS# ひとまずボードのハードウェアとしては成功です 2種の周期が重畳して見にくいですがコードのフェッチ周期は約3.2MHzとなります。実行しているコ…

バス制御(3)

486

UP#の説明でCPUをバスから切り離すの意で「3-state」の語が使われているのでこれでマニュアルを検索するとこんな記述が出てきました CPUに内蔵された特殊なテストモードで全ての出力/双方向ピンを切り離すとあります。しかも通常のバス操作では切り離されな…

バス制御(2)

486

未使用端子のpullup/downがちゃんとできているか、芋ハンダになってないか確認してみましたがこれは問題なし。そもそもバスホールドモードになっているか、つまりBREQ、HLDA信号が応答しているかを見てみるとこれらの信号もふらふらしていてどうもハイインピ…

バス制御

486

電源ON・・ したのですが例によってウンともスウともです。バスの状態を観察しながらリセット再起動してもバスがピクリとも動きません 時々やらかすCOMポートから外部リセットがかかりっぱなしになっているトラブルは今回、その回路自体が別ミスで動作しない…

CPU装着

486

ここまで来たらその後の手順はいつもの通り。CPUソケットにVcc、GND、クロック、リセットが供給されていることだけ確認してi486DX2を挿しこんでしまいました ついでに何も書き込んでいないUVEPROM:HN27C4096 2個もセットして、いよいよ電源ON・・・

ファンコントローラ

486

グルーロジックが入ったCPLDは付けたのであとはROMを挿せばCPU周りの挙動を確認できますが、このボードにはもう一か所プログラマブルな部分があり、そこを先に確認しておきます。 基板の隅っこに8ピンPICを使って簡単な空冷ファンのコントローラを置きました…

ソケット取付け

486

仮置きでPLCCソケットを付けた状態でもZIFソケットのレバー開閉はかろうじてできることがわかったので本付けしてしまいました。かなりみっちり感です CPLDは仮設計ができているのでロジックを書き込んでこれも挿入、64MHzの水晶発振器も取り付けてクロック、…

表面実装完了

486

i486DXボードの方も部品実装開始しました。 今一番の懸案はZIFソケットのレバーとPLCCソケットの干渉で、PLCCソケットまで付けてみてどうしてもダメならCPUはZIFでない普通のPGAソケットにするしかありませんがPLCCソケットを付けるにはまず最初に表面実装品…

チップ部品実装中

SMT実装特訓のようなTMS3631の抵抗マトリクスの1回路分終わりました。 手付け、Φ0.3mmハンダでハンダ量コントロールしてますが、1608形状のチップ抵抗は端面の導体部分がべったりハンダで濡れてほしい気がしてどうしてもハンダ盛り過ぎになってしまいます。 …

ZIFソケット仮置き

486

486DX基板にも着手しました まず実装面積でも最も大きい486用のZIFソケットが入るかですが基板上で仮置きしてもどうもしっくりする位置がこないのです。なんか変と裏返してみたらこのソケットは17×17グリッドなんですが各辺4列+インデックスピンで合計210ピ…