もくじ。
DOSエミュレータ(仮) の詳細ページ
DOS Emulator(仮) の動作について
DOS Emulator(仮)は、DOSエミュレーションをハードウェアレベル(一部BIOSレベル)でエミュレーションするソフトウェアです。
- フルアセンブラによる動作で、そこそこ快適。しかもKL-01でリリースが可能(添付物は含まない)。
- Bochs BIOS & VGA BIOSを使用することにより、BIOS/ROMが比較的簡単に入手可能
- CMOS RAMの使い方が特殊。また、自前に対応するBIOSとVGABIOSを入手しなければならない。
- ハードディスク/CD-ROM/PCMCIAのエミュレーションが無い
- ゲストOS(DOS)で見える周辺機器は別途ドライバを組み込んで追加する形式なので、ドライバを入れ替えるだけで認識されるハードウェアを変更可能。
- VBEまたはIBM 8514/A互換で、DOS上でも高解像度を利用可能(予定)。
- もしかしたらEMM386.EXEも利用可能になるかも?(不明)。
- CPUはi486相当のFPU非搭載の命令をサポート。(現在はPM/PG関連以外は大体サポート)
- DOS汎用アプリはもちろん、AT互換機依存アプリも一部動作(PC98用は動作しない。TOWNS用は不明)。
- (編集中)
スクリーンショット
- bochsのBIOS/VGA BIOSを使用して起動してみたところ
- IDE関係の(と思われる)I/O空間を強制的に切り離しました。一応本来トラップしたI/Oアドレスを載せておきます。
0x03F6, 0x01F0~0x01F7
0x0376, 0x0170~0x0177
0x03E6, 0x01E8~0x01EF
0x0366, 0x0168~0x016F
- Bochsの挙動を見ると、マスタ/スレーブに何も繋がっていない場合はFFhじゃなくて00hを返せばいいのかも?
- フロッピーディスクのブートセクタを読み出そうとしてハング(FDCのアクセスしたらbreakするようになっていた為)
- タイトルバーを某エミュレータ名にして、行間と字間をあけてそれっぽくした場合(ネタです。)
- ちなみに本物のエミュレータの画面(こうならないといけない…)
- K-tanのVGABIOSをDOSEmulatorで走らせてみても、まだちゃんと動作しないんだよなぁ。なぜそこが実行されているか意味不明…。
- 開発段階で使用中のデータのダウンロード
公開日 | 名前 | バージョン | ダウンロード | 備考 |
2006年07月31日 | DOS Emulator QEMU用ディスクイメージ版 | Ver 0.1.9(α版) | lzh書庫版/SAR版 | ブート失敗が確認できるだけ |
BIOSだけ配布することに意味がなくなったので、廃止しました。そのうち、DOSEmulatorβとBIOSセットを一纏めにしたディスクイメージを配布する予定です
- DOS Emulator(仮)のディスクイメージ版を公開しました。まだアプリを実行できるレベルではありません。
ゲストOS(DOS)に認識させるフロッピーディスクについて
ゲストOS側には1.44MBドライブと認識させるつもりですが、現在のOSASKはFDベース(CFやATAもFDのディスクイメージを利用する形式)のOSなので、1.44MBのベタファイルなんて到底FD内に置けません。
そこで、どういう風に1.44MBドライブを実装するのか、意見を募集したいと思います。
とりあえず自分で考えてみたサンプルを3個提示してみたいと思います。
この中のこれがいい!とかもこのコメント欄にお書き下さい。詳細は別のページとかを作ってそこにリンクさせてもいいと思います。
- 不良セクタ形式:特殊なディスクイメージを使用し、後ろのセクタを不良セクタなどと認識させて、実質720KBな1.44MBフロッピーディスクとする。ディスクイメージは1.44MBベタのいらないセクタの部分を削るか特殊な形式を作る(既にあったりする?) -- nika 2006/07/31 (月) 10:46:27
- 2DDブート:最初から2DD形式(片面のみ、720KB)として認識させ、ディスクイメージは720KBで済むようにする。これで問題があるのは、2DDからbootできるのか、DOS等のOSが2DDブートに対応しているのか。 -- nika 2006/07/31 (月) 10:47:48
- 随時作成形式:OSASKのファイルを直接FDのセクタに配置する形式。OSASK側でファイルリストを作成し、FDドライバ(エミュ本体)がリストを読み込み、内部にディスクイメージを作成する。ブートセクタのファイルもOSASK側に用意してファイルリストで定義する。FATやディレクトリエントリなどはその都度マッピングする。 -- nika 2006/07/31 (月) 10:53:02
- もしくはこれらの形式をmenu等を使用して選択する…そんなことができるのかはさておき。 -- nika 2006/07/31 (月) 15:33:55
最終目標
とりあえず以下のOSが動作すること。
進行状況
- とりあえずDOS互換ファンクションをホスト上のハードウェア相当のレベルで実装して、biosからそのハードウェアに指令を出す形式にする予定を立てました。 -- 2006/07/09 (日) 09:57:10
- 現在DOS APIの実装中です。それに伴って簡易的にスロットを扱えるサブルーチンを構築中。 -- 2006/07/10 (月) 06:47:28
- アプリ動作するまであと少し!?、とりあえずOSASK側のファイルを読み込めるようになりました。 -- 2006/07/11 (火) 13:31:57
- 日本語はとりあえずおいといて、メモリ管理(MCB関係)を実装中。 -- 2006/07/13 (木) 13:09:33
- ah=48h,ah=49h,ah=4ahの実装完了。続いてPSP関係のファンクションを実装しないと!(ah=48hの時に作成させるバッファには特定のアドレス(内部変数)の値を書き込むようにした為) -- 2006/07/17 (月) 04:30:38
- 内部的に使用しているライブラリの整理中。もうしばらく進展できないようです…。 -- nika 2006/07/24 (月) 04:36:18
- もしかしたら今後はbochsの様な独自ハードウェア(I/O)でBIOSレベル(DOSが動作するレベル)での互換を採用したAT互換機のエミュレータに発展させるかもしれません(期待はしないで下さい)。 -- nika 2006/07/24 (月) 04:40:24
- IDEデバイスを無視したら動作しそうだったので、1個ずつ表にあるアドレスも無視するようにしてみました。とりあえずint 18hが失敗してますが、bios実行は(irqやdma等を除き)成功してる模様です。 -- nika 2006/07/28 (金) 05:40:33
- 次はFDDをつないでBochsBIOSからFDブートしなければなりません。ってことはFDの実装と本格的なIRQ/DMAの実装が必要になる…。実装間違いを起こさないように注意しなきゃw -- nika 2006/07/31 (月) 01:40:41
- ディスクイメージ版を公開しました。QEMU用のosask4.8が入っているので、QEMU上で実行させてください。また、一連のファイルを実際のFD等にコピーできれば実機で動作させることも可能です。ただし、-v48aが効いているはずなのでv4.8以降専用です。 -- nika 2006/07/31 (月) 03:16:54
- とりあえずFDドライバを実装中。しかし、ATAが実装されていないとFDCも同時に存在が検出されないようです。ATAハードウェアを実装して、かつ、ATAドライブが繋がっていない状況を作らないといけないようだ。つまり、CDROMドライブ/HDD/FDDはATA(IDEボード?)で提供されているんだろう。ATAが全く存在しなければ、どこからもブートできない環境になるってことか。 -- nika 2006/08/02 (水) 11:43:59
- なので、rombios.cのソースをダウンロードして、Cのソースを見ながら(パッチせずに)動作できるようにFDD/ATAドライバを実装しなければならないだろう。C言語が得意じゃない私がソースを読んで仕様が分かるだろうか…(汗)。 -- nika 2006/08/02 (水) 11:47:19
- どこかに「IDE(ATA)ポートの存在チェック方法」とか「FDコントローラ」のエミュレータ側の実装方法とかころがっていないものか…(こんなの利用する人なんてほとんどいないというか全くいないですよねぇOTL) -- nika 2006/08/02 (水) 11:49:29
- rombios.cを解読中。 -- nika 2006/08/02 (水) 22:57:30
- rombios.cでcmosアクセスしているのを見て、そういえば起動時のcmos-ramはall 0で返していたような気がする。これでFDドライブが無いと認識されている可能性も無くは無いかも。 -- nika 2006/08/04 (金) 11:38:17
- やっぱりCMOS設定がよくなかったようだ。Bochs上のCMOSデータを返すようにしたら(64バイト)、FDDも試すようになりました(多分表示上だけではないはず)。 -- nika 2006/08/04 (金) 13:38:39
- qemuとBochsなどは保存していないみたいだけど、本来はCMOS-RAMは保存されないと意味がないので、256バイトのcmos.datなどとして読み込み、保存をするようにしよう。とりあえずBochsBIOSから自作BIOSになるときに必要になるかもしれないし(汗)。 -- nika 2006/08/04 (金) 19:01:26
- とりあえずMt.orzのOS版が動作するように実装中。当面(FDDがちゃんと実装されるまで)の目標になります。 -- nika 2006/08/07 (月) 07:01:34
- PM/PGの実装をしたらOSAkkieがちょうどいいかも。起動したら問答無用でカウントアップされていくし。 -- nika 2006/08/07 (月) 11:40:18
- もしかしたらBochs BIOS+VGA BIOS+OS ROM(OSが組み込まれたROM)のような形式にするかもしれません。いっそのこと独自OSでも作っちゃうかなぁ…。もちろんDOSアプリ実行時はDOS互換で。いや、難しいか。 -- nika 2006/08/08 (火) 19:39:19
- 今日、K-tanからアドバイスをもらいました。bochsでATAをdisableにした状態で起動してみて、もしその状態でFDイメージがブートできるならbochs上でどんな挙動をするのか確認したらいいかもしれない、など言われました。 -- nika 2006/08/09 (水) 22:09:59
- たしかにそうだな、と思ったのでbochsの挙動を探ることにします(bochsでata0~3をenabled=0にしたが、FDCはアクセスされている。FDイメージ(DOS)が普通に起動する)。bochsのATAの挙動…w -- nika 2006/08/09 (水) 22:12:48
- Bochsの挙動をいくつか調べてみました。結果、すべてのATAが未実装な状態でも0x3F0~0x3F7のFDCレジスタは有効な様子です(0x3F2の書き込みでログに反応が出ていた)。しかし、FDのブートセクタ(IPL)の読み込みにFDCを使っていないらしく、0x3F0~0x3F7どころか、0x100~0xFFFFのすべてのI/Oレジスタを使っていない様子。Bochsは特殊な方法でIPLをロードしているようだ(それとも最初から…ってそれは無いか)。 -- nika 2006/08/10 (木) 14:45:02
- でも、互換機で使われないI/Oアクセスはアクセスエラーを起こすようになっているので、特定のビットかメモリマップトI/Oを使っているってことかな…。Bochsは一筋縄じゃいかないなぁ。 -- nika 2006/08/10 (木) 15:41:30
- よく見たらint 13hはちゃんと実行されているようですが、フロッピーディスクアクセスなのにint13_harddiskの呼び出しになっていて、それで失敗してフロッピーディスクのIPLの読み込みをしてくれないようです。 -- nika 2006/08/14 (月) 18:12:01
- int 13hの中をDOS Emulator(仮)をデバッグ用にシングルステップ処理で検証してみることにします。逆アセンブラとゲストOS(DOS)のレジスタダンプを比較しながら。int 13hの中だけを。 -- nika 2006/08/15 (火) 02:09:05
- しかし、int13h_diskette_functionじゃなくint13h_harddiskに飛んでいるのは普通に考えたらおかしい。CPUの処理に根本的な間違いがあるかも知れない?(OTL) -- nika 2006/08/15 (火) 02:10:59
- なんとなく開発風景というかデバッグ中のデスクトップを晒してみるw @添付ファイル (ただし画像サイズが大きいのに注意) -- nika 2006/08/15 (火) 02:18:15
- 原因が判明しました。CPUのエミュレーションで、オペコードがF6/F7のTEST命令(REGフィールドが000か001)の時、フラグをクリアして命令を実行させた後、更新されたフラグをゲストOSのフラグへ反映させていなかった(=常にZFがNZ(クリア)されていた)のが原因でした。これを修正したら無事0x3F2をリードするようになりました。 -- nika 2006/08/15 (火) 14:11:49
- K-tanのvgabiosを再度実行させてみました。…が、失敗。またまた何故そんなところを実行しているのか…。まだ重大なバグがあるってことなのか…orz -- nika 2006/08/15 (火) 14:47:08
- フロッピーディスクドライバを実装中です。FDCのI/Oアクセスの一部は既に実装済みですが、コマンド/パラメータを発行した時点でbreakする状態です。現在はFDC周辺の資料を整理しています。それぞれのフェーズの移行とかは知っていますが、パラメータの意味がまだちょっと分からないので、大体理解したら本格的に実装しようと思います。それまで少し時間がかかりそうなので、しばらくお待ち下さい。 -- nika 2006/08/16 (水) 12:54:06
- 整理中のFDCの資料をご覧になりたい方は、こちらの下の方にあります。 -- nika 2006/08/16 (水) 12:55:25
コメントらん
DOS Emulator(仮) 将来予定のリスト
ゲストOS(DOS)に提供されるスペック(予定)
機能 | スペック | 備考 |
CPU | Intel i486 1MHz(PM/PG対応)相当 | 周波数は実行環境による |
FPU | × | 専用ドライバを適用できるようにするつもり |
Chipset | AT互換機 PIIX4互換(?) | I/Oのみ。PCI CONFIGは保存されない。 |
CMOS RAM | 242バイトRAM | |
RAM | 640KB+1024KB RAM | |
ROM | 64KB+32KB(1MB空間に最大384KB,4GB空間はメモリの許す限り) | |
Sound | BEEP音源1音+FM1312互換9音(BEEPでエミュレート) | PCM/MIDIなし |
Graphic | On board VGA(bochs vbe extension対応)またはIBM 8514/A互換 1画面 | |
VideoRAM | 1024KB (最大解像度:1024x768 256色,800x600 32768色,640x400 16777216色) | |
ROM BIOS | ブートBIOS+VGABIOS+独自ハードウェアサポート用拡張BIOS | |
SYSTEM BIOS | Bochs BIOS(64KB)またはDOS組み込みBIOS(64KB) | |
VGABIOS | Bochs VBE extension用VGA BIOS(32KB)または自作VGABIOS(64KB) | |
AGP | - | |
PCI | - | |
PCMCIA | - | |
FDD | 1.44MB 2モード 2基(どちらかがROMエミュレーションの可能性) | |
HDD | - | |
CD-ROM | - | |
シリアルポート | - | |
パラレルポート | - | |
| | |
| | |
(編集中)
DOS Emulator(仮) の仕様について
最低動作環境
ハード | 最低(推奨) | 備考欄 |
OS | OSASK v9.9以降(v4.8以降推奨) | |
MEM | 空きメモリ6MB以上(18MB以上推奨) | |
Graphic | 640x480 16色以上(800x600 65536色以上推奨) | 16bppのグラフィックボックスを使用しています |
Sound | BEEPに対応しているboard | できればブザーを本当に積んでいるのが望ましい |
drive | 何でも(HDDかCFでの運用を推奨) | |
font | 基本は不要、msgbox等一部で日本語フォント使用(第一水準もあれば問題無い) | |
(編集中)
OSASK側に提供される機能(予定)というか課題のリスト
機能 | 説明 | 備考 |
デバッグコンソール | | まだ無い |
シングルステップ例外 | | |
AAA/AAM/DAAなどの命令 | | |
プロテクトモード | | |
ページングモード | | |
仮想86モード | | |
FDコントローラ | | |
ATA & CD-ROM | | |
PCI/PCMCIA | | |
DOS内蔵BIOS | | |
拡張ROMBIOS | | |
FMR/TOWNS互換モード | | |
IRQの正常な動作 | | |
DMAの動作モードの設定 | | |
Nearestによる拡大縮小 | | |
BiLinearによる拡大縮小 | | |
画面外スクロールバー | | |
日本語フォント対応 | | |
マウス対応 | | |
専用VGABIOS | | |
専用ROMBIOS | | |
デバイスドライバでOSASKAPIを呼べるようにする | | |
あまりメモリを食わないようにする | | |
TOWNSやPC9821でも動作するレベルを維持する | | |
何をしてもOSASKが落ちないようにする | | |
win32コンソールアプリを動作できるようにする | | |
ゲストOSでグラフィックアクセラレータが使用できるようにする | | |
とりあえずまっとうなアプリケーションになる | | |
ゲストOSでタイマを細かく制御できるようにする | | |
FDの交換をできるようにする | | |
ステートセーブ(クイックセーブ?)/ロードができるようにしようかな | | |
メモリを動的に確保したり開放したりしたい | | |
ドライバ用のメモリが余ったらゲストOS(DOS)で使用できるメモリに回したい | | |
初起動の時にベンチマークテストして自動で設定を更新したい | | |
起動時にすぐにゲストOSを起動するかメニューを出すようにする | | |
ウィンドウの大きさを可変にして、テキストモード時はフォントを大きくできるようにする | | |
もし、SB16等のハードウェアか勝手に操作して、OSASKが意図しないIRQとか来たらどうなるんだろう…って普通にマスクされてるか。普通。 | | |