PicoCalc で MZ-700 エミュレータ

DevTermuConsoleClockwork Pi 社から、新しいミニ端末が発売されました。

PicoCalc
https://www.clockworkpi.com/picocalc

今回は Linux 機ではなく、M5Stack と同じようなマイコン搭載機です。Raspberry Pi Pico が付属してます。
上位機種の Raspberry Pi Pico 2 とも差し替え可能です。(ピン互換の Linux が動作するコントローラと差し替えてLinux機として遊んでいる人もいるみたいです)

入手した時の様子はこちらです。


2025年4月に入手して、一度MZ-700エミュレータ移植に挑戦したのですが、その時は成功せずに挫折していました。
夏休みに再挑戦して、ある程度動作できるところまで来ましたので公開します!


プログラムは、Raspberry Pi Pico 2 用となっています。Raspberry Pi Pico 用にはビルドしたことないのですが、メモリ足りなくて動かないんじゃないかと思います。
(Raspbery Pi Poco 2 が RAM 520KB、Raspbery Pi Poco が RAM 264KB です)

MZ-700 Emulator for PicoCalc with Raspberry Pi Pico 2
https://github.com/shikarunochi/PicoMZ700

bin/PicoMZ700.uf2 がビルド済のプログラムです。

SDカードに以下のようにフォルダ作成して、ROM / MZTファイルを入れておいてください。

/MZROM/
MZ700FON.JP
NEWMON.ROM
NEWMON7.ROM
1Z009.ROM (実機ROM。あれば)
SP-1002.ROM(実機ROM。あれば)

/MZROM/MZTAPE/
MZT形式イメージファイル

実機やイメージファイルを持ってない場合も、互換ROMなどで動作可能です。必要なファイルは、以下のサイトで揃うと思います。(ファイル管理と再配布、助かります!ありがとうございます!)

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

M5Stack用MZ-700エミュレータの使い方でのファイル解説も参考になるかもです。(エミュレータの操作方法は全然違っていますのでそこは参考にしないでください…。)

M5Stack:MZ-700 エミュレータの使い方
https://shikarunochi.matrix.jp/?p=2984

キーボード操作は、ほぼキートップ通りに入力できるようにしてあります。Caps:英数 / Del:カナ / End: GRAPH / TAB:INSERT に割り当てています。
現状のキーボード処理では、キーのリアルタイム押下状態を取得することができないので、アクションゲームを遊ぶと厳しいですね…。
あと、CTRLキー単体での取得ができないので、TinyXEVIOUS はザッパーが撃てないです。

SHIFT + 上カーソルボタンでファイル選択画面、SHIFT + 下カーソルボタンでシステムメニューが表示されます。
各画面では、カーソルで上下操作、Enter / SPACEで選択、ESC / BS で元の画面に戻るです。

システムメニューでは使用するモニタROMの選択、サウンドのON/OFF(起動時はOFFです)、PCG ON/OFF 設定が可能です。

MZTイメージは、起動直後はメモリ直接コピーでの高速読み込みを行い、2回目以降のLOADはテープの動作をシミュレートした読み込みとなります。
テープ動作シミュレートする時は、Raspberry Pi Picoは、オンメモリで処理するだけのメモリ余裕が無いので、MZTをエミュレータ読み込み用のデータに展開したテンポラリファイルを作成して、そのファイルから読み込んでいます。

ちなみに、複数バイナリが連結されているMZTファイルは、メモリ直接コピーでは動作しないので、システムメニューで MZT LOAD MODE をCMT EMULATE にしておくとうまく読み込める場合があります。

SAVEには対応してないです。メモリ少なくても動作できる、うまい方法があればよいのですが。


エミュレータプログラムは、まるくんさんのWindows用MZ-700エミュレータ「MZ700WIN」を、Oh!石さんが「mz80rpi」としてRaspberryPiに移植されていたものを改造して作成しました。
公開ありがとうございます!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です