This site is like a claosrosm, except I don't hate it. lol このページは更新を停止しました。新しいページが作成されています。[[こちら>DEMU]]をご覧下さい。 *もくじ。 [#u1e5b09f] ただしリンクは機能しません。URLに"#"が付くだけです。~ SIZE(9.5){COLOR(green){このページは横幅がある程度必要で、縦方向にも長いのでSXGA(1280x960)以上の画面解像度を推奨します。}}~ ---- #contents *DOSエミュレータ(仮) の詳細ページ [#c0942f69] **DOS Emulator(仮) の動作について [#nc816dd0] 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用は不明)。 - -''(編集中)'' ~ **スクリーンショット [#o6301b01] //--bochsのBIOS/VGA BIOSを使用して起動してみたところ~ //|#ref(biosboot.png)|#ref(biosboot2.png)| //|#ref(atbios13.png)|#ref(atbios12.png)| //|#ref(atbios11.png)| //#ref(atbios13.png) --FDCのエミュレーションを諦め、int 13hフックでMt.orzを起動させた場合 #ref(atbios21b.png) ~ #ref(atbios23.png) ~ ---Bochs用のMt.orz v0.1のダウンロード |ファイル形式|ファイルサイズ|ダウンロード| |LHA版|14681|#ref(atdsk.lzh)| |SAR版|12451|#ref(atdsk.sar)| 詳細は付属のドキュメントを参照して下さい。 ~ ---IDE関係の(と思われる)I/O空間を強制的に切り離しました。一応本来トラップしたI/Oアドレスを載せておきます。 0x03F6, 0x01F0~0x01F7 0x0376, 0x0170~0x0177 0x03E6, 0x01E8~0x01EF 0x0366, 0x0168~0x016F ---[[Bochsの挙動]]を見ると、マスタ/スレーブに何も繋がっていない場合はFFhじゃなくて00hを返せばいいのかも? //--bochsのブートROMを自作のbiosに差し替えて実行してみたところ(bochsでの実行はこれから変更ありません)~ //#ref(atbios6.png) //--DOSEmulatorで実行した場合(ファイル選択画面)/(と!GUIDE!.TXTを選択した場合)~ //|#ref(atbios8.png)| //|#ref(atbios9.png)| //--フロッピーディスクのブートセクタを読み出そうとしてハング(Cフェーズから移行したらbreakするようになっていた為) //#ref(atbios18.png) --タイトルバーを某エミュレータ名にして、行間と字間をあけてそれっぽくした場合(ネタです。) #ref(atbios12q.png) --ちなみに本物のエミュレータの画面(こうならないといけない…) #ref(qemu2.png) --SIZE(11){K-tanのVGABIOSをDOSEmulatorで走らせてみても、まだちゃんと動作しないんだよなぁ。なぜそこが実行されているか意味不明…。} #ref(atbiosk3.png) #ref(atbiosk4.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} ---- -- [[名無しさん]] SIZE(10){2006/08/22 (火) 17:45:50} //#vote(不良セクタ形式[4], 2DDブート作戦形式[0], リストから作成形式[1], その他の方法/形式[0]) |選択肢 |投票| |不良セクタ形式 | 4| |2DDブート作戦形式 | 0| |リストから作成形式| 1| |その他の方法/形式 | 0| ~ ---- -1ヶ月立ちましたので勝手ながら締め切らせてもらいました。-- ''nika'' SIZE(10){2006/08/31 (木) 08:50:51} **最終目標 [#e7a17a47] とりあえず以下のOS/DOSアプリが動作すること。 |#ref(mtorz.png)| |[[Mt.orz:http://koya.marokun.net/soft/soft.php?mtorz]](画面写真はv0.1)| ~ |#ref(5ds.png)| |[[ごたくどす:http://www.vector.co.jp/vpack/browse/pickup/pw0/pw000069.html]]| ~ |#ref(lha2.png)| |[[LHA v2.55b:http://www.vector.co.jp/soft/dos/util/se002413.html]]| ~ |#ref(neco2.png)| |ディスク操作アプリ([[NECO:http://www.vector.co.jp/vpack/filearea/dos/util/disk/care/neco/]])| ~ //|#ref(game.png)| //|グラフィック使用アプリ([[:http://]])| ~ |#ref(osakkies.png)|#ref(osask47x.png)| |[[OS Akkie:http://osakkie.info/]]|[[OSASK:http://osask.jp/]]([[Vector:http://www.vector.co.jp/soft/win95/prog/se212937.html]])| ~ *進行状況 [#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} -よく見たらint 13hはちゃんと実行されているようですが、フロッピーディスクアクセスなのにint13_harddiskの呼び出しになっていて、それで失敗してフロッピーディスクのIPLの読み込みをしてくれないようです。 -- ''nika'' SIZE(10){2006/08/14 (月) 18:12:01} -int 13hの中をDOS Emulator(仮)をデバッグ用にシングルステップ処理で検証してみることにします。逆アセンブラとゲストOS(DOS)のレジスタダンプを比較しながら。int 13hの中だけを。 -- ''nika'' SIZE(10){2006/08/15 (火) 02:09:05} -しかし、int13h_diskette_functionじゃなくint13h_harddiskに飛んでいるのは普通に考えたらおかしい。CPUの処理に根本的な間違いがあるかも知れない?(OTL) -- ''nika'' SIZE(10){2006/08/15 (火) 02:10:59} -なんとなく開発風景というかデバッグ中のデスクトップを晒してみるw [[@添付ファイル:http://com-nika.osask.jp/wiki/?plugin=attach&refer=DOSEmulater&openfile=atbios16.jpg]] (ただし画像サイズが大きいのに注意) -- ''nika'' SIZE(10){2006/08/15 (火) 02:18:15} -原因が判明しました。CPUのエミュレーションで、オペコードがF6/F7のTEST命令(REGフィールドが000か001)の時、フラグをクリアして命令を実行させた後、更新されたフラグをゲストOSのフラグへ反映させていなかった(=常にZFがNZ(クリア)されていた)のが原因でした。これを修正したら無事0x3F2をリードするようになりました。 -- ''nika'' SIZE(10){2006/08/15 (火) 14:11:49} -K-tanのvgabiosを再度実行させてみました。…が、失敗。またまた何故そんなところを実行しているのか…。まだ重大なバグがあるってことなのか…orz -- ''nika'' SIZE(10){2006/08/15 (火) 14:47:08} -フロッピーディスクドライバを実装中です。FDCのI/Oアクセスの一部は既に実装済みですが、コマンド/パラメータを発行した時点でbreakする状態です。現在はFDC周辺の資料を整理しています。それぞれのフェーズの移行とかは知っていますが、パラメータの意味がまだちょっと分からないので、大体理解したら本格的に実装しようと思います。それまで少し時間がかかりそうなので、しばらくお待ち下さい。 -- ''nika'' SIZE(10){2006/08/16 (水) 12:54:06} -整理中のFDCの資料をご覧になりたい方は、[[こちら>BIOS]]の下の方にあります。 -- ''nika'' SIZE(10){2006/08/16 (水) 12:55:25} -とりあえずアクセス検出用のint 3を戻したところ、command=07(RECALIBRATE)を実行しようとしました。つまりこれを実装開始w -- ''nika'' SIZE(10){2006/08/18 (金) 17:59:37} -RECALIBRATEはE/Rフェーズが無く(実際にはEフェーズ中にヘッドが移動するんだけど)、即終了でいいでしょう。よって、コマンド書き込み終了後、すぐに割り込み信号をアサートさせればOK!なはず。 -- ''nika'' SIZE(10){2006/08/18 (金) 18:01:48} -あぁ、COLOR(blue){外部割り込み}関係は実装が不完全だったんだったOTL.....ここを直さないと次に進めない…。 -- ''nika'' SIZE(10){2006/08/18 (金) 18:08:52} -COLOR(blue){外部割り込み}: どうやらINTRの変更を通知するファンクション番号(DOSで言うならINTベクタ相当)を間違えていたことで、うまく作動しなかったようだ(爆 -- ''nika'' SIZE(10){2006/08/18 (金) 23:05:05} -割り込み関係は実装完了。FDCに関してのIRQは正常に来るようになりました。まだ、復帰まで行ってませんが…。FDCのSENSE INTERRUPT STATUS(08h)を実装中です。 -- ''nika'' SIZE(10){2006/08/19 (土) 21:11:12} -あと、CMOSメモリをイメージファイル"CMOS.DAT"から読み込むようにしました。 -- ''nika'' SIZE(10){2006/08/19 (土) 21:12:16} -ちょっと、ドライバへの制御処理がおかしいのか変なところでハングする…。違うセグメントで実行しているときに割り込み(シグナルハンドラへの移行)があると何かが溜まっていっていつのまにか変な位置に移行(復帰?)してしまう感じ…?。とりあえずFDCの実装も時間がかかるっぽいので、int 13hのFDの時はドライバ側でエミュレーションしてしまおう。 -- ''nika'' SIZE(10){2006/08/26 (土) 17:08:54} -…。(DEMU本体のソースをもうそろそろ書き直さないとヤバいなぁ(汗 -- ''nika'' SIZE(10){2006/08/26 (土) 17:11:24} -そういえば、デバッグ機能が弱い。もっとコンソールとか別々にしてメモリ参照とかレジスタダンプとかブレイクポイントとか色々できるようにしないと何かあったとき原因を見つけるのが難しくなっていく気がする。IRRやDMARQの状態とかも見れるようにして、デバッグしやすい環境にしなくちゃいけないなぁ(課題)。 -- ''nika'' SIZE(10){2006/08/26 (土) 17:19:03} -VGAのエミュレーションをどうしようかなぁ。現在はメモリ書き込み時に画面に反映するという手抜きだからなぁ。デバイスドライバで実装するにしても表示画面の大きさ変更とかVRAM書き換えの画面反映とかどうするかなぁ。テキストモードもデバイスドライバでやるならフォントの取得させてグラフィック描画するようにしたほうがいいのかなぁ。これちゃんとしないとグラフィック使うアプリは誤動作(=見えない)しちゃうから考えとかないと。 -- ''nika'' SIZE(10){2006/08/31 (木) 01:45:36} -BGMライブラリを作り直したくなってきた。BEEP音源専用で、最大和音数指定可能、MIDI形式バッファを使用可能。効果音/BGMを独立に鳴らすことが可能。こんな感じでもBGMライブラリ使う人はいるかな。(BGMライブラリが完成すれば、どのアプリでも簡単にBGMが使えて便利になるけど、以前のソースは紛失しちゃったし、書き直すの(特にMIDI形式関係)めんどくさいんだよなぁ)。 -- ''nika'' SIZE(10){2006/08/31 (木) 01:50:05} -↑単なるぼやきになってしまいました。すみませんです。 -- ''nika'' SIZE(10){2006/08/31 (木) 01:51:05} -int 13hによるフロッピーディスク#0のアクセスをフックして直接渡す方法を試してみました。が、半分成功、半分失敗しているようだ。現在はMt.orzのディスクイメージの先頭2セクタ分をROMに持ち、直接movsbでコピーしていますが、LBAセクタ1を800:100に読み込んだあとにデバイスドライバでハングしているようです。DEMU上でMt.orzの起動画面が見れるまでもう少しっぽい。 -- ''nika'' SIZE(10){2006/08/31 (木) 07:52:33} -VGAドライバでハングしてました。アトリビュートデータ用RAMが足りなかったようです。そのバグをとったら無事起動しました。が、画面の肝心なところが表示されず。パレットかなにかだろうか。…と思ったらタイマをまだ実装してなかった(爆)。 -- ''nika'' SIZE(10){2006/08/31 (木) 08:58:58} -DEMUの内部タイマの実装中。なぜかgetsignal関数の中でbreakすることがある。何故なのか意味不明。やっぱりDLL実行中にシグナル受信(=シグナルハンドラへの分岐)するとデータセグメント(DS)が分岐前のセグメントセレクタ値で、そのリミットを越えているのかも?もしそうだったらDLLのデータセグメントはDSじゃなくESにするべきかもだったけど、そうするとC言語とか不可能になるし、いちいちES:かCS:プリフィックスを付けなければならなくなるのはちょっといやだなぁ。とりあえずタイマの精度は最大60Hzで、それ未満の場合は1/60秒分の時間がこの瞬間に一気に進む扱いになる。一応このタイマは将来VSYNCと兼用するつもり。オートフレームスキップを使用するためには最低でも2つ以上のタイマ(計6個以上のスロット)を使用しなければならない。 -- ''nika'' SIZE(10){2006/09/01 (金) 07:16:33} -スクリーンショットは現在オリジナルのMt.orzを修正したものを使用しています(まだタイマを実装していないので、初期色(=0)の黒のままになって表示されているのか分からない為、初期値を7(白)に変更したのみ)。 -- ''nika'' SIZE(10){2006/09/01 (金) 07:19:11} -シグナルハンドラ分岐時のブレイクは入り口でds=15にセットしたら無事動作するようになりました(多分)。いままで止まらなかったのが不思議に思えてきましたw でもまだタイマをオープンして周期的タイマとして動作させているだけの段階なのよね。フレームレート調整とかはまだ描画処理がフレーム単位じゃないから必要ないし。デバイスドライバ側のタイマ登録/変更APIは既に実装してあるので、あとはタイマ制御のみ。…めんどくさいなぁ。間引き回数とか登録されているタイ(ry -- ''nika'' SIZE(10){2006/09/01 (金) 23:52:00} -VGAドライバからはグラフィックボックスのサイズ変更とかできないと、画面モード変えられないことになる。でもDOSが動作するようになってから考えよう。(笑 -- ''nika'' SIZE(10){2006/09/02 (土) 01:54:33} -えーと、DEMU内でタイマの周期敵割り込みの実装は完了(OSASKからタイマが来るだけの状態)。現在ドバイスドライバのタイマ割り込み処理ルーチンを実装中。 -- ''nika'' SIZE(10){2006/09/02 (土) 03:07:24} -デバイスドライバへのタイマ割り込みの実装を完了。今度はデバイスドライバ側のタイマ処理(IRQピンを"H"にしたりCMOSの時間を進めたりする)の実装へ。デバイスドライバへのタイマ割り込みがちゃんと動作していれば、無事にゲストOSの時間が(やっと)進むようになる。 -- ''nika'' SIZE(10){2006/09/02 (土) 04:24:55} -ちなみにDEMU→デバイスドライバへのタイマ割り込み処理を実装しただけの段階ではゲストOSに変化はありません。なぜなら、デバイスドライバ側のタイマ割り込み処理ルーチンでなにもしないでreturn;しているからです(=すでに登録されてはいます)。 -- ''nika'' SIZE(10){2006/09/02 (土) 04:27:30} -やっぱり外部セグメントを実行中にシグナルで割り込みが起きるとDSを参照しようとして(多分)ハングするようです。ESを使えば問題は起きないようです(すべてのデバイスドライバをそうしなきゃいけないとなると面倒だなぁ)。という問題があるのでとりあえず保留中。デバイスドライバを実行するときは必ずシグナルハンドラの再入値を禁止にセットするのも微妙だしぃ(笑 -- ''nika'' SIZE(10){2006/09/03 (日) 03:23:35} -この問題をMLに投げました。 -- ''nika'' SIZE(10){2006/09/04 (月) 06:03:31} -デバイスドライバ側のデータバッファはDEMU本体のデータセグメントと共用、ドライバの呼び出し前にデータバッファのポインタをコードセグメントの一定の場所に他のパラメータと一緒の場所に書き込んで渡すことになりました。将来はデータセグメントを作成しようとするだけで強制終了されるようになるそうです。 -- ''nika'' SIZE(10){2006/09/05 (火) 09:17:45} -しばらく↑の変更に費やされると思います。少々お待ち下さいw -- ''nika'' SIZE(10){2006/09/05 (火) 09:26:24} -ちなみに、現時点で[[OSAkkie:http://koya.marokun.net/osakkie/index.php]]を実行してみると、キーボードドライバで止まってしまいます(汗。これは未実装なコマンドが書き込まれるとハングする仕様だからです。 -- ''nika'' SIZE(10){2006/09/06 (水) 09:41:36} -うぅ。仕様の大幅な変更が必要だ…orz デバイスドライバのファイル形式とかデータバッファの参照を相対参照にさせないといけないし…。かなり面倒だなぁ;; -- ''nika'' SIZE(10){2006/09/06 (水) 23:29:54} -最初から作り直すのも面倒だし、でも最初から作り直すと速度とか速くなりったりなによりソースがサッパリできるけど…。うーむ、どうしたものか。 -- ''nika'' SIZE(10){2006/09/06 (水) 23:32:49} -現在、[[BGMライブラリ>lib/bgm]]に脱線中(笑)。 -- ''nika'' SIZE(10){2006/09/08 (金) 10:08:18} -TrueMAZE(仮)とKAODUN v0.2にハマってました。これからDEMUの仕様の作り直し、(時間があれば)TrueMAZEの更新など進ませたいです。 -- ''nika'' SIZE(10){2006/09/18 (月) 20:24:35} -[[Mt.orz v0.2:http://koya.marokun.net/soft/soft.php?mtorz]]が出ていたので少し修正しました。また、こちらのページの更新は停止しました。以後、[[DEMU]]の方で更新していきたいと思います。 -- ''nika'' SIZE(10){2006/10/06 (金) 02:46:37} //-QIviXSqrB -- ''ofHYyvwMGAOwwIdvg'' SIZE(10){2008/10/13 (月) 23:54:03} #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} -Bochs用のMt.orz BIOSを公開してみました。 -- ''nika'' SIZE(10){2006/09/03 (日) 19:02:43} #comment ~ * DOS Emulator(仮) 将来予定のリスト [#r23bb4bb] **ゲスト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等一部で日本語フォント使用(第一水準もあれば問題無い)|| ''(編集中)'' ~ **OSASK側に提供される機能(予定)というか課題のリスト [#e60047a6] |機能|説明|備考| |デバッグコンソール||まだ無い| |シングルステップ例外||| |AAA/AAM/DAAなどの命令||| |プロテクトモード||| |ページングモード||| |仮想86モード||| |FDコントローラ||実装中| |ATA & CD-ROM||| |PCI/PCMCIA||| |DOS内蔵BIOS||| |FMR/TOWNS互換モード||| |IRQの正常な動作||| |DMAの動作モードの設定||| |Nearestによる拡大縮小||| |BiLinearによる拡大縮小||| |画面外スクロールバー||| |日本語フォント対応||| |マウス対応||| |専用自作VGABIOS||| |専用自作ROMBIOS||| |あまりメモリを食わないようにする||| |何をしてもOSASKが落ちないようにする||| |とりあえずまっとうなアプリケーションになる||| |ゲストOSでグラフィックアクセラレータが使用できるようにする||| |デバイスドライバでOSASKAPIを呼べるようにする||| |FDイメージの交換をできるようにする||| |ウィンドウの大きさを可変にして、テキストモード時はフォントを大きくできるようにする||| |ドライバ用のメモリが余ったらゲストOS(DOS)で使用できるメモリに回したい||| |ゲストOSでタイマを細かく制御できるようにする||| |起動時にすぐにゲストOSを起動するかメニューを出すようにする||| |初起動の時にベンチマークテストして自動で設定を更新したい||| |TOWNSやPC9821でも動作するレベルを維持する||| |メモリを動的に確保したり開放したりしたい||| |ステートセーブ(クイックセーブ?)/ロードができるようにしようかな||| |win32コンソールアプリを動作できるようにする||| -もし、SB16等のハードウェアか勝手に操作して、OSASKが意図しないIRQとか来たらどうなるんだろう…って普通にマスクされてるか。普通。 -''(編集中)'' ~