CPU実験室

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

キャッシュ制御(3)

ボード上のI/Oアドレスのベースを80hになるようにライブラリを修正し
CPLDのロジックも書き換えて20-2Fhが空きになるようにしました。

 

この状態でCX486のキャッシュ関連のレジスタをセットする関数を用意しました

 

void cache_init(void)
{
  int x;
	
  putstr("-- cache config reg. initialize --\n\r");
  x=0xc0;
  outp(0x22,x);
  outp(0x23,0x20);        /*"BARB" enables internal cache flushing on bus holds */
  for(x=0xc4;x<0xd0;x++){ /* non-cacheable region disable */
    outp(0x22,x);
    outp(0x23,0);
  }
}

 

CX486はリセット直後、レジスタインデックスC4,C5,C6が00h,00h,0Fhで初期化されるようです
これはキャッシュ禁止領域の第1リージョンがメモリアドレス0番地から4GB・・・
つまりメモリ全領域がキャッシュ禁止と設定されることになります。
そのため486互換レジスタでキャッシュ許可にしても効果が無かったわけです
この関数ではレジスタのクリアと、ついでにバスホールド時にキャッシュをフラッシュするビットを立てておく処理をします。


この処理の前後でのレジスタ内容のダンプと、その後にCDビットによるキャッシュをON/OFFしてループ時間の測定をしてみます。

 

イメージ 1

 

今度は成功です。
キャッシュONで2.6倍の速度向上が確認できました。