SL9821

はじめに

ダウンロード

使い方

FAQ

実行画面

技術的なはなし

このページではかつてNECが発売していたPC-9821をエミュレーションするソフトウェア、SL9821の実行ファイルとソースファイルを公開しています。
本ソフトウェアを動作させるためにはPC-9821実機のROMデータ、フォントデータ等をファイル化したものが必要となります。

そのため使用にあたっては、特に使用条件を守っていただきますようお願いいたします。
また、本ページの対象者はエミュレータを利用したいという方よりは、技術的な関心を持った方と考えております。

SL9821の特徴

本エミュレータは1992年に発売されたPC-9821シリーズの最初のモデルPC-9821(無印)をベースに作成しています。
PC-9821は従来のPC-9801からビデオ、サウンド関係の機能が強化されており、
・1677万色中256色、最大解像度640x480の画面モードの追加
・YM2608のよるステレオFM音源+リズム音源とPCM音源によるオーディオ機能(いわゆる86音源)
・CD-ROMドライブの内蔵
といった当時はやりつつあったマルチメディア関係の機能が追加されています。
本エミュレータでは出来る限りこの辺の再現性の高いものを目指そうという方針のもとに作られています。
とりわけ、この時期に発売されたPC-9821の256色の画面モードにはプレーンモードという論理演算を用いたVRAMの書き換えが出来るモードがあったのですが、従来それを十分に再現できる98エミュレータがなかったため、この機能を出来るだけ実機に忠実に作ることを目標にしています。

一方で一部実機と異なる機能としては、
CPUのベースを386から、486に変更
搭載可能メモリを最大14.6Mバイトから255.6Mバイトへ増加
認識可能な最大HDD容量を540Mバイトから4Gへ増加
など実機より強化した仕様で実装しているものもあります

動作要件

WindowsVista SP2以降のWindowsOS(32/64ビット ※実行ファイルは32ビットで動作します)
.NET Framework4.0
2コア以上のCPU
DirectX11に対応したGPU(使用している機能はDirectX9Ex)
44.1KHzまたは48KHzのPCMが再生可能なオーディオ環境(XAudio2を使用)
3モード対応FDD (2モードの場合は2DDのみ使用可能)
CD-ROMドライブ

PC-9821実機について

本エミュレータは実機のROM、データから作成したファイルを使用して動作させます。アプリケーション単体では動作しません。
そのため、動作可能な実機(PC-9821)が必要となります。
必要なファイルはダウンロードサイトにあるツールを用いて実機上で作成する必要があります
ツールでファイル化したデータはハードウェア製造メーカの著作物であるため、ハードウェア所有者以外が使用することがないよう取り扱いには注意してください。

エミュレーション精度

出来るだけ実機の挙動に忠実に動作するようにと努力はしていますが、技術的な限界や開発のプライオリティを下げて実装していない(要するにめんどくさがって実装していない)機能があったりします。以下に、本エミュレータと実機との比較表を示します

 実機SL9821備考
CPU386SX-20MHz486SXベース CPU速度はUIメニューによる設定、および上限はホストコンピュータの性能に依存
デバッグレジスタ、トラップレジスタは未実装
FPU387SX(optional)486DX相当 チェックボックスにより有無の選択が可能、演算精度は実機が最大80ビットなのに対し、エミュレータは最大64ビット
メインメモリ専用拡張メモリで最大11.6MB(modelS1)最大14.6MB チェックボックスをONすることで最大255.6MBまで設定可能、ただし、00F00000h - 00FFFFFFhまでの1MBの領域を認識させていないため認識は254.6MBまで
グラフィック640x400 4096色中16色
640x480 1677万色中256色
 
サウンドビープ
SSG 3声
FM音源 6声ステレオ
リズム音源 6声ステレオ
PCM音源再生 1声ステレオ
PCM音源録音
PCM音源 録音機能は未実装  
FDD2HD(1.23MB)
2DD(640MB,720MB)
1.44MBの2HDには非対応。1.23MBのフロッピーディスクをエミュレータ上で使用する場合は、3モード対応のフロッピーディスクドライブが必要になります
HDD最大544MBのIDE HDD最大4GのHDDイメージ エミュレータ本体の代替機能を使用することで、2つのHDDイメージを認識可能
CD-ROM等速CD-ROMドライブ対応 ホストコンピュータに接続されたCD-ROMドライブまたはISOファイルに対応。速度はホストコンピュータに依存
SCSIPC-9801-55L相当CD-ROM制御にのみ対応  
シリアルポート ホストのCOMポートへ割り当て可能 調歩同期のみ実装。実験的な実装です。
パラレルポート 非対応  

参考サイト/参照資料

以下本サイトで公開しているプログラムを作成するにあたり参考にしたwebサイト、書籍等になります(著者敬称略)
webサイトへのリンクは先方への配慮のため直接リンクをしていませんが、タイトルで検索をかけると見つけられると思います。
WEBサイト
UNDOCUMENTED 9801/9821 Vol.2 - メモリ・I/Oポート編
株式会社ウェブテクノロジの公開されているサイトです
本業とは離れた古い情報ということもあるのかサイトマップにはページ情報がありませんが、ハードウェア(I/Oポート)関係の検索をかけると、ほぼ確実にこちらのサイトのテキストファイルがヒットするという、とにかくこのページの情報がないと始まらないと言えるほどお世話になったサイトです。
とりわけテクニカルデータブックを所有していない私にとっては大変貴重な情報を提供してくださいました。
20年近く前の情報を今もって公開し続けてくださっていることに大変感謝いたします。
パソコンのレガシィI/O活用大全 桑野雅彦 著
CQ出版社が公開されているサイトで、PC-98でも使用されている割り込みコントローラの詳細が説明されています。
元々は書籍の内容の一部抜粋のようですが、私はこの書籍を所有していないためこのサイトで説明されている情報でかなり助けられました。
書籍(出版社は販売当時のもの、大半は絶版だと思います)
PC-9801 スーパーテクニック 小高輝真 清水和文 速水祐 共著 アスキー出版局
周辺モジュールのハードウェアエミュレーションは当初はこの書籍の巻末にある資料を頼りに作成していました。
テクニカルデータブックを所有していなかったため、周辺機器のIO制御の情報全般はこの本頼みでした。最も前述の「UNDOCUMENTED 9801/9821」サイトの方が情報的に新しいためそちらと見比べながらといった感じで使用しました。
GDCテクニカルブック 星野進二 著 日本ソフトバンク
実機でプログラミングをしていた頃はGDCにはあまり関心がなくもっぱら256色モードばかりいじっていて、なんとなくで買ったこの書籍は購入当時は全く活躍の場がなかったのですが、そのときこの本を購入していなければおそらくテキスト表示を含めたグラフィック周りの実装は不可能ではなかったかと思います。
(裏を返せばこの本を持っていたからこそエミュレータ作成の決断ができたということもいえると思います)
PC-9801シリーズマシン語サウンドプログラミング 青山学/日高徹 共著 アスキー出版局
サウンド周りの実装でお世話になりました。といってもハードウェア情報的にはむしろこの手の本としては情報不足の感がありますが、資料から入手可能な情報ではFM音源のパラメータと実際の出力レベルの関係が不明確であったため、実際に出力したデータを録音して関係性を見いだそうとした際に、この書籍の掲載プログラムが大変役に立ちました。
ATA(IDE)/ATAPIの徹底研究 インターフェース編集部編 CQ出版社
IDE周りと、CD-ROMドライブ制御のためのSCSIコマンドを調べるのに参考にしました(ATAPIコマンドはSCSIコマンドをベースにしています)。このエミュレータを作成するのに新たに購入した書籍なので、現在でも新品が購入可能だと思います。(SATAの時代に今更IDEもないですが)
PC-8801シリーズ マシン語マスターバイブル 日高徹 著 小学館
98関連の書籍ではありませんが、カレンダ機能(μPD4990AC)等98と共通で使用されているハードウェアを実際に制御するための簡潔なプログラムを掲載してくれているため、ハードウェアエミュレーションの参考にさせて頂きました。(IOポートの説明よりも実際に制御しているプログラムを参考にした方がエミュレータをどう実装すればよいのかというのがよくわかります)
ざべ 1993年9月 no.124、1993年10月 no.125 技術評論社(該当記事著者 こうのたけし 小高輝真)
この号から3ヶ月ほどPC-9821で拡張された機能の特集をしていました。
9月号はグラフィック、10月はサウンドで、たしか11月は3モード対応FDDだったはずです。(私の所有機は初代PC-9821で3モード非対応だったため11月号は未購入)
256色のプレーンモードに関しての記述はほとんどなく実際には自力での解析が必要でしたが、それ以外の情報とプレーンモード解析の足がかりとして非常に参考になりました。
トラ技コンピュータ別冊 MS-DOS 基本プログラミング第6集 X86プロテクトモード・プログラミング 大貫広幸 著 CQ出版社
x86のプロテクトモードについて勉強しようと思って購入した本です(元ネタのトラ技コンピュータの方も持っています。こちらの方が2色刷とページ割りの関係で読みやすい)。結局当時はよく分からないまま放置してしまったので、x86のプロテクトモードやページングに関しては本エミュレータ開発の開始当初ほとんど理解できていませんでしたが、この書籍には本当に基本的な部分からお世話になりました。
おかげでx86のプロテクトモードの概要がだいぶ分かったような気がします。
MS-DOS 5 アセンブラプログラミング 桜田幸嗣 著 アスキー出版局
MS-DOSの動作確認、デバッグをする上でINT 21hの機能を確認するために使用しました。DOSファンクションの本はいくつか持っていたはずなのですが、手元にはこれしか見つけられませんでした。
Microsoft Macro Assembler Professional Development System Reference (MASM version 6.0付属品)
CPUエミュレータの基本情報はこの書籍から得ています。(不足分は後述のIntelのPDF)
FPU以外の命令はオペコードも併記されていて便利なのですが、内容自体に不備が散見される(私のは初版第2刷)のが残念なところです。
PDF
Intel® 64 and IA-32 Architectures Software Developer’s Manual
三分冊のドキュメントでIntelのホームページから入手可能です。
各命令の機能の詳細、コントロールレジスタ等の機能に関してはこのドキュメントを参考にしないとどうしようもありませんでした。(といってもくまなく読めているわけではありませんが...)
MPU-401 テクニカル リファレンス マニュアル
MIDI1.0規格書 MIDI Standard & Recommended Practice(日本語版 98.1)
MIDIの実装に使用した資料です。前者は実際のハードウェアをソフトウェア制御するためのマニュアルで、Rolandのサイトで今も入手可能です。
後者は、一般社団法人音楽電子事業協会のサイトから入手可能です。
以下入手元を明確に記録していなかっため、正確な入手元が不明なハードウェアのドキュメントPDFです。検索すると見つかると思います
8237A HIGH PERFORMANCE PROGRAMMABLE DMA CONTROLLER(DMA)
82C55A CMOS Programmable Peripheral Interface(周辺IO)
8259A PROGRAMMABLE INTERRUPT CONTROLLER(割り込みコントローラ)
82C54 CHMOS PROGRAMMABLE INTERVAL TIMER(インターバルタイマ)
MSM82C53-2RS/GS/JS(インターバルタイマ)
μPD765A/μPD7265 SINGLE/DOUBLE DENSITY FLOPPY DISK CONTROLLER(FDC)
μPD4990A CMOS LSI シリアルI/O カレンダ時計
YM2608 OPNAアプリケーションマニュアル
WD33C93A SCSI Bus Interface Controller(SCSI)

改訂履歴

2019/8/9
しばらくの間、不手際によりサーバがダウンしておりました(おそらく7/30頃から?)。ご迷惑をおかけし申し訳ありませんでした。
なお、余談ですが2年くらい前からLet's Encryptを利用させていただきSSLに対応しています。保護された接続でアクセスしたい方はhttpsが利用可能です。
2019/7/20
ダウンロードファイルアップデート(macOS版、ソースコードのみ)
2019/6/29
ダウンロードファイルアップデート
2019/5/24
ダウンロードファイルアップデート
2019/5/18
ダウンロードファイルアップデート
2019/4/29
ダウンロードファイルアップデート(今回も更新はmacOS版、ソースコードのみです)
2019/2/10
ダウンロードファイルアップデート(macOS版、ソースコードのみ)
2019/2/10
ダウンロードファイルアップデート
2019/1/28
ダウンロードファイルアップデート
2019/1/27
ダウンロードファイルアップデート
更新履歴にエンバグしている旨のコメント追記
2019/1/26
ダウンロードファイルアップデート
2019/1/20
ダウンロードファイルアップデート
2018/10/14
ダウンロードファイルアップデート
2018/3/3
ダウンロードファイルアップデート
2018/2/24
ダウンロードファイルアップデート
2018/1/20
ダウンロードファイルアップデート
2017/11/18
ダウンロードファイルアップデート
Raspberry Pi3とFDDで物理フォーマットレベルでデータ解析してフロッピーディスクイメージを作成するツールの紹介サイトをこちらに作成しました。
2017/8/26
ダウンロードファイルアップデート
2017/7/30
ダウンロードファイルアップデート
技術的なはなしのページを更新
2017/7/17
ダウンロードファイルアップデート
2017/7/9
ダウンロードファイルアップデート
2017/6/3
ダウンロードファイルアップデート
2017/5/20
ダウンロードファイルアップデート
2017/4/30
参照資料にMIDI関連を追加
ダウンロードファイルアップデート
2017/2/8
ダウンロードファイルアップデート
2017/2/4
ダウンロードファイルアップデート
2017/1/25
ダウンロードファイルアップデート
2017/1/22
ダウンロードファイルアップデート
2017/1/3
FAQのハードディスクイメージファイルのデータ構造について記述ミスを修正
2016/12/26
ダウンロードファイルアップデート
2016/12/14
ダウンロードファイルアップデート
2016/9/22
ダウンロードファイルアップデート
2016/9/15
使い方の設定に、低容量のハードディスク作成時に指定した容量にならない件について追記
ダウンロードファイルアップデート
2016/9/12
使い方の前準備でIDE BIOSなどの取得方法の条件に関して追記(mura様ご指摘ありがとうございました)
ダウンロードファイルアップデート
2016/9/2
ダウンロードファイルアップデート
2016/8/29
ダウンロードファイルアップデート、FAQにFDドライブの読み書きに失敗するケースについて追記
2016/8/3
サイト開設