CPU実験室

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

I/Oテスト(2)

指定したアドレスにデータをセットするためにSTORE命令を使ってみます。マニュアル上で命令フォーマットはこうなっているのですが、

 

f:id:O3I:20201102193646j:plain

ここまできて今回のCPUがRISC(Reduced Instruction Set Computer)であることを思い知らされることになりました。

インストラクションセットのオペコードだけ見ると算術・論理演算、比較、分岐と一般的なCISCにあるようなものが揃っており、ちっとも縮小化されてないじゃん・・と思ったのですが制約があるのはアドレッシングモードの方でした。

基本的に演算処理のソース、ディストネーションはレジスタ直接しかできません。唯一LOAD/STORE命令のみレジスタ間接、イミディエイト間接ができるのでメモリ間演算はこれらとの組み合わせで実現することになります。CISC内で自動的に行っているマイクロコードのレベルからプログラミングするイメージです。

 

まずプログラマが毎回アクセスモードの詳細を指示してやる必要があるようでビット22~16にCNTLフィールドがあり、このためLOAD/STOREのオペランドは4個もあります。

f:id:O3I:20201102200958j:plain

さらに命令長が32ビット固定なのでディストネーションを即値指定する場合は下位8ビットしか入りません。そのためI/Oは全アドレス空間の最下位に押し込んでしまうことにします。

アドレスがオーバーライドしても転送先をメモリにするかI/OにするかはCNTLフィールドで指定できるようなのでI/Oは0x800000XXから0x000000XXに移動するようGALを修正します。