はじめに
肝八 (KimoHachi) は,ザイログ社の Z80(または互換) CPU で動く,マルチボードコンピュータです。各機能ごとのボードに分かれていますので,必要な機能のみに絞ることもできます。
極力表面実装部品は使用せず,LSI や IC は,DIP のものを,抵抗やコンデンサなどもリード付きのものを使うようにしました。
基本入出力として,キーボード入力,ディスプレイ出力,サウンド出力,カートリッジコネクタなどの周辺ハードウェア入出力機能を備えています。
Z80 プログラムバイナリコードを,ホスト PC (Windows or Linux) から転送することで,このマイコンシステム上で実行させることができます。また,周辺ハードウェアのデバイスアドレスを MSX コンピュータの一般的なデバイスアドレスに合わせてありますので,同じアドレスを扱う MSX の BIOS を転送することで,MSX 互換の動作をさせることもできます。
主要な LSI チップは,市販 MSX とほぼ同等のものを使用していますので,限りなく MSX 実機に近い動作をします。ただし,すべての MSX BIOS の動作を保証するものではありませんので,ご注意ください。
ソフトウェアは,ホスト PC とのインターフェース部分と,セルフチェック用のプログラムコードを内蔵しています。それ以外のプログラムコードは,ホスト PC から別途転送する必要があります。
免責事項
- 「肝八(KimoHachi)」は,個人設計の同人ハードであり,必ずしも全ての環境で正しく動作することを保証するものではありません。この事をご理解の上,ご使用ください。
- 作者は「肝八(KimoHachi)」を使用したことによる損失,損害は直接的,間接的を問わず一切責任負うことはできません。使用者の自己責任において使用してください。
各種ボードの構成
ボードセットは,以下の 8 枚のボードで構成されています。
MSX2+ の機能を(一部除いて)実装していますので,これと I/O アドレスが一致する MSX2+ (または,MSX)の BIOS を,ホスト PC から転送することによって,MSX2+ 互換(または,MSX 互換)として動作させることができます。(MSX2 BIOSは動作確認していません)
MSX の互換 BIOS として配布されている C-BIOS でも動作させることができます。
インターフェースボード
ホスト PC と USB シリアル接続し,専用ツールを使用して,プログラムコードを転送します。ホスト PC の OS は,Ubuntu 16.04 と,Windows7,Windows10 で動作確認をしています。
各種動作設定用のディップスイッチ,デバッグ用の LED,リセットスイッチ を搭載しています。リセットスイッチは,このボードに搭載しているマイコンに対するリセットで,直接 Z80 をリセットするわけではありません。Z80 は,このボードに搭載しているマイコンからリセット信号を送ってリセットします。
CPU ボード
Z80 CPU と SRAM メモリーを搭載しており,ブートストラップコードや MSX の BIOS コードをメモリに転送して,システムを起動します。
このメモリは,コード転送後,基本的に ROM として動作しますが,バッテリーバックアップされていますので,上書き転送するまでは,電源を切っても内容は保持されます。
PPI ボード
パラレルインターフェースである PPI を搭載しており,スロットの制御と,PS/2 インターフェースのキーボード入力制御を行います。
PS/2 キーボードから入力されたキーデータは,内部的に MSX のキー配列に変換していますので,PS/2 キーボード上のすべてのキーが使用できるわけではありません。また,MSX 用の特殊キーが特定のキーに割り当てられています。
同時押しの認識は,使用する PS/2 キーボード側の性能によります。ものによっては,2 つまでしか同時押しを認識できない場合があり,この場合は,カーソルキーで斜め移動をしてスペースキーでショット…などが反応しない場合があります。N キーロールオーバー対応のキーボードなら問題ないと思います。
また,すべての PS/2 キーボードが使用できる保証はありません。(USB → PS/2 変換タイプのキーボードは相性問題が発生する場合がありますので,PS/2 専用タイプのキーボードをお薦めします)
VDP ボード
画面出力を行うビデオディスプレイプロセッサ(V9958)を搭載しており,アナログ RGB 信号と,コンポジットビデオ信号を出力できます。
アナログ RGB は,MSX で一般的な DIN 8 ピンコネクタと,DSUB 15 ピンに出力しています。DSUB 15 ピンは,同期信号を分離していますが,2 列の 15 ピンですので,VGA 入力モニタに出力する場合は,別途変換ケーブルが必要となります。
また,水平走査周波数は 15kHz ですので,15kHz 対応モニターに接続するか,一般的な VGA 入力モニターに接続するには,アップスキャンコンバートする必要があります。
マッパーボード
いわゆるメモリマッパーと呼ばれる RAM ボードで,メインメモリになります。SLOT3-0 に接続されていて,容量は 1024KB です。
PSG ボード
AY-3-8910 互換のサウンドチップを搭載しています。また,他のボード上の SCC 音源や,FM 音源,カートリッジ音源の出力をミックスすることができ,これら各音源の音量バランスをボード上の半固定抵抗で調整することができます。通常はすべての半固定抵抗を最大の状態にしておきます。(必要に応じて音を絞ります)
マスター音量調節用のボリュームつまみと,スピーカー接続用のミニジャックが付いています。また,汎用入出力ポートとして,DSUB 9 ピンコネクタを一つ搭載しており,MSX 用のジョイスティックなどを接続することができます。
ツープラスボード
FM 音源(YM2413 – OPLL),第一水準漢字 ROM,リアルタイムクロック,ハードウェアリセットフラグ,システムコントロールポートを搭載しています。主に,MSX2 や,MSX2+ で追加された機能になります。
システムコントロールポートは,第一水準漢字 ROM と,リアルタイムクロックに対応するビットしか機能しません。
漢字 ROM の実体は,バックアップされた SRAM ですので,ホスト PC から,漢字 ROM のイメージをあらかじめ転送しておく必要があります。
リアルタイムクロックには,カレンダーと時計機能がありますが,精度はそんなに高くありませんので,時間とともに時刻がずれる可能性があります。
カートリッジスロットボード
MSX 用の市販カートリッジを接続することができます。
すべての MSX 用カートリッジの動作を保証するわけではありませんが,ゲームカートリッジであれば,ほぼ認識すると思います。(手持ちのゲームカートリッジを 20 種類ほど試したところ,すべて動作しました)
ディップスイッチによる切り離しができますので,いわゆる MSX におけるカートリッジの後刺しのようなこともできます。
SCC ボードなど,基本スロットを専有するボードと同じスロットに割り当てると競合しますので,ご注意ください。
ディップスイッチの 1 番を ON にすると,手前側の SLOT1 が有効に,ディップスイッチの 2 番を ON にすると,奥側の SLOT2 が有効になります。ディップスイッチが OFF の状態では,カートリッジスロットにカートリッジを接続していても認識しませんので,ご注意ください。通常は,両方 ON 状態で良いと思います。
オプションのボード
SCC ボード
SCC 音源チップを搭載しています。また,メガロムコントローラに,512KB のバッテリーバックアップされたメモリを接続しており,SCC 内蔵カートリッジゲームの ROM イメージを転送することができます。
メモリマップト I/O で,基本スロットを一つ専有します。
ディップスイッチ設定は,ボード上のシルクにも書いてありますが,以下のようになります。(0 が OFF で,1 が ON です。ディップスイッチの番号と SLOT 番号が一致しませんので,ご注意ください)
ディップスイッチ | 動作 |
00 | 切り離し |
01 | SLOT1 に接続 |
10 | SLOT2 に接続 |
11 | 切り離し |
ホスト PC との接続
ホスト PC とインターフェースボードは,USB ケーブルで接続しますが,事前にドライバのインストールなどを行う必要があります。
オペレーティングシステムは,Windows7,Windows10,Ubuntu 16.04 で確認を取っていますが,Windows,Ubuntu ともに 64bit 版のみの対応となります。32bit 版は動作対象外です。
Windows の場合
Windows は,USB シリアル変換チップのドライバをインストールする必要があります。
以下のリンクからダウンロード,インストールしてください。右側にコメント欄あるセットアップ実行ファイル形式(setup executable)の方が簡単にインストールできます。
FTDI Virtual COM Port ドライバダウンロード
Ubuntu の場合
ドライバのインストールは必要ありませんが,シリアルデバイスに対してアクセス権が必要となります。お使いのユーザー名を dialout グループに追加してください。
各ボードの接続
それぞれのボード同士は,専用のコネクタを使用して接続します。
このコネクタは上下の向きがありますので,間違わないようにしてください。(裏側にあるロゴの向きを参考にしてください)
コネクタはピン数が多いので,ボードの抜き差しは慎重に行い,ピンを曲げたり破損しないようにご注意ください。
まず,下になるボードにコネクタを接続します。ボードは部品面が上になるように接続してください。
導電スポンジの上にコネクタを置き,ボードを上から挿すようにすると比較的簡単に接続できます。(ボードを抜くときも同じ感じで)
接続したボードの四隅にスペーサーを取り付けます。
接続したコネクタに対して,上になるコネクタを接続します。
上になるボードを接続します。
横から見て,コネクタがボードに対して垂直になっているか確認します。垂直になっていないと接触不良の原因になります。
ボード同士をスペーサーで接続します。
各ボードの接続順に決まりはありませんが,下から上に向かって,以下のようにすると良いです。
- インターフェースボード
- CPU ボード
- PPI ボード
- VDP ボード
- マッパーボード
- PSG ボード
- カートリッジボード
すべて接続すると下の写真のようになります。一番上のコネクタはピンヘッダが付いていないものにしてください。また,一番上のボードは,写真のようにスペーサーではなく,ネジで固定します。
ただし,初回は各々のボードを一枚ずつ動作チェックしながら接続したほうが良いので,以下の「ボードのセルフチェック」を参照してください。
ボードのセルフチェック
ボードの初回組み立て時は,一枚ずつ接続し都度動作チェックを行います。以下の順番でボードを追加して動作チェックしてください。
インターフェースボード,CPU ボード,PPI ボード
まずは,インターフェースボード,CPU ボード,PPI ボードをコネクタで接続します。
インターフェースボードに AC アダプタを接続します。AC アダプタは DC 5V出力,電流は 2A 程度,センタープラスでスイッチングタイプのものを使います。
PPI ボードに,PS/2 インターフェースキーボードを接続します。
インターフェースボードのディップスイッチを以下のように設定します。
以後,これを二進数表記で 00010000 と記述します。0 が OFF で,1 が ON です。
電源スイッチをオンにします。
インターフェースボードの 8 個の LED が左右に動きながら光れば,正常動作しています。
電源スイッチをオフにします。
インターフェースボードのディップスイッチを以下のように設定します。
00010001
電源スイッチをオンにします。
PS/2 キーボードのキーを適当に押してみます。
対応する LED が光れば正常動作しています。(キーと LED の位置は,キーボードマトリクスのビット位置になります)
VDP ボード
VDP ボードを追加で接続します。必ず電源をオフにした状態で接続してください。
VDP ボードにディスプレイモニターを接続します。(アナログ RGB もしくはコンポジット)
インターフェースボードのディップスイッチを以下のように設定します。
00010010
電源スイッチをオンにします。
モニター画面にスクロールするカラーバーが表示されれば,正常動作しています。また,インターフェースボードの LED が 1/60 秒毎に二進数表記でカウントアップします。
正常動作していない場合は,ボード同士の接続を再度確認してみてください。
マッパーボード
マッパーボードを追加で接続します。必ず電源をオフにした状態で接続してください。
インターフェースボードのディップスイッチを以下のように設定します。
00010011
電源スイッチをオンにします。
メモリのチェックを行い,LED に進行状況を表示します。最後にマッパーセグメント数を LED で表示します。セグメント数は 64 なので,最終的に LED が以下のようになれば正常動作しています。
01000000 (0 が消灯,1 が点灯)
正常動作していない場合は,ボード同士の接続を再度確認してみてください。
PSG ボード
PSG ボードを追加で接続します。必ず電源をオフにした状態で接続してください。
PSG ボードにジョイスティック(ジョイパッド)とスピーカーを接続します。ジョイスティックは,DSUB9ピンコネクタに,スピーカーはミニジャックに接続します。また,PSG ボードの 4 つある半固定抵抗うち,PSG と書かれた半固定抵抗を時計回りいっぱいに回します(ボリュームマックスにします)。逆に絞った状態だと,音が聞こえませんのでご注意ください。
インターフェースボードのディップスイッチを以下のように設定します。
00010100
電源スイッチをオンにします。
ジョイスティックの各ボタンと方向レバー(方向ボタン)を押し,対応するLED が光れば正常動作しています。また,スピーカーを接続していた場合に対応する音が単音で再生されます。音のボニュームはマスターボリュームつまみで調整してください。
正常動作していない場合は,ボード同士の接続,ジョイスティック,スピーカーの接続を確認してみてください。
この時点で,初代 MSX (MSX1)の BIOS を動かすことが出来ます。ツープラスボードと,カートリッジボードに関しては,セルフチェック機能はありませんので,MSX の BIOS 転送し,MSX として動作させた上で確認します。
プログラムコードの転送
Z80 のプログラムコードや MSX の BIOS コードは,ホスト PC から専用のツールを使って転送します。
MSX の BIOS コードを転送すると,以下の写真のように MSX 互換機として使用できます。
BIOS コードは,MSX エミュレータ等に必要となる BIOS イメージが使用できます。MSX 実機から吸いだす必要がありますが,吸い出し方法はここでは説明しません。
手っ取り早く MSX のカートリッジソフトを実行したい場合は,互換 BIOS として配布されている C-BIOS をインストールすることで,実行することができます。
C-BIOS のインストール方法については,後のほうで説明します。
転送ツールを実行するには,Java のランタイム環境が必要です。Java8 以上の Java Runtime Environment (JRE) がインストールされていない場合は,こちらのページからインストールしてください。
Java SE Runtime Environment 8 Downloads
Windows なら,jre-8u192-windows-x64.exe をダウンロードし,インストールします。
転送ツールは以下のリンクからダウンロードできます。各 OS に対応したファイルをダウンロード後,適当なディレクトリに解凍してください。
インターフェースボードとホスト PC を USB ケーブルで接続します。
インターフェースボードのディップスイッチを以下のように設定します。
00100000
電源スイッチをオンにします。これで「肝八」側は転送待ち状態になります。
ホスト PC で転送ツールを起動します。ツールを解凍したディレクトリの中にある kimo8inst.bat(Windows),または,kimo8inst.sh(Linux) を起動します。
必ず,「肝八」側を転送待ち状態にしてから,起動してください。起動するとこのようなウィンドウが表示されます。
接続先ポート
接続するシリアルポートを選択します。Windows なら,COM?
,Linux なら,/dev/ttyUSB?
になります。”?” の部分は環境によって異なる数字が入ります。事前に「肝八」が接続されているシリアルポートを確認しておいてください。接続されているシリアルポートがリストに表示されない場合は,ディップスイッチ設定や,ツール起動前に「肝八」の電源が入っているか確認してください。
転送先スロット
転送先をドロップダウンリストから選択します。
対応するスロットとアドレスページ範囲は以下の通りです。スロットとページは,いわゆる MSX のそれです。漢字 ROM は,I/O ポート接続ですので,直接,漢字 ROM に転送されます。
転送先 | スロット | ページ |
MAIN | SLOT0 | PAGE 0,1 |
SUB | SLOT3-1 | PAGE 0 |
KNJDRV | SLOT3-1 | PAGE 1,2 |
MUSIC | SLOT3-3 | PAGE 1 |
SCC1 | SLOT1 | PAGE 1 |
SCC2 | SLOT2 | PAGE 1 |
KNJROM | 漢字 ROM | 漢字 ROM |
リセット直後は,全ページ(0000H〜FFFFH)に SLOT 0 が選択されていますので,最低限,MAIN の PAGE0 に何らかのプログラムコードを置く必要があります。
転送ファイル
転送するファイルを指定します。ファイルは,バイナリファイルとして扱います。
転送先スロットの範囲より大きいサイズのファイルを指定した場合は,転送先スロットの範囲までを転送します。
「消去」をチェックすると,指定されたファイルを無視して,該当スロットのアドレスページ範囲をゼロクリアします。
転送ボタン
上記の設定をしたら,転送ボタンで転送開始します。進行を表すバーが 100% になれば転送完了です。
転送に失敗する場合は,「肝八」本体の電源,ディップスイッチ設定,ホスト PCとの接続,ポート設定を再度確認してください。
起動
プログラムコードが転送できたら,その転送したコードを走らせて起動させます。
インターフェースボードにあるディップスイッチを以下のように設定します。(オール OFF)
00000000
リセットボタンを押すか,電源を入れなおしてください。SLOT 0 のリセットベクタ(0000H 番地)から Z80 が起動します。
転送ツールで転送したメモリは,バッテリーバックアップされますので,電源を切っても,その内容が保持されています。次回以降は,再転送しなくても前回転送した状態で起動することができます。
C-BIOS のインストールとカートリッジソフトの実行
MSX 実機の BIOS が無くても,互換 BIOS として配布されている C-BIOS をインストールすることで,MSX のカートリッジソフトを実行することができます。
こちらのサイトの download C-BIOS というリンクからダウンロードできます。(最新バージョンは,cbios-0.29a.zip)
ZIP ファイルを解凍後,roms ディレクトリにある cbios_main_msx2+_jp.rom,cbios_sub.rom をインストールします。
まずは,上記「プログラムコードの転送」にあるように,転送する環境を準備します。
以下のように,転送先を「MAIN」,転送ファイルを「c_bios_main_msx2+_jp.rom」を指定して転送します。
同じように,転送先を「SUB」,転送ファイルを「c_bios_sub.rom」を指定して転送します。
ディップスイッチをすべて OFF にして,肝八本体をリセットすると,C-BIOS が起動します。カートリッジスロットにカートリッジソフトを刺していればカートリッジが起動します。
プログラムコードのバックアップとリストア
転送したプログラムコードは,バッテリーバックアップされていますが,長時間通電していないとバッテリーが放電し,転送したプログラムコードは消えてしまいます。
この場合,再度,転送ツールで同じファイルを転送すれば問題ありませんが,「肝八」本体の不揮発性メモリ(EEPROM)にまるごとバックアップすることができ,いつでもリストアすることが出来ます。
転送できるメモリーは,MAIN,SUB,KNJDRV,MUSIC です。SCC と KNJROM は,バックアップできません。
バックアップ方法
インターフェースボードにあるディップスイッチを以下のように設定します。
00100010
電源を入れなおすか,リセットボタンを押すと,SRAM の内容を,EEPROM へ転送します。転送中は LED が順次点灯し,転送終了すると LED が消灯します。
リストア方法
インターフェースボードにあるディップスイッチを以下のように設定します。
00100001
電源を入れなおすか,リセットボタンを押すと,EEPROM にバックアップされている内容を SRAM へ書き戻します。EEPROM にバックアップしてからリストアを行わないと意味がありませんのでご注意ください。
またバックアップとリストアを間違って逆に実行したりすると悲しいことになるのでご注意ください。
その他
ファームウェア書き込み時の ATMEGA328 のヒューズビットは,
Fuse Low Byte = 0xFF
Fuse High Byte = 0xDE
Extended Fuse Byte = 0xFD
Lock Bit Byte = 0xFF
です。
質問やお問い合わせ
「肝八」に関しての質問やお問い合わせは,サイトのトップページや,右上メニューにある「お問い合わせ」リンクからお願いします。