CPU実験室

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

I/Oテスト(4)

8255へのアクセス状況を確認しておきました

Ch1:/CSピン Ch2:/WRピン Ch3:PC0ピン

f:id:O3I:20201123081540j:plain

約4μSごとに8255へ3回書込み(PA,PB,PC)され、PC書込みごとにPC0ピンがトグルしていて期待通りの動きです

ただ8255への書き込み以外の部分(単にレジスタのインクリメントとループのためのジャンプしかしてないのですが)が異様に時間がかかっているように見えます。これは遅延分岐の影響だと思われ、こういう小さいループは不得意なのかもしれません

 

一方、連続するI/Oアクセスの部分はかなり高速で300ns/byteで書いています

f:id:O3I:20201123081600j:plain

 

Am29000のマニュアルにこうした8ビット幅へのアクセスの方法は
3.4.3 ADDRESSING AND ALIGNMENT Byte and Half-word Addressing という節に書いてあり

 ALU Status (Register 132)のBPフィールド
 Byte Pointer (Register 133)
 load/store命令CNTLフィールドのSBビット、OPT0-2ビット
 OPT0-2出力ピンをデコードしたハードウェアサポート

が絡んでそうなのですがよく理解できてません。

往々にして英文のマニュアル、特に古いものは文章だけで延々と説明されていて頭の中で翻訳という割込みが入るのと、具体的な例や図表が少ないので読み解くのがなかなか難しいところです。

マニュアルとは別に「1992_AMD_Am29000_Memory_Design_Handbook」というメモリ設計のアプリケーションノートを探してきて読んでいたのですがようやく小さな図を見つけました。

 

f:id:O3I:20201123081352j:plain

4バイトアライメントされていないアドレスにもバイトアクセスできるというということで良いようですが、ここでの説明もいまいちです。