ザビタン開発日記
2009
| 01
11月 03 (土曜日) 2007 | ||
23:01
|
ファイル検索用APIを妄想
|
|
・・・っと思ったけど、オイラこんな心臓部いじるの初めて。
ちょこ〜っと実験ね。 4EのAPIが本当にちゃんと呼べるかどうか、簡単なコードで実験してみよう。 まずはconsole.c内ね。こんなのを置いてみました。
そんでもって、まずはdir2.nas。とりあえずこんなのね。
コンパイルすると、ちゃんと動くね。dir2[Enter]で文字Aが表示される。 これをこうする。
コンパイルして実行・・・・おぉぉ! Bが表示された。いいみたいだぞ!! それじゃさっそく、さっき決めた仕様どおり動くように建て増しだ! |
||
21:15
|
ファイル検索用APIを妄想
|
|
APIをちょっと妄想してみる。
・・・わはははは! 我ながらなんつーショボイAPIだろう!(^^; まーとにもかくにも、ここいらへんからはじめましょーか! さて、APIを新しく搭載したい場合。 APIはINT 0x40 という割り込みによって動作する。 プログラムからINT 0x40が指示され、システムにこの割り込みが発生した場合には なにをすればいいのか?(どこのプログラムを実行すればいいのか?)が 定義されているのがIDT。IDTテーブルを見ればなにをすればいいのか解る。 The-BBL(はりぼてOS)では、IDTテーブルの設定はbootpac.cからinit_gdtidt()関数を呼び出して行っていますね。 さて、では、init_gdtidt()関数はどこにあるのかというと・・・ dsctbl.cの中にあります。(こういうのはbootpac.h内を検索するとすぐ見つかるのだ!(^^) ) ふむふむ・・・先頭のほうにあるね。 set_gatedesc(idt + 0x40, (int) asm_hrb_api, 2 * 8, AR_INTGATE32 + 0x60); これが、INT 0x40 (40番の割り込みが発生した)が実行するプログラム。なになに? asm_hrb_api とな? さて、asm_hrb_api ってなんだろう? 関数にしてはおかしいぞ?? C言語の関数と感じが違いますよね?。これは関数というよりは、ある番地のラベルと考えたほうがピンときます。 アセンブラで書かれたプログラムのラベルなんですねぇ。 ・・・じゃ、その、アセンブラで書かれた asm_hrb_api ってのはどこかというと・・・ あったあった。naskfunc.nas内にありますね?。 さて、なにやらややこしいアセンブラが書かれていますが、これはいったいなにを・・・? 実はここはこれからC言語で書かれた実行部分に対して、レジスタに設定された 各種パラメータを渡すための細工をしている部分なんですね。 コメント・そして途中でコールされている hrb_api。これが実際に 動作を行う、C言語で書かれている関数です。 さてーーー! じゃあ、実際に動作するというhrb_apiはどこにあるのかというと・・・ みーっけ! console.c内にあるのがそうです〜。 この中で、各機能番号ごとにelse ifしてプログラムを書いていると・・・ それではさっそく、ここに 4Eの分岐を書いて、内容を書いてみよう! |
||
18:46
|
FDアクセス:dir2コマンド試作!(挫折率高し)
|
|
さてさて〜。
FDアクセス用の関数がだいぶ充実してきますた! 同時にちょっと飽きてきたってのもあるので(笑) ここらで一発、dir2(実FD用dir)の搭載を遊んでみようかなと。(`・ω・´) コマンドの増設は以前にもやりました。(memdump) 同じ手法で外部コマンドとして搭載してみようかなぁと。 それじゃぁまず・・・・typeコマンド用ディレクトリのコピーからじゃ〜! ・・・うーん。typeコマンドのソースをじっと眺めていたら思った。 「これはやっぱり、ファイル関係のAPIとして搭載すべきでは」 と。 例によってこういうのの設計なんてできないオイラ。こうなったら MS-DOSアタリのファンクションコールを参考にしてみるか! --------------- 二時間後 -------------------- ・・・うーむ・・・だめだなぁ。 MS-DOSの場合、16ビットなのでいろいろと無理してる感じ。 これを無理に似せるのもなんだなぁ・・・ よっしゃわかった!とにもかくにもいっぺん、いいかげんてきとーに やってみるか! (どうせ今から頭絞ったってロクな仕様にならんだろうしね) |
||
16:13
|
ポインタ変数の生死やいかに!?
|
|
C言語って、ある関数内で宣言・使用された変数ってその関数が終了orReturnすると
死んでしまうよね?
・・・これ、ポインタの場合ってどうなんだろう?? たとえば・・・
うーん。この(2)の時点がよくわからんなぁ・・・ もっと言うと、
このようにA,B二つのソースを作ったとする。Bの場合、宣言はしたが 使っていないポインタが5つもある。 ・・・これはなんらかの差になるのかなぁ・・・それとも??? |
||
11:08
|
FDアクセス:バグあった!
|
|
えーーっと!
先日一区切りリリースしたVer.0.03にバグがありましたあぁぁ! 「1」や「3」を押すとアクセスするよね? 何回も何回も繰り返せる。で、「5」を押す。ちゃんとファイル名が出る。 ・・・その後、他のコマンドが動作しなくなっちゃうことが判明! コードを見直してもどうしても問題点はないし・・・なんだろう? そこでいろいろと実験してたらわかりました。 これは「5」のように、複数のセクタを読み込んだ後に起こることが解りました。 (逆に言えば、「1」や「2」のように単セクタアクセスでは起きません。 コードを見直してみると・・・・・もしやこれ??
これを
こうしたら、この現象は起きなくなりました。 まあつまり、今までは ・DMAを開ける → 19〜32セクタを読む → DMAを閉じる こういうコードだったのですが、セクタリード命令の前後にDMAの 開け閉めを置き、 その都度その都度、DMAを開け閉めするようにしました。 どうやらこれが正解のようです!! これは今後の貴重なデータのなりそうだぞ!??? |
||
(1)  |
PopnupBlog V3 Denali created by Bluemoon inc. |