CPU実験室

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

バンク切り替え

拡張メモリボードにバンク切り替えの配線追加しました。

128kbyteSRAMは32kbyteづつ4バンクに分割されアドレスラインA15、A16を外部ポートから入力しバンク指定します。

またプログラム空間が選択されているとき(/PSENが0のとき)は強制的にA15、A16を0にしてバンク0が選択されるロジックが載っています

 

f:id:O3I:20190925171400j:plain

今仮にバンクセレクトはA15のみi8255のPA0に接続しています

 

バンク切り替えのテストは、次のプログラムを実行してみました

f:id:O3I:20190925171925j:plain

このプログラム自体はバンク0の0x8000番地からローディングされますがプログラム内でバンク1に切替え同じく0x8000番地に0~255のパタンデータを書き込んでしまいます。そのあとバンク0に切替えてプログラムが存在すること、バンク1に切替えてパタンデータが存在することを確かめます

 

実行結果がこれです

f:id:O3I:20190925172323j:plain

 

おなじアドレス0x8000~のプログラム領域(バンク0)、データ領域(バンク1)が独立して存在していて、尚且つこのプログラムが動作するということはコードがデータによって上書きされないということ、バンク切り替え後のコード参照も問題ないといえます。(もしコードフェッチ時に強制的にバンク0にするロジックが無ければバンクを切り替えた途端に暴走するでしょう)