ページへ戻る

− Links

 印刷 

HOSINO​/16bitの.comアプリをefg01で のバックアップ差分(No.2) :: OSASK計画

osaskwiki:HOSINO/16bitの.comアプリをefg01で のバックアップ差分(No.2)

« Prev[4]  Next »[5]
1: 2010-01-19 (火) 02:10:15 HOSINO[6] ソース[7] 2: 2010-01-19 (火) 04:54:26 HOSINO[6] ソース[8]
Line 27: Line 27:
私自身がこれまでにエミュレータを作ったことは有りませんし、ソースを眺めたこともないので、一般的なエミュレータとはかけ離れたものになると思います。~ 私自身がこれまでにエミュレータを作ったことは有りませんし、ソースを眺めたこともないので、一般的なエミュレータとはかけ離れたものになると思います。~
一応の方針としては、当たり前かもしれませんが「ファイル読み込み--->エミュレート--->終了」という感じでしょうか?~ 一応の方針としては、当たり前かもしれませんが「ファイル読み込み--->エミュレート--->終了」という感じでしょうか?~
 +私の知る限りでは.comはorg 0x100固定なので、16bitで扱える最大のメモリー容量の1MBの配列を用意して、0x100番目からファイルから読み込んだプログラムを代入していけばいいか、と考えています。~
 +レジスタはG01Main関数で全てint型の変数として宣言して、ax、al、ahはそれぞれ別の変数として扱います。~
 +時折ax = ah * 0x100 + alの公式に当てはめて値を合わせれば問題ないかと…~
***リアルモードでのレジスタの挙動 [#o09679fc] ***リアルモードでのレジスタの挙動 [#o09679fc]
Line 32: Line 35:
これにはwindowsコンソールのdebug機能が便利そうなので使ってみました。~ これにはwindowsコンソールのdebug機能が便利そうなので使ってみました。~
(microsoftが作ってるので結果の信憑性も高そうですし。)~ (microsoftが作ってるので結果の信憑性も高そうですし。)~
-''実験その一/alやahに0x100以上を入れて見る''~+''実験その一/alやahに0x100以上を入れてみる''~
当たり前ですが無理でした。~ 当たり前ですが無理でした。~
mov al,0x100ぐらいは値がahに繰り上がってah=0x01、al=0x00になるかも…と思ってやってみただけなので。~ mov al,0x100ぐらいは値がahに繰り上がってah=0x01、al=0x00になるかも…と思ってやってみただけなので。~
-''実験その二/alに0xffを入れた後inc alしてみる''+''実験その二/alに0xffを入れた後inc alしてみる''~
結果はax=0x0000でした。~ 結果はax=0x0000でした。~
これも同じくahへの繰り上がりシステムを恐れてやってみましたが、以外とalとahは疎遠のようです。~ これも同じくahへの繰り上がりシステムを恐れてやってみましたが、以外とalとahは疎遠のようです。~
 +''実験その三/alに0xffを入れた後al+=1してみる''~
 +もしかしたらax=0x0100にならないのはincだからでは?と思ったのでadd al,0x01を一応やってみました。~
 +結果は杞憂でした。~
 +''実験その四/alに0xffを入れた後al+=0xffしてみる''~
 +結果はax=0x00feでした。~
 +やはり、ahの値はalの計算だけでは変化しないようです。~
 +''実験その五/ax=0x0000のとき、ax--してみる''~
 +ax=0x0000になれば話は早かったのですが、ax=0xffffでした。~
 +そういえばchar a=0xff;って-1になる事もあるような…~
 +''実験その六/ax=0x0000のとき、ax-- ax--してみる''~
 +結果はax=0xfffeでした。~
 +ax=0xffffになった後の挙動は普通のようです。~
 +''実験その七/ax=0x0000のとき、ax-- ax++してみる''~
 +結果はax=0x0000でした。~
 +どうやら0x0000と0xffffはトランプのAとK(1と13)の関係にあるようです。~
 +''実験その八/ax=0x0000のとき、ah--とal--してみる''~
 +結果はそれぞれax=0xff00とax=00ffでした。~
 +alとahはaxの一部ではなく、常にax=ah*0x100+alという式が成り立ってるだけの別のレジスタと考えた方がいいかもしれません。~
 +''実験その九/axの実験をaddやsubを使ってやってみる''~
 +incとdecを使った実験と結果は同じでした。~
 +と、いうか、違ってたら困るのですが…~
 +***K-tanさんのnask開発について [#ib5a7433]
 +今回の計画ではnaskとwindowsに思いっきり頼ることになりそうですが、そもそもK-tanさんはどこで機械語を習得したのでしょう?~
 +asukaやcc1は自分では機械語を生成しないのでアセンブリの知識が有れば出来るような気がしますが、さすがにnaskは機械語を知っていなければ無理だと思います。~
 +そもそも、私にnaskを読む力が有れば一個一個アセンブルしたファイルをのぞいて機械語を調べる、という非効率的な事をしなくても済むのですが、残念ながら出来ないので、K-tanさんが使ったと思われる機械語の対応表みたいなものをご存知の方は、お教えいただけると助かります。~
 +そういえば、話はそれますが、アセンブルしたファイルをのぞくのはK-tanさんがGUIGUI01memoシリーズでおつくりになったバイナリビュアーが便利そうです。~
 +K-tanさんのソフトには色々とお世話になります。m(_ _)m~
 +***stardos version 0.1開発計画 [#wdd711d2]
 +stardosというのはいま考えたエミュレータの名称です。~
 +starは私の名前の「星野」から、dosは「ma-dos」からとってきました。(安易すぎ?)~
 +正式名称を付けた方がかっこいいかもしれないので、気が向いたら考えておきます。~
 +それまではstardosはSTARDOSの略称とでもしておきます。~
 +さて、くだらない話はここまでにして置き、肝心の中身ですが、汎用レジスタへの代入しかサポートしません。~
 +よって、実用性は全くありません。~
 +万が一stardos 0.1が公開されていても、使用目的でダウンロードしないのが推奨です。~
 +ただ、機械語を一個一個調べていくのは大変そうなので、開発は今週いっぱいは最低でもかかると思います。~
 +プログラミング技術のない未熟者の工作ですので、期待しないでください。~
« Prev[4]  Next »[5]