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 |
0000 | D926 | D925 | D925 | D925 | D925 | D925 | D926 | D925 | D926 |
4000 | D926 | D925 | D926 | D926 | D926 | D926 | D925 | D926 | D925 |
8000 | D926 | D925 | D925 | D926 | D925 | D925 | D925 | D925 | D926 |
C000 | D926 | D926 | D926 | D926 | D925 | D925 | D925 | D925 | D926 |
FFFF | D925 | D926 | D926 | D925 | D925 | D926 | D926 | D925 | D925 |
CPU MODE 1(R800/ROM) |
address | #0-0 | #0-1 | #0-2 | #0-3 | #2 | #3-0 | #3-1 | #3-2 | #3-3 |
0000 | 2267 | 2580 | 2264 | 1C12 | 2580 | 1F36 | 2260 | 1C29 | 2267 |
4000 | 2269 | 2580 | 2269 | 225D | 2581 | 1F3C | 225C | 2267 | 226A |
8000 | 1C24 | 2581 | 1C27 | 1C25 | 2580 | 1F44 | 225C | 1C16 | 226A |
C000 | 1C14 | 2581 | 2260 | 1C23 | 2580 | 1F42 | 1C1C | 1C16 | 2264 |
FFFF | 2581 | 2581 | 2580 | 2580 | 2580 | 2581 | 2581 | 2581 | 2580 |
CPU MODE 2(R800/DRAM) |
address | #0-0 | #0-1 | #0-2 | #0-3 | #2 | #3-0 | #3-1 | #3-2 | #3-3 |
0000 | 1F3E | 2580 | 226B | 1C1E | 2581 | 1F44 | 1F41 | 1C1C | 225D |
4000 | 1F44 | 2581 | 2269 | 226A | 2580 | 1F40 | 1F44 | 226A | 2266 |
8000 | 1C1D | 2580 | 1C16 | 1C21 | 2580 | 1F36 | 2264 | 1C24 | 226A |
C000 | 1C12 | 2580 | 225B | 1C13 | 2580 | 1F37 | 1C12 | 1C12 | 226A |
FFFF | 2581 | 2581 | 2581 | 2580 | 2580 | 2580 | 2581 | 2581 | 2581 |
考察:
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 |
7FEF | 1F3A | 2580 | 225C | 225E | 2580 | 1F36 | 1F44 | 2265 | 225F |
7FF0 | 1F36 | 2580 | 225C | 2581 | 2580 | 1F3F | 1F43 | 2580 | 225C |
7FF1 | 1F3B | 2580 | 225F | 2580 | 2580 | 1F44 | 1F39 | 2580 | 225B |
7FF2 | 1F43 | 2581 | 2267 | 2580 | 2580 | 1F3F | 1F37 | 2580 | 2261 |
7FF3 | 1F44 | 2580 | 2269 | 2580 | 2580 | 1F36 | 1F3E | 2581 | 2269 |
7FF4 | 1F3B | 2580 | 2269 | 2581 | 2581 | 1F37 | 1F44 | 2580 | 226A |
7FF5 | 1F36 | 2581 | 2267 | 2581 | 2581 | 1F41 | 1F42 | 2581 | 2269 |
7FF6 | 1F3A | 2580 | 225F | 2580 | 2580 | 1F45 | 1F38 | 2581 | 2262 |
7FF7 | 1F43 | 2580 | 225C | 2580 | 2580 | 1F3E | 1F36 | 2581 | 225C |
7FF8 | 1F44 | 2580 | 225C | 2581 | 2580 | 1F36 | 1F3E | 2581 | 1C14 |
7FF9 | 1F3D | 2581 | 225E | 2581 | 2581 | 1F39 | 1F44 | 2580 | 2267 |
7FFA | 1F36 | 2581 | 2267 | 2580 | 2580 | 1F42 | 1F40 | 2581 | 226A |
7FFB | 1F37 | 2581 | 226A | 2580 | 2581 | 1F44 | 1F36 | 2580 | 226A |
7FFC | 1F41 | 2580 | 226A | 2581 | 2580 | 1F3D | 1F36 | 2581 | 2263 |
7FFD | 1F44 | 2580 | 2267 | 2581 | 2581 | 1F36 | 1F40 | 2580 | 225C |
7FFE | 1F3E | 2580 | 225F | 2580 | 2581 | 1F39 | 1F44 | 2580 | 225B |
7FFF | 1F36 | 2580 | 225B | 2580 | 2580 | 1F43 | 1F3F | 2580 | 225C |
先ほどの結果と相違がある個所は、
・#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 |
000 | 2268 | 2269 | 2263 | 225C | 225C | 225C | 2262 | 2269 | 2269 | 226A | 2263 | 225C | 225D | 225C | 2263 | 2269 |
010 | 2268 | 2269 | 2263 | 225C | 225D | 225C | 2264 | 2268 | 2269 | 2269 | 2261 | 225D | 225C | 225D | 2265 | 2269 |
020 | 226A | 2269 | 225F | 225D | 225C | 225F | 2268 | 2268 | 226A | 2264 | 225C | 225D | 225C | 2263 | 226A | 2269 |
030 | 226A | 2261 | 225C | 225B | 225E | 2266 | 2269 | 2269 | 2265 | 225D | 225D | 225B | 2262 | 2268 | 2269 | 226A |
040 | 2262 | 225C | 225D | 225D | 2266 | 226A | 2268 | 2266 | 225D | 225C | 225C | 2262 | 2269 | 2269 | 2269 | 2262 |
050 | 225C | 225C | 225D | 2265 | 2269 | 2269 | 2266 | 225E | 225C | 225C | 2262 | 2269 | 226A | 2268 | 2260 | 225C |
060 | 225C | 225E | 2266 | 2269 | 226A | 2264 | 225C | 225B | 225B | 2264 | 226A | 2269 | 2267 | 225F | 225C | 225C |
070 | 225F | 2267 | 2269 | 2269 | 2262 | 225C | 225C | 225D | 2265 | 2269 | 2269 | 2266 | 225D | 225B | 225C | 2263 |
080 | 2269 | 226A | 2269 | 2261 | 225C | 225C | 2260 | 2269 | 2269 | 2269 | 2262 | 225C | 225B | 225E | 2268 | 2268 |
090 | 1C24 | 1C13 | 1C1A | 1C28 | 1C1C | 1C13 | 1C23 | 1C25 | 1C14 | 1C19 | 1C28 | 1C1E | 1C13 | 1C21 | 1C27 | 1C15 |
0A0 | 225C | 2260 | 226A | 2269 | 226A | 2261 | 225C | 225C | 225F | 2268 | 226A | 226A | 2262 | 225C | 225C | 225F |
0B0 | 2267 | 2269 | 226A | 2263 | 225C | 225C | 225D | 2267 | 2269 | 2269 | 2264 | 225C | 225C | 225D | 2267 | 226A |
0C0 | 226A | 2265 | 225B | 225C | 225C | 2265 | 226A | 2269 | 2264 | 225C | 225C | 225D | 2266 | 226A | 226A | 2265 |
0D0 | 225C | 225B | 225C | 2265 | 2269 | 226A | 2265 | 225C | 225B | 225C | 2265 | 226A | 226A | 2265 | 225C | 225C |
0E0 | 225B | 2263 | 2269 | 2269 | 2266 | 225D | 225C | 225C | 2264 | 2269 | 226A | 2266 | 225C | 225B | 225C | 2266 |
0F0 | 226A | 226A | 2265 | 225B | 225B | 225D | 2266 | 2269 | 226B | 2263 | 225B | 225C | 225E | 2267 | 226A | 226A |
100 | 2263 | 225B | 225C | 225F | 2268 | 2269 | 2269 | 2262 | 225B | 225B | 2260 | 2269 | 2269 | 2269 | 2260 | 225B |
110 | 225B | 2261 | 226B | 226A | 2268 | 225F | 225C | 225C | 2263 | 226A | 226A | 2266 | 225C | 225C | 225C | 2266 |
120 | 2269 | 226A | 2264 | 225B | 225C | 225E | 2268 | 226A | 226A | 2260 | 225C | 225B | 2261 | 2269 | 226A | 2268 |
130 | 2260 | 225B | 225C | 2264 | 2269 | 226A | 2265 | 225C | 225B | 225D | 2267 | 2269 | 226A | 2262 | 225B | 225C |
140 | 225F | 2268 | 226A | 2269 | 2261 | 225B | 225C | 2263 | 226A | 226A | 2266 | 225C | 225C | 225D | 2267 | 2269 |
150 | 226A | 2262 | 225B | 225B | 2260 | 2269 | 226A | 2268 | 225E | 225B | 225C | 2265 | 226A | 2269 | 2264 | 225C |
160 | 225C | 225E | 2268 | 226A | 226A | 2260 | 225B | 225B | 2263 | 226A | 2269 | 2265 | 225C | 225B | 225E | 2268 |
170 | 2269 | 226A | 2261 | 225C | 225B | 2262 | 226B | 226A | 2266 | 225C | 225B | 225E | 2268 | 226A | 226A | 225F |
180 | 1F35 | 1F3E | 1F45 | 1F3D | 1F36 | 1F39 | 1F44 | 1F43 | 1F39 | 1F35 | 1F40 | 1F44 | 1F3D | 1F35 | 1F3B | 1F44 |
190 | 1F3F | 1F37 | 1F39 | 1F44 | 1F44 | 1F39 | 1F35 | 1F3F | 1F44 | 1F3D | 1F35 | 1F3B | 1F44 | 1F42 | 1F37 | 1F37 |
1A0 | 1F43 | 1F44 | 1F38 | 1F35 | 1F3F | 1F44 | 1F3D | 1F36 | 1F39 | 1F44 | 1F43 | 1F39 | 1F36 | 1F3F | 1F45 | 1F3E |
1B0 | 1F36 | 1F3D | 1F44 | 1F40 | 1F36 | 1F37 | 1F43 | 1F44 | 1F3A | 1F35 | 1F3E | 1F44 | 1F3E | 1F35 | 1F39 | 1F44 |
1C0 | 1F41 | 1F36 | 1F37 | 1F43 | 1F44 | 1F3A | 1F35 | 1F3E | 1F45 | 1F3E | 1F35 | 1F38 | 1F43 | 1F44 | 1F3A | 1F36 |
1D0 | 1F41 | 1F44 | 1F3B | 1F36 | 1F3C | 1F44 | 1F41 | 1F36 | 1F36 | 1F41 | 1F44 | 1F3C | 1F35 | 1F3C | 1F44 | 1F40 |
1E0 | 1F37 | 1F3A | 1F44 | 1F43 | 1F37 | 1F36 | 1F40 | 1F45 | 1F3C | 1F36 | 1F3B | 1F44 | 1F41 | 1F37 | 1F37 | 1F41 |
1F0 | 1F44 | 1F38 | 1F36 | 1F3F | 1F44 | 1F3D | 1F36 | 1F3A | 1F45 | 1F44 | 1F39 | 1F36 | 1F3F | 1F44 | 1F3E | 1F36 |
ちなみに#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)についてはメモリ無し(赤色系)となっています。
感想、要望、バグ報告、その他何かありましたら、メールもしくは掲示板にてご連絡ください。
裕之
ホームに戻る