CPU実験室

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

キャッシュ制御

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

ボード側プログラムの先頭で設定していたi486のキャッシュONをやめたら筋の入らないきれいな画像が得られました。ただし計算時間は17秒で倍ぐらいかかってます

 

 

i486に対するキャッシュ制御のための関数は以下のようなものを用意しています。cache_on()/cache=off()はコントロールレジスタCR0CD(cache  disable)ビットのON/OFFを行い、cache_ctr()はキャッシュの外部制御ピンKEN#のH/Lを設定します

さらにメモリはページディレクトリテーブルのPCDビットも関係してこれらのANDでキャッシュが有効になるのですがI/Oに関してはページの概念がないので全アドレスでキャッシュが働いていたようです

シリアルI/Oのステータスレジスタ読み取り時にキャッシュがヒットしてしまうと何が起きるか・・これは容易に想像できます