インターネットデパート - 取扱い商品数1000万点以上の通販サイト。送料無料商品も多数あります。

0から作るOS開発 Vol.1 ブートローダー編 0から作るブートローダー

価格: ¥0
カテゴリ: Kindle版
ブランド: yabusame2001
Amazon.co.jpで確認
C言語で0から作るOSを開発について説明していきます。このシリーズではカーネルの開発について説明しています。
今回はカーネルを読み込みためのブートローダーについて0から作っていきます。BIOSを利用した文字の表示やフロッピーディスクからのファイル読み込み、FAT12ファイルシステムの解釈を説明していきます。

【注意】本書のブートローダーはnasmでプログラムを行っていますが、アセンブラーの構文などは詳細に説明できておりません。別途アセンブラーの文法などを学習する必要があります。しかし、本書を読むことでブートローダーの基本的な設計はできるようになると思います。

[目次]
前回までの内容
パソコンが起動してからの処理概要
  OSから利用できるBIOSのインターフェース処理
    割り込みベクターとは?
  割り込み処理を使って
  どこからブートローダを読み込むのか?
  セクターとは?
  シリンダー(トラック)とは?ヘッドとは?
    ヘッドは
    シリンダー(トラック)は
    セクタは
BIOSの処理
  最初のセクターを読み込む
  フロッピーの読込処理
  割り込みベクタの25番目(0x19番目)
  アセンブラー言語について
最初のブートローダを作ってみる
  ブートローダーをアセンブルしてみる
  フロッピーディスクの最初のセクターに書き込む
  ようやく起動してみる
FAT12ファイルシステムのさわり
  FAT12のブートセクタ
  FA12のブートセクターを作ってみる
リアルモードについて少し
16ビット?
レジスタ?
  汎用レジスター
  汎用レジスタのその他の役割
セグメントレジスターとメモリーアクセス
  セグメントとは
  セグメントの指定
    セグメントの開始位置
  セグメントの大きさ
  セグメントレジスターの種類
  セグメントレジスターとセグメントとアセンブラー言語
  コードセグメント内のアドレスアクセス
  データセグメント内のアドレスアクセス
  セグメントとセグメント内のアドレス
    ES、FS、GSレジスターのセグメントへのアクセス
    論理アドレスとリニアーアドレス
  スタックセグメント内のアドレスアクセス
  起動直後のセグメントレジスターの初期化
スタック
  スタックにデータを積み上げる
  スタックからデータを下ろす
  その他のスタックの使い方(CALL命令)
画面に文字を表示する
  文字を表示する
    INT 0x10(文字表示処理)の引数
  文字を表示する
  文字を表示するDisplayMessage関数の動作
  EFLAGSレジスター
フロッピーからデータを読み込む
  INT0x13命令のフロッピードライブ初期化モード
  INT0x13命令のセクタ読み込みモード
LBA(Logical Block Addressing)
  LBAから物理ヘッド番号に変換する
  LBAから物理シリンダー(トラック)番号に変換する
  LBAから物理セクター番号に変換する
  アセンブラーでLBAを物理ヘッド番号、シリンダー(セクタ)番号、セクター番号に変換してみる
    物理セクター番号の計算
    物理ヘッド番号の計算
    物理シリンダー(トラック)番号の計算
    LBA論理セクター2000を読み込んでみる
FAT12ファイルシステム
  FAT12の構造
FAT領域
  クラスター
  クラスター番号の役割
  特殊なクラスター
  FATで記録できるファイル
  FATの予備
  FAT領域の開始セクターとサイズ
    FAT領域の開始セクター
    FAT領域のサイズ
  FAT12のクラスター番号の読み方
  読み取ったクラスター番号からファイルのセクター番号を計算する
  FAT領域まとめ
ルートディレクトリ領域
  ルートディレクトリ領域の開始セクタとサイズを求める
    ルートディレクトリの開始セクター番号
    ルートディレクトリのセクター数
  ルートディレクトリから読み込みたいファイル名を探す
  目的のファイル名を持つエントリーからファイルの開始クラスター番号を取り出す
ファイル領域
ファイルの読み込み

[2015/6/28]
誤字およびファイル読み込みに説明を少し追加しました。