MSX turbo Rのメモリアクセスウェイトの話

turbo R(R800)ではDRAMアクセスはノーウェイト、内蔵ROMアクセスに2WAIT、外部スロットアクセスに3WAITとDatapackには記載されています。
ただ、具体的にどこのメモリマップがこれに当たるのかというのが厳密には記載されていないため、調査を行いました。

調査方法は、下記のように特定のメモリアドレスを連続で読み込んで、所定回数読み込みが終わるのにかかった時間を計測します。
これを、各スロットの特定のアドレスに対して行います。
何故5000H回かというと、Z80でもシステムタイマーが溢れないのがこのあたりだったからです。
MEASURE:LD      DE,05000H
        OUT     (0E6H),A
M_LOP:  LD      A,(HL)
        DEC     DE
        LD      A,D
        OR      E
        JR      NZ,M_LOP
        IN      A,(0E6H)
        LD      L,A
        IN      A,(0E7H)
        LD      H,A
        RET
結果(1MByte改造済み FS-A1GT):
上記ソースの測定結果なので、単位はシステムタイマー値=3.911μsです。
CPU MODE 0(Z80)
address#0-0#0-1#0-2#0-3#2#3-0#3-1#3-2#3-3
0000D926D925D925D925D925D925D926D925D926
4000D926D925D926D926D926D926D925D926D925
8000D926D925D925D926D925D925D925D925D926
C000D926D926D926D926D925D925D925D925D926
FFFFD925D926D926D925D925D926D926D925D925

CPU MODE 1(R800/ROM)
address#0-0#0-1#0-2#0-3#2#3-0#3-1#3-2#3-3
00002267258022641C1225801F3622601C292267
4000226925802269225D25811F3C225C2267226A
80001C2425811C271C2525801F44225C1C16226A
C0001C14258122601C2325801F421C1C1C162264
FFFF258125812580258025802581258125812580

CPU MODE 2(R800/DRAM)
address#0-0#0-1#0-2#0-3#2#3-0#3-1#3-2#3-3
00001F3E2580226B1C1E25811F441F411C1C225D
40001F4425812269226A25801F401F44226A2266
80001C1D25801C161C2125801F3622641C24226A
C0001C122580225B1C1325801F371C121C12226A
FFFF258125812581258025802580258125812581

考察:
Z80モード時は、当然アクセス先により速度が変わることはなく、一律です。
以下、R800時の動作ですが、一番高速なのは、赤字で示した箇所です。
メモリが何も配置されていない個所ですね。ちなみに#0-3のPAGE1は、A1GTではタイトルROM表示用のプログラムが置いてあります。A1STでも何か置いてあります。
こちらについては、Datapackに記載のない条件となります。記載がないので0WAITのようです。
実際には、R800のUM記載の
・「アドレスを決定するレジスタが変更」に該当するため、+1wait
とおもわれます。

次に高速なのは、緑字で示した箇所です。こちらについてはDRAMアクセスの個所になります。
DRAMは本来ノーウェイトアクセスですが、
・「アドレスを決定するレジスタが変更(=rowアドレス変更)」で+1wait
・「次の命令をフェッチする際のrowアドレス変更」で+1wait
の合計2waitとおもわれます。

その次は、青色で示した箇所にあります。これは内蔵ROMの個所になります。
・「アドレスを決定するレジスタが変更」で、+1wait
・「内蔵ROMアクセス」で+2wait
の合計3waitとおもわれます。
#0-2のページ0とページ3は未使用のはずですが、ウェイトが入っているのでROMがマッピングされていると思われます。

一番遅いのは紫色で示した、外部SLOTアクアスになります。
・「アドレスを決定するレジスタが変更」で、+1wait
・「外部スロットアクセス」で+3wait
の合計4waitとおもわれます。

※もしかすると、「アドレスを決定するレジスタが変更」のwaitが、調査対象メモリリード時と、次の命令フェッチ時の必ず2回入り、上記4パターンすべてでさらに+1waitの可能性もあります。
着目すべきは、すべてのスロットの拡張スロット選択レジスタが外部SLOTアクセス扱いになっているところでしょう。
T9769Cも拡張スロット選択レジスタを持っているから、S1990側と不整合起きないようにという理由かと思いますが、
T9769Cが拡張スロットを管理している理由もないような気もします。


というわけで、メモリマップドIOのアドレスが怪しいということが分かりましたので、さらに調査してみました。
以下、すべてR800/DRAMモードでの測定結果です。
address#0-0#0-1#0-2#0-3#2#3-0#3-1#3-2#3-3
7FEF1F3A2580225C225E25801F361F442265225F
7FF01F362580225C258125801F3F1F432580225C
7FF11F3B2580225F258025801F441F392580225B
7FF21F4325812267258025801F3F1F3725802261
7FF31F4425802269258025801F361F3E25812269
7FF41F3B25802269258125811F371F442580226A
7FF51F3625812267258125811F411F4225812269
7FF61F3A2580225F258025801F451F3825812262
7FF71F432580225C258025801F3E1F362581225C
7FF81F442580225C258125801F361F3E25811C14
7FF91F3D2581225E258125811F391F4425802267
7FFA1F3625812267258025801F421F402581226A
7FFB1F372581226A258025811F441F362580226A
7FFC1F412580226A258125801F3D1F3625812263
7FFD1F4425802267258125811F361F402580225C
7FFE1F3E2580225F258025811F391F442580225B
7FFF1F362580225B258025801F431F3F2580225C
先ほどの結果と相違がある個所は、
・#0-3の7FF0-7FFFが外部SLOTタイミング(用途不明)
・#3-2の7FF0-7FFFが外部SLOTタイミング(主にFDC)
・#3-3の7FF8がメモリ無しタイミング(パナマッパー読み込み)
です。なので、#0-3にもなにかメモリマップドIOの機能がありそうな気がします。
また、パナマッパーの読み込みがメモリ無しタイミング同等となっています。
このアドレスについては、マッパーレジスタを設定することで読み出し可能となる(#3-3のINIT内で初期化しているので、BASICが起動したときには初期化済み)のですが、マッパー読み出し不可設定とした場合にどうなるか確認したところ、内蔵ROMアクセス同様となりました。 つまり、パナマッパーの設定により、動的にウェイトが変化します。
とすると、7FF8同様に、7FF0-7FF9も読み取り可能にできるので、その場合にどうなるかも調べてたところ、7FF0-7FF9も7FF8同等タイミングでの読み取りに変化しました。
ということは、パナマッパーはかなり細かくウェイトが制御されることがわかります。
そうするとそもそもpanasonicマッパーは選択したバンクによりウェイトの入り方が変わるのではないかという可能性がでてくるので、こちらも調べてみました。
pana bank+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
000226822692263225C225C225C226222692269226A2263225C225D225C22632269
010226822692263225C225D225C22642268226922692261225D225C225D22652269
020226A2269225F225D225C225F22682268226A2264225C225D225C2263226A2269
030226A2261225C225B225E2266226922692265225D225D225B226222682269226A
0402262225C225D225D2266226A22682266225D225C225C22622269226922692262
050225C225C225D2265226922692266225E225C225C22622269226A22682260225C
060225C225E22662269226A2264225C225B225B2264226A22692267225F225C225C
070225F2267226922692262225C225C225D2265226922692266225D225B225C2263
0802269226A22692261225C225C22602269226922692262225C225B225E22682268
0901C241C131C1A1C281C1C1C131C231C251C141C191C281C1E1C131C211C271C15
0A0225C2260226A2269226A2261225C225C225F2268226A226A2262225C225C225F
0B022672269226A2263225C225C225D2267226922692264225C225C225D2267226A
0C0226A2265225B225C225C2265226A22692264225C225C225D2266226A226A2265
0D0225C225B225C22652269226A2265225C225B225C2265226A226A2265225C225C
0E0225B2263226922692266225D225C225C22642269226A2266225C225B225C2266
0F0226A226A2265225B225B225D22662269226B2263225B225C225E2267226A226A
1002263225B225C225F2268226922692262225B225B22602269226922692260225B
110225B2261226B226A2268225F225C225C2263226A226A2266225C225C225C2266
1202269226A2264225B225C225E2268226A226A2260225C225B22612269226A2268
1302260225B225C22642269226A2265225C225B225D22672269226A2262225B225C
140225F2268226A22692261225B225C2263226A226A2266225C225C225D22672269
150226A2262225B225B22602269226A2268225E225B225C2265226A22692264225C
160225C225E2268226A226A2260225B225B2263226A22692265225C225B225E2268
1702269226A2261225C225B2262226B226A2266225C225B225E2268226A226A225F
1801F351F3E1F451F3D1F361F391F441F431F391F351F401F441F3D1F351F3B1F44
1901F3F1F371F391F441F441F391F351F3F1F441F3D1F351F3B1F441F421F371F37
1A01F431F441F381F351F3F1F441F3D1F361F391F441F431F391F361F3F1F451F3E
1B01F361F3D1F441F401F361F371F431F441F3A1F351F3E1F441F3E1F351F391F44
1C01F411F361F371F431F441F3A1F351F3E1F451F3E1F351F381F431F441F3A1F36
1D01F411F441F3B1F361F3C1F441F411F361F361F411F441F3C1F351F3C1F441F40
1E01F371F3A1F441F431F371F361F401F451F3C1F361F3B1F441F411F371F371F41
1F01F441F381F361F3F1F441F3D1F361F3A1F451F441F391F361F3F1F441F3E1F36
ちなみに#3-3のpanasonicマッパーは、漢ROMを除いたすべてのROM(BIOS等)がアクセス可能なほか、DRAMへの直接アクセスも可能です。
この結果から、DRAMを表に出した場合(bank:180-1FF)、アクセス速度が変わり、他のDRAMアクセス同様(緑色系)となります。
また、MAIN-ROM(BIOS)を出した場合にもROM-WAIT(青色系)のままとなり、DRAMモードでもDRAMサイクルになるようなことはありません。
※BIOSがコピーされたDRAMを書き換えた後、DRAMモードに切り替えても、書き換え前のROMイメージが見えるので、
DRAMではなく確実にROMが読み出されています。
同様に、SRAM(80-83)を表に出した場合も、ROM WAIT(青色系)のままでした。84-8Fは未使用ですが、ROM-WAITタイミングとなるようです。
また、未使用領域(90-9F)についてはメモリ無し(赤色系)となっています。

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