夏コミ(C92)でフルスクラッチのUEFIベアメタルプログラミング本出します!


次の夏コミ(C92)の1日目(8/11)に"東た27b"で↑の本を出します!
(PC画面の写真が表紙です。)


EDK2やgnu-efiといった開発環境やツールチェインを使わず、
エディタとコンパイラのみのフルスクラッチUEFIファームウェアを叩く方法を紹介し、
OSっぽいものを作り上げる本です。


既刊の"Ohgami's Commentary on OS5"も持っていきます!
コミケットへお越しの際、興味があればぜひお立ち寄りください!
(既刊同様に、PDF版は頒布日以降に http://yuma.ohgami.jp で公開します。)


目次と表紙については↓の"続きを読む"から

目次

  1. はじめに
    1. poiOSについて
    2. 本書に関する情報の公開場所
  2. Hello UEFI!
    1. ベアメタルプログラミングの流れ
    2. UEFIの仕様に沿ったプログラムを書く
      1. UEFI仕様書の読み方
      2. ソースコードを書く
    3. UEFIファームウェアが実行できる形式へクロスコンパイル
      1. [column] Makefileで自動化
    4. UEFIファームウェアが見つけられるように起動ディスクを作成
      1. [column] QEMUで実行する
      2. [column] 日本語表示
  3. キー入力を取得する
    1. EFI_SIMPLE_TEXT_INPUT_PROTOCOL
    2. エコーバックプログラムを作ってみる
      1. 補足: キー入力を待つ(WaitForKey)
    3. シェルっぽいものを作ってみる
      1. [column] 5分のウォッチドッグタイマを解除する
  4. 画面に絵を描く
    1. EFI_GRAPHICS_OUTPUT_PROTOCOL
    2. 矩形を描くサンプルを実装
    3. GUIモードを追加する
  5. マウス入力を取得する
    1. EFI_SIMPLE_POINTER_PROTOCOL
      1. マウスの状態を見てみる(pstatコマンド)
    2. マウスカーソルを追加する
  6. ファイル読み書き
    1. EFI_SIMPLE_FILE_SYSTEM_PROTOCOLとEFI_FILE_PROTOCOL
    2. ルートディレクトリ直下のファイル/ディレクトリを一覧表示(ls)
    3. GUIモードでファイル/ディレクトリ一覧を表示する
    4. ファイルを読んでみる(cat)
    5. GUIモードへテキストファイル閲覧機能追加
      1. [column] getcでスキャンコードも返せるよう修正(オガム文字の領域を使う)
    6. ファイルへ書き込んでみる(edit)
    7. GUIモードへテキストファイル上書き機能追加
  7. poiOSの機能拡張例
    1. 画像を表示してみる
      1. blt関数を追加
      2. シェルへ画像閲覧コマンド追加(view)
        1. [column] BGRA32ビットへの画像変換方法
      3. GUIモードへ画像ファイル表示機能追加
      4. [column] blt関数はUEFIの仕様に存在します
    2. GUIモードとシェルの終了機能を追加する
      1. シェル終了機能追加
      2. GUIモード終了機能追加
    3. マウスを少し大きくする
    4. 機能拡張版poiOS実行の様子
  8. おわりに
  9. 参考情報
    1. 参考にさせてもらった情報
    2. 本書の他にUEFIベアメタルプログラミングについて公開している情報

表紙について

本の中でも書いていますが、表紙は、UEFIファームウェアを呼び出して画面へ文字を表示した写真です。
実は、裏表紙も合わせると↓の様になっていて、裏表紙と表紙でベアメタルプログラミングのやり方を一通り説明しています。


UEFIは文字をUnicodeで扱うので、日本語を指定することもできます。しかし、UEFIファームウェアUnicodeで指定できるすべての文字のフォントを持っているわけではないので、表紙画像のように表示できない文字もあります。


UEFIの仕様書には色々な機能が書かれており、この本でも仕様書を参照しながらソースコードを書く方法を説明しています。
ただし、UEFIはあくまでも仕様で、PCに搭載されているファームウェアは仕様に従ってはいますが、すべての仕様を実装しているわけでは無い様です。
# 表紙は、「仕様のすべてがそのまま動くとは限らないよ」という事を暗に示していたりします(後付け)。