250323 AXエミュ製作 [15]86BoxにJEGAエミュレーションを追加
![Image: 250323 AXエミュ製作 [15]86BoxにJEGAエミュレーションを追加](/blog/img/2025/axemu-86box-dev_4.webp)
86BoxにJEGAエミュレーションを追加することに成功しました。
JEGAはChips and TechnologiesのSuperEGAに日本語表示機能を持たせたもので、実体は日本語の文字ジェネレーターを追加しただけのSuperEGAのスーパーセットなので、開発に掛かった時間はPS/55エミュレーションの10分の1以下だったと思います。JEGA関連の開発に使っていたサンプルプログラムは、DOSVAXの開発が完了した数年前の時点でほとんど捨ててしまったので、テストプログラムを一から作るところから始めないといけないのが少し大変だった。
テキストモードの描画はDOSVAXのコードを流用しつつも全面的に書き直したので、完成させるまで大変だった。
しかし、カラーパレットがおかしい。
英語モードでも同じカラーパレットになるので、これはJEGAではなくSuperEGAの実装が悪いか、その他の問題だろう。
BIOSのアセンブリコードとデバッグログを見ながらエミュレーターのトライアンドエラーを何度も繰り返して修正。
使用していたVGA BIOSのROMがモノクロLCDラップトップ機用のものだったため、モノクロ用のカラーパレットになっていたことが判明。VGA BIOSはCMOSデータから内蔵LCDか外部CRTの出力設定を読み取る仕様になっていたので、これを外部CRT出力になるように修正。こちらが正しいカラーパレット。
JEGAのテキストモードには罫線表示を指定できるJEGA特有の属性モードがある。この属性解釈を入れるとこんな感じ。
エミュレーションにマシン1台を追加するのは、PC/AT互換機ならコードのコピペですぐにできそうで、実はそう簡単ではない。構造が単純だったのは808x時代の最初期のマシンまでで、286以降の世代はメモリー管理用のチップセットがあったり、ラップトップ機なら電源管理用のデバイスが追加されていたりする。それこそChips and Technologiesなどの有名な汎用チップセットはデータシートで仕様が分かるけど、PS/55のようなブラックボックスなマシンだと、技術解説書が入手困難だったり、そもそも仕様が公開されていないこともあるだろう。仕様がブラックボックスだと、エミュレーションの実装はとても難しくなる。