* DEMUプロジェクトの仕様と詳細 [#h8c5ec85] このページは、DOSエミュレータ 「DEMU」の仕様や進行状況を更新するページです。~ 最初から書き直す必要に迫られたので、改名とともにページ名を変更しました。~ とりあえずDOS互換だけ実装し、その後コツコツと仕上げていくつもり。~ ''(編集中)'' //////////////////////////////////////////////////////////////// * スクリーンショットとか [#ka4b52df] ** 最新 [#n26a4c3c] |#ref(demu20061021a.png)| |スクロールして!GUIDE!.TXTの最後部分の表示ができるようになった| |#ref(demu20061020b.png)| |ごたくどすのコンソール出力をリダイレクトして&br;そのファイルを表示してみたところ&br;(エスケープシーケンスの動作確認用)&br;COLOR(red){まだ動作する段階ではありません!}| #ref(5dsout.txt) //|#ref(demu20061020a.png)| //|ファイル選択でテキストファイルを表示してみたところ。&br;ただし、まだフラッシュに未対応・・・w| //|#ref(demu20061019b.png)| //|1文字表示を使用して仮想バッファ分を&br;文字で埋め尽くしてみたところ。| //|#ref(demu20061018a.png)| //|起動直後| //|#ref(demu20061014a.png)| //|12ドットフォントチェック用(フォントC)| ~ ** フォント適応補間リサイズ [#i0a0f664] 16x16のOSASK標準フォントを12x12や32x32へリサイズした例です。~ 12x12はそれなりに使えると思いますが、~ 32x32は使用用途が…(笑)。~ -テキスト80x30モードで32x32フォントを使用した場合:1280x960の解像度が必要(80x25では1280x800)。 -Windowsのコマンドプロンプトのように、はみ出したエリアをスクロールするようになれば、32x32や高解像度(128x50とか)も夢じゃない。 -テキスト80x25で12x12フォントなら640x400の解像度でも使用できる(上下にえせタスクバーがあっても)。 |#ref(demu20061012e.png)|#ref(demu20061012g.png)| |フォントA (斜め規制ON)|フォントB (斜め規制OFF)| //|#ref(demu20061012e.png)|#ref(demu20061012f.png)| //|フォントA (斜め規制ONとの比較用)|フォントA 4x拡大| //|#ref(demu20061012g.png)|#ref(demu20061012h.png)| //|フォントB (斜め規制OFFとの比較用)|フォントB 2x拡大| //|#ref(demu20061012a.png)|#ref(demu20061012b.png)| //|フォントA,斜め規制OFF|フォントA,斜め規制ON| //|#ref(demu20061012c.png)|#ref(demu20061012d.png)| //|フォントB,斜め規制OFF|フォントB,斜め規制ON| ~ * 仕様とか [#oac31450] ** メモリアドレスマップ [#t92cde3c] ---大体のメモリマップ |物理アドレス|サイズ|用途|備考| |0x00000000| 64KB|SYSTEM|未使用| |0x00010000|576KB|空き|使用可能メモリ| |0x000A0000| 32KB|TVRAM|テキストメモリ※| |0x000A8000| 32KB|TVRAM|テキストメモリ※| |0x000B0000| 32KB|TVRAM|テキストメモリ※| |0x000B8000| 32KB|TVRAM|テキストメモリ※| |0x000C0000| 32KB|TVRAM|テキストメモリ※| |0x000C8000| 32KB|TVRAM|テキストメモリ※| |0x000D0000| 96KB|空き|未使用| |0x000E8000| 32KB|TVRAM|テキストメモリ※| |0x000F0000| 64KB|空き|未使用| |0x00100000| 64KB|HMA|使用可能メモリ| |0x00110000|960KB|XMS|使用不可| |0x00200000|---||配置なし| ※実際のテキストメモリは8KBくらいで大体同じ場所を再配置しているだけである。 ※ただし配置場所によってビット単位で意味が異なる場合がある。 ~ ---I/Oアドレスマップ |アドレス|サイズ|備考| |0x0000| 64KB|配置なし| ~ ** 内部資料(仮仕様) [#v1e6a122] ***テキストVRAM [#uc357797] ヘッダ(64byte)+テキストバッファ(サイズ分*4byte) -ヘッダ _grp_id 8byte 識別用ID _grp_prev dword 未使用_ _grp_next dword 未使用_ _grp_window dword 配置先ウィンドウ_ _grp_buffer dword 未使用_ _grp_left dword ウィンドウ内での座標_ _grp_top dword _grp_scrnwidth byte 描画先の領域のサイズ(pixel) _grp_scrnheight byte _grp_fontwidth byte フォントのサイズ(pixel) _grp_fontheight byte _grp_textwidth byte バッファのテキスト単位のサイズ_ _grp_textheight byte _grp_scaleleft byte 描画開始位置(テキスト単位) _grp_scaletop byte _grp_width byte 描画先のテキストサイズ(テキスト単位) _grp_height byte (残り) 未使用_ ~ -内部バッファ~ 以下の8byteが文字数分(80x25=半角4000文字分)連続する。 テキストコード(32bit) 4byte 文字色 1byte 背景色 1byte 拡張用 2byte ~ -テキスト関係APIの実装状態(COLOR(red){未実装}/COLOR(green){実装作業中}/COLOR(blue){実装済み}) --COLOR(blue){グラフィックテキストボックスオープン} ; in: edx ウィンドウ ; esi,edi グラフィックボックスの位置 ; cl,ch テキストボックスの表示領域のサイズ ; al,ah テキストボックスのバッファのサイズ ; ebx グラフィックテキストボックス --COLOR(red){%%グラフィックテキストボックスクローズ%%}(当面実装の予定なし) --COLOR(blue){グラフィックテキストボックスフラッシュ} ; in: ebx グラフィックテキストボックス ; cl,ch バッファ左上位置 ; al,ah サイズ(どちらかが0で全体再描画) --COLOR(blue){グラフィックテキストボックス1文字分書き込み} ; in: eax 32bit半角コード ; cl,ch バッファ位置 ; dl,dh 文字色,背景色 ; ebx グラフィックテキストボックス --COLOR(blue){グラフィックテキストボックスコンソール出力}COLOR(blue){(エスケープシーケンス式)} ; in: ebx グラフィックテキストボックス ; edx 文字列(終端\0) ; al b1~0:文字列コード(=00:ASCIIZ,=01:SJISZ,=10:未定,=11:未定) ただしエスケープシーケンスは0x1B,"["で始まり"ABCDHJfsum*"のいずれかで終わるものに限る。 --COLOR(red){%%グラフィックテキストボックスサイズ指定書き込み%%}(廃止) --COLOR(blue){グラフィックテキストボックス1行下から上方向スクロール} ; in: ebx グラフィックテキストボックス ; dl,dh 文字色,背景色 --COLOR(red){グラフィックテキストボックスフォント関連} --COLOR(red){グラフィックテキストボックス色深度関連} --COLOR(red){グラフィックテキストボックス解像度またはリサイズ関連} ~ ** 管理用メモ [#xd7a3807] ここは、管理人が試行錯誤しながら変更していく内部用のメモがわりです。 #hr -DEMU起動時に実行ファイルをオープン(関連付け起動対応)。 -メモリブロックの構造や環境変数などを内部(外部優先)ファイルを元に初期化 --しないかもしれない。 -DOS実行ファイルを(必要ならばリロケーションして)メモリに配置。 --実行可能なEXEファイルにはサイズ制限があります(実際のEXEファイルのサイズが560KB未満)。 -ファイルの読み込みや書き出しは必要な場合のみ、ディスクイメージをアクセスする。 --実行ファイルの位置はそのイメージ内にあるものとする。 ---実際にディスクイメージ内に無い場合でも内部的には微妙。 --ハードディスクやCD-ROM等はアクセスできない。 -BIOSをエミュレーションしているわけではないのでBIOSレベルの操作は正常に動作しない。 -常駐するアプリは対応していない。というかコマンドラインが無いので正常終了と同じ扱い。 -タイマ割り込みをエミュレーションするかどうかは使っているアプリがどのくらいあるかによる。 -ゲストOS内の時間設定はとりあえず起動時に2006/11/13 17:30:00.00にセットしてみる。 -DOS Versionは5.0としようかな。 -画面はテキストのみ。以下の解像度で表示。いわゆるANSI対応。 |モード|解像度|フォント|表示解像度|言語| | 3| 80x25| 6x12| 480x 300| jp| | -| 80x30| 6x12| 480x 360| jp| | 3| 80x25| 6x12| 480x 300| us| | -| 80x30| 6x12| 480x 360| us| | -| 80x25| 8x16| 640x 400| - | | -| 80x30| 8x16| 640x 480| - | | -| 80x25| 12x24| 960x 600| - | | -| 80x30| 12x24| 960x 720| - | | -| 80x25| 16x32| 1280x 800| - | | -| 80x30| 16x32| 1280x 960| - | -キーボード --DOSファンクション経由のみ。多分同時押し検出不可能。 -マウスドライバ --int 33hのエミュレーションをやればできそうだけど対応しているアプリが無さそうなので先送り。 -プリンタ --未対応。 -ファイル --ディスクイメージ起動ではないのでファイル検索は未対応。ファイル名を指定して開くことならできる。 --フロッピィディスクエミュレーションだけどネットワークドライブと考えれば(検索できないけど)イメージがあいそう。 -CPU/FPU --8086シリーズ。80386DX相当。PM/PG/VM/FPU/SSE/MMX/SSE2/SSE3/3DNow!非対応。32bitレジスタ対応。インタプリタ型。 -サウンド --BEEPすら出せない。 -メモリ配置 --起動するDOSアプリは0x00010000~0x0009FFEFを自由に使える。UMBやEMB、HMAは使えない(予定)。 -その他 ''(編集中)'' * 進行状況欄 [#oe0c7cf5] ここは管理人が書く場所です。 ---- -ソースを書き直す段階になって、基礎ライブラリ再構築中。これのテスト中にテストゲームなどを作成するかもしれない。 -- [[nika]] SIZE(10){2006/09/28 (木) 06:23:43} -とりあえず、当初の計画に戻って、DOS APIレベル(int 21hレベル)のエミュレーションでDLL(デバイスドライバ)を使用しない形式で作成しようと思います。 -- ''nika'' SIZE(10){2006/10/11 (水) 04:02:59} -6x12ドットの内蔵ASCIIフォントを使用する。日本語はOSASKシステムフォントを縮小して使用するつもり。16x16を12x12に縮小するにはHighColorなら中間色補間ができるが、16色だとそれもできない。16x16→12x12(単純補間(間引き)または適応補間)しかできない。 -- ''nika'' SIZE(10){2006/10/12 (木) 04:05:44} -ファイルアクセス関係実装中。 -- ''nika'' SIZE(10){2006/10/13 (金) 13:21:26} -実行ファイルのリロケーションとかPSPの用意とか準備関係実装中。 -- ''nika'' SIZE(10){2006/10/14 (土) 18:14:13} -この方式(DOSAPIレベル)だとディスクイメージってわけにはいかないよなぁ。やっぱりリストファイル(alias可能な)を参照してそれをDOSディスクにしよう。セクタ単位のアクセスまでサポートしなくても(あるいは、簡単なサポートだけで)動作するだろうし。 -- ''nika'' SIZE(10){2006/10/14 (土) 23:23:59} -グラフィックボックスを使うのをやめて、独自のテキストVRAMみたいなものを使用する用に実装中。 -- ''nika'' SIZE(10){2006/10/17 (火) 16:59:20} -独自のテキストボックス形式で疲れた。 -- ''nika'' SIZE(10){2006/10/18 (水) 19:50:59} -テキストボックス関係の実装は一通り完了。これからCPU部の実装(といっても旧バージョンのコピーに近いが)とかだな。 -- ''nika'' SIZE(10){2006/10/21 (土) 03:24:25} #comment * なにか書いていってください [#ne60eb42] なんでもいいですよ。 ---- -メモ: http://hp.vector.co.jp/authors/VA015412/colum/pe.htm -- ''nika'' SIZE(10){2006/10/15 (日) 16:08:06} -ぉ、いきなり進みましたねwwいいだけ逃げていたのにwwすげーな。応援してもります。 -- ''通りすがりんこ'' SIZE(10){2006/10/17 (火) 21:28:22} -応援ありがとうございます。OSCがあるのでそれまでには何とかアプリ実行できるまでにしたいです。 -- ''nika'' SIZE(10){2006/10/19 (木) 03:32:31} -メモ: http://forum.nifty.com/fpcu/dosvcmd/ansi.htm -- ''nika'' SIZE(10){2006/10/19 (木) 20:18:28} #comment