CPU実験室

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

I/Oテスト(3)

Am29030ボードの方は冷却期間おいたのでそろそろキンキンに冷えてそうなので戻ってきました。というかNS32032ボードのC言語化が浮動小数点処理で行き詰ったというのもあります。

こちらはどこまでやっていたか思い出すと外部デバイスとのI/OでバイトアクセスするときCNTLフィールドをどう設定すればよいか?ということでした。説明されている部分をAm29000マニュアルで見てみると

 

f:id:O3I:20201121231628j:plain

この中で関係ありそうなのが以下です

 BIT22:Address Space:I/O空間をアクセスするため1をセット

 BIT20:Set Byte Pointer:これがよくわかりません。とりあえず0.をセット

 BIT18-16:Option: バイトアクセスのため’001’をセット

これでCNTLフィールドは0x41となります

これで8255を介したLEDチカチカプログラムは以下のようになりました

 

f:id:O3I:20201121231710j:plain

プログラムはまず8255を全ポート出力に設定、その後PAには固定値0x55、PBには固定値0xAA、PCにはインクリメントデータを出力します。Am29kは汎用レジスタが192本と潤沢にありますがユーザに開放されている64番以降を使っています

さて出来上がったバイナリをROMに焼きつけて実行させました。

 

f:id:O3I:20201121231653j:plain

うまくいったようです。

PA治具の左側バーLED、PBは右側バーLEDでモニタされますが0x55と0xAAを示し、PCはボード上の青LEDをドライブしていますが最下位ビットが122kHzでチカチカしていることがわかります。

つまり連続したアドレスに配置した8255PA,PB,PC,CWRに対してCPUがバイトアクセスできているということでハード的なバス接続は間違ってなかったということになりほっと胸を撫で下ろしました。