キーボードとLCD付いてるのだから、レトロPCエミュレータを動作させたい。とはいえ、PSRAM無し&低解像度なので、PC-8801エミュレータは厳しい。(デゼニランドをプレイしたいところではあるが…w)
ということで、以前にも M5StickC Plus(Cardputerと解像度同じ&PSRAM無し)で動かしてみた、MZ-700エミュレータを動かしてみることにします。
この MZ-700 エミュレータは、まるくんさんのWindows用MZ-700エミュレータ「MZ700WIN」をOh!石さんが「mz80rpi」としてRaspberryPiに移植されていたものを、M5Stackシリーズで動作するように再度移植したものです。
公式のサンプルだと、microSD へのアクセス方法がわかりませんでした。M5Stack と違って、LCD と microSD の SPI 共有はされていないっぽいです。
microSD の使い方がわからん…。SPI が画面と共通では無さげ…? pic.twitter.com/T2hCcl2nuM
— Nochi(ドウスル?▮) (@shikarunochi) October 14, 2023
SPI2 を使っていけました!
こうだ!
SPIClass SPI2;
SPI2.begin(40,39,14,12);
while (false == SD.begin(12,SPI2)){delay(500);}— Nochi(ドウスル?▮) (@shikarunochi) October 14, 2023
らびやん(https://twitter.com/lovyan03)さんからのアドバイスで、ピン番号取得は M5Unified にお任せすることにします。
動きました~! pic.twitter.com/esYlGh8LtJ
— Nochi(ドウスル?▮) (@shikarunochi) October 15, 2023
microSD アクセスさえ可能なら、あとはそんなに詰まるところも無く、MZ-700エミュレータ起動!
キター! pic.twitter.com/yZAU4XcLR1
— Nochi(ドウスル?▮) (@shikarunochi) October 14, 2023
この時点では、まだキーボード対応&ボタン対応できてなくて、操作は I2C 接続の CardKB、テープデータの読み込みはできませんでした。
まだ本体キーボード使えてなくて、I2C の CardKB での入力ですw
M5Stack の BtnA/ BtnB / BtnC 的なやつは M5Unified には定義されてないかな…?
もし使うとしたら、BtnG0 か。 pic.twitter.com/g0vbXnSdnM— Nochi(ドウスル?▮) (@shikarunochi) October 14, 2023
M5.BtnA が ボタンG0 に対応してたので、メニュー表示が可能に。テープデータ読み込みOKです。
MZ-700 エミュレータ動作しました。ボタンG0 が使えたのでテープイメージファイルの選もできるようになりました!
本体キーボード対応は、まだこれからです。 pic.twitter.com/GogFURQB1A— Nochi(ドウスル?▮) (@shikarunochi) October 14, 2023
音も鳴らしてみました。(まだ「鳴ってるだけ」状態ですが)
音も鳴りました。本物と全然違いますが…。まずは鳴ったということでw
(キンキンした音が鳴るので注意してください) pic.twitter.com/FomQQjills— Nochi(ドウスル?▮) (@shikarunochi) October 14, 2023
音の鳴らし方はこのサンプルにありました。https://t.co/1RWnG5O5er
スピーカーは ATOM SPK と同じ NS4168 ですね。そのへん、何も気にせずとも、M5Cardputer.Speaker.tone(10000, 100); で鳴るので、M5Unified が全部うまいことやってくれてるわけですね…。スゴイ。— Nochi(ドウスル?▮) (@shikarunochi) October 14, 2023
キーボードの扱い方を確認するために、InputText のサンプルを確認…。
inputText サンプル pic.twitter.com/bZTsKaCRXZ
— Nochi(ドウスル?▮) (@shikarunochi) October 15, 2023
そして、エミュレータ側に実装。
キーボードからの入力できました!
ちょっと、肉眼では読めないですね…。 pic.twitter.com/o33Jj8fhTT— Nochi(ドウスル?▮) (@shikarunochi) October 15, 2023
MZ-700エミュレータ、キーボードで動作できました!画面も収まりきっています。(読めるかどうかはまた別の話)
カーソルが Fn 併用なのがだいぶ厳しいかもw
縦0.67倍(200×0.67=134ドット)にしてみました。これなら25行入ります。(読めるかどうかはまた別の話w)
アクションゲームは、カーソルキーが Fn 併用なので、そのままでは操作するのかなり厳しいです。 pic.twitter.com/0ATZfboRUz— Nochi(ドウスル?▮) (@shikarunochi) October 16, 2023
プログラムファイルはこちらです。
https://github.com/shikarunochi/m5z80/tree/master/m5z700AtomHDMI
ターゲットに cardputer を選択してビルドしてください。
microSD カードに以下のフォルダを作成して、必要なファイルを入れてください。
/MZROM/
NEWMON.ROM(MZ-80K/C 互換モニタROM)
NEWMON7.ROM(MZ-700 互換モニタROM)
SP-1002.ROM(あれば。MZ-80K/C実機ROM)
1Z009.ROM(あれば。MZ-700実機ROM)
エミュレータ内に 6×8 で作成したフォントを持っていますので、フォントデータ MZ700FON.JP は必要ありません。
/MZROM/MZTAPE/
MZT イメージファイル
ファイル選択時のキーボード使用は、まだ対応してないです。M5Atom バージョンと同様に、以下の操作になります。
G0キー 押下:ファイル選択画面
G0キー 長押し:システムメニュー画面
各画面では、以下のようになります。
G0キー 押下:選択移動
G0キー 長押し:選択実行
プログラムの2段階ロード(BASIC読み込んだ後のBASICプログラム読み込みも含む)には、まだ対応できてないです。
2回目以降のロードは、直接メモリ転送できないので、いったんテープイメージをSDカードに展開しているのですが、うまくできていないっぽく…。