この辺で、大概、詰まる
さて、とりあえず、セクタ単位での読み書きは出来るようになった。
ROSeの先代?と言うか、プロトタイプも、一度、この辺で詰まっている。
ここが一つの壁と言うか、なかなかに目標設定が難しいところだ。
まぁ、多分、なるべく効率的にとか二度手間を避けようとか、
そういう事を考えたりしているからなのかも知れない。
例えば、システムコールの仕組みや、サービスの呼び出し手順を決めてしまえば、
基本的には、その部分を変更する事は許されなくなる。
何故なら、それに準じて作成された物が、動作しなくなるかも知れないからだ。
互換性の重要性は、Intel や Microsoft の歴史からも窺えよう。
とは言え、自分は、Intel や Microsoft ではないから、
そんな事は気にせず、好きにやっちゃえば良い訳なんだが。
なかなか、好きにやれって言われても、出来ないんだよね〜。苦笑
まぁ、それでは、ここから先に進めないので、
頑張って、一歩、前に進んでみようかね。
と言う事で、MS-DOS の ファンクションコールを真似てみる。
割り込みベクタテーブルに INT 0x21h のジャンプ先を登録。
ジャンプ先として割り込みハンドラを作成。
割り込みハンドラから、今まで使っていた文字列出力ルーチンをコール。
これらを準備した上で、メモリエディット機能で、以下のバイナリを入力。
B80010 MOV AX, 0x1000 8ED8 MOV DS, AX B409 MOV AH, 0x09 BE[1404] MOV SI, testmsg CD21 INT 0x21 CB RETF testmsg: 5445535421210D0A00 DB "TEST!!", 0x0D, 0x0A, 0x00
手続き呼び出しで、入力したアドレスをコール。
無事、"TEST!!"と表示されればOKなんだが...
ちなみに、手続き呼び出しは、far コールに変更してみた。
よし、やってみよう。
結果 → 見事に失敗である...
ってか、far コールがダメっぽい?