1: 2010-01-19 (火) 02:10:15 HOSINO[5] [6] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | *不完全MS-DOSエミュレータ製作計画 [#b3d34080] | ||
+ | この計画は星野個人的なものであり、osask計画のサブプロジェクトなどではありませんが、何かご存知でしたら是非お教えください。~ | ||
+ | **現状目標 [#kffffa0c] | ||
+ | 16bitで.com形式が動くだけの、エミュレータと言えるかかなり怪しいアプリを作るかもしれません。~ | ||
+ | |||
+ | **現状成果物 [#qe6e226e] | ||
+ | 特にありません。~ | ||
+ | |||
+ | **開発記 [#sfdaa7bf] | ||
+ | 開発の様子やらなんやらをたまに書き込みます。(もしかしたら規約違反?)~ | ||
+ | 読んでもどうしようもない個人的な感想なども多いです。~ | ||
+ | |||
+ | ***MS-DOSエミュレータについて [#v1bfe10d] | ||
+ | 16bitなら簡単そうで、そこらじゅうにソースが転がってもよさそうですが、なぜかこの類の私が手を出せそうなフリーソフトは見当たりませんでした。~ | ||
+ | でもよく考えたら、windowsがコンソール上でMS-DOSをエミュレートしてくれるので、わざわざ作る必要も確かになさそうですが…~ | ||
+ | 私は初めてのパソコンがwindowsの世代なので、ms-dosの事は正直よくわかりません。~ | ||
+ | とりあえずCPU固有の命令(mov ax,10とか)以外はint 0x21でのシステムコール系統を何とかすればいいかなぁ、と楽観視しています。~ | ||
+ | でも、そもそもシステムコールは文字の出入力とファイル操作以外に何をするのかわからない、とかいうレベルです。~ | ||
+ | 開発方針としては、naskを使ってmov ax,bxとかがどんなコードに変換されているのか地道に調べるところから始めようかと…。~ | ||
+ | 手元にwindowsのコンソールというmicrosoft公認(?)のms-dosエミュレータが有るので、これを積極的に活用していくつもりです。~ | ||
+ | ちなみに、最終的にはこの計画で調べた機械語を基にして、16bitのみ対応の超小型アセンブラを作るつもりです。~ | ||
+ | とはいっても、今のところ絵に描いた餅ですが…。~ | ||
+ | (サイズはnaskの1/2、機能はnaskの1/10みたいな感じで…。)~ | ||
+ | |||
+ | ***エミュレータの基本構造 [#q8c1a1cd] | ||
+ | 私自身がこれまでにエミュレータを作ったことは有りませんし、ソースを眺めたこともないので、一般的なエミュレータとはかけ離れたものになると思います。~ | ||
+ | 一応の方針としては、当たり前かもしれませんが「ファイル読み込み--->エミュレート--->終了」という感じでしょうか?~ | ||
+ | |||
+ | ***リアルモードでのレジスタの挙動 [#o09679fc] | ||
+ | よく考えたら機械語うんぬんかんぬん以前に、レジスタについて理解していないことが多すぎたので、そこの辺の詳しい挙動を調べてみます。~ | ||
+ | これにはwindowsコンソールのdebug機能が便利そうなので使ってみました。~ | ||
+ | (microsoftが作ってるので結果の信憑性も高そうですし。)~ | ||
+ | ''実験その一/alやahに0x100以上を入れて見る''~ | ||
+ | 当たり前ですが無理でした。~ | ||
+ | mov al,0x100ぐらいは値がahに繰り上がってah=0x01、al=0x00になるかも…と思ってやってみただけなので。~ | ||
+ | ''実験その二/alに0xffを入れた後inc alしてみる'' | ||
+ | 結果はax=0x0000でした。~ | ||
+ | これも同じくahへの繰り上がりシステムを恐れてやってみましたが、以外とalとahは疎遠のようです。~ |
(This host) = http://osask.net