「月刊ASCII1983年8月号P112」の編集履歴(バックアップ)一覧はこちら
「月刊ASCII1983年8月号P112」(2015/05/28 (木) 16:10:22) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*特集&br()ハードウェア編&br()MSX HARDWARE 仕様
MSXシステムのハードウェアは、互換性拡張性を第1に設計されています。先に書いたように、各メーカーは得意な分野でMSXシステムを製品化することが予想され、その上で互換性を持つ必要があります。ハードウェアを固定することは、1つの制約と成り得ます。しかし、ハードウェアとソフトウェアとの上手な組合わせによって、さらに進んだシステムに拡張し、しかも互換性を保っていくことが可能になります。以下にマイクロソフトとアスキーが提案した、MSXシステムのハードウェア仕様を解説します。
*主な仕様
MSXホームパーソナルコンピュータシステムは、CPUにZ80A相当品、CRTCにTMS9918A相当品、PSGとしてAY-3-8910相当品が使用されます。
メモリはMSX BASICの入ったROM32Kbyteと、8Kbyte以上のRAMから構成されます。インターフェイスとしては、カセットインターフェイス、カラービデオ出力、カートリッジスロット、ジョイスティックなどに使用できる汎用入出力ポートがあり、これらの電気的仕様は周辺機器の何れもMSXすべてのシステムに接続可能とするため、統一される必要があります。その他、プリンタポート、フロッピーディスクインターフェイスなどがサポートされます。キーボードは英数、ひらがななどに対応し、配列はJIS配列またはアイウエオ配列の2通りがあります。これはメーカーの判断で指定します。システム構成について、最小構成(必ず装備されなければいけない構成)とソフトウェアサポート範囲を&strong(){図1}に示しました。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic06.png)
&strong(){図1 システム構成}
}
MSXでは、この他にもI/Oアドレス、割り込み、カートリッジ仕様、I/Oファンイン・ファンアウトなどの仕様が定められています。
*CPU
CPUにはZ80A相当品が使用され、基本仕様ではこれですべての処理が行われます。クロックは3.579545MHzで、M1サイクルに1WAITが挿入されます。
割り込みはモード1が用いられ、CRTCのTMS9918A割り込みが出力(1/60秒ごと)とカートリッジバスの割り込み入力との論理ORを取って、Z80AのIRQに接続されます。これにより、インターバル・カウントやスプライト衝突の判断などの処理が行われます。モード1の飛び先である38H番地はROMとなっていますが、ここからRAM内のアドレスをコールさせており、任意の使用も可能になります。なお、NM1(←正:NMI)は使用していません。
*CRTC(CRTコントローラ)
CRTにはTMS9918A相当のLSIを用いています。これは32枚のスプライト画面、16色のカラー表示、256×192ドットのグラフィックなどが可能な画面表示LSIです。表示モードとして、9918のテキストモードを除くグラフィックⅠ/Ⅱ、マルチカラーモードがBASICでサポートされます。但し家庭用テレビへの接続を考慮して、水平方向の左右8画素、計16画素はソフト的に使用しないようにできます。(&strong(){表1})。これは左右の文字欠けを防ぐためです。表示できる文字は&strong(){表2}の通りで、8×8画素構成256種の文字が表示されます。漢字表示はメーカー対応ですが、その標準はMSXに含まれることになります。なお、LSIの詳細については、本号“TMS9918Aマニュアル”を参照して下さい。
#center(){
&strong(){表1 TMS9918Aを用いた画面表示}
|>|CENTER:モード|CENTER:解像度|CENTER:サイズ|CENTER:パターン数|CENTER:色指定|CENTER:動画|CENTER:表示画面|
|グラフィックⅠ|LSI規格|CENTER:256×192|CENTER:8×8|CENTER:256|CENTER:16色|CENTER:可|CENTER:32×24|
|~|使用推奨値|CENTER:240×192|~|~|~|~|CENTER:30×24|
|グラフィックⅡ|LSI規格|CENTER:256×192|CENTER:8×8|CENTER:768|CENTER:16色|CENTER:可|CENTER:32×24|
|~|使用推奨値|CENTER:240×192|~|~|~|~|CENTER:30×24|
|マルチカラー|LSI規格|CENTER:64×48blk|CENTER:4×4&br()1blk当り|-|CENTER:16色|CENTER:可|CENTER:32×24|
|~|使用推奨値|CENTER:60×40blk|~|~|~|~|CENTER:30×24|
|テキスト※|LSI規格|CENTER:256×192|CENTER:8×6|CENTER:256|CENTER:16色のうち&br()2色|CENTER:不可|CENTER:40×24|
|~|使用推奨値|CENTER:240×192|~|~|~|~|~|
使用推奨値:水平方向の左から8画素、右から8画素をソフト的に使用しないこととする。
※テキストモードはBASICではサポートしない。
}
#center(){
&strong(){表2 キャラクタコード表}
|>| |>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|CENTER:上位4ビット|
|~|~|0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|
|CENTER:下&br()位&br()4&br()ビ&br()ッ&br()ト|0| |π| |0|@|P| |p|♠| | |ー|タ|ミ|た|み|
|~|1|月|┴|!|1|A|Q|a|q|♥|あ|。|ア|チ|ム|ち|む|
|~|2|火|┬|”|2|B|R|b|r|♣|い|「|イ|ツ|メ|つ|め|
|~|3|水|┤|#|3|C|S|c|s|♦|う|」|ウ|テ|モ|て|も|
|~|4|木|├|$|4|D|T|d|t|○|え|、|エ|ト|ヤ|と|や|
|~|5|金|┼|%|5|E|U|e|u|●|お|・|オ|ナ|ユ|な|ゆ|
|~|6|土|│|&|6|F|V|f|v|を|か|ヲ|カ|ニ|ヨ|に|よ|
|~|7|日|─|’|7|G|W|g|w|ぁ|き|ァ|キ|ヌ|ラ|ぬ|ら|
|~|8|年|┌|(|8|H|X|h|x|ぃ|く|ィ|ク|ネ|リ|ね|り|
|~|9|円|┐|)|9|I|Y|i|y|ぅ|け|ゥ|ケ|ノ|ル|の|る|
|~|A|時|└|*|:|J|Z|j|z|ぇ|こ|ェ|コ|ハ|レ|は|れ|
|~|B|分|┘|+|;|K|〔|k|{|ぉ|さ|ォ|サ|ヒ|ロ|ひ|ろ|
|~|C|秒|×|,|<|L|¥|l|¦|ゃ|し|ャ|シ|フ|ワ|ふ|わ|
|~|D|百|大|-|=|M|〕|m|}|ゅ|す|ュ|ス|ヘ|ン|へ|ん|
|~|E|千|中|.|>|N|^|n|~|ょ|せ|ョ|セ|ホ|゛|ほ| |
|~|F|万|小|/|?|O|_|o| |っ|そ|ッ|ソ|マ|゜|ま| |
}
*PSG(プログラマブル・サウンド・ジェネレータ)
PSGにはAY-3-8910相当のLSIが使用され、8オクターブの3重和音演奏とノイズの発生が可能です。このLSIの内部には18個のレジスタがあり、3つのトーンジェネレータの発振周波数やエンベロープパターンをソフトウェアで設定できます(&strong(){図2、3}参照)。また2つの8bitポートがあり、このポートはジョイスティック入力などに用いられます(&strong(){表10}参照)。PSGに関するこれ以上の詳しい仕様やアクセス手順などについては、General Instrument社などのマニュアルを参照して下さい。
#center(){
|>| (20)\ (15)BIT&br()REGISTER (5)\|CENTER: (3)B7 (3)|CENTER: (3)B6 (3)|CENTER: (3)B5 (3)|CENTER: (3)B4 (3)|CENTER: (3)B3 (3)|CENTER: (3)B2 (3)|CENTER: (3)B1 (3)|CENTER: (3)B0 (3)|
|CENTER:R0|Channel A Tone Period|>|>|>|>|>|>|>|CENTER:8-BIT Fine Tune A|
|CENTER:R1|~|>|>|>| |>|>|>|CENTER:4-BIT Coarse Tune A|
|CENTER:R2|Channel B Tone Period|>|>|>|>|>|>|>|CENTER:8-BIT Fine Tune B|
|CENTER:R3|~|>|>|>| |>|>|>|CENTER:4-BIT Coarse Tune B|
|CENTER:R4|Channel C Tone Period|>|>|>|>|>|>|>|CENTER:8-BIT Fine Tune C|
|CENTER:R5|~|>|>|>| |>|>|>|CENTER:4-BIT Coarse Tune C|
|CENTER:R6|Noise Period|>|>| |>|>|>|>|CENTER:5-BIT Period Control|
|CENTER:R7|&font(o){Enable}|>|CENTER:&font(o){IN}/OUT|>|>|CENTER:&font(o){Noise}|>|>|CENTER:&font(o){Tone}|
|~|~|CENTER:IOB|CENTER:IOA|CENTER:C|CENTER:B|CENTER:A|CENTER:C|CENTER:B|CENTER:A|
|CENTER:R10|Channel A Amplitude|>|>| |CENTER:M|CENTER:L3|CENTER:L2|CENTER:L1|CENTER:L0|
|CENTER:R11|Channel B Amplitude|>|>| |CENTER:M|CENTER:L3|CENTER:L2|CENTER:L1|CENTER:L0|
|CENTER:R12|Channel C Amplitude|>|>| |CENTER:M|CENTER:L3|CENTER:L2|CENTER:L1|CENTER:L0|
|CENTER:R13|Envelope Period|>|>|>|>|>|>|>|CENTER:8-BIT Fine Tune E|
|CENTER:R14|~|>|>|>|>|>|>|>|CENTER:8-BIT Coarse Tune E|
|CENTER:R15|EnvelopeShape/Cycle|>|>|>| |CENTER:CONT|CENTER:ATT|CENTER:ALT|CENTER:HOLD|
|CENTER:R16|I/O Port A Data Store|>|>|>|>|>|>|>|CENTER:8-BIT PARALLEL I/O on Port A|
|CENTER:R17|I/O Port B Data Store|>|>|>|>|>|>|>|CENTER:8-BIT PARALLEL I/O on Port B|
&strong(){図2 AY-3-8910のレジスタ構成}
}
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic20.png)
&strong(){図3 AY-3-8910のエンベロープ波形}
}
音出力は、PSGとは別にソフトウェアによる1bitポート音出力も用意され、i8255相当品のCポートに出力します。8255は、この他スロットセレクトやキーボードスキャン信号などに使われます。なお、PSGの出力信号レベルは-5dbm、RCA2ピンコネクタ出力が標準となります。
*キーボード
キーボードの配列にはJIS標準配列とアイウエオ配列の2種類の仕様があります。これはジャンパによるソフトウェアの切り替えで、BASIC自身は両方のキースキャン用変換テーブルを内蔵しています。キートップは72個で、JIS配列のレイアウトを&strong(){図4}に示します。CAPSLOCK、カナにはロック表示ランプがあり、SELECTキーはアプリケーションプログラムで使用されます。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic18.png)
&strong(){図4 JIS標準によるキーレイアウト(例)}
}
キーボードモードには、英数字大、英小文字、カタカナ、ひらがなの4つがあり、これとグラフィックキーによる入力が可能になっています。モードの切り替えは、シフトキーとカナキー、キャピタルロックキーによります。カナキーとキャピタルロックキーは一度押すごとにモードが反転します。電源投入時(リセット復帰時)は英小文字モードとなります。
*インターフェイス
**カセットインターフェイス
信号の種類とピンコネクションを&strong(){表3}に示します。コネクタはDIN45326の8ピンタイプでリモート機能をサポートします。FSK変調、調歩同期(非同期)方式をとり、転送レートのデフォルトは1200baud(1200Hz 1波…0、2400Hz 2波…1)です。また2400baud(2400Hz 1波…0、4800Hz 2波…1)も仕様に含まれますが、これは信頼性をあげるため使用するカセットレコーダの機種指定が必要となります。入力はカセット側のイヤホン端子に、出力はマイクロフォン端子に接続します。
#center(){
&strong(){表3 カセットインターフェイスの信号接続}
|CENTER:端子番号|CENTER:信号名|CENTER:方向|CENTER:ピンコネクション|
|CENTER:1|CENTER:GND|CENTER:-|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic07.png)|
|CENTER:2|CENTER:GND|CENTER:-|~|
|CENTER:3|CENTER:GND|CENTER:-|~|
|CENTER:4|CENTER:CMTOUT|CENTER:出力|~|
|CENTER:5|CENTER:CMTIN|CENTER:入力|~|
|CENTER:6|CENTER:REM+|CENTER:出力|~|
|CENTER:7|CENTER:REM-|CENTER:出力|~|
|CENTER:8|CENTER:GND|CENTER:-|~|
}
**汎用入出力ポート
このポートはAY-3-8910相当品の汎用ポートを使用し、入力4bit、出力1bit、双方向2bitとなっています。レベルは正論理TTLレベルで、2ポートまでサポートされます。コネクタはAMP9ピンタイプで、主にジョイスティックなどに使用されることになります。その他トラックボールやマウスなどのポインティングデバイスや、アプリケーションソフトウェアのサポートによって簡単なI/O装置の接続が可能でしょう。信号名とピンコネクションを&strong(){表4}に示します。
#center(){
&strong(){表4 汎用入出力ポートの信号接続}
|CENTER:端子番号|CENTER:信号名|CENTER:方向|CENTER:ピンコネクション|
|CENTER:1|CENTER:FWD|CENTER:入力|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic12.png)|
|CENTER:2|CENTER:BACK|CENTER:入力|~|
|CENTER:3|CENTER:LEFT|CENTER:入力|~|
|CENTER:4|CENTER:RIGHT|CENTER:入力|~|
|CENTER:5|CENTER:+5V|CENTER:-|~|
|CENTER:6|CENTER:TRG1|CENTER:出力|~|
|CENTER:7|CENTER:TRG2|CENTER:出力|~|
|CENTER:8|CENTER:出力|CENTER:出力|~|
|CENTER:9|CENTER:GND|CENTER:-|~|
}
**ビデオ出力インターフェイス
ビデオ出力にはコンポジット信号、RF変調信号、RGB出力信号が考えられます。この内コンポジット信号とRF信号の出力はDIN5ピンコネクタより行われます。信号名とピンコネクションを&strong(){表5}に示します。
#center(){
&strong(){表5 ビデオ出力の信号接続}
|CENTER:端子番号|CENTER:信号名|CENTER:ピンコネクション|
|CENTER:1|CENTER:+5V|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic13.png)|
|CENTER:2|CENTER:GND|~|
|CENTER:3|CENTER:AUDIO|~|
|CENTER:4|CENTER:MONITOR VIDEO|~|
|CENTER:5|CENTER:RF VIDEO|~|
}
**プリンタインターフェイス
パラレルポートですが、最小システムでは付属しない場合もあります。レベルはTTLレベル、BUSYとSTROBE信号によるハンドシェークでデータの出力が行われます。信号名とピンコネクションを&strong(){表6}に示します。
#center(){
&strong(){表6 プリンタコネクタの信号接続}
|CENTER:端子番号|CENTER:信号名|CENTER:ピンコネクション|
|CENTER:1|CENTER:&font(o){PSTB}|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic14.png)|
|CENTER:2|CENTER:PDB0|~|
|CENTER:3|CENTER:PDB1|~|
|CENTER:4|CENTER:PDB2|~|
|CENTER:5|CENTER:PDB3|~|
|CENTER:6|CENTER:PDB4|~|
|CENTER:7|CENTER:PDB5|~|
|CENTER:8|CENTER:PDB6|~|
|CENTER:9|CENTER:PDB7|~|
|CENTER:10|CENTER:NC|~|
|CENTER:11|CENTER:BUSY|~|
|CENTER:12|CENTER:NC|~|
|CENTER:13|CENTER:NC|~|
|CENTER:14|CENTER:GND|~|
}
**フロッピーディスクインターフェイス
フロッピーディスク用のインターフェイスは各社対応となりますが、プログラム仕様はMSXに含まれます。ディスクのフォーマットは、片面倍密度、両面倍密度などのメディアごとに定められます。フロッピーディスクインターフェイスは、カートリッジスロットコネクタから接続されます。
*カートリッジ仕様
カートリッジスロットコネクタは本体的に最小一つ、最大3つまでサポートされます。また拡張カートリッジスロット(本体スロットコネクタより拡張)で4スロット、合計6スロットまでサポートしています。接続信号を&strong(){表7}、その説明を&strong(){表8}に示します。電圧レベルはTTLレベルで、ファンイン・ファンアウトの接続条件は&strong(){図5}の通りとなります。なお、電源容量は+5Vが300mA/スロット、+12Vと-12Vがそれぞれ50mAとなっています。
#center(){
&strong(){表7 カートリッジバスの信号接続}
|CENTER:ピン&br()No.|CENTER:名称|CENTER:I/O※1||CENTER:ピン&br()No.|CENTER:名称|CENTER:I/O※1|
|CENTER:1|&font(o){CS1}|CENTER:O||CENTER:2|&font(o){CS2}|CENTER:O|
|CENTER:3|&font(o){CS12}|CENTER:O||CENTER:4|&font(o){SLTSL}|CENTER:O|
|CENTER:5|予備※2|CENTER:-||CENTER:6|&font(o){RFSH}|CENTER:O|
|CENTER:7|&font(o){WAIT}|CENTER:I||CENTER:8|&font(o){INT}※3|CENTER:I|
|CENTER:9|&font(o){M1}|CENTER:O||CENTER:10|&font(o){BUSDIR}|CENTER:I|
|CENTER:11|&font(o){IORQ}|CENTER:O||CENTER:12|&font(o){MERQ}|CENTER:O|
|CENTER:13|&font(o){WR}|CENTER:O||CENTER:14|&font(o){RD}|CENTER:O|
|CENTER:15|&font(o){RESET}|CENTER:O||CENTER:16|予備※2|CENTER:-|
|CENTER:17|A9|CENTER:O||CENTER:18|A15|CENTER:O|
|CENTER:19|A11|CENTER:O||CENTER:20|A10|CENTER:O|
|CENTER:21|A7|CENTER:O||CENTER:22|A6|CENTER:O|
|CENTER:23|A12|CENTER:O||CENTER:24|A8|CENTER:O|
|CENTER:25|A14|CENTER:O||CENTER:26|A13|CENTER:O|
|CENTER:27|A1|CENTER:O||CENTER:28|A0|CENTER:O|
|CENTER:29|A3|CENTER:O||CENTER:30|A2|CENTER:O|
|CENTER:31|A5|CENTER:O||CENTER:32|A4|CENTER:O|
|CENTER:33|D1|CENTER:I/O||CENTER:34|D0|CENTER:I/O|
|CENTER:35|D3|CENTER:I/O||CENTER:36|D2|CENTER:I/O|
|CENTER:37|D5|CENTER:I/O||CENTER:38|D4|CENTER:I/O|
|CENTER:39|D7|CENTER:I/O||CENTER:40|D6|CENTER:I/O|
|CENTER:41|GND|CENTER:-||CENTER:42|CLOCK|CENTER:O|
|CENTER:43|GND|CENTER:-||CENTER:44|SW1|CENTER:-|
|CENTER:45|+5V|CENTER:-||CENTER:46|SW2|CENTER:-|
|CENTER:47|+5V|CENTER:-||CENTER:48|+12V|CENTER:-|
|CENTER:49|SUNDIN|CENTER:I||CENTER:50|-12V|CENTER:-|
※1 本体を基準にした入出力の区別
※2 予備は使用禁止端子
※3 オープンコレクタ出力
}
#center(){
&strong(){表8 カートリッジバスの内容}
|CENTER:ピンNo.|CENTER:名称|CENTER:内容|
|CENTER:1|&font(o){CS1}|ROM 4000H~7FFFH番地セレクト信号|
|CENTER:2|&font(o){CS2}|ROM 4000H~BFFFH番地セレクト信号|
|CENTER:3|&font(o){CS12}|ROM 4000H~BFFFH番地セレクト信号(256k ROM用)|
|CENTER:4|&font(o){SLTSL}|スロットセレクタ信号、各スロット毎にそのスロット固有のセレクト信号を印加する|
|CENTER:5|予備|将来のための予備信号線(使用禁止)|
|CENTER:6|&font(o){RFSH}|リフレッシュサイクル信号|
|CENTER:7|&font(o){WAIT}|CPUへのWAIT要求信号(本体内部でのタイミングを取ること)|
|CENTER:8|&font(o){INT}|CPUへの割り込み要求信号|
|CENTER:9|&font(o){M1}|CPUへのフェッチサイクルを表す信号|
|CENTER:10|&font(o){BUSDIR}|外部データバスバッファの方向を制御する信号&br()カートリッジがセレクトされ、データを送出するタイミングでメモリを除く各カートリッジよりLレベルを出力する(詳細は付録参照)|
|CENTER:11|&font(o){IORQ}|I/Oのリクエスト信号|
|CENTER:12|&font(o){MERQ}|メモリリクエスト信号|
|CENTER:13|&font(o){WR}|ライトタイミング信号|
|CENTER:14|&font(o){RD}|リードタイミング信号|
|CENTER:15|&font(o){RESET}|システムリセット信号|
|CENTER:16|予備|将来のための予備信号線(使用禁止)|
|CENTER:17~32|A0~A15|アドレスバス信号|
|CENTER:33~40|D1~D7|データバス信号|
|CENTER:41|GND|信号グランド|
|CENTER:42|CLOCK|CPUクロック(3.579545MHz)|
|CENTER:43|GND|信号グランド|
|CENTER:44,46|SW1,2|抜差プロテクト用|
|CENTER:45,47|+5V|+5V電源|
|CENTER:48|+12V|+12V電源|
|CENTER:49|SUNDIN|サウンド入力信号(-5dbm)|
|CENTER:50|-12V|-12V電源|
}
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic10.png)
&strong(){図5 カートリッジのファンイン・ファンアウト条件}
}
標準カートリッジの外形を&strong(){図6}に示しています。正面コネクタ左側に貫通穴があり“MSX”のロゴが入っているのが特徴となります。また逆挿入防止用の切り欠きが、コネクタ開口部横に設けられます。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic11.png)
&strong(){図6 標準カートリッジの外形}
}
*スロットの概念
MSXの使用で使われる“スロット”は、64KbyteのCPUメモリ空間を構成する点でメモリバンクという概念に近いものです。しかし、CPUが番号を指定してメモリブロックを選択することができる点で、カートリッジを挿入するスロットに近いという“スロット”という名称を使用しています。
またカートリッジバス上のスロットを選択する信号は、スロットセレクト信号と呼ぶのが自然といえるでしょう。
従来のように共通バス構造で複数個のメモリバンクを持つ場合、各デバイスに接続される選択信号に区別がないため、同時に同じアドレス空間をもつ複数個のカートリッジがバスに接続されると信号の衝突が起こります。これはシステムが動かないだけでなく、ハードウェアの劣化を招くことになります。
しかしMSXシステムでは、スロットセレクト信号により各デバイスが別個に選択されるため、以上のような問題が起こることはありません。さらに同一のアドレス空間を占めるソフトウェアをカートリッジスロットに同時に存在できることから、システムの柔軟性・拡張性を高めることができます(&strong(){図7}参照)。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic17.png)
&strong(){図7 MSXシステムのメモリマップ}
}
このような理由でスロットが分けられ、実際にBASICの入ったROMとシステムRAMはスロットの一つ(スロット0)に接続され、ほかのスロットがコネクタを通じで外部に拡張されることになります。従ってスロットは、最小構成でもシステム用とカートリッジ用の2つが存在することになり、標準構成では4スロットとなります。なお、スロットの概念はソフトウェアから見たもので実際のハードウェアがいくつのカートリッジスロットを持つか、スロットコネクタを通しているか否かは関知していません。
*MSXシステムの拡張
MSXシステムは、基本仕様の拡張に備えていくつかの拡張用機能を備えています。これらは、MSXマシンを使用するユーザーが特に意識する必要はありませんが、MSXの特徴の一つであるため以下に説明します。
MSXシステムのメモリは、BASICの入ったROM32Kbyteと、8Kbyte以上のRAMで構成されます。このうちRAMは、FFFFH番地より8000H番地に向かって実装されている最も広い領域を、システムのRAM領域とします。このRAMは、拡張スロットを含むどのスロットに実装されていても構いません。メモリマップを&strong(){図7}に示します。
64Kbyteのメモリ空間はメモリマップのように4つに区分され、スロットセレクトレジスタより16Kbyteのページごとに任意のスロットから選んでメモリが配置されます。このように、メモリは16Kbyteごとに選択、配置されることになります。ただし、はじめに8KbyteのRAMが高位番地(E000H~FFFFH)に位置しているシステムの場合、スロットから8KbyteのRAMを追加して16Kbyteにすることはできません。またこの8Kbyteの実装時に、メモリ空間の2(8000H~C000H)にRAMを拡張することもできません。メモリは連続して配置される必要があります。但し、その8KbyteのRAMを使用せず、外部に16Kbyte/32KbyteのRAMを拡張することは可能です。
また、MSX BASICは8000H~FFFFHまでのRAMしか使用しないため、64KbyteRAMを用いて0000H~FFFFHまでのメモリを追加しても、0000H~7FFFHのアドレスにあるメモリは使用できません。
*カートリッジスロットの拡張
スロットの拡張は、基本構成のスロットから行われます。従って、拡張スロットを用いると、基本構成のスロットの数は1つ減ることになります。
拡張スロットの選択は、まず拡張スロットが接続されている基本スロットが選択され、さらに拡張スロットを選択することになります。ただし、基本スロットを禁止する方法をシステムが持っている場合は、この限りではありません。
ところで、拡張スロットに接続されるカートリッジのスロットセレクト信号を作成するため、拡張スロットのメモリアドレスFFFFHにスロットセレクトレジスタを置きます。このレジスタはRAMと区別するため、レジスタの内容を読み出すと、レジスタの内容のコンプリメントが読み出されるようにします。これにより、基本スロットの1から3のどのスロットから、あるいは2つ以上のスロットから、拡張スロットを設けることができるようになります(&strong(){図8})。MSX BASICでは、拡張スロット1つまでをサポートします。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic16.png)
&strong(){図8 拡張スロットセレクト信号作成回路例}
}
一方、バッファなしで接続できるスロットの数は4つまでです。これは先に説明したファンアウトからの制約によるものです。従って、5つ以上のスロットを用意する場合は、カートリッジバスにバッファを入れなければなりません。
この拡張されたバスのデータバッファの入出力方向をコントロールするのがBUSIR信号です(&strong(){表7,8}参照)。但し、メモリだけを内蔵したカートリッジでは、スロットセレクト信号(SLTSL)、メモリクエスト信号(MREQ)、リード/ライト信号(RD/WR)によりデータバスの方向を決めることができ、BUSDIR信号は不要となります。
この信号が必要となるのは、CPUに信号を送る、すなわちCPUの入力命令に対して応答しなければならないような入力デバイスや、モード2の割り込みにおいてベクトルアドレスをCPUに知らせるようなデバイスを持ったカートリッジなどです。これらはCOUにデータを送るタイミングに合わせてBUSDIR信号をLレベルにし、拡張されたデータバッファの方向をCPU方向に変えてやらなければなりません。拡張カートリッジの回路例を&strong(){図9}に示します。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic15.png)
&strong(){図9 拡張スロット回路例}
}
*I/Oの拡張
MSXシステムのI/Oマップ、及びこれを使用するPSG、PPIのビット割り当てを&strong(){表9~11}に示します。
#center(){
&strong(){表9 MSXシステムのI/Oアドレス割り当て}
|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic19.png)|CENTER:IO ADR|CENTER:R/W|CENTER:内容|CENTER:備考|
|~|CENTER:&H98&br()&br()&H99&br() &br()|CENTER:W&br()R&br()W&br()R|V-RAMへのデータライト&br()V-RAMからのデータリード&br()コマンド、アドレスセット&br()ステータスリード|9918A&br()相当品|
|~|CENTER:&HA0&br()&HA1&br()&HA2|CENTER:W&br()W&br()R|アドレスラッチ&br()データライト&br()データリード|AY-3-8910&br()相当品|
|~|CENTER:&HA8&br()&br()&HA9&br()&br()&HAA&br()&br()&HAB&br()&br()|CENTER:W&br()R&br()W&br()R&br()W&br()R&br()W&br()|ポートAデータライト&br()ポートAデータリード&br()ポートBデータライト&br()ボートBデータリード&br()ポートCデータライト&br()ポートCデータリード&br()モードセット|8255A&br()相当品|
|~|CENTER:&H90&br()&br()&H91|CENTER:W&br()R&br()W|ストローブ出力(b0)&br()ステータス入力(b1)&br()プリントデータ|ラッチ出力&br()BUSYで1&br()ラッチ出力|
}
#center(){
&strong(){表10 PSGのビット割り当て}
|CENTER:ポート|CENTER:ビット|CENTER:I/O|CENTER:接続コネクターピン番号|CENTER:ジョイスティック使用時の信号|
|CENTER:A&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()|CENTER:0&br()&br()1&br()&br()2&br()&br()3&br()&br()4&br()&br()5&br()&br()6&br()7|CENTER:入&br()力|J3-1ピン※1&br()J4-1ピン※2&br()J3-2ピン※1&br()J4-2ピン※2&br()J3-3ピン※1&br()J4-3ピン※2&br()J3-4ピン※1&br()J4-4ピン※2&br()J3-6ピン※1&br()J4-6ピン※2&br()J3-7ピン※1&br()J4-7ピン※2&br()キー配列指定入力※4&br()CSAR(カセットテープのリード)|FWD1&br()FWD2&br()BACK1&br()BACK2&br()LEFT1&br()LEFT2&br()RIGHT1&br()RIGHT2&br()TRGA1&br()TRGA2&br()TRGB1&br()TRGB2&br()"H"/"L"レベル&br()&br()|
|CENTER:B&br()&br()&br()&br()&br()&br()&br()&br()|CENTER:0&br()1&br()2&br()3&br()4&br()5&br()6&br()7|CENTER:出&br()力|J3-6ピン※3&br()J3-7ピン※3&br()J4-6ピン※3&br()J4-7ピン※3&br()J3-8ピン&br()J4-8ピン&br()ポートA入力セレクト&br()KLAMP(カナランプ信号"L"で点燈)|"H"レベル&br()"H"レベル&br()"H"レベル&br()"H"レベル&br()&br()&br()&br()&br()|
※1 ポートBのビット6が"L"レベル時有効、ジョイスティック1用
※2 ポートBのビット6が"H"レベル時有効、ジョイスティック2用
※3 出力ポートとして使用しない時は"H"レベルにすること。オープンコネクタ・バッファを介して出力する
※4 JIS配列→"H"レベル、あいうえお配列→"L"レベル
}
#center(){
&strong(){表11 PPIビット割り当て}
|CENTER:ポート|CENTER:ビット|CENTER:I/O|CENTER:信号名|CENTER:内容|
|CENTER:A&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()|CENTER:0&br()1|CENTER:出&br()力|CENTER:CS0L&br()CS0H|0000H-3FFFH番地のスロット指定信号|
|~|CENTER:2&br()3|~|CENTER:CS1L&br()CS1H|4000H-7FFFH番地のスロット指定信号|
|~|CENTER:4&br()5|~|CENTER:CS2L&br()CS2H|8000H-BFFFH番地のスロット指定信号|
|~|CENTER:6&br()7|~|CENTER:CS3L&br()CS3H|C000H-FFFFH番地のスロット指定信号|
|CENTER:B&br()&br()&br()|CENTER:0&br()∫&br()7|CENTER:入&br()力||キーボードリターン記号|
|CENTER:C&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()|CENTER:0&br()1&br()2&br()3|CENTER:出&br()力|CENTER:KB0&br()KB1&br()KB2&br()KB3|キーボードスキャン信号|
|~|CENTER:4|~|CENTER:CASON|カセットコントロール(LでON)|
|~|CENTER:5|~|CENTER:CASW|カセット書き込み信号|
|~|CENTER:6|~|CENTER:CAPS|CAPSランプ信号(Lで点燈)|
|~|CENTER:7|~|CENTER:SOUND|ソフトによるサウンド出力|
}
MSXではあらかじめ規定されていないI/O装置を追加する場合、I/Oアドレスは原則としてメモリマップドI/O方式が取られます。I/Oアドレスの00Hから7FHまでは規定されていないため、使用することが可能となるのですが、規定されていないがために他の装置と同じI/Oアドレスを割り当ててしまい、I/Oカートリッジの組合せによってポート信号の衝突が起こってしまいます。これに対して、I/Oアドレスをメモリアドレス上に取れば、例え同じアドレスが設定されてもスロットセレクト信号により他の装置と区別でき、I/Oバス競合などの心配がなくなります。
以上でMSXシステムのハードウェア解説を終わりますが、MSXシステムの優れた拡張性・互換性を理解していただけたと思います、なお、これらは、ソフトウェアとの関連などにより、最終仕様で変更される場合も考えられます。今後の月刊アスキーによる関連記事や、当社出版物を参照いただくようお願い致します。
月刊ASCII1983年8月号(通巻74号)P112~P117 特集記事より転載
----
*特集&br()ハードウェア編&br()MSX HARDWARE 仕様
MSXシステムのハードウェアは、互換性拡張性を第1に設計されています。先に書いたように、各メーカーは得意な分野でMSXシステムを製品化することが予想され、その上で互換性を持つ必要があります。ハードウェアを固定することは、1つの制約と成り得ます。しかし、ハードウェアとソフトウェアとの上手な組合わせによって、さらに進んだシステムに拡張し、しかも互換性を保っていくことが可能になります。以下にマイクロソフトとアスキーが提案した、MSXシステムのハードウェア仕様を解説します。
*主な仕様
MSXホームパーソナルコンピュータシステムは、CPUにZ80A相当品、CRTCにTMS9918A相当品、PSGとしてAY-3-8910相当品が使用されます。
メモリはMSX BASICの入ったROM32Kbyteと、8Kbyte以上のRAMから構成されます。インターフェイスとしては、カセットインターフェイス、カラービデオ出力、カートリッジスロット、ジョイスティックなどに使用できる汎用入出力ポートがあり、これらの電気的仕様は周辺機器の何れもMSXすべてのシステムに接続可能とするため、統一される必要があります。その他、プリンタポート、フロッピーディスクインターフェイスなどがサポートされます。キーボードは英数、ひらがななどに対応し、配列はJIS配列またはアイウエオ配列の2通りがあります。これはメーカーの判断で指定します。システム構成について、最小構成(必ず装備されなければいけない構成)とソフトウェアサポート範囲を&strong(){図1}に示しました。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic06.png)
&strong(){図1 システム構成}
}
MSXでは、この他にもI/Oアドレス、割り込み、カートリッジ仕様、I/Oファンイン・ファンアウトなどの仕様が定められています。
*CPU
CPUにはZ80A相当品が使用され、基本仕様ではこれですべての処理が行われます。クロックは3.579545MHzで、M1サイクルに1WAITが挿入されます。
割り込みはモード1が用いられ、CRTCのTMS9918A割り込みが出力(1/60秒ごと)とカートリッジバスの割り込み入力との論理ORを取って、Z80AのIRQに接続されます。これにより、インターバル・カウントやスプライト衝突の判断などの処理が行われます。モード1の飛び先である38H番地はROMとなっていますが、ここからRAM内のアドレスをコールさせており、任意の使用も可能になります。なお、NM1(←正:NMI)は使用していません。
*CRTC(CRTコントローラ)
CRTにはTMS9918A相当のLSIを用いています。これは32枚のスプライト画面、16色のカラー表示、256×192ドットのグラフィックなどが可能な画面表示LSIです。表示モードとして、9918のテキストモードを除くグラフィックⅠ/Ⅱ、マルチカラーモードがBASICでサポートされます。但し家庭用テレビへの接続を考慮して、水平方向の左右8画素、計16画素はソフト的に使用しないようにできます。(&strong(){表1})。これは左右の文字欠けを防ぐためです。表示できる文字は&strong(){表2}の通りで、8×8画素構成256種の文字が表示されます。漢字表示はメーカー対応ですが、その標準はMSXに含まれることになります。なお、LSIの詳細については、本号“TMS9918Aマニュアル”を参照して下さい。
#center(){
&strong(){表1 TMS9918Aを用いた画面表示}
|>|CENTER:モード|CENTER:解像度|CENTER:サイズ|CENTER:パターン数|CENTER:色指定|CENTER:動画|CENTER:表示画面|
|グラフィックⅠ|LSI規格|CENTER:256×192|CENTER:8×8|CENTER:256|CENTER:16色|CENTER:可|CENTER:32×24|
|~|使用推奨値|CENTER:240×192|~|~|~|~|CENTER:30×24|
|グラフィックⅡ|LSI規格|CENTER:256×192|CENTER:8×8|CENTER:768|CENTER:16色|CENTER:可|CENTER:32×24|
|~|使用推奨値|CENTER:240×192|~|~|~|~|CENTER:30×24|
|マルチカラー|LSI規格|CENTER:64×48blk|CENTER:4×4&br()1blk当り|-|CENTER:16色|CENTER:可|CENTER:32×24|
|~|使用推奨値|CENTER:60×40blk|~|~|~|~|CENTER:30×24|
|テキスト※|LSI規格|CENTER:256×192|CENTER:8×6|CENTER:256|CENTER:16色のうち&br()2色|CENTER:不可|CENTER:40×24|
|~|使用推奨値|CENTER:240×192|~|~|~|~|~|
使用推奨値:水平方向の左から8画素、右から8画素をソフト的に使用しないこととする。
※テキストモードはBASICではサポートしない。
}
#center(){
&strong(){表2 キャラクタコード表}
|>| |>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|CENTER:上位4ビット|
|~|~|0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|
|CENTER:下&br()位&br()4&br()ビ&br()ッ&br()ト|0| |π| |0|@|P| |p|♠| | |ー|タ|ミ|た|み|
|~|1|月|┴|!|1|A|Q|a|q|♥|あ|。|ア|チ|ム|ち|む|
|~|2|火|┬|”|2|B|R|b|r|♣|い|「|イ|ツ|メ|つ|め|
|~|3|水|┤|#|3|C|S|c|s|♦|う|」|ウ|テ|モ|て|も|
|~|4|木|├|$|4|D|T|d|t|○|え|、|エ|ト|ヤ|と|や|
|~|5|金|┼|%|5|E|U|e|u|●|お|・|オ|ナ|ユ|な|ゆ|
|~|6|土|│|&|6|F|V|f|v|を|か|ヲ|カ|ニ|ヨ|に|よ|
|~|7|日|─|’|7|G|W|g|w|ぁ|き|ァ|キ|ヌ|ラ|ぬ|ら|
|~|8|年|┌|(|8|H|X|h|x|ぃ|く|ィ|ク|ネ|リ|ね|り|
|~|9|円|┐|)|9|I|Y|i|y|ぅ|け|ゥ|ケ|ノ|ル|の|る|
|~|A|時|└|*|:|J|Z|j|z|ぇ|こ|ェ|コ|ハ|レ|は|れ|
|~|B|分|┘|+|;|K|〔|k|{|ぉ|さ|ォ|サ|ヒ|ロ|ひ|ろ|
|~|C|秒|×|,|<|L|¥|l|¦|ゃ|し|ャ|シ|フ|ワ|ふ|わ|
|~|D|百|大|-|=|M|〕|m|}|ゅ|す|ュ|ス|ヘ|ン|へ|ん|
|~|E|千|中|.|>|N|^|n|~|ょ|せ|ョ|セ|ホ|゛|ほ| |
|~|F|万|小|/|?|O|_|o| |っ|そ|ッ|ソ|マ|゜|ま| |
}
*PSG(プログラマブル・サウンド・ジェネレータ)
PSGにはAY-3-8910相当のLSIが使用され、8オクターブの3重和音演奏とノイズの発生が可能です。このLSIの内部には18個のレジスタがあり、3つのトーンジェネレータの発振周波数やエンベロープパターンをソフトウェアで設定できます(&strong(){図2、3}参照)。また2つの8bitポートがあり、このポートはジョイスティック入力などに用いられます(&strong(){表10}参照)。PSGに関するこれ以上の詳しい仕様やアクセス手順などについては、General Instrument社などのマニュアルを参照して下さい。
#center(){
|>| (20)\ (15)BIT&br()REGISTER (5)\|CENTER: (3)B7 (3)|CENTER: (3)B6 (3)|CENTER: (3)B5 (3)|CENTER: (3)B4 (3)|CENTER: (3)B3 (3)|CENTER: (3)B2 (3)|CENTER: (3)B1 (3)|CENTER: (3)B0 (3)|
|CENTER:R0|Channel A Tone Period|>|>|>|>|>|>|>|CENTER:8-BIT Fine Tune A|
|CENTER:R1|~|>|>|>| |>|>|>|CENTER:4-BIT Coarse Tune A|
|CENTER:R2|Channel B Tone Period|>|>|>|>|>|>|>|CENTER:8-BIT Fine Tune B|
|CENTER:R3|~|>|>|>| |>|>|>|CENTER:4-BIT Coarse Tune B|
|CENTER:R4|Channel C Tone Period|>|>|>|>|>|>|>|CENTER:8-BIT Fine Tune C|
|CENTER:R5|~|>|>|>| |>|>|>|CENTER:4-BIT Coarse Tune C|
|CENTER:R6|Noise Period|>|>| |>|>|>|>|CENTER:5-BIT Period Control|
|CENTER:R7|&font(o){Enable}|>|CENTER:&font(o){IN}/OUT|>|>|CENTER:&font(o){Noise}|>|>|CENTER:&font(o){Tone}|
|~|~|CENTER:IOB|CENTER:IOA|CENTER:C|CENTER:B|CENTER:A|CENTER:C|CENTER:B|CENTER:A|
|CENTER:R10|Channel A Amplitude|>|>| |CENTER:M|CENTER:L3|CENTER:L2|CENTER:L1|CENTER:L0|
|CENTER:R11|Channel B Amplitude|>|>| |CENTER:M|CENTER:L3|CENTER:L2|CENTER:L1|CENTER:L0|
|CENTER:R12|Channel C Amplitude|>|>| |CENTER:M|CENTER:L3|CENTER:L2|CENTER:L1|CENTER:L0|
|CENTER:R13|Envelope Period|>|>|>|>|>|>|>|CENTER:8-BIT Fine Tune E|
|CENTER:R14|~|>|>|>|>|>|>|>|CENTER:8-BIT Coarse Tune E|
|CENTER:R15|EnvelopeShape/Cycle|>|>|>| |CENTER:CONT|CENTER:ATT|CENTER:ALT|CENTER:HOLD|
|CENTER:R16|I/O Port A Data Store|>|>|>|>|>|>|>|CENTER:8-BIT PARALLEL I/O on Port A|
|CENTER:R17|I/O Port B Data Store|>|>|>|>|>|>|>|CENTER:8-BIT PARALLEL I/O on Port B|
&strong(){図2 AY-3-8910のレジスタ構成}
}
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic20.png)
&strong(){図3 AY-3-8910のエンベロープ波形}
}
音出力は、PSGとは別にソフトウェアによる1bitポート音出力も用意され、i8255相当品のCポートに出力します。8255は、この他スロットセレクトやキーボードスキャン信号などに使われます。なお、PSGの出力信号レベルは-5dbm、RCA2ピンコネクタ出力が標準となります。
*キーボード
キーボードの配列にはJIS標準配列とアイウエオ配列の2種類の仕様があります。これはジャンパによるソフトウェアの切り替えで、BASIC自身は両方のキースキャン用変換テーブルを内蔵しています。キートップは72個で、JIS配列のレイアウトを&strong(){図4}に示します。CAPSLOCK、カナにはロック表示ランプがあり、SELECTキーはアプリケーションプログラムで使用されます。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic18.png)
&strong(){図4 JIS標準によるキーレイアウト(例)}
}
キーボードモードには、英数字大、英小文字、カタカナ、ひらがなの4つがあり、これとグラフィックキーによる入力が可能になっています。モードの切り替えは、シフトキーとカナキー、キャピタルロックキーによります。カナキーとキャピタルロックキーは一度押すごとにモードが反転します。電源投入時(リセット復帰時)は英小文字モードとなります。
*インターフェイス
**カセットインターフェイス
信号の種類とピンコネクションを&strong(){表3}に示します。コネクタはDIN45326の8ピンタイプでリモート機能をサポートします。FSK変調、調歩同期(非同期)方式をとり、転送レートのデフォルトは1200baud(1200Hz 1波…0、2400Hz 2波…1)です。また2400baud(2400Hz 1波…0、4800Hz 2波…1)も仕様に含まれますが、これは信頼性をあげるため使用するカセットレコーダの機種指定が必要となります。入力はカセット側のイヤホン端子に、出力はマイクロフォン端子に接続します。
#center(){
&strong(){表3 カセットインターフェイスの信号接続}
|CENTER:端子番号|CENTER:信号名|CENTER:方向|CENTER:ピンコネクション|
|CENTER:1|CENTER:GND|CENTER:-|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic07.png)|
|CENTER:2|CENTER:GND|CENTER:-|~|
|CENTER:3|CENTER:GND|CENTER:-|~|
|CENTER:4|CENTER:CMTOUT|CENTER:出力|~|
|CENTER:5|CENTER:CMTIN|CENTER:入力|~|
|CENTER:6|CENTER:REM+|CENTER:出力|~|
|CENTER:7|CENTER:REM-|CENTER:出力|~|
|CENTER:8|CENTER:GND|CENTER:-|~|
}
**汎用入出力ポート
このポートはAY-3-8910相当品の汎用ポートを使用し、入力4bit、出力1bit、双方向2bitとなっています。レベルは正論理TTLレベルで、2ポートまでサポートされます。コネクタはAMP9ピンタイプで、主にジョイスティックなどに使用されることになります。その他トラックボールやマウスなどのポインティングデバイスや、アプリケーションソフトウェアのサポートによって簡単なI/O装置の接続が可能でしょう。信号名とピンコネクションを&strong(){表4}に示します。
#center(){
&strong(){表4 汎用入出力ポートの信号接続}
|CENTER:端子番号|CENTER:信号名|CENTER:方向|CENTER:ピンコネクション|
|CENTER:1|CENTER:FWD|CENTER:入力|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic12.png)|
|CENTER:2|CENTER:BACK|CENTER:入力|~|
|CENTER:3|CENTER:LEFT|CENTER:入力|~|
|CENTER:4|CENTER:RIGHT|CENTER:入力|~|
|CENTER:5|CENTER:+5V|CENTER:-|~|
|CENTER:6|CENTER:TRG1|CENTER:出力|~|
|CENTER:7|CENTER:TRG2|CENTER:出力|~|
|CENTER:8|CENTER:出力|CENTER:出力|~|
|CENTER:9|CENTER:GND|CENTER:-|~|
}
**ビデオ出力インターフェイス
ビデオ出力にはコンポジット信号、RF変調信号、RGB出力信号が考えられます。この内コンポジット信号とRF信号の出力はDIN5ピンコネクタより行われます。信号名とピンコネクションを&strong(){表5}に示します。
#center(){
&strong(){表5 ビデオ出力の信号接続}
|CENTER:端子番号|CENTER:信号名|CENTER:ピンコネクション|
|CENTER:1|CENTER:+5V|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic13.png)|
|CENTER:2|CENTER:GND|~|
|CENTER:3|CENTER:AUDIO|~|
|CENTER:4|CENTER:MONITOR VIDEO|~|
|CENTER:5|CENTER:RF VIDEO|~|
}
**プリンタインターフェイス
パラレルポートですが、最小システムでは付属しない場合もあります。レベルはTTLレベル、BUSYとSTROBE信号によるハンドシェークでデータの出力が行われます。信号名とピンコネクションを&strong(){表6}に示します。
#center(){
&strong(){表6 プリンタコネクタの信号接続}
|CENTER:端子番号|CENTER:信号名|CENTER:ピンコネクション|
|CENTER:1|CENTER:&font(o){PSTB}|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic14.png)|
|CENTER:2|CENTER:PDB0|~|
|CENTER:3|CENTER:PDB1|~|
|CENTER:4|CENTER:PDB2|~|
|CENTER:5|CENTER:PDB3|~|
|CENTER:6|CENTER:PDB4|~|
|CENTER:7|CENTER:PDB5|~|
|CENTER:8|CENTER:PDB6|~|
|CENTER:9|CENTER:PDB7|~|
|CENTER:10|CENTER:NC|~|
|CENTER:11|CENTER:BUSY|~|
|CENTER:12|CENTER:NC|~|
|CENTER:13|CENTER:NC|~|
|CENTER:14|CENTER:GND|~|
}
**フロッピーディスクインターフェイス
フロッピーディスク用のインターフェイスは各社対応となりますが、プログラム仕様はMSXに含まれます。ディスクのフォーマットは、片面倍密度、両面倍密度などのメディアごとに定められます。フロッピーディスクインターフェイスは、カートリッジスロットコネクタから接続されます。
*カートリッジ仕様
カートリッジスロットコネクタは本体的に最小一つ、最大3つまでサポートされます。また拡張カートリッジスロット(本体スロットコネクタより拡張)で4スロット、合計6スロットまでサポートしています。接続信号を&strong(){表7}、その説明を&strong(){表8}に示します。電圧レベルはTTLレベルで、ファンイン・ファンアウトの接続条件は&strong(){図5}の通りとなります。なお、電源容量は+5Vが300mA/スロット、+12Vと-12Vがそれぞれ50mAとなっています。
#center(){
&strong(){表7 カートリッジバスの信号接続}
|CENTER:ピン&br()No.|CENTER:名称|CENTER:I/O※1||CENTER:ピン&br()No.|CENTER:名称|CENTER:I/O※1|
|CENTER:1|&font(o){CS1}|CENTER:O||CENTER:2|&font(o){CS2}|CENTER:O|
|CENTER:3|&font(o){CS12}|CENTER:O||CENTER:4|&font(o){SLTSL}|CENTER:O|
|CENTER:5|予備※2|CENTER:-||CENTER:6|&font(o){RFSH}|CENTER:O|
|CENTER:7|&font(o){WAIT}|CENTER:I||CENTER:8|&font(o){INT}※3|CENTER:I|
|CENTER:9|&font(o){M1}|CENTER:O||CENTER:10|&font(o){BUSDIR}|CENTER:I|
|CENTER:11|&font(o){IORQ}|CENTER:O||CENTER:12|&font(o){MERQ}|CENTER:O|
|CENTER:13|&font(o){WR}|CENTER:O||CENTER:14|&font(o){RD}|CENTER:O|
|CENTER:15|&font(o){RESET}|CENTER:O||CENTER:16|予備※2|CENTER:-|
|CENTER:17|A9|CENTER:O||CENTER:18|A15|CENTER:O|
|CENTER:19|A11|CENTER:O||CENTER:20|A10|CENTER:O|
|CENTER:21|A7|CENTER:O||CENTER:22|A6|CENTER:O|
|CENTER:23|A12|CENTER:O||CENTER:24|A8|CENTER:O|
|CENTER:25|A14|CENTER:O||CENTER:26|A13|CENTER:O|
|CENTER:27|A1|CENTER:O||CENTER:28|A0|CENTER:O|
|CENTER:29|A3|CENTER:O||CENTER:30|A2|CENTER:O|
|CENTER:31|A5|CENTER:O||CENTER:32|A4|CENTER:O|
|CENTER:33|D1|CENTER:I/O||CENTER:34|D0|CENTER:I/O|
|CENTER:35|D3|CENTER:I/O||CENTER:36|D2|CENTER:I/O|
|CENTER:37|D5|CENTER:I/O||CENTER:38|D4|CENTER:I/O|
|CENTER:39|D7|CENTER:I/O||CENTER:40|D6|CENTER:I/O|
|CENTER:41|GND|CENTER:-||CENTER:42|CLOCK|CENTER:O|
|CENTER:43|GND|CENTER:-||CENTER:44|SW1|CENTER:-|
|CENTER:45|+5V|CENTER:-||CENTER:46|SW2|CENTER:-|
|CENTER:47|+5V|CENTER:-||CENTER:48|+12V|CENTER:-|
|CENTER:49|SUNDIN|CENTER:I||CENTER:50|-12V|CENTER:-|
※1 本体を基準にした入出力の区別
※2 予備は使用禁止端子
※3 オープンコレクタ出力
}
#center(){
&strong(){表8 カートリッジバスの内容}
|CENTER:ピンNo.|CENTER:名称|CENTER:内容|
|CENTER:1|&font(o){CS1}|ROM 4000H~7FFFH番地セレクト信号|
|CENTER:2|&font(o){CS2}|ROM 4000H~BFFFH番地セレクト信号|
|CENTER:3|&font(o){CS12}|ROM 4000H~BFFFH番地セレクト信号(256k ROM用)|
|CENTER:4|&font(o){SLTSL}|スロットセレクタ信号、各スロット毎にそのスロット固有のセレクト信号を印加する|
|CENTER:5|予備|将来のための予備信号線(使用禁止)|
|CENTER:6|&font(o){RFSH}|リフレッシュサイクル信号|
|CENTER:7|&font(o){WAIT}|CPUへのWAIT要求信号(本体内部でのタイミングを取ること)|
|CENTER:8|&font(o){INT}|CPUへの割り込み要求信号|
|CENTER:9|&font(o){M1}|CPUへのフェッチサイクルを表す信号|
|CENTER:10|&font(o){BUSDIR}|外部データバスバッファの方向を制御する信号&br()カートリッジがセレクトされ、データを送出するタイミングでメモリを除く各カートリッジよりLレベルを出力する(詳細は付録参照)|
|CENTER:11|&font(o){IORQ}|I/Oのリクエスト信号|
|CENTER:12|&font(o){MERQ}|メモリリクエスト信号|
|CENTER:13|&font(o){WR}|ライトタイミング信号|
|CENTER:14|&font(o){RD}|リードタイミング信号|
|CENTER:15|&font(o){RESET}|システムリセット信号|
|CENTER:16|予備|将来のための予備信号線(使用禁止)|
|CENTER:17~32|A0~A15|アドレスバス信号|
|CENTER:33~40|D1~D7|データバス信号|
|CENTER:41|GND|信号グランド|
|CENTER:42|CLOCK|CPUクロック(3.579545MHz)|
|CENTER:43|GND|信号グランド|
|CENTER:44,46|SW1,2|抜差プロテクト用|
|CENTER:45,47|+5V|+5V電源|
|CENTER:48|+12V|+12V電源|
|CENTER:49|SUNDIN|サウンド入力信号(-5dbm)|
|CENTER:50|-12V|-12V電源|
}
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic10.png)
&strong(){図5 カートリッジのファンイン・ファンアウト条件}
}
標準カートリッジの外形を&strong(){図6}に示しています。正面コネクタ左側に貫通穴があり“MSX”のロゴが入っているのが特徴となります。また逆挿入防止用の切り欠きが、コネクタ開口部横に設けられます。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic11.png)
&strong(){図6 標準カートリッジの外形}
}
*スロットの概念
MSXの使用で使われる“スロット”は、64KbyteのCPUメモリ空間を構成する点でメモリバンクという概念に近いものです。しかし、CPUが番号を指定してメモリブロックを選択することができる点で、カートリッジを挿入するスロットに近いという“スロット”という名称を使用しています。
またカートリッジバス上のスロットを選択する信号は、スロットセレクト信号と呼ぶのが自然といえるでしょう。
従来のように共通バス構造で複数個のメモリバンクを持つ場合、各デバイスに接続される選択信号に区別がないため、同時に同じアドレス空間をもつ複数個のカートリッジがバスに接続されると信号の衝突が起こります。これはシステムが動かないだけでなく、ハードウェアの劣化を招くことになります。
しかしMSXシステムでは、スロットセレクト信号により各デバイスが別個に選択されるため、以上のような問題が起こることはありません。さらに同一のアドレス空間を占めるソフトウェアをカートリッジスロットに同時に存在できることから、システムの柔軟性・拡張性を高めることができます(&strong(){図7}参照)。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic17.png)
&strong(){図7 MSXシステムのメモリマップ}
}
このような理由でスロットが分けられ、実際にBASICの入ったROMとシステムRAMはスロットの一つ(スロット0)に接続され、ほかのスロットがコネクタを通じで外部に拡張されることになります。従ってスロットは、最小構成でもシステム用とカートリッジ用の2つが存在することになり、標準構成では4スロットとなります。なお、スロットの概念はソフトウェアから見たもので実際のハードウェアがいくつのカートリッジスロットを持つか、スロットコネクタを通しているか否かは関知していません。
*MSXシステムの拡張
MSXシステムは、基本仕様の拡張に備えていくつかの拡張用機能を備えています。これらは、MSXマシンを使用するユーザーが特に意識する必要はありませんが、MSXの特徴の一つであるため以下に説明します。
MSXシステムのメモリは、BASICの入ったROM32Kbyteと、8Kbyte以上のRAMで構成されます。このうちRAMは、FFFFH番地より8000H番地に向かって実装されている最も広い領域を、システムのRAM領域とします。このRAMは、拡張スロットを含むどのスロットに実装されていても構いません。メモリマップを&strong(){図7}に示します。
64Kbyteのメモリ空間はメモリマップのように4つに区分され、スロットセレクトレジスタより16Kbyteのページごとに任意のスロットから選んでメモリが配置されます。このように、メモリは16Kbyteごとに選択、配置されることになります。ただし、はじめに8KbyteのRAMが高位番地(E000H~FFFFH)に位置しているシステムの場合、スロットから8KbyteのRAMを追加して16Kbyteにすることはできません。またこの8Kbyteの実装時に、メモリ空間の2(8000H~C000H)にRAMを拡張することもできません。メモリは連続して配置される必要があります。但し、その8KbyteのRAMを使用せず、外部に16Kbyte/32KbyteのRAMを拡張することは可能です。
また、MSX BASICは8000H~FFFFHまでのRAMしか使用しないため、64KbyteRAMを用いて0000H~FFFFHまでのメモリを追加しても、0000H~7FFFHのアドレスにあるメモリは使用できません。
*カートリッジスロットの拡張
スロットの拡張は、基本構成のスロットから行われます。従って、拡張スロットを用いると、基本構成のスロットの数は1つ減ることになります。
拡張スロットの選択は、まず拡張スロットが接続されている基本スロットが選択され、さらに拡張スロットを選択することになります。ただし、基本スロットを禁止する方法をシステムが持っている場合は、この限りではありません。
ところで、拡張スロットに接続されるカートリッジのスロットセレクト信号を作成するため、拡張スロットのメモリアドレスFFFFHにスロットセレクトレジスタを置きます。このレジスタはRAMと区別するため、レジスタの内容を読み出すと、レジスタの内容のコンプリメントが読み出されるようにします。これにより、基本スロットの1から3のどのスロットから、あるいは2つ以上のスロットから、拡張スロットを設けることができるようになります(&strong(){図8})。MSX BASICでは、拡張スロット1つまでをサポートします。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic16.png)
&strong(){図8 拡張スロットセレクト信号作成回路例}
}
一方、バッファなしで接続できるスロットの数は4つまでです。これは先に説明したファンアウトからの制約によるものです。従って、5つ以上のスロットを用意する場合は、カートリッジバスにバッファを入れなければなりません。
この拡張されたバスのデータバッファの入出力方向をコントロールするのがBUSIR信号です(&strong(){表7,8}参照)。但し、メモリだけを内蔵したカートリッジでは、スロットセレクト信号(SLTSL)、メモリクエスト信号(MREQ)、リード/ライト信号(RD/WR)によりデータバスの方向を決めることができ、BUSDIR信号は不要となります。
この信号が必要となるのは、CPUに信号を送る、すなわちCPUの入力命令に対して応答しなければならないような入力デバイスや、モード2の割り込みにおいてベクトルアドレスをCPUに知らせるようなデバイスを持ったカートリッジなどです。これらはCOU(←CPU?)にデータを送るタイミングに合わせてBUSDIR信号をLレベルにし、拡張されたデータバッファの方向をCPU方向に変えてやらなければなりません。拡張カートリッジの回路例を&strong(){図9}に示します。
#center(){
#ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic15.png)
&strong(){図9 拡張スロット回路例}
}
*I/Oの拡張
MSXシステムのI/Oマップ、及びこれを使用するPSG、PPIのビット割り当てを&strong(){表9~11}に示します。
#center(){
&strong(){表9 MSXシステムのI/Oアドレス割り当て}
|&ref(http://www31.atwiki.jp/tagoo?cmd=upload&act=open&pageid=16&file=pic19.png)|CENTER:IO ADR|CENTER:R/W|CENTER:内容|CENTER:備考|
|~|CENTER:&H98&br()&br()&H99&br() &br()|CENTER:W&br()R&br()W&br()R|V-RAMへのデータライト&br()V-RAMからのデータリード&br()コマンド、アドレスセット&br()ステータスリード|9918A&br()相当品|
|~|CENTER:&HA0&br()&HA1&br()&HA2|CENTER:W&br()W&br()R|アドレスラッチ&br()データライト&br()データリード|AY-3-8910&br()相当品|
|~|CENTER:&HA8&br()&br()&HA9&br()&br()&HAA&br()&br()&HAB&br()&br()|CENTER:W&br()R&br()W&br()R&br()W&br()R&br()W&br()|ポートAデータライト&br()ポートAデータリード&br()ポートBデータライト&br()ボートBデータリード&br()ポートCデータライト&br()ポートCデータリード&br()モードセット|8255A&br()相当品|
|~|CENTER:&H90&br()&br()&H91|CENTER:W&br()R&br()W|ストローブ出力(b0)&br()ステータス入力(b1)&br()プリントデータ|ラッチ出力&br()BUSYで1&br()ラッチ出力|
}
#center(){
&strong(){表10 PSGのビット割り当て}
|CENTER:ポート|CENTER:ビット|CENTER:I/O|CENTER:接続コネクターピン番号|CENTER:ジョイスティック使用時の信号|
|CENTER:A&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()|CENTER:0&br()&br()1&br()&br()2&br()&br()3&br()&br()4&br()&br()5&br()&br()6&br()7|CENTER:入&br()力|J3-1ピン※1&br()J4-1ピン※2&br()J3-2ピン※1&br()J4-2ピン※2&br()J3-3ピン※1&br()J4-3ピン※2&br()J3-4ピン※1&br()J4-4ピン※2&br()J3-6ピン※1&br()J4-6ピン※2&br()J3-7ピン※1&br()J4-7ピン※2&br()キー配列指定入力※4&br()CSAR(カセットテープのリード)|FWD1&br()FWD2&br()BACK1&br()BACK2&br()LEFT1&br()LEFT2&br()RIGHT1&br()RIGHT2&br()TRGA1&br()TRGA2&br()TRGB1&br()TRGB2&br()"H"/"L"レベル&br()&br()|
|CENTER:B&br()&br()&br()&br()&br()&br()&br()&br()|CENTER:0&br()1&br()2&br()3&br()4&br()5&br()6&br()7|CENTER:出&br()力|J3-6ピン※3&br()J3-7ピン※3&br()J4-6ピン※3&br()J4-7ピン※3&br()J3-8ピン&br()J4-8ピン&br()ポートA入力セレクト&br()KLAMP(カナランプ信号"L"で点燈)|"H"レベル&br()"H"レベル&br()"H"レベル&br()"H"レベル&br()&br()&br()&br()&br()|
※1 ポートBのビット6が"L"レベル時有効、ジョイスティック1用
※2 ポートBのビット6が"H"レベル時有効、ジョイスティック2用
※3 出力ポートとして使用しない時は"H"レベルにすること。オープンコネクタ・バッファを介して出力する
※4 JIS配列→"H"レベル、あいうえお配列→"L"レベル
}
#center(){
&strong(){表11 PPIビット割り当て}
|CENTER:ポート|CENTER:ビット|CENTER:I/O|CENTER:信号名|CENTER:内容|
|CENTER:A&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()|CENTER:0&br()1|CENTER:出&br()力|CENTER:CS0L&br()CS0H|0000H-3FFFH番地のスロット指定信号|
|~|CENTER:2&br()3|~|CENTER:CS1L&br()CS1H|4000H-7FFFH番地のスロット指定信号|
|~|CENTER:4&br()5|~|CENTER:CS2L&br()CS2H|8000H-BFFFH番地のスロット指定信号|
|~|CENTER:6&br()7|~|CENTER:CS3L&br()CS3H|C000H-FFFFH番地のスロット指定信号|
|CENTER:B&br()&br()&br()|CENTER:0&br()∫&br()7|CENTER:入&br()力||キーボードリターン記号|
|CENTER:C&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()&br()|CENTER:0&br()1&br()2&br()3|CENTER:出&br()力|CENTER:KB0&br()KB1&br()KB2&br()KB3|キーボードスキャン信号|
|~|CENTER:4|~|CENTER:CASON|カセットコントロール(LでON)|
|~|CENTER:5|~|CENTER:CASW|カセット書き込み信号|
|~|CENTER:6|~|CENTER:CAPS|CAPSランプ信号(Lで点燈)|
|~|CENTER:7|~|CENTER:SOUND|ソフトによるサウンド出力|
}
MSXではあらかじめ規定されていないI/O装置を追加する場合、I/Oアドレスは原則としてメモリマップドI/O方式が取られます。I/Oアドレスの00Hから7FHまでは規定されていないため、使用することが可能となるのですが、規定されていないがために他の装置と同じI/Oアドレスを割り当ててしまい、I/Oカートリッジの組合せによってポート信号の衝突が起こってしまいます。これに対して、I/Oアドレスをメモリアドレス上に取れば、例え同じアドレスが設定されてもスロットセレクト信号により他の装置と区別でき、I/Oバス競合などの心配がなくなります。
以上でMSXシステムのハードウェア解説を終わりますが、MSXシステムの優れた拡張性・互換性を理解していただけたと思います、なお、これらは、ソフトウェアとの関連などにより、最終仕様で変更される場合も考えられます。今後の月刊アスキーによる関連記事や、当社出版物を参照いただくようお願い致します。
月刊ASCII1983年8月号(通巻74号)P112~P117 特集記事より転載
----
表示オプション
横に並べて表示:
変化行の前後のみ表示: