CPU実験室

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

パラレル出力テスト

モニタを使ってRAM領域にプログラムをロードできるのでデバッグが一気に楽になりました。ROMを外してプログラムを書き込んでまた挿入、これが32bitなので毎回4度繰り返さないといけない環境と比べると雲泥の差です。

ただちょっと気になるのがプログラムはRAM領域で実行させるので本来はRAMの先頭番地0xF80000番地から配置されるコードにしたいのですがans32k.exeはアブソリュートアセンブラで直に0番地からのバイナリを生成してしまいます。単に疑似命令を見つけられてないだけかもしれませんが「ORG」のようなものでロケート指示が与えられません。

それでは実行できないのかというとそういうわけでなく、NS32032のコードは完全リロケータブルでジャンプやサブルーチンコール、変数などのラベル参照はすべて相対アドレッシングになっていて0番地から生成されたコードであってもどの番地にロードされても動いてしまいます。なので当面は問題なさそうです。

 

周辺デバイスとして接続したNS32202の動作確認をはじめました。

f:id:O3I:20200128225942j:plain

このICはパラレル入出力のために置いたのですが、実体は割込みコントローラの専用チップで8259の2個分相当の機能を持っています。つまり汎用入出力というのはほんのオマケ的な機能にすぎません。チップ内部には32本ものレジスタがあって、そのうちパラレル入出力にかかわるものは4本だけ。残りは割込み制御で使用されます。この32本のレジスタは5本のアドレス線で直にアクセスされこのボードでは128バイトの空間を占有しますがこういうI/Oってちょっと珍しいです。DMAコントローラとか音源チップとかもっと大量のレジスタを内包するI/Oはありますがふつうはポイントレジスタとデータレジスタの2アドレスしか占有しない実装が多いような気がします。

 

まずは必要なレジスタのみ初期化してポートのレベルをチカチカさせるプログラム

f:id:O3I:20200128231125j:plain

 

問題なく動作しました。

f:id:O3I:20200128231428j:plain