ブートローダーを作成しています。
今までBIOSコールを使いフロッピーからプログラムを読み込みメモリへマップしていたのですが
そのBIOSコールだとメモリ0x10000以内の範囲でしか読み込んだプログラムを展開できないという制約があり、
大きくなってきた私のプログラムだとプログラムのすべてをメモリに展開することができなくなりました。
そこで直接フロッピーコントローラーにIOでアクセスしてフロッピーを制御し
プログラムをメモリへ展開できるようにしたいです。
(32bitプロテクトモードへ移行した後はBIOSコール使えないのでこうするしかない)
softwaretechnique
上記のサイトに細かい仕様が書かれていたので読んでいるのですが
そのなかで不明点があるので教えてください。
リンク内容
ここにコマンド一覧が載っています。
[概要]
コマンドの長さは1~9バイト。
IOポート0x3F5を使えばデータレジスタにアクセスでき、
そこへoutで書き込むことでフロッピーコントローラーに命令をすることができるようです。
コマンドは連続で書き込む必要があるようです。
コマンド一覧の中の"READ DATA(0x06)"を見ていきます。
これを使えば指定されたトラック上のセクターを読み出すことができるようですね。
コマンドを書き終えるとフロッピーコントローラーはコマンドに対応する処理を始める・・・らしいです。
問題はここからで・・・
以下のものはリンク先で書かれていたことなのですが
リンク先の文章
>コントローラはほとんどのコマンドに対してステータスをポートアドレス0x3F5のデータレジスターに
格納します。コントローラはステータスをデータレジスターに格納するとIRQ6を発生させます
格納されるステータスは制御コマンドに関係なく常に7バイトとなります。
(READ DATA(0x06)とREAD TRACKのステータスは同じです)
>データレジスターに1バイト格納されるごとに
IRQ6が発生しますので、割り込みが入った後にデータレジスターから1バイト読み込む
ようにプログラムします。
質問
結局、READ DATA(0x06)を使って読み出したデータってのはどこに格納されるんですか?
データレジスタに1バイト格納されるごとにirq6が発生すると書かれていますが
表を見ても"フロッピーから読み出したデータらしきもの"が見当たりません。
(この1バイトってのはフロッピーから読み出した1バイト・・・?)
格納されるステータスは制御コマンドに関係なく常に7バイトとなります。
って書いてあるからこの"1バイト"ってのは格納されるステータス7バイトのどこかに入っているものだと思ったのですが
違うのですか?
これとは別のレジスタに読み込んだバイトが格納されるのかな?とでも思って確認したけど
それらしきものはありませんでした。
わからないので教えてください・・・
あなたの回答
tips
プレビュー