MSX Datapack wiki化計画

2章 システム構成

 この章では、新CPUのR800をはじめとした、MSX turbo Rのハードウェア構成を説明します。

 2.1 基本仕様

 MSX turbo RとMSX2+との基本的な仕様の違いを一覧表で示します。

表1.1 MSX turbo RとMSX2+との概略仕様一覧

MSX turbo R MSX2+
CPUR800相当品
(7.15909MHz)
Z80A相当品
(3.579545MHz)
メモリ ROM 160KB
(MSX BASIC ver.4)
MAIN ROM 32KB
SUB ROM 16KB
漢字ドライバ 32KB
MSX-DOS1 16KB
MSX-DOS1 48KB
MSX-MUSIC 16KB
96KB
(MSX BASIC ver.3)
MAIN ROM 32KB
SUB ROM 16KB
漢字ドライバ 32KB
MSX-DOS1 16KB
(オプション)
(オプション)
RAM 256KB 以上 64KB 以上
VRAM 128KB
画面表示VDP V9958相当品
解像度(最大) 512×212(ノンインタ レース時)
512×424(インタレース時)
表示色(最大) 19268色
ハードウェア
スクロール
縦・横
カセットインターフェイスなし FSK 方式 1200・2400bps
サウンドPSG AY-3-8910相当品
FM音源MSX-AUDIO(オプション)
MSX-MUSIC (オプション)
MIDI MSX-MIDI
(オプション)
なし
キーボード英数、ひらがな、カタカナ、グラフィック文字対応
JIS配列・50音配列対応
フロッピーディスク3.5インチ 2DD
(1DDは読み書き可)
フォーマットMS-DOS2.11準拠
プリンタ8ビットパラレル
セントロニクスインターフェイス準拠
カートリッジスロット カートリッジバスを1つ以上持つ
ROMカートリッジ、拡張バスに対応するスロット
ジョイスティック 2
漢字機能 漢字ROM 第1水準
第2水準(オプション)
漢字入力 単漢字変換(MSX-JE対応)
リアルタイムクロックRP5C01 相当品

 2.2 ハードウェア構成

 MSX turbo Rのハードウェア構成について説明します。

2.2.1 主要LSI

 MSX turbo Rは、主に以下のLSIを使用します。

CPU   R800 相当品 (クロック 7.15909MHz)
Z80A 相当品 (クロック 3.579545MHz)
VDP V9958 相当品
PSG AY-3-8910 相当品
FM音源 MSX-MUSIC (YM2413 相当品)
MIDI MSX-MIDI (i8251 相当品と、i8253 または i8254 相当品)
PPI i8255 相当品
システムIC S1900 相当品

2.2.2 メモリ

 MSX turbo Rは以下のメモリから構成されます。

ROM MSX BASIC ver.480KB
(MAIN ROM 32KB)
(SUB ROM 16KB)
(漢字ドライバ 32KB)
MSX-DOS1 16KB
MSX-DOS2 48KB
MSX-MUSIC 16KB
 
RAM メインRAM 256KB以上(メモリマッパー使用)
VRAM 128KB

2.2.3 ブロック図

 MSX turbo Rのシステム構成をブロック図で説明します。
 MSX turbo Rでは2つのCPU(Z80・R800)を搭載しました。この2つのCPUはプログラムの実行中に、自由に切り替えることができます。片方のCPUが動作しているときは、もう片方はHOLD状態になります。2つのCPUが同時に動作することはありません。

図1.1 MSX turbo Rのブロック図

 S1990は、CPUの切り替えを実現するためのシステムコントロールLSIです。S1990は、その他にメモリやスロットの制御、ウエイト信号の発生、およびI/Oデコードなどのコントロールを行います。

 2.3 スロット構成

 MSX turbo Rでは、スロット構成が標準化されました。これは、メインRAMがR800に直接つながっているか、それともスロットに接続されているかによって、システム性能が大きく変わるためです。また、アプリケーションソフトウェアの開発を容易にする、という目的もあります。
 DOSはMSX-DOS1とMSX-DOS2との両方を搭載しました。スロット3-2のページ1に4枚のローカルなバンクを持って、前の3ページがMSX-DOS2、後ろの1ページがMSX-DOS1となっています。
 システム的には、2つのCPUと2つのDOSとの組み合わせは自由ですが、システムを単純にして、ユーザーの混乱を避けるため、標準的には、

  • Z80とDOS1(Z80モード)
  • R800とDOS2(R800モード)

 という2つの組み合わせをサポートします。
 このモードの切り替えはシステム起動時に、挿入されているカートリッジやディスケットによって、自動的に判断して行われます。

図1.2 MSX turbo Rのスロット構成

 2.4 R800

2.4.1 R800の特徴

 R800はMSX turbo R用に開発されたCPUで、以下のような特徴があります。

1.Z80とオブジェクトコンパチブル
 Z80用に書かれたソフトウェアは、CPUのタイミングに依存する部分を除いて、変更なしに動作します。

2.CPUクロック 7.15909MHz
 命令あたりのクロック数がZ80に比べて大幅に減少しているため、Z80換算では28.63636MHzに相当します(ノーウェイト時)。

3.乗算命令
 8bit×8bit→16bitおよび16bit×16bit→32bitの精度を持つ乗算命令をサポートしました。これにより演算処理速度の大幅な向上が可能です。

4.未定義命令
 Z80では未定義だったIX/IYレジスタの上位・下位8ビットごとのアクセスを正式に保証しました。

 表1.2で、主なインストラクションの動作スピードを示します(MSX turbo Rはノーウェイト時。MSX2+はM1サイクルに1ウエイト入っていることを考慮)。

 2.5 ウエイト

 MSX turbo Rでは、R800は常にノーウェイトで動作しているわけではありません。以下の場合には、ウェイトサイクルが挿入されます。

1.外部スロットをアクセスするとき(3ウェイト)
 外部スロットへアクセスするときには、今までの周辺機器をサポートするために、MSX2+と同じアクセスタイミングでアクセスするように設計されています。

2.内部ROMをアクセスするとき(2ウェイト)
 内部ROMとは、BIOS、BASIC、および内蔵ディスクROMなどのシステムソフトウェアを格納しているROMのことです。ただし、MSX turbo Rは、初期状態では、BIOS、BASIC、SUB ROM、および漢字ドライバの前半の16KB(合計64KB)をメインRAMにコピーして動作するので、ほとんどの場合は、次に述べる3.がウェイトの条件になります。

表1.2 MSX turbo RとMSX2+との動作比較

命令MSX2+ (単位μs) MSX turbo R (単位μs) 倍率
LD r,s1.40 0.14 × 10.0
LD r,(HL)2.23 0.42 × 5.3
LD r,(IX+n)5.87 0.70 × 8.4
PUSH qq 3.35 0.56 × 6.0
LDIR (BC <> 0) 6.43 0.98 × 6.6
ADD A,r1.40 0.14 × 10.0
INC r 1.40 0.14 × 10.0
ADD HL,ss3.35 0.14 × 24.0
INC ss 1.96 0.14 × 14.0
JP 3.07 0.42 × 7.3
JR 3.63 0.42 × 8.7
DJNZ (B <> 0) 3.91 0.42 × 9.3
CALL 5.03 0.84 × 6.0
RET 3.07 0.56 × 5.5
MULTU A,r160 1.96 × 82
MULTUW HL,rr361 5.03 × 71

3.内部DRAMがページブレークを起こしたとき(1ウェイト)
 R800は、「ページアクセスモード」をサポートする、DRAM専用のバスをもっています。そのため、DRAMの性能をフルに引き出すことができます。
 ページアクセスモードとは、アドレスの下位8ビットだけが変化するような連続したメモリアクセスに対して、高速にアクセスすることができるモードです。下位8ビット以外が変化することを「ページブレークを起こした」と表現します。
 ページブレークを起こすのは、平均するとDRAMへの2回のアクセスに1回くらいなので、実質的には約0.5ウェイトで動作することになります。
 ページブレークはDRAMリフレッシュ時にも発生します。R800ではZ80と違って、DRAMリフレッシュ命令の実行とは非同期に行われます。MSX turbo Rでは、リフレッシュは31μs毎に実行され、1回のリフレッシュに280nsかかります。また、ジャンプ命令(相対ジャンプ、絶対ジャンプとも)では、必ずページブレークが発生します。

 そこで、高速化が必要なプログラムでは、以下のような点を注意すればよいことになります。

1.プログラムはRAMに転送する
 ROMカートリッジのプログラムは、高速化が必要な部分をRAMに転送して実行すると、高速に動作します。フロッピーディスクで供給されるプログラムは、必然的にRAM上で動作するので必要ありません。

2.ページブレークを起こさないようにコーディングする
 RAM上で動作させる場合、高速化が必要なループ中では、なるべくCPUのレジスタだけですませて、データメモリへのアクセス(スタックも含む)が少なくなるようにコーディングすると、ページアクセスモードの利点を最大限に生かすことができます。また、ループがxx00H〜xxFFHまでにおさまるようにプログラミングするといっそう効果的です。

3.システムタイマーを使う
 MSX turbo Rでは、前述のようにページブレークやリフレッシュサイクルなどの影響で、MSX2+のように「コーディング段階で命令の実行時間が正確に判る」ことがありません。したがって、MSX turbo Rでも、MSX2+でも動作するようなプログラムを作成するためには、ソフトウェアループでタイミングをとることは勧められません。MSX turbo Rでは、3.91μsでカウントアップするシステムタイマーを搭載しているので、これを利用してタイミングをとって下さい。