M5Atom + AtomDisplay で MZ-700 エミュレータ

M5Atom Lite でディスプレイ表示ができて、Bluetooth キーボードが接続できたので、MZ-700エミュレータを動かしてみました。


以前に M5Stack に MZ-700エミュレータを移植したときは、PSRAM 必須で考えてたので M5Stack Fire 専用だったのですが、PocketGriffonさんが PSRAM なしの M5StickCPlus で PC-8001 エミュレータを動作させていたことに気が付き…

以前に M5StackFire に移植した MZ-700エミュレータで、試しにPSRAMを使わないように修正を行ってみたところ…問題なく動作できました!PSRAMナシは無理と思い込んでて、試してみてなかったのですよね。

ただ、テープ読み込み処理だけは多くの RAM が必要なので、PSRAM なし版はテープイメージ(MZTファイル)を直接メモリに読み込み方式のみ対応になります。このため、2段階ロードができないです。BASIC読み込んだ後に、BASICプログラムを読み込むとかもできないです。ここはちょっと残念なのですが仕方ないところ。

また、SPIFFS から ROM イメージを読み込むことで、SDカードスロット付いてないM5StickC Plus でも動作できました。


PSRAMナシ、SDカードナシ(SPIFFS)で動作できましたので、M5Atom + AtomDisplay でも問題なしです。さらに、Bluetooth キーボードも対応してみました!

(この時はまだキーコード変換実装してなかったのでキー入力めちゃくちゃですw)


MZ-700は、互換モニタROMや、フリーのプログラムが公開されていますので、実機を持っていなくても動作させることができます。

MZ700WIN関連ファイル再配布所
http://mzakd.cool.coocan.jp/mz-memories/mz700win.html

NEWMON7.ROM(MZ-700互換ROM)
NEWMON.ROM(MZ-80K/C互換ROM)
MZ-NEW MONITOR 互換モニタROM mz_newmon.zip
使用許諾について必ず同梱のテキストの確認をお願いします。
MZ700FON.JP(フォントファイル) MZ-700エミュレータ MZ700WIN For Win32(mz700win version 0.53)に入っている mkfnt を用いて作成できます。
テープイメージファイル MZT形式のファイルが読み込み可能です。
超難易度のコマンド入力アドベンチャー、ワンダーハウスをぜひ遊んでみてください!

M5Atom は SDカードが使用できないため、各種ファイルは、本体内のフラッシュメモリ(SPIFFS) に配置します。SPIFFSの内容は、VSCode から更新が可能です。src/ と同じ階層に data/ フォルダ を作成して、モニタROMイメージ、フォントROMイメージ、テープイメージを入れておいて「Upload Filesystem Image」を選んでください。
(SPIFFSだとディレクトリ構造使えないって思いこんでしまってて、SPIFFS ルートに全ファイル入れるようにしてしまったのですが、ディレクトリも使えるっぽいことに後で気が付きました…。)


プログラムはこちら。M5Atom はバイナリデータでの配布は難しいので、ソースのみ公開です。PlatformIO でビルド&実行してください。

MZ-700 Emulator for M5Atom + AtomDisplay +Bluetooth Keyboard
https://github.com/shikarunochi/m5z80/tree/master/m5z700AtomHDMI

起動後、5秒間の Bluetooth 接続時間になります。その間に、Bluetoothキーボードを接続待ちにしてください。起動後、1~2秒待って「0000」を入力してください。

Bluetooth処理の初期化がうまくいくと、M5Atom の LED が赤→緑になります。初期化がうまくいっただけで、接続がうまくいったかどうかは別なので注意してください。(キーボードとのBluetooth 接続状況を確認する方法が分からなかったので…。)

Bluetooth キーボード関連については、こちらも見てみてください。

M5Atom に Bluetooth キーボードを接続
https://shikarunochi.matrix.jp/?p=4529

注意:BLE対応の Bluetooth キーボードでは接続ができない可能性が高いです。 古めの Bluetooth キーボードを使ってみてください。

Bluetooth キーボードからの操作の他、Grove 端子に CardKB を接続してのキー入力も可能にしてあります。最悪、Bluetoothキーボードが繋がらなかったら、こっちで操作お願いします…。

キーの対応は、Mzmain.cpp の hid_to_mz700 / hid_to_mz80c で定義してあります。英数字以外は適当に配置しているので、変なところあったら入れ替えてみてください。

MZ-700 キーマトリクス参考:http://www.maroon.dti.ne.jp/youkan/mz700/mzioframe.html
MZ-80K/C キーマトリクス参考:http://www43.tok2.com/home/cmpslv/Mz80k/EnrMzk.htm


MZ-700 エミュレータプログラムは、Oh!石さんの mz80rpi と、Marukun さんの mz700win から移植を行いました。ソースの公開に感謝いたします。

mz80rpi – MZ-80 series Emulator for Raspberry Pi
https://github.com/NibblesLab/mz80rpi

MZ-700エミュレータ MZ700WIN For Win32
http://mzakd.cool.coocan.jp/mz-memories/mz700win.html


M5Atom は、ボタン1個しかないので、操作は長押しを併用した操作になっています。

メイン画面では、ボタン押下でファイル選択画面、ボタン長押しでシステムメニュー画面になります。


ファイル選択画面。


システム画面。起動ROM選択してリセットと、PCG機能のON/OFF ができます。

いずれの画面も、ボタン押下でカーソル移動(下方向のみ)、ボタン長押しで選択です。

移動が一方向のみなので、ファイル多いときはめんどくさいですね…。キーボードからの操作もできるようになればいいのですが、まあ、ひとまずはこれで。


ワンダーハウスにチャレンジ!

それでは、みなさまも、良き MZ-700 ライフを!


スピーカー外付けでサウンド出力に対応しました。GROVE 端子の G26 を使うので、CardKB とは排他になります。platformio.ini のビルド時のオプションで切り替えられるようになっています。スピーカーを使う場合は USE_SPEAKER を有効にしてください。