MSX turbo RのIOウェイトの話

R800のVDPアクセスにウェイト入りまくってZ80よりも遅いという話はかなり周知の事実ですが、どうやらIOウェイトはVDP以外でも一律ではないらしいという話。

というわけで、単純にこういう測定プログラムで、全IOポートのリードアクセスの時間を測定してみました。
IOリードを256回したときにかかる時間をシステムタイマーで測定しようということですね。
     DI
     LD   B,00H
     OUT  (0E6H),A
LOOP:
     IN   A,(C)
     DJNZ LOOP
     IN   A,(0E6H)
     LD   L,A
     IN   A,(0E7H)
     LD   H,A
結果:
portR800Z80備考
00-8F120513
90-91292513プリンター
92120513
93292513予約
94-97120513
98-9B565531VDP
9C-D8120513
D991513第1漢ROMリード
DA120513
DB91513第2漢ROMリード
DC-FF120513
単位はシステムタイマー値=3.911μs。
±1くらいの測定誤差はでるのは無視してます。
DRAMモード、ROMモードの差分はありませんでした。
R800モードでは、VDPのほかに、プリンターポートのアクセスもWAITが入るようです。
IO 93hが未使用のはずですがWAITが入っています。プリンターポートのミラーであればIO 92hにも入りそうですが、そうではないようす。
漢字ROMのデータリードはWAITが入らない(?)ようで、ほかのポートよりもアクセスが高速という不思議な結果にもなりました。

ちなみに同様に、IN A,(C)をOUT (C),Aに変更してWriteアクセス時の時間も計測してみた結果、
0D9hと0DBhだけReadアクセスと異なり、他のポート同様のWAITありという結果となりました。
※0E6hこの方法だと測定できませんが、別途外部にタイマーを持って確認したところ他のポート同様でした。



おまけメモ:
IO 0E4h:S1990 register addres set
IO 0E5h:S1990 register data read/write

S1990 register
addressdata
5bit6:内蔵ソフトSW(ROnly)
6bit7:1=ハードリセット(WOnly)
bit6:1=ROM MODE/0=DRAM MODE(R/W)
bit5:1=Z80/0=R800(R/W)
BIT4-0:常に0(ROnly)
13常に3(ROnly)
14常に47(ROnly)
15常に139(ROnly)
らしい?そのほかのアドレスは常に255が読み出される(ROnly)。
レジスタアドレスは8bitフルデコードされている様子。

感想、要望、バグ報告、その他何かありましたら、メールもしくは掲示板にてご連絡ください。
裕之  
ホームに戻る