SL9821

はじめに

ダウンロード

使い方

FAQ

実行画面

技術的なはなし

このページでは、エミュレータ本体の実行ファイル、ソースファイルのほか、実機から必要なデータをファイル化して取り出すツール、フロッピーディスクの内容をファイル化するツールを公開しています。
利用に際しては利用規約を遵守していただきますようお願いします。

使用条件

本サイトからダウンロードしたすべてのファイルは非営利目的でのみ使用可能です。いかなる営利目的での使用も禁止します。
本サイトからダウンロードした実行ファイルが動作している状態の静止画、動画、音声等を、営利目的で使用することを禁止します。
(本エミュレータのスクリーンショットや動画を収益性のある広告等と同一ページに載せることは営利目的での使用となるため控えてください)
本サイトからダウンロードしたPC-98x1用のプログラムを実行することにより作成されたファイルは、プログラムを実行したハードウェアの所有者以外が使用することを禁止します。
本サイトからダウンロードしたファイルの一部またはすべてを第三者への頒布、もしくは頒布可能な状態にすることを禁止します。

ソースファイルの一部またはすべてを使用して作成したソフトウェアを販売、または営利目的で使用することは禁止します。
非営利であれば、当サイトからダウンロードしたソースコードを流用して作成したソフトウェアの公開は構いませんが(特に明記も必要ありません)、 改変の有無にかかわらず使用したソースコードのオリジナル部分のコードについては公開は控えてください。

当サイトは事前報告なしに閉鎖することがあるかもしれませんが、その場合でも引き続き上記の内容は遵守していただきますようお願いいたします

免責事項

本サイトからダウンロードしたファイルを使用して発生したいかなる損害も当方では責任を負いかねます。
不測の事態により本サイトからダウンロードしたソフトウェアが当該ソフトウェアに関連しないものも含めデータを破壊する可能性は否定できないため、事前にバックアップを行う、重要なデータのあるPCでの動作させない等の対策をとった上で使用してください。

ソースコードの公開に関して

本エミュレータはフルスクラッチで作成しているため、オープンソースの利用条件に基づくといった外的要因による公開というわけではありませんが、既に10年以上も前から実機を必要としない98エミュレータが開発公開されている一方、当エミュレータは動作させるために20年以上も前のハードウェアが必要であり、実際に利用できる方は非常に限られることが想像されるため(もしかしたら誰もいないかも?)、実行ファイルの公開だけではあまり価値はないと考え、ソースコードも併せて公開するものです。
改造は自由ですが、前述の通り営利目的での使用、オリジナルのソースコードの公開は控えてください。
例外として、ソースファイル中にある「xaudio2_7wrapper.h」というファイルについては、Microsoft社の著作物である「xaudio2.h」のコードをベースに改造したコードであるため、このファイルにつきましては当方の著作権を放棄します。
なお、このファイルはWindows7で使用するXaudio2とWindows8.1/10で使用されるXaudio2のバージョンが異なりソースコードレベルでの互換性がないためラッパークラスを用意することで制御手順を共通化できるようにしたヘッダファイルです。

公開してはおりますが、著作権を放棄していませんし無制限に使用することを許可しているものでもありません。使用にあたってはこうした事情をよくご理解いただきますようお願いします。

ダウンロードファイル

PC-9821実機で実行するプログラム。WindowsPCでは決して実行しないでください。

for PC-9821説明バージョンファイル
MKROMIMG.EXE
RECRTM.EXE
実機のROM領域のファイル化とフォントデータのファイルを作成(MKROMIMG)およびリズム音源の音声データファイルを作成(RECRTM)するツールです。解凍した上でフロッピーディスクへコピーし、実機にて実行してください
実行前に本体にIDEハードディスクを接続し、システムセットアップメニューで「固定ディスク」を「使用する」、「サウンド」を「使用する」、「SCSI ROM」を「使用する」に設定ておいてください。 また、実行ファイルは仮想メモリマネージャ(EMM396.EXE)等の仮想86モードで動作するドライバを利用していない環境で実行してください。正しくデータ化できない場合があります。
ソースファイルはPC-9821の実機(またはエミュレータ)上でBorland社製Turbo C++にてコンパイルすることを想定しています。
詳細は「使い方」のページを参照ください。
0.1
2016/8/3
download
forPC-98_160803.zip

26,476byte

WindowsPCで実行するプログラム

for Windows説明バージョンファイル
エミュレータ本体
fd2bin.exe
bin2fd.exe
エミュレータ本体のほか、フロッピーディスクからイメージファイルを作成(fd2bin)およびイメージファイルの内容をフロッピーディスクへ書き戻す(bin2fd)ツールが含まれています。
ツールはコマンドプロンプト上で実行するタイプのものです。詳しい使い方については「使い方」のページを参照ください。
0.3.2.1
2019/10/12
download
SL9821_191012.zip

422,121byte
 旧バージョン 0.3.2.0
2019/06/29
SL9821_190629.zip
421,213byte
  0.3.1.7
2019/05/24
SL9821_190524.zip
421,423byte

macOS(10.10以降)で実行するプログラム

for macOS説明バージョンファイル
エミュレータ本体 エミュレータ本体です。macOS用のフロッピーディスクをイメージ化するソフトウェアはありません。
またWindows用と比べて以下の機能の実装がありません。(UIが用意されているものもありますが機能しません)
・フロッピーディスクメディアに対する直接の読み書き
・ゲームパッド対応
※バージョンの新しいmacOSではアプリケーションを起動しようとしたときにアラートが出て起動出来ない場合があります
この場合、controlキーを押しながらマウスをクリックし、メニューから「開く」を選択すると警告ダイアログが出るので、確認した上で実行してみてください
これでうまくいかない場合は、実行するアプリケーションに制限がかけられているかもしれません
「システム環境設定」を実行し、最上段の「セキュリティーとプライバシー」を選択し、「一般」のタブの下段「ダウンロードしたアプリケーションの実行許可」が「App Store」になっている場合は、「確認済みの発行元からのアプリケーションを許可」にしてみてください
上記の手順を踏み、ROMフォルダに必要なバイナリファイルを用意しても実行できない場合は、一度アプリケーションSL9821を別のフォルダへ移動し、また元のフォルダに戻して実行してみてください。それでもだめな場合はもう一度ダウンロードして解凍された中のSL9821だけ上書きしてみてください
(危険のないアプリケーションにしているつもりですが、一応自己責任ということでよろしくお願いします)
0.3.2.1a
2019/10/13
download
SL9821mac_191013.zip

653,761byte
 旧バージョン 0.3.2.0a
2019/07/20
SL9821mac_190720.zip
648,275byte
  0.3.2.0
2019/06/29
SL9821mac_190629.zip
647,510byte
  0.3.1.7
2019/05/24
SL9821mac_190524.zip
623,835byte

ソースファイル

 説明バージョンファイル
ソースファイル 以下の開発環境にて使用することを想定しています
OS:Windows 7(64bit)
開発プラットフォーム:VisualStudio 2010 Professional
追加モジュール:DirectX SDK, Windows SDK
また、上記環境は古いため当方で常時使用環境ではありませんが、以下の開発環境用のプロジェクトも用意しています
OS:Windows 10(64bit)
開発プラットフォーム:VisualStudio 2015
追加モジュール:なし

macOS向けの開発環境は2019年6月時点で以下を想定しています
OS:macOS Mojave 10.14.5
開発プラットフォーム:XCode 10.2.1
macOS用はWindows用に対して以下の機能が実装されていません。
・実FDDドライブ割り当て機能
・ゲームパッド対応
また、プロジェクトはOSX10.10以降で動くようにしていますが、システムフォントの差異などへの対応が十分ではないです
0.3.2.1a
2019/10/13
download
SL9821src_191013.zip

681,239byte
 旧バージョン 0.3.2.0a
2019/07/20
SL9821src_190720.zip
680,116byte
  0.3.2.0
2019/06/29
SL9821src_190629.zip
679,689byte
  0.3.1.7
2019/05/24
SL9821src_190524.zip
670,334byte
直近の改訂履歴
0.3.2.1a | 2019/11/6
mac版の最新版のダウンロード先を間違えたまま一ヶ月ほど放置していました。大変申し訳ありません。遅ればせですが修正しました
twitterで指摘していただいていたsava様ご指摘ありがとうございます。また、気づくのが遅くなり申し訳ありませんでした。
(sava様にはFreeDOS(98)でもお世話になっております。あわせて御礼申し上げます)
余談ですが、バージョン0.3.2.1からmac版のzipへの圧縮をwindowsではなくmacOS上で行うようにしました。これはwindows上で圧縮したzipファイルを解凍したファイル/フォルダをmacOS 10.15では実行ファイルと認識しなくなっていることへの対応になります。弊害として、windowsで当該ファイルを解凍すると日本語ファイル名が化けるのですが、実行できないことに比べたら影響は軽微なのでとりあえず放置です
0.3.2.1a | 2019/10/13
本バージョンはmacOS版とソースファイルのみのリリースになります
macOSでレンダリングにOpenGLを使用してスクリーンウインドウをリサイズしたときにゴミが表示されるバグを修正
macOSでPowerOff状態でリセットを押したときの挙動がおかしいバグを修正
macOS向けのリリースでバタバタしたついででもう少し評価したらバグが見つかったので再度リリースします。度々で申し訳ないです
0.3.2.1 | 2019/10/12
23:30追記 macOS向けのzipファイルがmacOS10.15では実行できないものになっていたので作り直してアップロードしました(ファイルは同名です)。また、動作させるまでに必要な手順を上記に追加しました(これは以前のバージョンのmacOSでも必要になると思います)

メモリリークするバグを修正
サウンド割り込みを設定しても割り込みが発生しないバグを修正
ビープ音の再現性が低いケースがある問題に対応
macOS 10.15でスクリーンウインドウを閉じたときにアプリケーションが不正終了する問題の修正
macOSでレンダリングにMetalを使用してスクリーンウインドウをリサイズしたときにがめんがぼやける問題を修正
SLFで2D(320KByte)を扱えるようにしたので、メディア検出で2Dを検出できるように修正(ただし読み書きが出来るわけではありません)
0.3.2.0a | 2019/7/20
本バージョンはmacOS版とソースファイルのみのリリースになります
Metalによるレンダリング時に256色モードの表示が正しく行われないバグを修正
スクリーンウインドウの表示方法(主に画角に関して)を変更(OpenGL、Metal共)
0.3.2.0 | 2019/6/29
テキストVRAMの表示が正常に行われないバグの修正
・外字の右半分と判定する条件の修正
・ポート70hの設定による非表示ラインにゴミを表示することがあるバグを修正
・アンダーラインが表示されなければいけない条件で表示されないことがあるバグを修正
上記修正にあわせてシェーダ処理も少し修正しました(のでエンバグがあるかもしれません)
以下macOS向けのみの修正、変更
サウンド用に動的に確保しているメモリサイズが必要とするサイズより少ないため領域外へメモリの読み書きを行うことがあるバグを修正
画面のレンダリングにMetalを使用する処理を試験的に追加
0.3.1.7 | 2019/5/24
実機ITF(ITF.ROMを使用)と疑似IDE BIOSの組み合わせで2台目のHDDイメージを正常に検出できないバグを修正
FreeDOS(98)でIDEハードディスクへのリードアクセスに失敗する問題への対策
FreeDOS(98)で起きる問題のほうはIDE BIOSに起因する問題であり実機BIOSと疑似BIOS共通に起きていた問題ですが、対策は疑似BIOSに対してのみ行っているため実機IDE BIOSを使用している場合問題は解消されません
FreeDOS(98)を使用する場合はIDEBIOS.ROMをROMフォルダから削除(またはリネーム)してエミュレータを実行してください
※なお、もう少しだけ詳しい状況をダウンロードしたファイルを解凍した中にあるreleasenote.txtに記述しています
0.3.1.6 | 2019/5/18
テキストVRAMで全角半角の認識が正しくないため表示がおかしくなる場合がある問題を修正
DOS SHELL終了後コマンドプロンプトに戻れずにハングアップする問題を修正(ポート64h制御によるVSync割り込みの発生条件を変更)
IDE疑似BIOSのアセンブラ処理にバグがあったので修正
0.3.1.5b | 2019/4/29
今回のアップデートはmacOS版とソースファイルのみなります。ソースファイルもmacOSで使用する部分の更新のみになります
MacOS10.14.3でキーカスタマイズが出来なくなっている問題を修正
サウンド処理で冒頭の再生が正常に行われない問題への対処
0.3.1.5a | 2019/2/10
MacOS10.14.3で起きる問題の追加修正、メディアの交換後やアプリケーション終了時に不正終了する問題への対策
※更新が頻繁ですみません。今回のリリースは共通ファイルにも一部修正がありますが、macOSで起きる問題に対する修正のみなのでWindows版の更新はありません。共通ファイルへの修正に伴うWindows版への動作の影響はないものと考えています。
0.3.1.5 | 2019/2/10
GDCのSCROLLコマンドのSLパラメータの基づくループ処理を少し変更
MacOS10.14.3でエミュレータが正常に立ち上がらないバグを修正
0.3.1.4 | 2019/1/28
ROMフォルダにITF.ROM、BANK.ROMがあるとエミュレータが起動しないバグを修正(なお、たまにBIOSエラーで起動に失敗するのは制限事項です)
※0.3.1.3でエンバグしたバグを含めて修正
Windowsで操作中に気になったUI部分を修正
いろいろとバタバタしてすみません
0.3.1.3 | 2019/1/27
エンバグしたのでバグ修正のうえ、0.3.1.4として再リリース
0.3.1.2 | 2019/1/26
表示関係で、メインスレッドと描画スレッドで排他制御が行われずに書き込みを行うことがあるバグを修正
ポート60h/A0hのVERTICAL SYNCビットのセット条件を変更(VSYNC割り込みのタイミング直後にリードした場合は必ずセットされているように修正)
※前パージョンに引き続き、DragonSlayer英雄伝説IIを動作させたときの不安定な挙動の解消のための修正になります
MacOSでエミュレータOFF時にスケーリングの変更を行うと、その後エミュレータ画面が正常に表示できなくなるバグを修正
0.3.1.1 | 2019/1/20
テキストラインスクロールが正常に動作しない問題の修正
グラフィックGDCのSCROLLコマンドでパラメータを0から7までしか参照していなかったところを15まで参照するように修正
ポートF0hによるリセット時に、外部割り込みの発生状況をクリアして正常に動作しないケースがあったため修正
※上記はDragonSlayer英雄伝説IIを実行した際に気がついたバグの修正になります
その他、
SSGのノイズ発生方法を少し修正
MacOSで不正終了することがあるバグを修正
0.3.1.0 | 2018/10/14
エミュレータ起動時にフロッピーディスクドライブの検出に失敗することがある問題の改善
エミュレータ画面の解像度を従来の640x400(480)固定から、GDCに設定される値に追従して解像度が変わるように変更(対応可能な最大解像度は768x512)
PCM音源でノイズが乗ることがあるバグの修正、あわせてPCMの処理自体も全体的に修正(もしかしたらエンバグしているかも)
REPプリフィックスつきのCPUのストリング命令で、ECXレジスタに巨大な値が設定されているとループが終了するまで長時間アプリケーションの終了等を受け付けないため一定間隔でループを一時的に抜けるように処理を変更
その他、細かいバグ等の修正
0.3.0.3 | 2018/3/3
サウンド再生中にエミュレータをリセットすると、リセット後音が鳴らなくなるバグを修正(確認した限りではmacOS版でのみ発生しますが、同様の修正をWin版にも入れてあります)
他、コンパイル時のワーニングに関連する修正
0.3.0.2 | 2018/2/24
RETF,CALL(far)命令処理中にスタック領域へのアクセスでページングエラーが発生した際の処理にバグがあったので修正
疑似IDE-BIOSにおけるINT1Bhの処理でフラグレジスタの更新に際し不正な値を設定するバグを修正
Windows98終了時に「MS-DOSモードで再起動する」を選択したときにハングアップする問題を修正(HDDを2つマウントしていると発生する問題)
エミュレータを一度PowerOFFした後再度PowerONした後、PCMの機能を使用とすると不正終了するバグを修正
0.3.0.1 | 2018/1/20
キーDOWN/UPイベントに対応する処理をし損ねることがある問題を修正
エミュレータをリセット後、音が鳴らなくなる問題の修正
macOSで音声出力をスピーカとヘッドホンで切り替えていると音が鳴らなくなる問題を修正
0.3.0.0
FDイメージに、新規に作成したSLFフォーマットに対応しました。作り方や詳細についてはこちらで紹介しています。作り方が若干危険なのと、自己満足で作ったものなのであまり気にしないでよいです。
新しいファイルフォーマットへの対応に伴い、FDCのエミュレーションの実装を作り直し。
フロッピーディスクイメージの拡張子の前に「.ro」を追加すると(例「fdimage.ro.bin」)ライトプロテクト状態であると認識するようにしました。
ハードディスクアクセス中にフロッピーディスクの入れ替えを行うとデッドロックが起きることがある問題を修正
プロテクトモードに関連したバグの修正
マウスのエミュレーション処理がいろいろ間違っていたので修正
FM音源のプリスケーラ変更の処理がコード上でバグっていたので修正(机上で直しただけなので正しく動作するかは不明です)。
DMAでベリファイ動作と認識するビットパターンを間違えていたので修正
0.2.5.3
ユーザ定義フォントが正しく表示されないバグを修正。0.2.5.2と同日の修正です。たびたびの更新で申し訳ありません。
0.2.5.2
短期間に複数のGDCコマンドリクエストが来たときに、処理がさばききれず表示が乱れるバグを修正。
0.2.5.1
SSG音源の出力レベルを調整。従来は出力レベルが下げられたとき、実際の音量が過剰に下がっていたような気がします。それを補正したのとSSG音源のベースになる音量自体は少し下げました。
0.2.5.0
日本語以外の言語では英語メニューで表示されるように条件を変更
FDおよびCDイメージのファイル選択ダイアログで任意の拡張子を候補に出来る機能を追加(settings.xmlを直接編集する必要があります。詳細はreleasenote.txtに記述しています)
CPUのins/outs命令およびcmpxchg8b命令にバグがあったので修正
描画時にVRAMデータの領域外を参照し表示が乱れることがあるバグを修正
0.2.4.3
Windows版で今までシリアルポートが機能していなかったバグを修正、Mac版でシリアルポートの機能を追加(いずれの版も、フロー制御は多分まともに動きません)
Mac版でCD-ROMドライブに対応。動作確認はPioneer製BDR-XD04Jで行いました。同じPioneer製でもDVR-XD09Jでは動作しなかったのですべてのドライブで動作するわけではないようです(もっともDVR-XD09JはmacOSでメディアの認識が出来なかったのでそれ以前の問題のような気もしますが...)。
CPUのidiv命令で本来除算エラーが発生する計算の一部でエラーが発生しない問題を修正
試験的にGDCのSYNCコマンドのインターレス設定に対応
試験的にFM音源のプリスケーラの設定変更に対応
その他細かいバグの修正
なお、Mac版はこのバージョンからWindows版と同じ値にしています
0.2.4.2
「400ライン表示時もVGA領域を表示する」をチェックした状態でエミュレータの解像度が変更された際に表示位置がおかしくなるバグを修正(0.2.4.0でエンバグ)
BEEP音の鳴動周波数が実機の1/2になっていたバグを修正
鳴動関係でMACの実装にあったいくつかの問題を修正
0.2.4.1
400ライン表示で画面がぼやける問題(0.2.4.0でエンバグ)ほか、表示周りのバグ等を修正
グラフィック用GDCで未実装だったTEXTE、ZOOMコマンドの実装を追加
0.2.4.0
CPUエミュレーションの改造
MIDI機能(MPU-401コンパチブルのUARTモードのみ)の実装
他、下記のバグを修正
HDDイメージを新規作成後の最初のマウント時、HDDイメージの先頭領域の読み出し時にゴミデータを読み出すバグを修正
FM音源の設定で、エンベロープの指定を行っていないチャネルのKeyONを行うと不正終了する問題を修正
Windows10で2017年3~4月頃のアップデート後に画面が縦に潰れて表示される場合がある問題を修正
macOSでテキスト表示が崩れることがある問題を修正
0.2.3.0
環境により、アプリケーション起動時に不正終了する場合がある問題を修正
本件は初期リリースの頃からある問題でバージョン0.2.0.0の頃に指摘を受けていた問題でしたが、当方で問題解決が出来ず
問題を指摘してくださった方に原因の特定から改善方法に至るまでご教示頂きました。この場を借りて御礼申し上げます
0.2.2.0
VEM486(Version 1.29N)が動作しない問題に関連したCPUのバグを修正、修正後動作確認したCONFIG.SYSの設定はreleasenote.txtに記述しています
デバッグレジスタ関連の実装漏れを修正
代替BIOSをVEM486のROM移動機能を使用しても動作するようにコードを変更
ポートF0hを使用したCPUリセット後SCSIの割り込みが入らないことがあるバグを修正
IDEで不正なメモリアクセスを行うバグを修正
0.2.1.2
0.2.1.1でエミュレータ画面が乱れるとの指摘があったので、シェーダを再修正
カーソルブリンクの反転時の表示がおかしいケースがあるので修正
CPUのデバッグレジスタを仮実装
※0.2.1.1では実行ファイルにデバッグ用のログファイルが出力される開発用の実行ファイルをアップロードしておりました。大変申し訳ありません。エミュレータ終了時にdevlog.txtというファイルが作成されますが、実行に必要なファイルではないので削除して頂いて問題ありません。
0.2.1.1
シェーダの作り直し、演算誤差で画像が乱れる問題の修正
また、DirectX9.0対応GPU向けのシェーダプログラムを追加してありますが残念ながらパフォーマンスは期待できません
サウンド出力のないPCでもエミュレータが起動できるように修正
ハードウェア割り込み処理の変更(机上で改善した方がいいと思ったため修正したので変更による効果は不明)
0.2.1.0
GDC WRITEコマンドのビット判定を間違っているバグを修正
AttackRateの初期テーブルが計算間違いで期待値と異なっていたため修正
COMイベント取得関数の使い方を間違えていたため修正
ITFの代替機能を使用しているとき、画面表示がおかしい問題の修正
0.2.0.0  
ITF.ROM、IDEBIOS.ROM、SCSIBIOS.ROMがない場合、エミュレータ内蔵の代替処理を使用する機能を追加
ハードディスクエミュレーションの安定性向上
V-SYNC同期処理のタイミング微調整
サウンドのハードウェアLFOに関連した演算処理のバグ修正
SCSI SEEKコマンド処理のバグ修正
シリアルポートの実装
ポート31hの実装にバグがあったのを修正(ディップスイッチの状態が正しく読み出しできない)
不揮発領域に関連したバグを修正
0.1.5.0  
FD、CD-ROMに実ドライブを使用しているときに動作が安定しない問題の修正
バージョン0.1.2.0でエンバグしたキーボード関連の修正
そのほか細かい修正
0.1.4.0  
テキストグラフィックに関連したバグの修正
メディア未挿入のCD-ROMドライブをマウントしているとエミュレータが起動しないバグを修正
リズム音源用ファイルがないときに不正なメモリアクセスを起こすバグを修正
0.1.3.0  
CD-DA再生に関連したバグの修正
0.1.2.0  
CPUのバグ修正
キーボードのオートリピートとマウスの周期処理をOS資源からソフトウェア内部のカウンタを使用するように変更
0.1.1.0  
エンベロープを使用したときのSSGの鳴動処理を修正
シリアルポートの受信処理のバグを修正
0.1.0.0  
ファーストリリース