0から作るOS開発 Vol.8 カーネル編 DMAドライバー
価格: ¥0
C言語で0から作るOSを開発について説明していきます。このシリーズではカーネルの開発について説明しています。
今回はディスクを読み書きするときのデータ転送をCPUの代わり行ってくれるDMAについてそのコントローラとレジスター制御について説明していきます。
[第2版 改定]
DMAコントローラーに読み込み転送モードを設定関数が正しく表示できていない問題を修正しました。
[目次]
前回までの内容
DMA(Direct Memory Access)の概要
ポーリングによるデータ転送
割り込みを受けてからのデータ転送
DMA(Direct Memory Access)による転送
DMAの特徴
ISA(Industry Standard Architecture)とDMA
DMA(Direct Memory Access)の動作
DMA転送を行っていないときのバス制御
DMA転送を行っているときのバス制御
DMA転送するまでの手順
PCIについて
DMAコントローラー8237A
8237A
DMAコントローラーICの特徴
DMAコントローラーとフロッピーディスクコントローラー
DMA転送とアドレス
ISA DMAとシステムバス
x86のDMAコントローラー
x86のDMAコントローラーの特徴
DMAコントローラー8237Aのレジスター制御
制御レジスター
制御レジスターの定義
チャンネル制御レジスター
ベースアドレスレジスターとベースワードカウントレジスター
マスター(16ビット動作)の転送アドレス操作
ベースアドレスレジスターとベースワードカウントレジスターの実装
カレントアドレスレジスターとカレントカウントレジスター
拡張ページアドレスレジスター
拡張ページアドレスレジスター詳細
拡張ページアドレスレジスターの実装
制御レジスター詳細
コマンドレジスター
モードレジスター
DMA転送モードについて
シングル転送モード
ブロック転送モード
DMA転送要求時にDMA転送するモード
カスケードモード
モードレジスターのビット定義
モードレジスターを制御する関数の実装
リクエストレジスター
シングルチャンネルマスクレジスター
オールマスクレジスター
オールマスクレジスターの実装
ステータスレジスター
ISA DMAコマンドレジスター
クリアーバイトポインタレジスター(フリップフロップリセットレジスター)
クリアーバイトポインタレジスター(フリップフロップリセットレジスター)の実装
マスクリセットレジスター
マスタークリアーレジスター
DMAドライバーの実装例
フロッピーディスクコントローラーのセクター読み込み関数例の復習
initDMAforReadFDD関数