MSX1 のエミュレータです。 以下の機能を実装しています。
- メイン RAM (MapperRAM 128KB)
- VDP (16KB/NTSC)
- PSG
- Konami SCC (DAC 出力時のみ)
- ROM カートリッジ
- テープ
- FD (Read Only)
- Joypad
以下の機能は、限定的にサポートしています。
- FM 音源 (MSX-MUSIC/OPLL) DAC 出力時のみ
Pico と VGA コネクタやブザー/スピーカーなどを以下のように配線します。
- GPIO0 VGA:H-SYNC
- GPIO1 VGA:V-SYNC
- GPIO2 VGA:Blue0 (330 Ohm)
- GPIO3 VGA:Blue1 (680 Ohm)
- GPIO4 VGA:Red0 (330 Ohm)
- GPIO5 VGA:Red1 (680 Ohm)
- GPIO6 VGA:Red2 (1.2K Ohm)
- GPIO7 VGA:Green0 (330 Ohm)
- GPIO8 VGA:Green1 (680 Ohm)
- GPIO9 VGA:Green2 (1.2K Ohm)
- GPIO10 Audio
VGA の色信号は以下のように接続します
Blue0 --- 330 Ohm resister ---+
|
Blue1 --- 680 Ohm resister ---+---> VGA Blue
Red0 --- 330 Ohm resister ---+
|
Red1 --- 680 Ohm resister ---+
|
Red2 --- 1.2k Ohm resister --+---> VGA Red
Green0--- 330 Ohm resister ---+
|
Green1--- 680 Ohm resister ---+
|
Green2--- 1.2k Ohm resister --+---> VGA Green
このほかに VGA、Audio の GND に Pico の GND を接続してください。
デフォルトでは自前の PSG を用いて GPIO10 に PWM 出力されます。 SCC 音源などの出力を使うには I2S DAC が必要です。(I2S DAC は PCM5102A でテストしています。) I2S DAC との接続は以下のようになります。DAC 側の設定については使用する DAC の説明を参照してください。
- GPIO14 DATA
- GPIO15 BCLK
- GPIO16 LRCLK
FM 音源(MSX-MUSIC)を有効にすると、Pico のクロックをさらにオーバークロックするために、不安定になりがちです。 また、CPU速度調整などの機能が無効になります。 高速化のために OPLL の一部の処理が無効になっていますので、厳密なエミュレーションにはなっていません。
prebuild
以下にある uf2 ファイルを Pico に書き込みます。
- msxemulator.uf2 PWM 出力(PSGのみ)
- msxemulator_scc.uf2 I2S DAC 出力(SCC 対応)
- msxemulator_opll.uf2 I2S DAC 出力(FM 音源対応)
初めて使う場合には、システム ROM などの書き込みが必要です。
著作権の関係で ROM は含まれていません。
最低限 MSX1 のシステム ROM (32KiB)が必要です。
実機を持っていなくても ROM カートリッジしか使わない場合は、C-BIOS が使えます。
C-BIOS を使う場合には、cbios_main_msx1_jp.rom
を使ってください。
用意したファイルを picotoolなどで書き込みます。
FDC は SONY タイプの物を実装していますので、対応する DISKBIOS を書き込む必要があります
OPLL を使う場合は、スロットに FM-PAC の ROM イメージをスロットにロードするか、FM-PAC のイメージを本体に書き込んでください。
ROM 本体
$ picotool load -v -x msx1.rom -t bin -o 0x10030000
DISKBIOS
$ picotool load -v -x disk.rom -t bin -o 0x10038000
FM-BIOS
$ picotool load -v -x fm-pac.rom -t bin -o 0x1003C000
Pico の USB 端子に、OTG ケーブルなどを介して USB キーボードを接続します。 USB キーボードに存在しないキーは以下のように割り当てています。
- STOP → Pause/Break
- SELECT → ScrollLock
- カナ → カタカナ・ひらがな
- GRAPH → ALT
また F12 でメニュー画面に移ります。 ROM ファイルや テープイメージの操作ができます。
DirectInput 対応のゲームパッド(1台)に対応しています。
ボタンの割り当ては、joystick.c
で変更できます。
2Mbit(256KiB) までの rom に対応しています。
Slot1 と Slot2 の二つがありますが、両方使う場合には 1Mbit までの ROM にしてください。 また、2Mbit の ROM は Slot1 のみ対応しています。
rom ファイルを LittleFS 上に置いた後で、F12 のメニューからロードできます。 メガロムを使う場合は、カートリッジの Type を適切なものに設定してください。 Type は自動認識されますが、誤認識することがありますので、注意してください。
LittleFS の使い方については、 こちらの記事をご覧ください。
CAS 形式ファイルの入出力に対応しています。 LittleFS 上においてください。
MB8877 (WD2793) を使った Sony 系ディスクドライブをエミュレートしています。 DSK 形式の 2DD のディスク(720KB)に対応しています。
DISKBASIC や MSX-DOS を使う場合には「Sony 系ディスクドライブ用」の DISKBIOS を書き込む必要があります。 uPD765A (TC8566AF) を使った「Panasonic 系ディスクドライブ」用の DISKBIOS では動作しません。
FD はライトプロテクト状態になっていますので、書き込みはできません。
メモリ節約のため、今回はフレームバッファ方式ではなく、1 ラインつづ CPU を使ってリアルタイムに描画しています。 なので、フラッシュへの書き込み操作時に画面更新が止まります。
このエミュレータは以下のライブラリを使用しています。
- Z80
- Zeta
- VGA ライブラリ(一部改変)
- LittleFS
- vrEmuTms9918
- pico-extras (I2S)
- Emu2212
- Emu2149
- Emu2413(未使用)
- C-BIOS (フォントのみ)
- HID Parser(おそらくLUFAの改変)
- FD は 2ドライブ接続されたように認識されています。MSX の 2 ドライブエミュレーション機能は無効になっています。
- Gamepad を複数接続するとうまく操作できないことがあります