|
1: 2010-01-19 (火) 02:10:15 HOSINO |
| + | *不完全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は疎遠のようです。~ |