ここ数年はXでの投稿をメインに活動していたため、ブログの更新がおろそかになってしまいました。今でも飽きずにMSXをいじってます。その中で ESERAMair という、似非RAMディスクをWiFi経由で書き換えられるカートリッジを作製しました。当初は自分用に作っていたのですが、色々あって、現在はBOOTHで販売するにいたってます。自分でもびっくりです。
BOOTHのページはこちら
使い方の詳細やFWは github で公開しています。
開発の様子はXで投稿していたのですが、販売も開始し一段落したのでESERAMairについてブログにまとめていこうと思います。
Table of Contents
ESERAMairとは?
似非RAMディスクにRaspberry Pi pico 2Wを載せて、WiFi経由で似非RAMディスクのSRAMを読み書きできるようにしたものです。
似非RAMディスクについては以前詳しく書いた記事があるのでこちらを参照下さい。
似非RAMディスクは、今の時代では入手困難なフロッピーディスク代わりのストレージとして便利に使えます。
ただ、似非RAMディスクにイメージを書き込むためには結局DOSが動く環境が必要になってしまいます。FDDが使えない機種しか持っていない場合は、似非RAMディスクを持っていても使い道がないんです。
そこで、似非RAMディスクのSRAMをPCから読み書きできるような仕組みを作りました。
図にすると以下のような感じです。

Raspberry Pi Pico 2Wという、WiFi機能を持ったマイコンを使うことで、似非RAMディスクのSRAMをWiFi経由でPCから書き換えられるようにしました。これにより、DOSが動作するMSXを持ってなくても、似非RAMディスクのセットアップや、中身の読み取りが可能になります。
具体的にどういうことができるの?
ここまで仕組みを書いてきましたが、
OKわかった。で、ESERAMairは何ができるんだい?
というところが気になると思います。
現時点では具体的に以下のようなことができます。(試験的な機能も含みます)
- ゲームをPCからESERAMairに書き込んで起動できる
(※バッテリバックアップSRAMには非対応)- ASCII8, ASCII16のメガロムイメージに対応
- 32kB以下の非メガロムゲームも対応
- 896kBのRAMディスクとして使える
- MSX-DOSやNextor(MSXDOS2互換)も使える
- ディスク内のファイルをPCからアップロード/ダウンロードできる
- hget.com でHTTPサーバからファイルをダウンロードできる (TCP/IP UNAPIに試験的に対応)
- SMB共有されているディスクイメージをマウントしてMSXのドライブとして扱う (実験版FWの機能)
- AIから制御させることもできちゃう?
一つづつ概要を説明していきます。
ROMゲームをPCから書き込んで遊ぶ
本家似非RAMディスクではMGLOAD.COMを使うと、保存しておいたROMゲームを似非RAMディスクに書き戻すことができます。ESERAMairではそれをWiFi経由でPCから実施することができます。

ESERAMairのメガロムコントローラはASCII8, ASCII16の形式に対応しています。自動識別ではないため、ASCII8と16はカートリッジ上のDIPSWで切り替える必要があります。
また、本家似非RAMディスクと違う点として、メガロムではない32kB (256キロビット)以下のゲームも起動させることができます。

896kBのRAMディスクとして使う
こちらも元祖似非RAMディスクにあった機能です。SRAMにNextorカーネルとRAMディスクドライバを書き込むことで、残りの領域をRAMディスクとして使うことができます。バッテリバックアップされているため電源を切ってもファイルが消えることはありません。
ESERAMairではそれを拡張してPCからディスクのファイルにアクセスできる機能を追加しました。
PCからは以下の画面のようにブラウザでファイルを操作することができます。

ファイル単位でアップロード、ダウンロードが可能です。
重要なポイントとして、MSXの電源を入れたままPCからも読み書きすることができます。ただし、原理上完全な排他が困難なため、同時アクセスするとファイルシステムが壊れる可能性があります。優しく扱ってくださいね。
これをつかうと、PCのエディタでで書いたTEST.BASをドラックアンドドロップしてESERAMairに書き込み、MSXからLOAD”TEST.BAS”でロードする、といった使い方が可能です。
同様に、MSXで描画して保存した .SC5 ファイルをPCから取り出す、という逆方向のファイルのやり取りも可能です。
HTTPサーバからファイルをダウンロードする(実験的機能)
これはNextorカーネルをインストールして、RAMディスクとして使っているときに使える機能です。
実験的にTCP/IP UNAPIというAPIを実装しており、TCPとUDPの通信が可能です。(ただし通信を待ち受ける機能は未実装)
Konamiman’ MSX Page で公開されている、HGET.COM を使うと HTTP サーバからファイルをダウンロードすることができます。HGET.COMを入れておけば、例えば以下のように msxhub.com から hub.com をダウンロードして各種ツールをインストールすることも可能です。
A> hget http://msxhub.com/hub.com
A> hub configure
A> hub install VI
※msxhub.comで配布されているツール類はライセンス的に問題があるものも含まれているようです。使用する場合は十分にご確認ください。
SMB共有のディスクイメージをMSXからマウントしてアクセスする(実験的機能)
こちらも実験的機能です。picoのFWを専用のものに書き換える必要があるのですが、SMB共有(Windowsの共有フォルダ機能)で共有しているディスクイメージをMSXにマウントすることができます。

PC側にイメージを用意することで、SRAMの容量(1MB)を超えた、10MB, 40MBといった大きなディスクを仮想的に使うことができます。
ただ、実験版ということもあり、現時点ではMSXとWebブラウザでのファイル操作は同期されません。PCから書き込んだファイルをMSXからアクセスするには、一度MSXをリセットする必要があります。
この仕組みは、PCとMSXでファイルのやり取りをする用途というよりは、MSXを主体に使って開発したりする場合や、1MBを超えるファイルを扱いたい時に便利だと思います。
最近だと、4MBもの容量のメガロムカートリッジ(ASCII16-X 4MB)などが出回ってきており、これらのカートリッジに4MBのROMイメージを書き込みたい時などにも活躍しそうです。
SMBイメージマウント機能を持った実験版のFWはこちらで配布しています。
AIからMSXを制御する? (MSXでの開発に使う)
最近はAIの発展が目覚ましくて、MSX界隈でもAIを使って今まででは考えられないような動作をするデモやゲームが現れ始めています。AIエージェントにMSXエミュレータを扱わせることで、開発→実行→デバッグのサイクルをAIが高速に回してちゃんと動作するプログラムを作れるようになっています。すごい進歩ですよね。
そんなAIにMSX実機を繋げる手段としてESERAMairが使えるかもしれません。
ESERAMairは、PCからESERAMairのROMの書き換えや、ファイルのアップロードなどができますが、それらは全てREST APIで実現しており、その仕様をオープンにしています。
REST APIがなにかよく分からなくても、このドキュメントをAIエージェントに読み込ませれば、ばっちりESERAMairを使いこなして、自作メガロムゲームなどをESERAMairにデプロイしてくれます。
とはいえ、AIがこんな状況になるとは夢にも思ってませんでしたし、もともとはAI向けの機能ではなかったんです。
REST APIを公開したのは、今でもMSXのゲームなどを作ってくれているクリエイターさんの労力を減らしたいという思いがあったからです。
今どきはもう開発はエミュレータで行うと思いますが、最後の実機確認や実機でのデバッグは必ず必要になります。そのときに、PCでビルドしたものをFDやROMに書いてデバッグってすごく効率が悪いんですよね。このデバッグサイクルを短縮してより効率的に開発できるようになって、少しでもMSX界隈が賑わってくれたらなと思ってREST APIを作りました。
ビルドスクリプトからも curl などで簡単に呼び出せますので、PCでビルド→ビルドスクリプトの最後に自動でESERAMairにデプロイ→MSXをリセットすれば即実行!というサイクルで開発ができれば非常に楽になるのではないかと思います。
最後に
ESERAMairでどういうことができるかを駆け足で説明しました。なんとなく伝わったでしょうか。
今年の6月に南関東MSXユーザの集い(通称:ミナカン)で、ESERAMairのデモをさせていただく機会があったので、その時のyoutubeに実際に動かしたときのデモ映像が残っています。1:05:00あたりからプレゼンが始まりますので良かったら覗いてみてください。
説明に使った資料も貼っておきます。
もし興味を持っていただけたらBOOTHから購入できますので、ぜひご検討ください。よろしくおねがいします。
