M5Stack FIRE用 PC-8801エミュレータが動作しましたので、公開します。
MZ-80C / PC-8001 エミュレータと同様、PSRAMを用いますので、M5Stack FIRE専用です。
動作はかなり遅いです。ゲームで遊ぶ、というよりは、起動を楽しむことを目的としています。
僕の目的は「デゼニランド」を起動することなので、必要な部分を優先して動くようにしています。
・起動モードは N88-V1固定
・画面モードは 640×200カラーモードのみ対応
・操作は「CardKB」が必要
M5Stack Official CardKB Mini Keyboard
PC-8801のエミュレータに興味があり、かつ、上記の環境を準備できる人って、かなり少なそうではありますが、気にせず公開します!
エミュレータのベースは X88000を使用しました。
Manuke Station : Project X88000
http://www.cug.net/~manuke/x88000.html
僕自身は、エミュレータを作れるような知識や技術はありませんので、M5StackでPC-8801が動作したのは、エミュレータのソースを公開していただけたおかげです。作者の方に感謝です!
元ソースから、以下の変更を行いました。
・大きな配列定義を ps_malloc で取得するようにする。アクセス部分もそれに合わせて修正
・画面出力部分をM5StackのTFT_eSpriteを使った描画に修正。画面出力は別スレッドで実行。
・ディスク読み取り部分を修正
・キー入力部分を修正
・ダイアログ表示処理を削除
・サウンド処理を削除
・パラレルポート(プリンタ)処理を削除
ソースはこちらです。
起動のためには、実機から取得したROMイメージファイルが必要です。
必要なファイルはX88000と同じです。X88000での動作を確認した後に、M5Stackで起動すると間違いがないと思います。
ファイルは、SDカードの /PC88ROM/ フォルダに入れてください。
ディスクイメージは、/PC88ROM/DISK/ フォルダに入れてください。起動時は”/PC88ROM/DISK/pc8801disk.d88″が読み込まれます。”pc8801disk.d88″が無い場合は、N88-BASICが起動します。
起動後、Bボタン長押しでDISKファイル選択が可能です。ファイル選択後は、システムリセットされます。
なので、ゲーム中のDISK入れ替えは不可能です。
いろんなゲームのDISKを入れ替えて、起動だけしてみる、という使い方を想定してます。
ArruinoIDEの場合、Arduino ボードマネージャでM5Stack FIREを選ぶと、PSRAM設定できるようになるので、PSRAM有効にしてコンパイルしてください。
Visual Studio Code + PlatformIOの場合、platformio.iniに以下を追加してください。
build_flags = -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue
設定内容は、こちらを参考にしました。
Docs » Development Platforms » Espressif 32
https://docs.platformio.org/en/latest/platforms/espressif32.html#external-ram-psram
デゼニランド起動の様子です。
PC-8801エミュレータ for M5Stack FIREです。
デゼニランドの起動を早送り動画でご確認ください。 pic.twitter.com/DjHgnm4gAX— Nochi (@shikarunochi) 2019年2月24日
16倍速の早回しでこれぐらい。横にあるストップウォッチにご注目ください。
デゼニランドのタイトルが出るまでに10分以上かかります。
PC-8801の画面は640×200、M5Stackの画面は320×240なので、横2ドット分を1ドットで表示する必要があります。ここは、2ドットの中間っぽい色で表示するようにしました。
「白」「黒」「白」「黒」の4ドットだと「グレー」「グレー」の2ドット、みたいに表示しています。タイリングペイント部分はいい感じに出ると思いますが、ものによっては違和感が出るかも。
こういうのだと、いい感じ。
デバッグ時には、X88000のステップ実行機能がとても役に立ちました。
命令を1ステップずつ実行して、M5Stackの出力ログとステップ実行時のCPUレジスタの値を比較して、異なっている箇所をチェックして、その原因を探って…という感じでバグ修正しました。
MZ-700の時と同じく、紅茶羊羹さんのサイトの「PC-8801覚え書き」メモリマップ、I/Oマップに助けられました。スゴイ情報です。
PC-8801覚え書き
http://www.maroon.dti.ne.jp/youkan/pc88/index.html
M5Stackを手に入れた当初、さすがにこの端末では、PC-8801やX1のエミュレータを動作させるのは不可能だろうと思ってました。「せめて表示だけでも!」と、JPG画像でデゼニランドを表示してみたりして…。
M5Stack 買ったときはJPG画像で表示するしかできなかったデゼニランド。あれから1年弱、いま、ホントのデゼニランドにたどり着くことができました…!感動だ。 pic.twitter.com/lMxADKn9Ul
— Nochi (@shikarunochi) 2019年2月24日
まさか、ホントにエミュレータを動作させることができる日が来るとは思わなかった。M5Stack FIREが4MBのPSRAMを搭載していたことで可能となりました。
コマンド入力アドベンチャーゲームの名作、「サラダの国のトマト姫」と「サザンクロス」も起動。いい感じ!
トマト姫、オープニング画面で10分ぐらい操作できなくなりました。実機だと音楽が流れるとこですね。 pic.twitter.com/LO4lxLKukc— Nochi (@shikarunochi) 2019年2月24日
あらためまして、エミュレータ作者の方と、M5Stack社の方に感謝です!
このエミュレータが実行可能なのは、2019/02/25 時点では M5Stack FIRE のみです!
Amazonリンク貼りつつ、なんですけど、海外からの通販に抵抗が無い場合は、本家M5Stack の AliExpress で購入してみるのもいいかと思います。販売されている商品の種類も多くて、価格も少し安めです。ただし、到着まで半月~1ヶ月ぐらいかかります。