雑記帳

電子計算機の"明後日"から、他愛もない話まで。

次世代MSX(MSX3?)に関する話

西和彦氏の次世代MSX(MSX3?)に関する話をチラホラ目にするようになりました。
どうやら、先月末より西氏がTwitter上で情報を小出しにリークしているようです。

https://togetter.com/li/1768118

これを見ると興味の方向性が人それぞれで面白いですね。懐古趣味として「かつて見たMSXの復刻・発展進化系」を期待する方もいれば、「今の時代にMSXのようなコンセプトのマシンを立ち上げるなら一体どんなものになるのか」という方向で期待してる方もいます。

私は後者の視点でこれを眺めていました。それもそのはず、リークされてる内容やそのリプライに、ところどころウチの電脳文庫プロジェクト(これを実現するシステムとしてのScrapstick)と近しいところがあって、内心落ち着かないからです。

前述の私の視点からもお分かりと思いますが、いわゆる"MSX"部分のような上っ面は全く関係ありません。それを実現する為の、想像されうる実装形態のところや、もっと未来志向の部分の話です。


ここで私がやっていることを簡単にまとめおきます。

「電脳文庫プロジェクト」といいまして、古今東西・時代を超越したあらゆるハードモジュール・ソフトモジュールを集結させて自由に組み上げられる混沌とした環境…という目標像を描いています。各モジュールは実在するハードかもしれませんし、或いはそのエミュレータ、或いは架空のデバイスを模したモジュール、或いはライブラリ、或いはもっと抽象的なもの、或いは単なるアプリかもしれません。プロジェクト名は、あまたのモジュールを本に見立てて、モジュールが集結している様を図書館になぞらえたものです。

計算機界のスマブラといいましょうか、バーリ・トゥードといいましょうか。

これをもう少し具体的に書いたのがこれの「例えばx64 PC上で、SPARC向けに書かれたアプリケーションが、68000向けに書かれたTCP/IPスタックとARM-v6向けに書かれたモデムドライバと実機モデムを経由して通信を行い、Z80向けに書かれたV9958を使うコンソールに結果を出力」…という下りです。また、同記事にもありますように、実機ハードウェアもソフトモジュールと等価に扱われますので、エミュレータ・実機を利用者都合で自由に切り換えたりできる構造になっています。*1

これを実現する為のシステム部分が「Scrapstick」です。所謂バスにあたる部分ですね。ハード的なアプローチ(バスプロトコル)とソフト的なアプローチの両方での実装を想定しています。

…ここまでは、説明の為に割と懐古なモチーフを出してきましたが、自分としては、過去も未来も何もかも対等に扱う、というコンセプトこそが重要であって、懐古の方にリソースを割きたい訳ではありません。むしろ未来指向のつもりでいます。その点はあしからず。


一方、氏がどういったアイディアの元に作ろうとしているのか探ってみますと、断片的ですが、

次世代のMSXを開発している。CPUはARMとR800FPGAの上で何にでもプログラムできるハードウェアでRaspberry Piと同じ大きさの基盤にした。

http://library.nishi.org/essay/?y=2018&m=08

私が今作っているのは巨大なFPGAを搭載し、高速のBUS構造を持ったアーキテクチャをソフトウェアでプログラミングできるワンボードコンピューターを設計している。

http://library.nishi.org/essay/?y=2019&m=06

といったものが見つかります。

この辺りの、ソフト的にごにょごにょできるバス構造…、さらに、複数アーキテクチャのプロセッサが共存できる構想や、I/Oサイドのマルチアーキテクチャ構想まで踏まえますと、そこからイメージされるシステムの姿は前述した私の目標像と近しいものに見えます(私のものよりも、もう少し地に足ついている印象ですが)。

さらに、こちらは他の方の質問ツイートがきっかけですが、Arm → MSXアドレス空間へのアクセスをできるようにするといったアイディアまで出ています。この手のARMサイドからの制御の話まででてくると、そこから先に一歩踏み出すだけで(ようは、相互にエミュレータが絡むようになるだけで)、Scrapstickの(将来の)実装面などとも近いところにきてしまいます。


正直「有名人と(部分的にでも)ネタ被りしてしまったぞ!!」という気持ちです。光栄に思うべきところかもしれません。

…しかし、そのせいで気が気ではありません。というのも、先程、雄弁と私のプロジェクトの概要を書きましたけど、実はまだScrapstickの最初のリリースすら漕ぎ着けていない状況で、あちらに先を越されてしまうのではないかと戦々恐々*2しているからです。


……あぁ、まって、まだページ閉じないで! 与太話じゃないんですよ! ちゃんと作ってるんですよ!


今作っているのはWindows上で動くシェル兼用のScrapstickバス実装です。なので、初回リリースの段階では直接ハードウェアを叩くことができません。Scrapstickバスの機能を適当な1チップマイコン辺りに移植した段階からそういった話ができるようになると思います。最終的にOSとして機能する代物の実装を目指してはいますが、Windows版以降をどういう順序で作るかはまだ具体的に決めてません。何ならハイパーバイザ版作るかも(実験環境ができたので)。それくらい流動的です。

そして、そのWindows版実装がまだまだリリースできる代物ではない…という状況です。

電脳文庫プロジェクトのページの初出は2015/02/08、その直前に某イベントの敗者復活戦に簡単な可動物を持ち込んでいて、当然開発はそれよりも前から進めてますので…自分で言うのもアレですが、相当難産です…。

尚、その時以来「○○頃に出せそう」→「延期」を繰り返してたんですけど、まぁ端から見たら「出せる出せる詐欺」状態ですよね…。なので、現在では(2019年末以来)「いつ頃出せそう」とは言わないようにしてます…。*3

では、何がそんなに難航してるのか…なんですが、もうとにかく、やりたいことに対して実現できない/面倒くさいパターンが発覚して再設計…を繰り返してるんですよね…。直近ですと、上記記事で述べた「複数のScrapstickインスタンス間で連携する機能」の実装にあたって、当時のバスシステムだと色々問題があることがわかって、かなり大規模な再設計に入りました。結局これ、丸1年近く「天使待ち」状態になった挙げ句、なんとか大半の課題を解決できる妙案を捻り出せたのですが、1コだけくすぶり続けてる問題が残っています。なのでまだ天使待ちですね…。枝葉末節の実装はサラサラ進むんだけどなぁ…。

今まで趣味でも仕事でも、ある程度用途や目的が具体的に決まっているものばっかり作ってきたので、こういう真に汎用的な道具を作るというのはとても難しく感じています。何かもう禅問答とか哲学の世界ですよ、これ。もしかしたら単に端から見てどうでも良いところで高望みしてるだけなのかもしれないですけど、なのに端から見て重要なところが片手落ちだったりするんです(動かしてみて / 使ってみて気付く。毎度このパターンです…)。変な拘りが強すぎるのかなぁ…。

尚、2018年の総括で書いた考え方からは変化してません。あくまでもScrapstickバスの構成がゴリゴリ変わっただけです。仮に今後また大幅な変更が入ったとしても、この点がブレることはありません(でないと作る意味が無い)。


最後に、もう少し両者を掘り下げて見てみます。

氏の次世代MSXはハードウェア実装が主体であることが伺えます。前述のように、高速性をウリにしてる節があること、外バスに追加CPUをぶら下げられる設計にすることを示唆していること、エミュは嫌だと仰っていることなどが論拠です。

一方私のScrapsticは、バスを模すことができるソフト実装が主体です。エミュレータを多段に繋ぐ前提で、遅く、タイミングに依存するアプリには不向きです。でも目茶苦茶自由度があります。さらにいえば、私の方は物理的なハードウェアバスを自作するプランを持っていません*4

恐らく、「遥か遠くに見いだしている姿」こそ似通っているものの、そこに至るまでに想定している経路は違う道なのではないでしょうか。なんとなくそんな気がしてきました。

ただ、今後Scrapstickが育ってFPGAとの連携を考えようとしたとき、きっと似たようなFPGA SoCを使ってごにょごにょやることになると思うので(というかそれを見越してZynqボード買ってたので)、そうすると実装形態面でモロ被りしそうだなぁ…という印象です。また、他の方の意見等も取り入れて方針が変わって来たりしても、同様のことが起こりそうです。まぁそうなりそうになったらなったで、こっちが次世代MSX向けにブリッジを作るとか、そういう共存関係で良いのかもしれません。


最初に挙げたTwitterまとめを見ますと、今なお根強いファンのアツさを感じることができて、改めて凄いなと感じました。私が物心ついた頃にはもうMSXの黄金時代が終わってしまった後だったので、当時の趨勢を直接見聞きすることはできなかったのですが*5、今回その熱気の一端を覗き見ることができた気がします。

お互い良い形で世に出すことができると良いですね。関係者各位、是非頑張っていただきたいです。私の方もそうできるべく頑張りたいと思います。

*1:一例を挙げると、uPD765Aのエミュレータ(ディスクイメージを読み書きする)と互換ハードウェア(実機FDDが繋がる)の切替とか。これを、FDCへアクセスするアプリの側で予め準備工事をしておかなくても共存・切替できる仕組みです。というか普通に組むと自然とそうできる仕組みといいますか。

*2:それに、前掲の例のように、猛者達が氏に寄せるネタの中に鋭いものがあったりして、加速度的にアイディアが「育って」しまうのでは…という底の見えなさも怖いポイントです。

*3:ちなみに西氏の次世代MSXの方も、何度も「○○頃に出せそう」状態だったようです…。そんなとこまでシンクロしちゃってましたよ…>私。

*4:ハード側との連携は、既存のバスをScrapstickバスとして取り込んで見せたり、既存の通信経路の上にScrapstickバスの通信を流したりする方式を考えています。例えば、あるチップ ⇔ JTAG ICE ⇔ Scrapstickと繋いで、対象のアドレス空間レジスタをScrapstickバス上にマップしてアクセスできたり。各モジュール間の伝送経路がUSB-COMだったりTCP/IPだったり。ゆえにハード側では、バスではなくバスプロトコルの開発を目標としています。

*5:私は辛うじてPC-98x1の最後っ屁を見届けた世代です。また、やや遅れてFM TOWNS系やFMR系の残滓にも触れることもできました。