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
結果:
port | R800 | Z80 | 備考 |
00-8F | 120 | 513 | |
90-91 | 292 | 513 | プリンター |
92 | 120 | 513 | |
93 | 292 | 513 | 予約 |
94-97 | 120 | 513 | |
98-9B | 565 | 531 | VDP |
9C-D8 | 120 | 513 | |
D9 | 91 | 513 | 第1漢ROMリード |
DA | 120 | 513 | |
DB | 91 | 513 | 第2漢ROMリード |
DC-FF | 120 | 513 | |
単位はシステムタイマー値=3.911μs。
±1くらいの測定誤差はでるのは無視してます。
DRAMモード、ROMモードの差分はありませんでした。
R800モードでは、VDPのほかに、プリンターポートのアクセスもWAITが入るようです。
IO 93hが未使用のはずですがWAITが入っています。プリンターポートのミラーであればIO 92hにも入りそうですが、そうではないようす。
漢字ROMのデータリードはWAITが入らない(?)ようで、ほかのポートよりもアクセスが高速という結果にもなりましたが、別途測定したところ、漢字ROMのイネーブラー(IO F5h)によりwaitが変わり、内蔵漢字ROMが無効の場合は他のIOと同様(120)となりました。
ちなみに同様に、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
address | data |
5 | bit6:内蔵ソフトSW(ROnly) |
6 | bit7: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フルデコードされている様子。
初出:2021/5/22
更新:2022/11/5 イネーブラーによる漢字ROMの挙動の違いを記載
感想、要望、バグ報告、その他何かありましたら、メールもしくは掲示板にてご連絡ください。
裕之
ホームに戻る