8255へのアクセス状況を確認しておきました
Ch1:/CSピン Ch2:/WRピン Ch3:PC0ピン
約4μSごとに8255へ3回書込み(PA,PB,PC)され、PC書込みごとにPC0ピンがトグルしていて期待通りの動きです
ただ8255への書き込み以外の部分(単にレジスタのインクリメントとループのためのジャンプしかしてないのですが)が異様に時間がかかっているように見えます。これは遅延分岐の影響だと思われ、こういう小さいループは不得意なのかもしれません
一方、連続するI/Oアクセスの部分はかなり高速で300ns/byteで書いています
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」というメモリ設計のアプリケーションノートを探してきて読んでいたのですがようやく小さな図を見つけました。
4バイトアライメントされていないアドレスにもバイトアクセスできるというということで良いようですが、ここでの説明もいまいちです。