ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
11月 04 (日曜日) 2007
17:03
タスク間通信
 
まず、子タスク?であるコンソールタスクから親タスク?のfifoに
データをプットしてみる実験ね。

・・・うーーーん。いい方法ないかなぁ・・・
わからん・・・

しょうがないので、コンソールタスク内でポインタ宣言をして、
マインのfifoのアドレスを当て込むことにしてみよう・・・

・・・あか〜ん・・・ どーもうまくまとまらん・・・・

やむをえないなぁ。素人のオイラでもさすがにちょっとイヤな感じだけど、
暫定的にグローバル変数でしばらくお茶を濁そう・・
 
30日を過ぎたBlogにはコメントできません。
09:53
タスクとの通信
 
FDへのアクセスは、専用のタスクで行っている。
この独立したタスクに命令を出すには・・・・・
なるほど! FIFOへの発信ね!!

オイラがいまいじってるconsole.cはコンソールタスクだよね。ここから
別のタスクに送信ってできるのかな?? ちょっと実験・・・

fifo32_put(&testtask->fifo,1024);

・・・こんなことしてみた・・・  ダメ〜 (^^;
console.c内はコンソールタスクで動いてる。このタスクは、testtaskなんていう
タスクは知らないんだよねぇ。(上位のtask_aは知ってるんだが)

・・・どうしたもんだろう?
たとえば。task_a内にタスクの一覧表(詰め所?)みたいなのを作って、
その詰め所のアドレスを全タスクが共有する。FIFOに送りたいものは
その詰め所が配送を行うなんてのはどうだろう???

・・・うーん。発想そのものはきっと悪くないと思うけど、この段階で
そんなことするとちょっと仰々しいなぁ。(オイラの技術も追いつかないだろうし)
・・・親タスクのFIFOに送信して、親タスク内でif判断して振り分けるってのはどーーーだろ!!!


・・・よし・・・
この方法でいろいろとやってみるか・・・

あ”それと、ついで。各追加タスク(時計バーとFDタスク)が、今はぜーーんぶbootpac.c内なんだよなぁ。これはちょっとまずいでそ?
ファイル分けを先にやっておくか・・・

でけた〜
リビジョン67
 
30日を過ぎたBlogにはコメントできません。
00:06
ファイル検索用APIを妄想
 
まずはとりあえずは大雑把に。
最初の文字がmのファイルを探してくる。

_HariMain:

MOV EDX,0x4E ;機能番号
MOV EAX,filename
MOV EBX,fbuf
INT 0x40 ;コール!

;この後、fbufにはmで始まるファイル名が書かれるはず・・・


;もらった文字列を表示してみる
MOV EDX,2
MOV EBX,fbuf
INT 0x40 ;コール!

MOV EDX,4 ;アプリを終了
INT 0x40


[SECTION .data]

filename:
DB "m*.*",0

fbuf:
RESB 512 * 14

console.c側もとりあえずは大雑把に・・・

else if (edx == 0x4E) {
char *search_f_name;
char *fbuf;

int i,i2;

search_f_name = eax;
fbuf = ebx;

i = 0;
while ( search_f_name[i] != 0 )
{
fbuf[i] = search_f_name[i];
i++;
}

for ( i2 = 0; i2 <= 3; i2++)
{
fbuf[i] = 'A';
i++;
}

for ( i2 = 0; i2 <= 5; i2++)
{
fbuf[i] = 'B';
i++;
}

fbuf[i] = 0x00;

reg[7] = 0;

}

これで、コンソールには「m*.*AAABBB」と表示されるはずです。

・・・・あれれれ? うまくいかないなぁ・・・・・・

さては!!!!

こういうのは大抵セグメントなんですよねぇ。ええと・・・どこに書いてあったかな・・・

・・・あったあった!。P422のあたりから。
コンソール側で実行されたアプリであるdir2。セグメントが違う。
dir2にとっての0x1000番地と、コンソールタスクにとっての0x1000番地は別の場所なんだよねぇ。

なので、

search_f_name = (cons, (char *) eax + ds_base);
fbuf = (cons, (char *) ebx + ds_base);

こんなことしてやると、補正できるわけ。

とりあえずコンパイル&実行。うまくいったーーー!!! (^^

これでレジスタを通して番地のやり取りもできるようになったぞ!。
それじゃいよいよ、実際にFDを読んでその情報を返すようにコードを書こ・・・

は!!!!

うわーーーーーー! そうだよ! FDアクセスは専用のタスク内でしか
動かないはずなんだよ! FD用タスクに命令を出したり情報をもらったり・・・・
そこいらへんがぜんぜんできてないじゃんかーーーー!

リビジョン65
 
30日を過ぎたBlogにはコメントできません。
(1) 

PopnupBlog V3 Denali created by Bluemoon inc.