CPU実験室

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

486

キャッシュ効果

486

ウェイト数を削減した効果をはっきりさせるために単純なループで比べてみます。ここでやったLEDチカチカプログラムと同じものですが先頭でキャッシュを明示的に無効にしました これを実行させるとPAポートの最下位ビットは約127kHzでトグルします これは4wai…

ファン制御変更

486

CPU冷却ファンを元の30mm角に戻し、さらにヒートシンクをCPUに熱伝導両面テープで貼り付け固定。サーミスタの接着もやり直しました。 この状態で念のため温度変動をプロットしてみると・・・あららこちらもハンチングが収まらなくなりました。 ヒートシンク…

ファン交換

486

現状486CPUの冷却ファンは30mm角のものを使っていて、いまいち頼りない気もしていたのですが40mm角のものを見つけました。この手のファンはDC12Vのものが多いですがこれはDC5Vで動作します ヒートシンクにもぴったり乗っかります。またこのファンにはセンサ…

ウェイト効果

486

SRAMのウェイトを4wait→1waitに変えたことでSRAM上で動作するアプリケーションは相当高速化されるんじゃ?とマンデルブロ集合プログラムをDLLして実行しました ところが・・実行時間は4waitのときの388秒と全く変わってません ん?何かミスったか、と一瞬思…

ウェイトジェネレータ変更

486

去年からの懸案、CPLD内のウェイトジェネレータの修正をしてみました。現状では全アクセスエリアで4waitかかってしまいますが、SRAMはアクセスタイムが20nsなのでウェイトはもっと少なくてもよいはずです。 そこで以下のようにロジックを追加しました。SRAM…

イヤー・オブ・ザ・ドラゴン

486

今年のCPUいじり初めは辰年にちなみi486ボードでドラゴン曲線を描いてみました。ドラゴン曲線は自己相似性フラクタル図形の一種で次のような簡単な漸化式を再帰的に呼ぶことで描画できます 点a(x、y)と点b(x,y)間に次数nのドラゴン曲線を描画するdrawDragon()…

疑似乱数テスト

486

マンデルブロ集合を計算するプログラムの中でバッファに判定結果をセットするcalc()を疑似乱数を埋め込むルーチンに差し替えてみました。256×256のセルをクリアした後xrand()で発生させた0~255の乱数列の2個づつをx,yとし、指定されたセルをインクリメント…

キャッシュ制御(2)

486

全体でキャッシュ無効とすると計算速度まで落ちてしまいますが、メモリ上だけで数値演算しているときはキャッシュ有効にして、データを転送するルーチンdata_out()の直前にcache_ctl(0)を挿入しキャッシュ禁止とするように変更しました データ転送ルーチンda…

キャッシュ制御

486

生成画像に黒い筋が入る件、どうしても理由がわからず送出するビットマップを差し替えたり受信側をラインモニタに置き換えて電文をそのまま表示させたりしていたのですがやっと原因がわかりました。 ボード側プログラムの先頭で設定していたi486のキャッシュ…

ビットマップ取得

486

i486ボードにマンデルブロ集合プログラムをダウンロードして実行させてみました。Re:-2~+1、Im:-1.5~+1.5の範囲を256×256メッシュ、打切り回数256回で描画させると実行時間8秒でいつもの画像が得られました ですが生成画像をよく見ると何か黒い縦筋が入っ…

CPUID命令

486

CPUの識別情報を取り出すためのCPUID命令を実行してみました ・・・"CPUID"はちょっとタイプミスすると"CUPID"になってカワイイ。 当然Cでは記述できないのでインラインアセンブラでレジスタから大域変数にコピーしてます x86系インストラクションとしてのCP…

LSI-C86プログラム

486

前項のLEDチカチカのCソースコードに全く手を加えずLSI-C86でコンパイルしてみました。アセンブリ中間コードはこんな感じです。x86のリアルモードならどのCPUでも動くはずです ループ構造はGCCと同じくこれ以上簡単にならない出来ですが重要なのはoutp()関数…

GCCプログラム

486

電源配線を強化してから動作は安定するようになったようです。LEDチカチカで長時間ランニングテストをやってますが暴走したり勝手にリセットは起きていません。 たとえば簡単なCソースコード:8255のPAにインクリメントコードを出力 これをDJGPPでコンパイル…

ボード完成

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 見た感じ、安定にループしているようです。実行しているコードを確認するため、いつものようにロジアナをつなぐまでもなくバス各ピンのバ…