ザビタン開発日記
2009
| 01
10月 19 (金曜日) 2007 | ||
22:53
|
FDアクセス:とにかくセクタを読んでみる
|
|
最初からあまり仰々しいことやってもトーシローのオイラには無理なので、
まずは直線的な流れで、ベターーーっとあるセクターを読み込んでみよう!! じゃ、とりあえずは論理セクター0ね。(^^ まず、[3]を押すとシーク0のコマンドを発行し、完了すると画面に返事を書く。 そんなのを考える。 ・・・そうだ! 内部で最後に発行したコマンドを覚えておく変数を用意してfifoからのデータが3000ならそこで分岐させるってのはどうだろう?? ・・・いや、違うなぁ・・・ |
||
22:47
|
FDアクセス:モーターの憂鬱
|
|
はりぼてWikiによると、AT互換機のFDDは「今現在モーターが回っているか?」という情報を取得できないらしい・・・
なので、OS側で覚えておけということらしいが、疑問がある。 それは起動時のOSそのものの読み込み時に回転するモーターが、はたして今現在とまっているのかどうかという判断だ。 いまでこそサビビは小さいのでOSが動き出した時点ではたぶん止まっていると過程していいだろう。しかし、たとえば将来、設定ファイルや スタートアップアプリなどをサポートしたという場合、はたして・・・ さて、そんなことを今考えてもしょうがないので、とりあえずモーターは必ず止まっているということを前提として進めていこう。 |
||
20:18
|
FDアクセス:割り込み装備
|
|
[2]キーを押してコマンドが送信された。(送信しろというコード部は実行されたクサイ)
もしこれでOKなら、割り込みが発生するはず。 とりあえず割り込み部分でなにかアクションを行えるようにしてみよう。 ・・・おぉっとぉ! どうも割り込みがこないと思ったら、割り込みマスクをはずしておくの忘れてた!! (これ、前にもひっかかったんだよなぁ。俺ってマヌケ・・・)
bootpac.c内のこんなやつね・・・(^^; ここを修正してと・・・ よおっしゃぁぁぁぁぁぁ!!!! FDコントローラから割り込みが来るようになったぞ!!! さーて・・・ testtask内。FDを効率的にアクセスするにはどうしていったらいいだろう。 すこし組み立て(フローチャート?)を考えてみよう。 リビジョン21
|
||
19:29
|
FDアクセス:コマンド送信実験
|
|
えとえと・・・
まず、とにかくFDにコマンドが送れるようにしてみる。 testtask内で、[2]を押せばコマンド送信準備をする。現在の0x03f4の値を表示するようにしてみよう・・・
うーむ・・・・とりあえずはこれでいいみたいだなぁ・・・ 値もちゃんと0が帰ってくるようだ。 (ほんとは「待つ!」と書いてあるんでそうするのがいいんだけど、ちょっと手抜きで・・・) さらに、
・・・とのこと。どうしようかな。とりあえず「シリンダ0へのシーク」をやってみよう。そうすると・・・
こういうコードになるってことでいいのかな??? とりあえずコンパイラも通るようだし、成功??? いやでも、反応を見ることができないんじゃわからないよね? 割り込み処理に手を入れよう。 リビジョン20
|
||
17:17
|
メインFIFOに送信されるデータの整理
|
|
ここでちょっとメインfifoに送信されてくるデータを整理しておこう。えっと・・・
こっちにまとめるか・・・ よーし。とりあえずこんなところかな。 キリがいいのでFDD関係のfifoデータは3000〜4000ということにするか。 メインのタスクにもし3000〜4000が来たら、そのままFDDタスク(今はまあ、testtaskだけどね)のfifoに送信と! inthandler26の関数もあわせて変更・・・っと。 |
||
16:10
|
FDアクセス:IRQ06
|
|
おっとっと! 忘れてた! これが大事な概念。
こういうことですな。まずは割り込みの処理を設置しないと・・・ dsctbl.cに割り込みを設置する。
naskfunc.nas内に反応する関数を設置と・・・(P234を参考)
こんなところかな。 あとはここから呼び出される関数の本体を作る。 fd.cというファイルを追加。内容は
こんなところかな・・・ おぉぉっと! bootpac.hに今回設置した各関数を追加し、Makefileとかも直さないと・・・ おっしゃ! とにもかくにもコンパイルは通ったみたいだぞ!?? あとはinthandler26関数でtesttaskのfifoにデータを送信するように すればいいはず。ええと・・・どうしようかな?? リビジョン19
|
||
15:55
|
FDアクセス:最初
|
|
ふむふむ・・・
まずはDMACの初期化かぁ・・・ これは最初にやっておけばよさそうなのでタスクのforループの前でやってしまったほうがいいかな。 とりあえずはこんなソースを置いてみる・・・
あとはこのキーボードに反応してコマンドを送れるようにしてみる・・・ まずは「1」が押されたら読み込みコードを実行するって感じかな・・・ |
||
12:11
|
FDDを読み書きしたい!
|
|
さてさて!
オイラが今一番やりたいのがこれ! 以前も結構やってたんだけど挫折しますた・・・ orz タスク設置で気をよくしたもんで、再び無謀な挑戦〜 さて、FDDをコントロールするにはタスクを独立させたほうがいいという アドバイスをKタンがしていますなぁ。そういうわけで、さっそく やってみることにします。 あ”・・・ こないだのタスクバーもどき、testtaskなんて名前で設置されてるね(汗 まずはこれらの名前変更から・・・ リビジョン17 さてさて! そしたら、この時計タスクの最初とほぼ同じような感じのタスクを設置・・・ よし!!! できたーー! リビジョン18 ではでは、いよいよこのあたらしいtesttask内でFDDアクセスにチャレンジ!!! |
||
01:57
|
完成! いっちょリリースするか!!
|
|
00:05
|
特別なシート
|
|
今回作ったtesttaskウィンドゥ。見た目の描画をタスクバー風に
するのはわりと簡単。 でも、これ、見た目にかかわらずウィンドゥの移動やxボタンが効いてしまうんだよなぁ・・・ このシートだけは特殊なので、if文で判断させてはじいてみよう。 まずはbootpac.hのsheet構造体にパラメータ用の変数を追加してと。 お!? パラメータの分岐部で、クローズボタンの処理発見! ここあわせてなかったな。ついでに修正・・・っと。 お!? タイトルバー部のアクティブ非アクティブの部分も邪魔だな。 条件分岐追加・・・っと。 |
||
(1)  |
PopnupBlog V3 Denali created by Bluemoon inc. |