*もくじ。 [#u1e5b09f] #contents *DOSエミュレータ(仮) の詳細ページ [#c0942f69] **ゲストOS(DOS)に提供されるスペック(予定) [#v9b396ed] |機能|スペック|備考| |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(仮) の仕様について [#ge2ea511] 最低動作環境 |ハード|最低(推奨)|備考欄| |OS|OSASK v9.9以降(v4.8以降推奨)|| |MEM|空きメモリ6MB以上(18MB以上推奨)|| |Graphic|640x480 16色以上(800x600 65536色以上推奨)|16bppのグラフィックボックスを使用しています| |Sound|BEEPに対応しているboard|できればブザーを本当に積んでいるのが望ましい| |drive|何でも(HDDかCFでの運用を推奨)|| |font|基本は不要、msgbox等一部で日本語フォント使用(第一水準もあれば問題無い)|| ''(編集中)'' ~ **DOS Emulator(仮) の動作について [#nc816dd0] DOS Emulator(仮)は、DOSエミュレーションをハードウェアレベル(一部BIOSレベル)でエミュレーションするソフトウェアです。 -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用は不明)。 - -''(編集中)'' ~ **スクリーンショット [#o6301b01] --bochsのBIOS/VGA BIOSを使用して起動してみたところ~ //|#ref(biosboot.png)|#ref(biosboot2.png)| |#ref(atbios13.png)| |#ref(atbios12.png)| //|#ref(atbios11.png)| ---IDE関係の(と思われる)I/O空間を強制的に切り離しました。一応本来(?)のアドレス以外のトラップしたI/Oアドレスを載せておきます。 0x03E6, 0x01E8~0x01EF 0x0366, 0x0168~0x016F //--bochsのブートROMを自作のbiosに差し替えて実行してみたところ(bochsでの実行はこれから変更ありません)~ //#ref(atbios6.png) //--DOSEmulatorで実行した場合(ファイル選択画面)/(と!GUIDE!.TXTを選択した場合)~ //|#ref(atbios8.png)| //|#ref(atbios9.png)| //--SIZE(11){そういえば、K-tanのVGA BIOSをこのDOSEmulatorで走らせるとこけるんだよなぁ。なぜそこが実行されているか意味不明…(あ、DOSEmulater側がね…一応)。} //|#ref(atbiosk1.png)|#ref(atbiosk2.png)| --タイトルバーを某エミュレータ名にして、行間と字間をあけてそれっぽくした場合(ネタです。) |#ref(atbios12q.png)| --ちなみに本物のエミュレータの画面(こうならないといけない…) |#ref(qemu2.png)| ~ //---なぜに文字が化けるのだ? Bochs BIOS の場合はVGA ROM BIOSから帰ってきてからもちゃんと文字列が表示されているのに…orz //---とりあえず文字化けはAH=0x13,AL=0x01のファンクションを使うことによって回避。 //---このスクリーンショットは、一連のハードウェアを初期化した後、直にbiosのDOS APIエミュレータによってDOS実行ファイル("COMMAND.COM"など)を読み込もうとしている。読み込んだ後は実行に移す。 //---読み込みに成功したので、次の段階へ!…EXEアローケーションして、PSP作成して、メモリブロック作成して…、実行を移す。これでいいのか…。何かが足りないような…? -開発段階で使用中のデータのダウンロード //|名前|バージョン|用途|仕様|ダウンロード| //|DOS API Emulation BIOS|Ver 0.1.3(α版)|Bochs対応BootBIOS|F8000~,32KB|#ref(ATBIOS.ROM)| |公開日|名前|バージョン|ダウンロード|備考| |2006年07月31日|DOS Emulator QEMU用ディスクイメージ版|Ver 0.1.9(α版)|[[lzh書庫版:http://com-nika.osask.jp/de_01_9.lzh]]/[[SAR版:http://com-nika.osask.jp/de_01_9.sar]]|ブート失敗が確認できるだけ| --%%SIZE(9){BIOSだけ配布することに意味がなくなったので、廃止しました。そのうち、DOSEmulatorβとBIOS%%%セット%%%を一纏めにした'''ディスクイメージ'''を配布する予定です}%% --DOS Emulator(仮)のディスクイメージ版を公開しました。まだ''アプリを実行できるレベルではありません''。 **ゲストOS(DOS)に認識させるフロッピーディスクについて [#e34b422d] ゲストOS側には1.44MBドライブと認識させるつもりですが、現在のOSASKはFDベース(CFやATAもFDのディスクイメージを利用する形式)のOSなので、1.44MBのベタファイルなんて到底FD内に置けません。~ そこで、どういう風に1.44MBドライブを実装するのか、意見を募集したいと思います。~ とりあえず自分で考えてみたサンプルを3個提示してみたいと思います。~ この中のこれがいい!とかもこのコメント欄にお書き下さい。詳細は別のページとかを作ってそこにリンクさせてもいいと思います。~ ---- -不良セクタ形式:特殊なディスクイメージを使用し、後ろのセクタを不良セクタなどと認識させて、実質720KBな1.44MBフロッピーディスクとする。ディスクイメージは1.44MBベタのいらないセクタの部分を削るか特殊な形式を作る(既にあったりする?) -- [[nika]] SIZE(10){2006/07/31 (月) 10:46:27} -2DDブート:最初から2DD形式(片面のみ、720KB)として認識させ、ディスクイメージは720KBで済むようにする。これで問題があるのは、2DDからbootできるのか、DOS等のOSが2DDブートに対応しているのか。 -- [[nika]] SIZE(10){2006/07/31 (月) 10:47:48} -随時作成形式:OSASKのファイルを直接FDのセクタに配置する形式。OSASK側でファイルリストを作成し、FDドライバ(エミュ本体)がリストを読み込み、内部にディスクイメージを作成する。ブートセクタのファイルもOSASK側に用意してファイルリストで定義する。FATやディレクトリエントリなどはその都度マッピングする。 -- [[nika]] SIZE(10){2006/07/31 (月) 10:53:02} -もしくはこれらの形式をmenu等を使用して選択する…そんなことができるのかはさておき。 -- [[nika]] SIZE(10){2006/07/31 (月) 15:33:55} #comment **最終目標 [#e7a17a47] とりあえず以下のOSが動作すること。 |#ref(mtorz.png)| |#ref(osakkies.png)|#ref(osask47x.png)| ~ *進行状況 [#c715088e] -とりあえずDOS互換ファンクションをホスト上のハードウェア相当のレベルで実装して、biosからそのハードウェアに指令を出す形式にする予定を立てました。 -- '' '' SIZE(10){2006/07/09 (日) 09:57:10} -現在DOS APIの実装中です。それに伴って簡易的にスロットを扱えるサブルーチンを構築中。 -- '' '' SIZE(10){2006/07/10 (月) 06:47:28} -アプリ動作するまであと少し!?、とりあえずOSASK側のファイルを読み込めるようになりました。 -- '' '' SIZE(10){2006/07/11 (火) 13:31:57} -日本語はとりあえずおいといて、メモリ管理(MCB関係)を実装中。 -- '' '' SIZE(10){2006/07/13 (木) 13:09:33} -ah=48h,ah=49h,ah=4ahの実装完了。続いてPSP関係のファンクションを実装しないと!(ah=48hの時に作成させるバッファには特定のアドレス(内部変数)の値を書き込むようにした為) -- '' '' SIZE(10){2006/07/17 (月) 04:30:38} -内部的に使用しているライブラリの整理中。もうしばらく進展できないようです…。 -- [[nika]] SIZE(10){2006/07/24 (月) 04:36:18} -もしかしたら今後はbochsの様な独自ハードウェア(I/O)でBIOSレベル(DOSが動作するレベル)での互換を採用したAT互換機のエミュレータに発展させるかもしれません(期待はしないで下さい)。 -- [[nika]] SIZE(10){2006/07/24 (月) 04:40:24} -IDEデバイスを無視したら動作しそうだったので、1個ずつ表にあるアドレスも無視するようにしてみました。とりあえずint 18hが失敗してますが、bios実行は(irqやdma等を除き)成功してる模様です。 -- [[nika]] SIZE(10){2006/07/28 (金) 05:40:33} -次はFDDをつないでBochsBIOSからFDブートしなければなりません。ってことはFDの実装と本格的なIRQ/DMAの実装が必要になる…。実装間違いを起こさないように注意しなきゃw -- [[nika]] SIZE(10){2006/07/31 (月) 01:40:41} -ディスクイメージ版を公開しました。QEMU用のosask4.8が入っているので、QEMU上で実行させてください。また、一連のファイルを実際のFD等にコピーできれば実機で動作させることも可能です。ただし、-v48aが効いているはずなのでv4.8以降専用です。 -- [[nika]] SIZE(10){2006/07/31 (月) 03:16:54} -とりあえずFDドライバを実装中。しかし、ATAが実装されていないとFDCも同時に存在が検出されないようです。ATAハードウェアを実装して、かつ、ATAドライブが繋がっていない状況を作らないといけないようだ。つまり、CDROMドライブ/HDD/FDDはATA(IDEボード?)で提供されているんだろう。ATAが全く存在しなければ、どこからもブートできない環境になるってことか。 -- ''nika'' SIZE(10){2006/08/02 (水) 11:43:59} -なので、rombios.cのソースをダウンロードして、Cのソースを見ながら(パッチせずに)動作できるようにFDD/ATAドライバを実装しなければならないだろう。C言語が得意じゃない私がソースを読んで仕様が分かるだろうか…(汗)。 -- ''nika'' SIZE(10){2006/08/02 (水) 11:47:19} -どこかに「IDE(ATA)ポートの存在チェック方法」とか「FDコントローラ」のエミュレータ側の実装方法とかころがっていないものか…(こんなの利用する人なんてほとんどいないというか全くいないですよねぇOTL) -- ''nika'' SIZE(10){2006/08/02 (水) 11:49:29} -rombios.cを解読中。 -- ''nika'' SIZE(10){2006/08/02 (水) 22:57:30} -rombios.cでcmosアクセスしているのを見て、そういえば起動時のcmos-ramはall 0で返していたような気がする。これでFDドライブが無いと認識されている可能性も無くは無いかも。 -- ''nika'' SIZE(10){2006/08/04 (金) 11:38:17} -やっぱりCMOS設定がよくなかったようだ。Bochs上のCMOSデータを返すようにしたら(64バイト)、FDDも試すようになりました(多分表示上だけではないはず)。 -- ''nika'' SIZE(10){2006/08/04 (金) 13:38:39} -qemuとBochsなどは保存していないみたいだけど、本来はCMOS-RAMは保存されないと意味がないので、256バイトのcmos.datなどとして読み込み、保存をするようにしよう。とりあえずBochsBIOSから自作BIOSになるときに必要になるかもしれないし(汗)。 -- ''nika'' SIZE(10){2006/08/04 (金) 19:01:26} -とりあえず[[Mt.orz:http://koya.marokun.net/soft/soft.php?mtorz]]のOS版が動作するように実装中。当面(FDDがちゃんと実装されるまで)の目標になります。 -- ''nika'' SIZE(10){2006/08/07 (月) 07:01:34} -PM/PGの実装をしたら[[OSAkkie:http://koya.marokun.net/osakkie/]]がちょうどいいかも。起動したら問答無用でカウントアップされていくし。 -- ''nika'' SIZE(10){2006/08/07 (月) 11:40:18} -もしかしたらBochs BIOS+VGA BIOS+OS ROM(OSが組み込まれたROM)のような形式にするかもしれません。いっそのこと独自OSでも作っちゃうかなぁ…。もちろんDOSアプリ実行時はDOS互換で。いや、難しいか。 -- ''nika'' SIZE(10){2006/08/08 (火) 19:39:19} -今日、K-tanからアドバイスをもらいました。bochsでATAをdisableにした状態で起動してみて、もしその状態でFDイメージがブートできるならbochs上でどんな挙動をするのか確認したらいいかもしれない、など言われました。 -- ''nika'' SIZE(10){2006/08/09 (水) 22:09:59} -たしかにそうだな、と思ったのでbochsの挙動を探ることにします(bochsでata0~3をenabled=0にしたが、FDCはアクセスされている。FDイメージ(DOS)が普通に起動する)。bochsのATAの挙動…w -- ''nika'' SIZE(10){2006/08/09 (水) 22:12:48} -Bochsの挙動をいくつか調べてみました。結果、すべてのATAが未実装な状態でも0x3F0~0x3F7のFDCレジスタは有効な様子です(0x3F2の書き込みでログに反応が出ていた)。しかし、FDのブートセクタ(IPL)の読み込みにFDCを使っていないらしく、0x3F0~0x3F7どころか、0x100~0xFFFFのすべてのI/Oレジスタを使っていない様子。Bochsは特殊な方法でIPLをロードしているようだ(それとも最初から…ってそれは無いか)。 -- ''nika'' SIZE(10){2006/08/10 (木) 14:45:02} -でも、互換機で使われないI/Oアクセスはアクセスエラーを起こすようになっているので、特定のビットかメモリマップトI/Oを使っているってことかな…。Bochsは一筋縄じゃいかないなぁ。 -- ''nika'' SIZE(10){2006/08/10 (木) 15:41:30} #comment ---- *コメントらん [#x582b549] -なんとなくスクリーンショットにも使用している自作BIOSを公開してみる(同じファイル名でその都度更新する予定です)。 -- [[nika]] SIZE(10){2006/07/10 (月) 00:29:39} -wikiのテスト -- [[osa:nika]] SIZE(10){2006/07/12 (水) 09:42:37} -とりあえず、ハードウェア相当で日本語を表示できるようにしよう(グラフィックモードでは無く(英語)テキストモードで)。ファンクションキーで切り替える、とか。 -- [[nika]] SIZE(10){2006/07/12 (水) 11:53:49} -ここにあった開発状況などは上記の進行状況へ移動させました。 -- [[nika]] SIZE(10){2006/07/17 (月) 04:34:20} -機器が接続されていないI/Oポートの読み出しは0xFFを返せばいいんだよね? -- [[nika]] SIZE(10){2006/07/22 (土) 13:49:51} -内部資料用にOS-Wiki内のページをコピーしました。OS-Wikiでもページ名に統一性がないなぁ、と思った。bochsというページも今頃発見したので、bochs VBE display adapterもなんとかなりそうな感じです。 -- [[nika]] SIZE(10){2006/07/28 (金) 07:06:55} -もうそろそろディスクイメージ版を出そうと思います(int 18hが出るのを確認できるだけですが)。 -- [[nika]] SIZE(10){2006/07/31 (月) 01:40:41} -ディスクイメージ版を公開しました。 -- [[nika]] SIZE(10){2006/07/31 (月) 10:36:25} -純粋なDOS上でqemuが動作するらしい? http://d.hatena.ne.jp/lukewarm/searchdiary?word=*%5bqemu%5d -- [[nika]] SIZE(10){2006/08/02 (水) 11:33:59} -qemu-0.8.2-windows.zip でやってみましたが、以下のメッセージが出て途中でDOSに戻ってしまいました….。 C:\QEMU>dpmild32 -g qemu.exe -m 32 -L . -fda fdimage0.bin -localtime -net none DPMI loader version 3.1.5 Copyright (C) 1993-2006 Japheth dpmild32: import not found: SetProcessAffinityMask dpmild32: file KERNEL32.dll dpmild32: C:\HX\BIN\IPHLPAPI.DLL: cannot resolve imports さて、どうしたものか… -- ''nika'' SIZE(10){2006/08/04 (金) 12:49:43} -ダウンロードしてあったqemu-0.8.1-windows-3.zipで試してみました。なんと!普通に動作します。-std-vga付けないとqemuのコンソールから切り替わりませんでしたが…。でもDOS上のqemuでフルスクリーンとかできたし、[[Mt.orz:http://koya.marokun.net/soft/soft.php?mtorz]]や[[OSAkkie:http://koya.marokun.net/osakkie/]]も動作しました。BEEPすら鳴らないですが…(-soundhw allなどをつけるとハングする)。 -- ''nika'' SIZE(10){2006/08/09 (水) 08:33:33} #comment