ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
2007年10月23日(火曜日)
21:18
FDアクセス:API化近し!
 
キタ━━━━━━(゜∀゜)━━━━━━ !!!!!

あーでもない、こーでもないとコネクリまわしましたがなんとか
タイマーの待ち管理と各指令の関数化に成功?
(オィオィ・・・まだセクタ読めただけじゃん・・・)

同じパターンで書き込みを実験したら、包括化してAPIにもって
いけないかと妄想中〜

リビジョン39
 
30日を過ぎたBlogにはコメントできません。
17:32
FDアクセス:親タスクで複数のFIFO
 
おぉ! 

なんかいけたっぽいゾ!!!!

だったらアレをこうしてここをこうやって・・・・
 
30日を過ぎたBlogにはコメントできません。
13:02
FDアクセス:親タスクで複数のFIFO
 
ちょっとこの関数内でのFIFOが行き詰ってる。

一種ブランチして、親タスクにタイマーと別のFIFOを用意して実験してみることにしよう・・・
 
30日を過ぎたBlogにはコメントできません。
12:15
FDアクセス:番外
 
うっちゃんへ。

スマンスマン。ちょっとソースをいい加減なとこから持ってきて貼り付けちゃった。
タイマーの設定の部分はいい加減というかいろいろな実験の名残り。
今はこんな感じです。

int send_sec_read(int C, int H, int S)
{
struct TIMER *timer1 = timer_alloc();
int fifobuf[128];
struct FIFO32 fifo;
fifo32_init(&fifo,128,fifobuf,0);

fifo32_put(&fifo,10);
return;

これで、この部分をコールしているFDタスクが固まっちゃうんですよねぇ。
そんなわけで、今はFIFOそのものを復習&検証中・・・(´・ω・`)

ちなみに、タイマーそのものはちゃんと動いているよう。
逆に言えば、タイマーを設置(たとえば3秒とか)すると、
確実に3秒後に固まるです。(つまり、設置したタイマーはちゃんと
設定通り、このFIFOにputをしているようなのです。
 
●uchan@ゲスト -- 10/23 14:43
変数 fifo と fifobuf は自動変数(スタックに確保される)だからreturnしたら使えなくなります。
●hideyosi -- 10/23 17:31
(゜∀゜)  ナンカソレガゲンインクサイカモ・・・
●hideyosi -- 10/25 09:34
うっちゃんのヒント(え?サルでも知ってるって?/(^o^)?)をよく考えてみた。結果、リターンがいつ起こっても問題ないように、親元にタイマとFIFOを設置して、それを変数として渡すように改造しますた! これなら、この子関数がretして消えちゃっても、親側でちゃんと存在し続けるからと考えて。これがどうやらアタリのようです。感謝!!

30日を過ぎたBlogにはコメントできません。
2007年10月22日(月曜日)
22:52
FDアクセス:FIFOがうまくいかん
 
FDCにコマンドを送る場合、「待ち」がある。
で、万が一、その「待ち」があまりにも長いなんて場合はエラー
としてブレイクしようと考えた。そんなわけでこんなコードを書いたんだけど、

int send_sec_read(int C, int H, int S)
{
struct TIMER *timer1 = timer_alloc();
int fifobuf[4];
struct FIFO32 fifo;
fifo32_init(&fifo,4,fifobuf,0);
timer_init(timer1,&fifobuf,10);

//コマンド送信前の確認および待ち
timer_settime(timer1,300);
while(io_in8(0x03f4) & 0x11 != 0x00 )
{
if (fifo32_status(&fifo) !=0)
{
if (fifo32_get(&fifo) == 10)
{
return 5;
}
}
}

どうもFIFOがうまくいってないらしい・・・
散々悩まされた(タイマーの不具合かと思い)んだけど、もっと
根本で、このFIFOにデータをput(fifo32_putで)しただけで
固まってしまうことがわかった。(やっとこさ・・・)
うううううううん! なんだろう?
 
●uchan@ゲスト -- 10/23 06:24
あれ?timer_init(timer1,&fifobuf,10);って?

30日を過ぎたBlogにはコメントできません。
19:54
FDアクセス:時間待ち
 
うーーーん・・・困った・・・

コマンドの発行などで「待ち」が必要なんだよなぁ。
(待ちとは言うけど、逆に言えばあるコマンドが何秒以上返事がない場合はエラーにするとかも必要になる)

今はりぼてに搭載されているタイマーって、FIFOにタイムアウトを
発行する仕組みだから、コード内(たとえばこんなの)

//コマンド送信前の確認および待ち
while(io_in8(0x03f4) & 0x11 != 0x00 ){}

で、もし永遠にこれが帰ってこないようならブレイクしないと
いけないよね?

こういう場合、どうしたらいいんだろう。
まさかforでカウントするなんて乱暴なことできないしなぁ・・・

システムの現在時刻を取得して・・・・
うーーーん。これしかないのかなぁ。なんかもっとスマートで
いい方法があるような・・・


・・・って! まったまった!!! 勘違いかも???
FIFOって別にタスク専用じゃねーじゃん!!
・・・ってことは・・・・
 
30日を過ぎたBlogにはコメントできません。
19:40
FDアクセス:エラー処理
 
ベタ〜っとFDD読み込みのコードを書いて実験。
ほぼ、とにもかくにも、OKという感じになってきたので
これを関数にまとめ・分類し始めた。

・・・うーん。でもこれ、複雑だなぁ・・・

もしミスがあった場合、これじゃどこに問題があるのかわからなくなっちゃいそう。

そこで、エラーコードを返すようにすることにした。

で、

そのエラーコードだけど、最初にちゃんと決めておかないとまずそうだね・・・
 
30日を過ぎたBlogにはコメントできません。
12:14
FDアクセス:論理to物理
 
えーーっと・・・

論理セクターを物理セクターに変換するのってどうするんだっけ・・・

たしか、ケツから割り算してあまりで出していくはず・・・

あーー! 思い出したぁ!!!!
たしかこれ、前にKタンに教えてもらったんだ!

答えはn進数変換だ!(割り算二回でOKだーーー!)(^^

・・・あ”・・・
C言語の場合は2回ってわけにはいかないのか・・・ orz
 
30日を過ぎたBlogにはコメントできません。
10:43
FDアクセス:BPE解析
 
0x7C00に読み込んだのは正解のようですぞ!?

順調にBPEの取得&解析完成〜。

いよいよ、これら情報を元にアクセス。ファイル読み取りまでいけるか!???

リビジョン27
 
30日を過ぎたBlogにはコメントできません。
00:13
FDアクセス:DMA候補場所
 
ここでメモリマップを試作中・・・

でね?

セクターを読む場所を、IPLが読み込まれる位置(0x00007C00)にしてみたらどうかってぇ〜思ったのよ。

ここなら確実に「もう使わない。もう使ってない」といえるうえに、
ちょうど512だしね。

ここに読むようにDMAに指定して、読み終わったらタスク内に設けた
変数に転送させると!

こんなんで どっすか? げっげぇ〜ろぉ〜♪
 
30日を過ぎたBlogにはコメントできません。
« 3 4 5 6 7 8 9 10 11 12 (13) 14 15 16 17 » 

PopnupBlog V3 Denali created by Bluemoon inc.