SL9821

はじめに

ダウンロード

使い方

FAQ

実行画面

技術的なはなし

このページでは、本エミュレータに関して想定されるいくつかの疑問に関して回答しています。なお、特に説明がない限りPC-9821と書かれている場合、1992年に発売された初代のPC-9821を指すものと考えてください。

起動に関して

アプリケーションが立ち上がらない
ホストコンピュータの動作要件を確認してください。基本的には起動に失敗したときのエラー要因に従って問題を解消していけばUIウインドウは立ち上がると思いますが、
- WindowsXPでは動作しない
- 実機のROMデータが必要
という点は注意してください。
PC-9821以外のPC-98x1しか持っていないがそれらから取り出したROMデータは使えないの?
私はPC-9821しか持っていないため他のモデルのROMデータが使えるかどうかが逆にわからないのですが、エミュレータ自体はBIOS.ROMとITF.ROMだけあれば起動するようにしてあります。以前のモデルについてはアーキテクチャが古いこと、以降のモデルについてはFDDが3モード対応されているためその辺に差分が動作させる上で懸念されることです。ペンティアムが主流になって以降のかなり後期のモデルは内部のアーキテクチャがだいぶ異なっていると思いますので使えないのではないかと思います。余談ですが、FDD3モード対応で追加されたIOポートについては、資料を基に実装してあります。私では確認のしようがないですがもしかしたらうっかり動いてしまうかもしれません。(ちなみにWindows98では1.44MBのフロッピーの読み出しができました)
エミュレータの起動には必須ではありませんがフォントデータがないと文字が表示されないためFONT.DATも必要になります。こちらについては特に機種にかかわらず作成できると思います。
上記の3ファイルで仮に起動ができてもHDDとCD-ROMは使用できません。PC-9821のHDDはIDE接続でBIOSはサイズが544MB以上のHDDを接続すると容量に関する演算時にオーバーフローを起こすバグのあるBIOSです。これと同じ頃のIDE BIOSであれば動く可能性が高いです。また98のIDEのデータ転送は最終モデルまでPIO転送のみだったはずなので、もしかしたらそれ以降のモデルでも動作するかもしれません。
CD-ROMについてはPC-9801-55L相当のSCSIに接続されているため、PC-9801-55Lまたはそれ相当の機能を内蔵している98であればSCSI BIOSのデータ化が可能と思われます。注意点としては、PC-9821のSCSI BIOSのアドレス位置がDC000h~DCFFFhであるため、BIOSのアドレス位置がディップスイッチ等で変更可能な場合は合わせておく必要があります。
CD-ROMのVendorIDとProductIDについてはできれば実機で確認してほしいところですが、NECCD.SYSでチェックしているということは、、、というところで必ずしも実機がなくても入力すべき値はわかります。

エミュレータ起動中の問題

たまにエミュレータ起動時にエラーが発生します
起動直後に実行される自己診断プログラムの動作タイミングによってどうしてもエラーが発生することがあります。できるだけ発生率を下げるようにいろいろと細工をしていますが完全には問題を排除しきれていません。申し訳ありませんがそのようなものだと思ってください。
CPUが指定した値にならない
エミュレータのCPUクロックを設定で変えられるようにしていますが、様々な要因で思い通りのクロックにならないことがあります。
指定のクロックに満たないケースは純粋にホストコンピュータのスペック不足が考えられます。CPUのエミュレーションがそれほど速いわけではないのでソフトウェアの限界と考えてください。
指定のクロックを超える場合についてですが、そもそもホストコンピュータ側に十分なスペックがありそのスペックで動作可能なクロックよりも低いクロックを設定している場合にどのようにクロックを下げて動作させているかというと、エミュレータ上のCPU命令一つ一つに対し処理時間を設定し、その積算した結果と実際にホストコンピュータ上でかかった時間を比較し、その差分だけOSをスリープさせるという形でエミュレータ上の実行速度を落としています。しかしながらこのスリープに関しては阻害要因があり、計算上スリープ中に割り込みを発生させなければならないようなケースではスリープから起きる時間を割り込みを発生させるタイミングまで前倒しする必要があります。一方でホストコンピュータのOSのスリープは最小単位が1msであるため、たとえばエミュレータ内のインターバルタイマを1msに設定するとホストコンピュータはスリープできなくなることになります。元々CPUクロックの設定機能はホストコンピュータの負荷低減を目的としていたためダミーループ等で無理矢理エミュレータ上の速度を落とすようにはしていません。
このため、エミュレータで割り込みの発生頻度が高い状況になるとCPUを全力で動かしてしまうことになっています。(ホストコンピュータのCPUクロックを落とすことができるといいんですけどこの辺は全くの知識不足で対応できていません)
拡張メモリは14MBを超える値を設定しても大丈夫?
メモリサイズは起動時に実行される自己診断プログラムによりチェックされ、メインメモリの特定の領域にサイズを格納されます。OS側ではそこに書かれた値を元にメモリサイズの上限を判断しています。14.6MBを超えるメモリを設定した場合この自己診断プログラム終了後にエミュレータによって書き換えるため(正確には14.6MBを超える分のメモリサイズは別の領域に書かれているのでその領域を更新している)、OSでは自己診断プログラムを経たかどうかに関係なくそれだけの容量のメモリがあるものと判断します。そのため特に問題になることはないと思います。
なお、実際に使用可能なメモリサイズはOSによって異なります。
ハードディスクは544MB以上のイメージを作成、使用しても大丈夫?
544MB以上のHDDが使用できない問題はIDE BIOSのサイズ計算の課程でオーバーフロー、除算エラーが発生することによる制限で、この回避方法として、ハードディスクサイズが544MB以上の時は演算時オーバーフローの要因の一つである1トラックあたりのセクタ数を17から8倍の136に増やすことで、使用可能なハードディスクサイズの上限を8倍まで増やしています。ただし、この方法ではセクタサイズを17と決め打ちしているようなOSでは正常に動作しません。次のページで紹介しているOSはとりあえず動いているようですが、あらゆるケースで問題ないとはいえない状況です。
なお、実際に使用可能なメモリサイズはOSによって異なります。
エミュレータ画面を大きくするとカクカクする
エミュレータ画面の描画にはDirectXを使用してGPUによるレンダリングを行っています。そのためエミュレータ画面がスムーズに動作するかはGPUのスペックに大きく依存します。感覚的にはスペックの低いGPUでも1.5倍くらいの画面サイズまでは割とスムーズに動作するのではないかと思います。なお、一定間隔でフレーム更新するような設定はありません。基本的にフルフレーム更新します。
フォントが正しく表示されません
本サイトでダウンロードしたツールにより作成したフォント用のファイルでないと正常に表示されません。本サイトのツールを使用し実機からフォント用のファイルを作成してください。
エミュレータのフロッピーディスクドライブにホストPCのフロッピーディスクドライブをマウントたときフロッピーディスクの読み書きがうまくいかない
エミュレータのCPUクロックを高くしているとエミュレータ内部のウエイト時間も短くなってフロッピーディスクへの実際の読み書きより速くタイムアウトが発生してしまうようです。ホストPCのフロッピーディスクドライブを使用する場合はエミュレータのCPUクロックを20MHz程度まで落として使用すると通常通り読み書きが出来ると思います。イメージファイルの場合はまず起きないと思います。

メディアイメージについて

フロッピーディスクイメージファイルのデータ構造はどうなっているの?
フロッピーディスクイメージは先頭シリンダの先頭セクタから最終シリンダの最終セクタまでセクタのデータがリニアに並んでいるだけです。メディアのサイズ=ファイルサイズになるのでメディアのタイプはファイルサイズから判定しています。このようなファイルであるためコピープロテクトされているメディア等特殊な構造を持ったメディアには対応していません。
ハードディスクイメージファイルのデータ構造はどうなっているの?
ファイルの先頭に512バイトのヘッダ領域があり、それ以降にハードディスクの内容が格納されています。ヘッダ情報は以下の通りです。
+0 ヘッダ'HDIM'
+4 ドライブサイズ下位4バイト
+8 ドライブサイズ上位4バイト
+12 セクタサイズ
+16 シリンダ数
+20 ヘッダ数
+24 セクタ数
+28 シリアルナンバー20バイト
+48 リビジョン8バイト
+56 モデル名40バイト
他のエミュレータで使われているファイルフォーマットには対応しているの?
対応していません。
他のエミュレータで使われているデータフォーマットはそれぞれのエミュレータの作者が自身の利便性のために設計したものであり、他者がその利便性のためだけに勝手に流用すべきではないと考えます。そのようなわけで対応の予定もありません。

その他

ホストコンピュータ側とのデータのやりとりがしたい
このエミュレータにとって大きな課題の一つがこの点と考えています。双方向のデータのやりとりは、唯一(イメージファイルではない)フロッピーディスクドライブのみになります。CD-ROMドライブが使用可能な場合は、ホストコンピュータからエミュレータ方向に関してはISOファイルを作成することである程度まとまった大きさのデータの転送が可能です。
ソースを公開しているけどオープンソースではないの?
オープンソースではありません。本プログラムはフルスクラッチで作成していて、いかなるオープンソースの恩恵も受けていません。ソースの利用に関しては利用規約に従っての使用をお願いします。
開発者への連絡手段は?
下記のメールアドレスにメールを送ってください。ただし、バグの報告や技術的な質問などは歓迎ですが、機能追加の要望等への対応には消極的だと思ってください。またサイトの内容に問題があるというようなご指摘につきましても同様にこちらに連絡いただければと思います。
support@satotomi.com