今年買ってよかったもの 2023年版

PC-98(PC-9821)実機からBIOSやフォントなどをダンプする - 情報編


今回PC-9821を入手した主目的、フォント等のダンプ、いわゆる吸出し作業についてのメモです。
今回はPC-9821を前提として書いていますが、PC-9801にも概ね適用可能です。ただしSL9821はPC-9821を前提としているため、PC-9801からはダンプできないROMがあると思われます。

まず初めに、PC-98エミュレーターの種類についてまとめておきましょう。
開発状況については、2022年から3年以内に更新があったかどうかで判断しています。
(調べた限りを載せたのでかなり古い物も載っています)

名前略称開発状況プラットフォーム備考
Neko Project IInp2停止Win (32bit/64bit), MacOSXnp2系のオリジナル
Neko Project II fmgen版np2fmgenアクティブWin (32bit)np2の音源部違い&改良
Neko Project II (NP2) 改変np2kaiアクティブUNIX系, Linux (Raspberry Pi), Win (64bit)np2piの改造版, libretroあり
Neko Project 21/Wnp21wアクティブWin (32bit/64bit)np21の改造版, 9821系のエミュ
DOSBox-Xdosbox-xアクティブWin (32bit/64bit), Linux, macOSDOSBoxの改造版
SL9821sl9821アクティブWin (32bit/64bit), macOS2016年初版のフルスクラッチエミュ
T98-NEXTt98next停止Win (32bit)t98の改良版(同作者)
Anex86anex86停止Win (32bit)正確にはEPSON PCエミュ
PC98Epc98e停止Win (32bit), UNIX系最初期のPC-98エミュ
Virtual98v98停止Win (32bit)
T98t98停止Win (32bit)
たまnp2-tama停止Win (32bit)np2の改造版
xnp2xnp2停止UNIX系np2のX Window移植
Neko Project IIxnp2x停止MacOSXnp2およびxnp2のOSX移植版
Neko Project 21np21停止Win (32bit)np2サイトの「お察しください」
NP2 for Raspberry Pinp2pi停止Linux (Raspberry Pi)np2のRasPi移植


このうち全てのエミュレーターで実機のBIOSやフォントが必須というわけではありませんが、特に実機と同様のフォントを表示したい場合は実機のフォントROMが必須となります。
(モノによりますが、MSゴシックを代替フォントとして読みこむものや、代替フォントデータもあったりします。代替フォントデータはDOSBox-Xのドキュメントが詳しかったりします。)

必要なデータはエミュレーターによって異なりますが、大まかには
・BIOS.ROM - BIOSプログラム
・FONT.ROM - フォントROM
・SOUND.ROM - NEC製86音源機能が搭載されている場合に存在?(内蔵/ボード)
の三種類と、場合によっては
・ITF.ROM - 初期化プログラム?BIOSの補助的役割?
を読みこめるケースが多いです。(np2系、T98-NEXT、Virtual98等)
挙げた中のアクティブなものでは、SL9821が他のエミュレーターと異なるROMを要求するようになっています。(FONT.ROMと同一でないFONT.DAT等)

一通り使いそうなエミュレーターで要求される実機ROMのタイプを調査したので、ダンププログラムはどれを使えばいいのかを検討します。
見つけた範囲で試したダンププログラムの生成物リストが以下です。

ツール名テスト時アーカイブ名BIOS.ROMFONT.ROMSOUND.ROMITF.ROMその他
GETBIOS.COMnp2_getbios.zipOKOK
(Fill=0x00)
OKNG無し
MAKEFONT.EXEnp2_makefont.zipNGNGNGNGFONT.BMP
ROMMAKE.EXEntool007.lzhOKOK
(Fill=0xFF)
OKNG無し
MKBIOS.COMv98tools.lzhOKNGOKOK無し
MKFONT.COMv98tools.lzhNGOK
(Fill=0xFF)
NGNG無し
MKROMIMG.EXEforPC-98_160803.zipOKNGOK
(=SNDBIOS.ROM)
OKBANK.ROM, IDEBIOS.ROM,
SCSIBIOS.ROM,
FONT.DAT(≠FONT.ROM)
RECRTM.EXEforPC-98_160803.zipNGNGNGNGRHYTHM.DAT
GETITF98.EXEitf98220.zipOK
(=BANK5+6+7+0)
NGNGOK
(=BANK4)
BANK1.BIN,
BANK2.BIN,
BANK3.BIN


実際にそれぞれでダンプして、バイナリ比較で一致したもの同士でOKを入れてあります。
このように並べてみると、結構被っているものが多いですね。

FONT.ROMにカッコ書きがあるのは、ダンプした内容が若干異なっていたが、実用上影響がなさそうな部分だったため全てOKとしました。これらの違いは、空データ部分を0x00で埋めているか、0xFFで埋めているかの違いのようです。具体的なアドレスは、
・0x43800-0x4381F
・0x44400-0x4441F
・0x45000-0x4501F
・0x45BFF-0x45C1F
の5つの範囲のみです。GETBIOS.BINで取得したFONT.ROMでは、上記範囲が0x00で、ROMMAKE.EXEおよびMKFONT.COMで取得したFONT.ROMでは、上記範囲が0xFFで埋められているというだけの差異です。
どちらかのダンプしか持っていないという人で、何かハッシュ値が合わないという場合などには情報をお役立てください。
ちなみにlibretro版np2kaiの要求ROMリストに書いてあるハッシュ値は、0xFF埋め版です。EPROMなどの未書き込み領域(=初期値)は0xFFなので、この事からも恐らく0xFF埋め版が正しいものと思われます。

 FONT.ROMの問題を踏まえた上で、使うべきツールを考えると…
[最小] MAKEFONT.EXE + MKBIOS.COM + MKFONT.COM (SL9821を使わない場合)
[ベター] MAKEFONT.EXE + ROMMAKE.EXE + MKROMIMG.EXE + RECRTM.EXE (np2系などとSL9821一式)
[最大] GETBIOS.COM + MAKEFONT.EXE + MKFONT.EXE + MKROMIMG.EXE + RECRTM.EXE + GETITF98.EXE (全パターン網羅)
こういったパターンが考えられますね。

自分は検証のために上表の全てのツールを試しましたが、全部で4回ほどFDを起動し直しました。フォントのダンプを行うと容量不足で止まったり、終わっているように見えても実は不完全なケースがあったりするので、フォントのダンプを行ったらデータを取り出す作業が必須になると考えた方がよいです。
HDD上で行う場合は、まとめてやってもさすがに余裕で足りると思います。全てのツールからのダンプデータの容量を足したサイズは2.6MBytes程度でした。

2022/10/04 初版
2022/10/04 前記事へのリンクを追加

コメント