ページへ戻る
印刷
HOSINO/16bitの.comアプリをefg01で
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:HOSINO/16bitの.comアプリをefg01で をテンプレートにして作成
開始行:
*不完全MS-DOSエミュレータ製作計画
この計画は星野個人的なものであり、osask計画のサブプロジェ...
**現状目標
16bitで.com形式が動くだけの、エミュレータと言えるかかなり...
**現状成果物
特にありません。~
**開発記
開発の様子やらなんやらをたまに書き込みます。(もしかしたら...
読んでもどうしようもない個人的な感想なども多いです。~
***MS-DOSエミュレータについて
16bitなら簡単そうで、そこらじゅうにソースが転がってもよさ...
でもよく考えたら、windowsがコンソール上でMS-DOSをエミュレ...
私は初めてのパソコンがwindowsの世代なので、ms-dosの事は正...
とりあえずCPU固有の命令(mov ax,10とか)以外はint 0x21での...
でも、そもそもシステムコールは文字の出入力とファイル操作...
開発方針としては、naskを使ってmov ax,bxとかがどんなコード...
手元にwindowsのコンソールというmicrosoft公認(?)のms-dosエ...
ちなみに、最終的にはこの計画で調べた機械語を基にして、16b...
とはいっても、今のところ絵に描いた餅ですが…。~
(サイズはnaskの1/2、機能はnaskの1/10みたいな感じで…。)~
***エミュレータの基本構造
私自身がこれまでにエミュレータを作ったことは有りませんし...
一応の方針としては、当たり前かもしれませんが「ファイル読...
私の知る限りでは.comはorg 0x100固定なので、16bitで扱える...
レジスタはG01Main関数で全てint型の変数として宣言して、ax...
時折ax = ah * 0x100 + alの公式に当てはめて値を合わせれば...
***リアルモードでのレジスタの挙動
よく考えたら機械語うんぬんかんぬん以前に、レジスタについ...
これにはwindowsコンソールのdebug機能が便利そうなので使っ...
(microsoftが作ってるので結果の信憑性も高そうですし。)~
''実験その一/alやahに0x100以上を入れてみる''~
当たり前ですが無理でした。~
mov al,0x100ぐらいは値がahに繰り上がってah=0x01、al=0x00...
''実験その二/alに0xffを入れた後inc alしてみる''~
結果はax=0x0000でした。~
これも同じくahへの繰り上がりシステムを恐れてやってみまし...
''実験その三/alに0xffを入れた後al+=1してみる''~
もしかしたらax=0x0100にならないのはincだからでは?と思った...
結果は杞憂でした。~
''実験その四/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開発について
今回の計画ではnaskとwindowsに思いっきり頼ることになりそう...
asukaやcc1は自分では機械語を生成しないのでアセンブリの知...
そもそも、私にnaskを読む力が有れば一個一個アセンブルした...
そういえば、話はそれますが、アセンブルしたファイルをのぞ...
K-tanさんのソフトには色々とお世話になります。m(_ _)m~
***stardos version 0.1開発計画
stardosというのはいま考えたエミュレータの名称です。~
starは私の名前の「星野」から、dosは「ma-dos」からとってき...
正式名称を付けた方がかっこいいかもしれないので、気が向い...
それまではstardosはSTARDOSの略称とでもしておきます。~
さて、くだらない話はここまでにして置き、肝心の中身ですが...
よって、実用性は全くありません。~
万が一stardos 0.1が公開されていても、使用目的でダウンロー...
ただ、機械語を一個一個調べていくのは大変そうなので、開発...
プログラミング技術のない未熟者の工作ですので、期待しない...
***sp(スタックポインタ)の初期値について
mov命令の構造が意外と簡単だったことが判明したため、popやp...
しかし、spの初期値が分からずに困っています。~
windowsのdebug機能ではsp=0xffeeと表示されるのですが、
cmp sp,0xffee
je YES
mov ah,0x02
mov dl,'n'
int 0x21
int 0x20
YES:
mov ah,0x02
mov dl,'y'
int 0x21
int 0x20
というようなプログラムを実行してみても「n」と表示されまし...
色々試したところ、最初のcmpをcmp sp,0xfffeとすると「y」と...
しかし、これはあくまで私の環境でしか通用しないことかもし...
とりあえずは情報が有るまでは.comでのspの初期値は0xfffeと...
***mov命令について
このページのコメント欄でゲストさんが大変貴重な情報をくだ...
心より感謝いたします。~
そのゲストさんに教えて頂いたpdfファイルを見ていて発覚した...
今まで、単にmov al,[0x1234]はdsレジスタを指定しているもの...
ただ、mov al,[0x1234]のようにセグメントレジスタを指定しな...
終了行:
*不完全MS-DOSエミュレータ製作計画
この計画は星野個人的なものであり、osask計画のサブプロジェ...
**現状目標
16bitで.com形式が動くだけの、エミュレータと言えるかかなり...
**現状成果物
特にありません。~
**開発記
開発の様子やらなんやらをたまに書き込みます。(もしかしたら...
読んでもどうしようもない個人的な感想なども多いです。~
***MS-DOSエミュレータについて
16bitなら簡単そうで、そこらじゅうにソースが転がってもよさ...
でもよく考えたら、windowsがコンソール上でMS-DOSをエミュレ...
私は初めてのパソコンがwindowsの世代なので、ms-dosの事は正...
とりあえずCPU固有の命令(mov ax,10とか)以外はint 0x21での...
でも、そもそもシステムコールは文字の出入力とファイル操作...
開発方針としては、naskを使ってmov ax,bxとかがどんなコード...
手元にwindowsのコンソールというmicrosoft公認(?)のms-dosエ...
ちなみに、最終的にはこの計画で調べた機械語を基にして、16b...
とはいっても、今のところ絵に描いた餅ですが…。~
(サイズはnaskの1/2、機能はnaskの1/10みたいな感じで…。)~
***エミュレータの基本構造
私自身がこれまでにエミュレータを作ったことは有りませんし...
一応の方針としては、当たり前かもしれませんが「ファイル読...
私の知る限りでは.comはorg 0x100固定なので、16bitで扱える...
レジスタはG01Main関数で全てint型の変数として宣言して、ax...
時折ax = ah * 0x100 + alの公式に当てはめて値を合わせれば...
***リアルモードでのレジスタの挙動
よく考えたら機械語うんぬんかんぬん以前に、レジスタについ...
これにはwindowsコンソールのdebug機能が便利そうなので使っ...
(microsoftが作ってるので結果の信憑性も高そうですし。)~
''実験その一/alやahに0x100以上を入れてみる''~
当たり前ですが無理でした。~
mov al,0x100ぐらいは値がahに繰り上がってah=0x01、al=0x00...
''実験その二/alに0xffを入れた後inc alしてみる''~
結果はax=0x0000でした。~
これも同じくahへの繰り上がりシステムを恐れてやってみまし...
''実験その三/alに0xffを入れた後al+=1してみる''~
もしかしたらax=0x0100にならないのはincだからでは?と思った...
結果は杞憂でした。~
''実験その四/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開発について
今回の計画ではnaskとwindowsに思いっきり頼ることになりそう...
asukaやcc1は自分では機械語を生成しないのでアセンブリの知...
そもそも、私にnaskを読む力が有れば一個一個アセンブルした...
そういえば、話はそれますが、アセンブルしたファイルをのぞ...
K-tanさんのソフトには色々とお世話になります。m(_ _)m~
***stardos version 0.1開発計画
stardosというのはいま考えたエミュレータの名称です。~
starは私の名前の「星野」から、dosは「ma-dos」からとってき...
正式名称を付けた方がかっこいいかもしれないので、気が向い...
それまではstardosはSTARDOSの略称とでもしておきます。~
さて、くだらない話はここまでにして置き、肝心の中身ですが...
よって、実用性は全くありません。~
万が一stardos 0.1が公開されていても、使用目的でダウンロー...
ただ、機械語を一個一個調べていくのは大変そうなので、開発...
プログラミング技術のない未熟者の工作ですので、期待しない...
***sp(スタックポインタ)の初期値について
mov命令の構造が意外と簡単だったことが判明したため、popやp...
しかし、spの初期値が分からずに困っています。~
windowsのdebug機能ではsp=0xffeeと表示されるのですが、
cmp sp,0xffee
je YES
mov ah,0x02
mov dl,'n'
int 0x21
int 0x20
YES:
mov ah,0x02
mov dl,'y'
int 0x21
int 0x20
というようなプログラムを実行してみても「n」と表示されまし...
色々試したところ、最初のcmpをcmp sp,0xfffeとすると「y」と...
しかし、これはあくまで私の環境でしか通用しないことかもし...
とりあえずは情報が有るまでは.comでのspの初期値は0xfffeと...
***mov命令について
このページのコメント欄でゲストさんが大変貴重な情報をくだ...
心より感謝いたします。~
そのゲストさんに教えて頂いたpdfファイルを見ていて発覚した...
今まで、単にmov al,[0x1234]はdsレジスタを指定しているもの...
ただ、mov al,[0x1234]のようにセグメントレジスタを指定しな...
ページ名: