M5Atom の MZ-700 エミュレータでは、メモリが少ないため、テープイメージの MZT ファイルをエミュレータ読み込み用のイメージにメモリ上で展開することができず、MZT ファイルを直接メモリにコピーするという方式のみ対応していました。
このため、リセット後に1回しかプログラムの読み込みができません。マシン語2段ロードや、BASIC 本体を読み込んだ後に BASIC プログラムを読み込む、ということもできませんでした。
BASICに関しては、S-BASIC / SP-5030 のワークエリアに直接読み込む方式もやってみたのですが、やはり裏技っぽい感じなので、もうちょっとなんとかしたいところ…。
(プログラムリストの作者名を誤っていたので再Tweetです。)
Enri さんのページを参考に、MZT ファイル TYPE=0x02(BASIC)の場合、SP-5030のプログラムエリアに読み込み、BASICワークエリア 0x4634~0x4645を設定してBASIC プログラムのメモリ直接読み込みに成功しました!https://t.co/uLLQlHab97 pic.twitter.com/Agyqwd9Ukm— Nochi (@shikarunochi) November 30, 2021
MZ-700 S-BASIC(TYPE=0x05)でもやってみました。
SP-5030はBASICプログラムの相対アドレスを絶対アドレス変換する必要あったのですが、S-BASICは相対アドレスのままでOKでした。
起動しているプログラムは、こちらで公開されている THESPY です。ありがとうございます!https://t.co/GERaqU44SR pic.twitter.com/a58kL9Q1By— Nochi (@shikarunochi) November 30, 2021
そこで、移植元プログラムではメモリ上に展開していたテープイメージを、SPIFFS 上に展開してみることにしました。(フラッシュメモリなのであまり頻繁に書き込みしたくないところではありますが、このさいヨシとしましょう!)
MZ-700エミュレータ for AtomDisplay、テープのイメージデータをいったん SPIFFS に中間ファイルとして展開しておくことで、テープイメージの読み込みに成功しました!BASICはメモリに直接コピーしてますが、その後のプログラムはテープデータのまま読み込んでいます。 pic.twitter.com/ULEaBzVyQK
— Nochi (@shikarunochi) December 9, 2021
BASIC はメモリに直接読みこみ、その後、BASICプログラムを SPIFFS に展開したうえでロードしています。
Hu-BASIC プログラムも読み込みオッケーです! pic.twitter.com/HAbvzMuaym
— Nochi (@shikarunochi) December 10, 2021
プログラムはこちら。M5Atom はバイナリデータでの配布は難しいので、ソースのみ公開です。PlatformIO でビルド&実行してください。
MZ-700 Emulator for M5Atom + AtomDisplay +Bluetooth Keyboard
https://github.com/shikarunochi/m5z80/tree/master/m5z700AtomHDMI
エミュレータ詳細はこちらをごらんください。
M5Atom + AtomDisplay で MZ-700 エミュレータ
https://shikarunochi.matrix.jp/?p=4547
最初に移植した M5Stack Fire 用よりもだいぶ高性能になったので、フィードバックもかけたいところではありますが…。(ソース整理ニガテ)