見出し画像

ブラウザ上で動くPC-98ソフトプレイヤー「QuuBee」を開発しました

コンセプト、概要

PC-98のゲーム / ソフトをお手軽に楽しもう

かつて日本で圧倒的なシェアを誇っていたパソコン「PC-98」。
その当時、メーカー製ソフトだけでなく、一般の人たちが作ったゲームやソフトが、とてもたくさん流通していました。
いまでもいろんなところで見つかる。けれど、いまでは動かすのは大変。
そんなゲームやソフトを、おてがるかんたんに使えるようにしてみました。


動作環境、ターゲット

まず必要なのは、Chromeなどのブラウザ。この↓サイトを開いてね。そこで全部が動きます。

キーボード / マウス / ゲームコントローラーを、必要に応じて使います。

かつて、個人や小規模グループが開発したフリーソフトや同人ゲームが主な対象です。
メーカー製ソフトはターゲットではない。
(ディスクイメージからのブートはできません。意図的にそうしてます)

完璧に動くわけではない。動くのは動く。ダメなのはまだダメ。ソフトを動かすための仕組みが、既存のものとは根本的に違うためです。
ちゃんと動かないソフトの例として、FD(ファイル操作ソフト)、VZ Editor(多機能テキストエディタ)、air craft(通信ソフト)などがあります。気が向いたら対応します。
PC-98のキーボードにある特殊キー(NFERとか)には対応してません。動いたらそれは偶然です、たぶん。

更新履歴

2026/05/25 開発開始
2026/06/01
こっそりリリース
2026/06/02 フロッピーディスクイメージ対応
2026/06/03 MKDIR/CHDIRなどの対応とファイル一覧への即時反映、CPU周りの最適化、FM音源調整
2026/06/04 .bat実行の初期対応、音質の劇的改善
2026/06/05 CPU動作調整(自動調整機構)、MIDI仮対応(鳴らんことはない程度)
2026/06/07 テキスト表示改善(ESCシーケンス)、テキストビューアでの98罫線の初期対応、MAG画像のプレビュー
2026/06/08 VRAM関連の挙動を改善、poke8/peek8の重複統一
2026/06/09 Load Overlay、シフトJIS名ファイル読み込み、コンベンショナルメモリ確保と解放を実DOS相当に
2026/06/10 .batファイルの主要コマンド対応、SJISファイル名なファイルを自己生成するソフト対策、ゲームコントローラーにカーソルキー等を割り当て、画面クリア系命令への対応
2026/06/11 .batインタプリタの改善(ゲームで必要な程度を網羅)、環境変数COMSPECを追加、互換性チェックを改善、テキストビューアの行間をゼロに(よりPC-98ぽく) & VZ Editorのタグジャンプ対応
2026/06/12 サイトのデザインをクリーンに、UI改善、初回起動時に宣言表示
2026/06/13 MIDIサポートを拡大(サウンドフォントを新しく、MPU追加、リバーブ他エフェクトをサポート)
2026/06/14 CPUオートロックを既定オフに(音楽がもたつく主因)、MIDI改善(リバーブ由来の変な共鳴の軽減など)、.batインタプリタ拡充(set / cd)、.zip展開の改善
2026/06/15 FM音源ファイル(.M形式)プレビューの初期対応
2026/06/16 FM音源ファイルの演奏プレビュー機能追加
2026/06/17 YM2608のリズム音源対応(本物はYAMAHAの著作物なので代替品を使用)、紹介記事執筆(これです)
2026/06/18 メインスレッドからエミュ部分を切り離して音声部をメインに(音声は乱れず、ブラウザがバックグラウンドに回っても音楽が途切れず、映像はスムーズになった)、既定のCPU設定を50MHz固定に
2026/06/20 音のピッチを正しく(半音半高かった)、VZ Editor初期対応(起動、一通りの入力程度)
2026/06/21 画面下にテキスト入力欄を追加(日本語が入力可能に)、ia16-elf-gccでコンパイルされたEXEファイルを起動できるように、ゲームパッドのR1にShiftキー/L1にCtrlキーを追加、FONT.BMPの欠けを仮修正(→新JIS8区罫線とかは実機では無いみたいだけどせっかくなので残す)
2026/06/22 サブディレクトリにあるEXEなどを起動するとうまく動かなかったのを修正
2026/06/23 テキスト入力欄にフォーカスがあり文字が無いときに「改行、カーソルキー、BackSpace、Del、HOME、PageUp、PageDown、Insert、Tab」がそのままソフトに通過するように
2026/06/24 .bat内でcdしたあとに実行ファイルを起動してもカレントディレクトリが追随してなくてデータなど読めなくなってたのを修正(6/22のと対称にすべきだった)、98起動音とメモリカウントをスキップ、キー入力の認識を改善


どんなものか

PC-98全盛期、フリーソフト/シェアウェアと呼ばれる主に個人開発のソフトは、圧縮(書庫)ファイルで配布/流通していました。主に.lzh形式、たまに.zip形式。自己解凍EXEなんてのも。(え、ISH?そんなのは忘れた)
このWebアプリ「QuuBee」は、そういったファイルを読み込み、中に入っている実行ファイルをすぐに起動できます。


PC-98エミュレータ等との違い

当時のPC-98ソフトをいま動かすには、主に以下の3つの方法があります。

①PC-98実機
当時のまま、PC-98実機というハードウェアで動かす。発売から数十年が経っているので、もちろん中古。価格は高騰してるし劣化が進んでいて動くとは限らない。購入はギャンブルみたいなもの。そして、いつか全部ぶっ壊れる運命。

②エミュレータ
実機をソフト的に模倣する。PC-98ソフト側には実機で動いているように見せることで、実機上ぽく動作する。
本気で忠実に動かすには実機から抜き出したBIOS、MS-DOSといったものが必要で、でも現物は入手困難。どちらも正式にはNECとMicrosoftの著作物なので、ネットのどっかで拾って勝手に使うのは良くない。

③便利な(?)サイト
海外にはこんなサイトがあるみたいですよ→リストから遊びたいゲームを選ぶと、サイト上でエミュレータが動き出し、BIOSとMS-DOSとか経由してゲームが起動する、ってサイト。使ったことはないのでよくわかんない。著作権的にはグレーあるいはブラック? ちょっと不安。

①は入手困難。②は大変。③は不安。

そこで、私はこんなサイトを作りました。
ソフト/ゲームのファイルを各ユーザーが正当な手段で用意し、ブラウザで読み込ませると、BIOSもDOSも使わずに実行ファイルを直接起動させる。ブラウザベースなのでアプリのインストールは不要。
実機を再現するのが主目的ではないので、エミュレータではなくプレイヤーに近いですな。


使いかた

まずは、正当な手段でソフトやゲームを入手しましょう。たとえば、Vectorってサイトが有名かつ正当です。

パズルゲームあたりが、まずはお試しとしていいかもね。

つぎはここ↓です。これが私の作ったプレイヤーサイト、QuuBee
ブラウザでふつうに開いてみてね。初回起動時は宣言文が出ます。

サイドバー左上の「Open」ボタンを押し、さっきダウンロードしたファイルを指定。ファイルを直接ドラッグ&ドロップしてもいい。

画像
QuuBee画面

すると、サイドバー上半分に、ファイルの内容物が展開されます。

「▶︎」みたいなアイコンのが起動できるファイル。.EXE、.COM、.BATがそうなんですが、BATファイルはソフトのファイルそのものではなく、いわば起動レシピのようなものです。BATファイルがあるということは、それを起動してほしい、という開発者の意図の表れと思って良いです。

「三」みたいなアイコンが文書ファイル。.TXTの他に、.DOC、.MAN、.HED、なんてのも。タップするとサイドバー下半分でプレビューできます。ちゃんと読みたかったら「View」ボタンを押してね。当時っぽい画面がポップアップします。黒背景に白文字、等幅で行間なし。マニュアルがほぼ必ず入っているので、よく読んでおこう。

「◾️」みたいなアイコンが画像ファイル。いまはMAG形式のファイルのみ対応。タップするとサイドバー下半分でプレビュー、「View」ボタンでポップアップして大きく見れます。

「♪」みたいなアイコンが音楽ファイル。いまは.M形式(FM音源)のみ対応。タップすると下にタイトル、「▶︎Play」ボタンでポップアップしていろんな情報とともに再生開始します。あ、実機とは若干違う音です。


じゃ、ゲームを起動してみますか。BATファイルが1つだけならそのままサイドバー中央右端の「Run」ボタンを押す。いくつかあったら同梱ドキュメントを参考にして、良い感じのを選択しRun。BATがなかったらEXEファイル、それもなければ.COMファイル。
すると、起動音がピコっと鳴り、メイン画面に起動画面がちょっと出て、すぐにゲームが動きます。
サイドバーが邪魔だったら、境界中央の「▶︎」でちっちゃくしておこう。
ゲームを停止したくなったら「Stop」ボタン。
なんかファイルを追加したかったら「+」ボタン。
(ゲームじゃなくて)画像エディタでお絵描きした、ファイルを保存した、それを外に出したいってときは、サイドバーでそのファイルを選び、「Save」ボタンで即ダウンロードされます。保存したファイルをあとで読み込ませたいときは、上記同様に「+」ボタン。
ソフトを閉じたくなったら、サイドバー上部左端の「×」ボタンを押下すると「閉じていいですか?」の確認ダイアログが出るので、OKすると全部閉じます。スコアファイルなども全部消えるので、もし残したかったら上記手順で.SCRファイルなどを保存しておくといいですね。ファイル右端のタイムスタンプを見て、今の時刻のがあればたぶんそれです。


注意事項

  • 音は実機忠実ではないです。「なんとか演奏できてるといえないこともないかもしれない」レベルです。期待しないでね。

  • MIDIを使うソフトやゲームを最初に起動するとき、音のソース(サウンドフォント)をダウンロードする必要があるので起動がちょっと遅れます。2回目以降はキャッシュが効くので、もっとずっと早いです。

  • Apple系デバイスだと、メイン画面領域をクリックやタップしてからRunを押さないと音が出ないっぽいです。セキュリティの関係なのかな。

  • ゲームコントローラーをホストPC等につなぐと一応使えます。キーコンフィグは今のところありません。カーソルキーが十字キーに、エンターとスペースとESCなどが右手ボタン系に設定されています。気が向いたらキーをカスタマイズできるようにします。


開発動機

PC-98現役の当時は、ソフトを使うってのはこういうことだったのですよ

Vectorや個人のホームページ、パソコン通信/草の根BBS、雑誌やムックのおまけ等からソフトの書庫ファイルを入手する。ファイルの中身を展開する。実行ファイルを起動するとゲームが始まる。ここまでの下準備はもちろん必要だけど、準備済みならお手軽。
いまのスマホアプリと似てないですか。ストアからダウンロードする。アイコンがホーム画面等に追加される。アイコンをタップするとゲームが始まる。手数とかルートはちょっと違うけど、お手軽さのレベルは大差ないのでは。

でも、現在(2026年時点)の環境でPC-98のゲームをするとしたら? PC-98実機は入手困難なので、エミュレータを見つけてきて、必要に応じて実機から抜いたBIOSを設定し、仮想フロッピーディスクファイルや仮想ハードディスクファイルを用意し、何らかの手段でシステムフォーマットしてconfig.sysやautoexec.bat等を編集し、入手したソフトを仮想ディスクに入れ、いろんな設定オプションを設定し、仮想マシンを起動するとDOSが起動するので、コマンドを叩いてようやくゲームが起動する。
…めんどい!

だから、当時っぽいお手軽さを再現したいな、ってのが動機です。


どんなふうに動くのか

ベースはエミュレータです。界隈で有名な「Neko Project」ってのがあり、その派生版の「Neko Project II (NP2) 改変」をベースに、Webページで動くかたち(WebAssembly / wasm)にしてます。

PC-98ソフトを直接動かせるように、DOSへの命令(INT 21h系)をDOSなしで返すようにしてます(自作HLE-DOS)。ハードウェアへの直接命令はNP2Kaiに任せる。HLEとLLEのいいとこどりですな。
FM音源ファイルを再生するために、KAJA(梶原正裕)氏のPMDドライバをソースからビルドして搭載してます。ソースを公開していただきありがとうございます。

その他、使わせていただいている著作物は以下に列挙しています。

CPUとしては i486DX2-50(50MHz)くらい。メモリは640KB+32MB程度を使えるのが目標。具体的にどの機種に該当するのかは、うーん、よくわからない、興味がない。なんにせよ動けばいいのでは?


つまり、なにが実現できる?

NEC BIOS、MS-DOSは使ってないので著作権クリーン。
DOSを使わないのでソフト起動までが速い。
ベースは定評あるエミュレータなので互換性はそれなりに確保される。
設定項目なし。

当時のソフトを楽しむまでのハードルを極限まで下げている。

書庫ファイルの中身、とくにマニュアルやドキュメントを読める。

開発者の思いを知ることができる。著作権者が誰なのかを確認できる。

結果、著作権クリーンのままでPC-98文化の継承と追体験を促すことになる。

こういうアプローチは、私の知る限り、無い。
(あったら教えてね)


開発の思い出など

開発はほんとに楽しかった。

  • さめがめ(とってもシンプル、動きはほぼない)

  • GO!GO! うさちゃん列車(それなりに動き音も鳴る)

  • ザルバールの蒸留塔(マウス操作と液体シミュレーションとFM音源)

  • Ray(音楽と映像の同期)

  • Super DepthなどBio_100%製の諸作品(傑作がたくさん)

  • 東方旧作の体験版(同人の極み、当時最高峰の音楽、弾幕の嵐)

  • 某所隠しページ内のMMLデータ(素晴らしいFM音源データ)

目標は上記ゲームとソフトが動くこととして、順に対応していった。頑張れば動く。動かなかれば原因を探ると動くようになる。やりたいことを追加していくと、理想に近づく。こういうのは純粋に楽しい。Claudeさん(特にFableさん)との協働作業でしたが、やりたいことの提示と違和感表明は全部が人間。PC-98実機の挙動に関してはこっちのほうが詳しいからね。開発中のあれやこれやはこのへんに↓書いた。

著作権的にグレーやブラックなのは避けたかった。NECのBIOS、MS-DOS、YAMAHAの音源などをパクればすげー簡単に良くなる、けど、それはやらなかった。開発者様への敬意がベースにある。
書庫ファイル同梱のマニュアル(著作権表示含む)はShift JISで読みにくい、ので、簡単に読めるようにした。それもそういうことです。
後ろ暗いところがないことを証明したくてソースコードも公開した。全体としてGPLv2+で、私(たち)が書いた部分はMIT LICENSEです。ライセンスの範囲内でご自由にお使いください。


ところで、QuuBeeってどういう意味?

PC-98

きゅーはち

キュー、蜂

Quu、Bee

QueではなくQuuとしたのは、Wiiみたく個性的で楽しそうな印象にしたかったから。
英語圏だとキューとは読まないし(たぶんクー)、なぜBeeなのか意味がわかんないと思う。まあいいや。


最後に

ソフト作者、ゲーム作者、エミュレータ作者、ドライバ作者、実機開発者など、関係者全員に感謝です。すばらしいものを作ってくれてありがとうございます。私はそれらを組み上げただけです。


なんかへんなことがあったら、それはまだ未対応なだけです、たぶん。
いろいろがんばります。
ここにいいねとかコメントとかしてね。喜びます。
では。




いいなと思ったら応援しよう!

この記事が参加している募集

ピックアップされています

生成AIあれこれ

  • 64本

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
ハッピーな音楽、超絶技巧な小説、古き良きレトロゲーム、ニッチなスマホアプリ開発、娘のための編みぐるみ作り、売れそうにない微妙ガジェット、ノリで作る即興料理、超難解な折り紙、などが好きです。
ブラウザ上で動くPC-98ソフトプレイヤー「QuuBee」を開発しました|msonrm(なるなる)
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1