M5Stack:PC-8801 エミュレータ!

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を使った描画に修正。画面出力は別スレッドで実行。
・ディスク読み取り部分を修正
・キー入力部分を修正
・ダイアログ表示処理を削除
・サウンド処理を削除
・パラレルポート(プリンタ)処理を削除


ソースはこちらです。

https://github.com/shikarunochi/m5n88

起動のためには、実機から取得した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


デゼニランド起動の様子です。

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 FIREが4MBのPSRAMを搭載していたことで可能となりました。

あらためまして、エミュレータ作者の方と、M5Stack社の方に感謝です!



このエミュレータが実行可能なのは、2019/02/25 時点では M5Stack FIRE のみです!


Amazonリンク貼りつつ、なんですけど、海外からの通販に抵抗が無い場合は、本家M5Stack の AliExpress で購入してみるのもいいかと思います。販売されている商品の種類も多くて、価格も少し安めです。ただし、到着まで半月~1ヶ月ぐらいかかります。