TODO:本書を書き進めるうちに前提知識や機材、約束事が修正が必要になる可能性あり
本書は、趣味・学業・仕事の区別なく、プログラミング経験がある方を対象とします。プログラミング言語として、C 言語・アセンブリ言語・JavaScript を扱います。
本書では出来るだけ避けるようにしていますが、Windows のコマンドプロンプトや Linux の Terminal を抵抗感なく使えることが望ましいです。 また、自分用に PC を購入したことがあり、PC に関する商品知識を説明できることが望ましいです。
日本語として定着している専門用語については、日本語で表記します。英語や英字による略語の場合、表記を簡略化させるため、読み仮名は省略します。
実機で動作する OS を開発します。64 ビット UEFI に対応した米インテル社の 64 ビット CPU を搭載した PC 向けです。 C コンパイラなどの開発ツールや、実用的なアプリも作って動かせるようにすることを目標とします。
第 4 世代 Intel Core プロセッサ(Haswell)以降搭載の PC 2 台を用意するのが望ましいです。少なくとも 1 台は用意しないとサンプル・コードを試すことが出来ません。
アーリーアダプタ(製品登場時の初期採用者)でもないのに、そんなに新しい PC は用意できないという方も多いとは思いますが、 古い PC へ対応するための開発時間・費用などを考慮すると、ある程度は新しい PC に限定する必要が生じてきます。
開発に使用する OS は Windows 10 を想定していますが、WSL や Ubuntu Desktop も一部の作業で使用します。
1 台目はノート PC や NUC でも良いのですが、2 台目は Micro ATX 以上のサイズのマザーボードを搭載した自作 PC が望ましいです。 2 台目は いつでもディスクを初期化しても問題がないテスト専用機として使います。また、マザーボード上に COM ポートがある製品を選びます。
PC 1 台の場合、本書で使用する周辺機器は、以下の通りです。USB メモリは必須です。
- USB メモリ
- PS/2 キーボード・マウス (ノート PC のキーボードとタッチバッドが該当します。デスクトップ PC 向けの外付け製品もあります)
- USB キーボード・マウス
- USB 3.1 Gen 1 または Gen 2 の UASP 対応 外付け SSD
- USB 有線 LAN アダプタ(ASIX AX88772, AX88772B 搭載製品または、CDC-ECM 対応製品)
- AirPrint 対応プリンタ
PC 2 台を用意できる場合、追加で使用する周辺機器は、以下の通りです。
- マザーボード用 COM ポートブラケット
- USB シリアル(RS-232C)変換ケーブル
- シリアル(RS-232C)クロスケーブル
注意点として、Atom 系の低価格ノート PC・NUC・スティック型 PC・タブレット(本書では 2in1 を含みます)・スマートフォンの利用は避けた方が良いです。 ディスク容量が少なかったり、CPU の機能が削られていたりする傾向にあるので本書の想定する開発には向かないです。UEFI が 32 ビット版の機種も多く、 本書のサンプル・コードが動作しません。
また、Mac および macOS についても本書の対象外とします。
GitHub で公開しています。本書の本文中で個別のリポジトリの URL を提示します。
https://github.com/tenpoku1000
本書の本文中で扱うコード片は、基本的に GitHub で公開しているコードの一部を切り出したものです。
C コンパイラなどの開発ツールが開発完了するまでは、米マイクロソフト社の統合開発環境である Visual Studio を利用することを前提とします。
OS はハードウェア(PC や周辺機器)を制御し、アプリの実行状態を管理します。よって、ハードウェアを制御するソフトウェアであるデバイスドライバは OS の一部として扱います。
ハードウェアが OS に対して、ハードウェアを制御するために情報を公開している部分(レジスタや通信プロトコルなど)は、 本書ではハードウェアまたはハードウェアに関する情報として扱います。ソフトウェア的な側面なのだから、 それはソフトウェアの情報ではないのかという意見もあるかもしれませんが、OS がハードウェアを制御するという観点を重視することにしました。
日本語の整数に関する表現ですが、「 3 以上・ 3 以下」は 3 を含むものとします。「 3 を超える」「 3 より大きい」は 4 以上のことを意味します。 「3 より小さい」「3 未満」は 2 以下のことを意味します。
不適切な略語を使わないようにします。たとえば、USB メモリを USB と略しませんし、Wikipedia を Wiki と略しません。USB とは PC と周辺機器との通信規格ですし、 Wiki とは Web 上のハイパーテキスト文書を編集する Wiki と呼ばれる種類のシステム全般を指します。
ソースコードの各行について 1 つ 1 つ、解説していくということは基本的にしません。要点を絞り込んで解説します。
業務用ソフトウェアなどで行われているような、ソースコードの各行についてコードの意味を日本語に直訳したコメントを書くことも基本的に行いません。 落ち着いた状況下で、十分な時間をかけてソースコードを読み、理解するようにしてください。コメントを数多く書けば書くほど、ソースコードを修正する際に コメントの修正漏れが発生する可能性が高くなり、コードとコメントの意味が合わなくなってしまうことになるためです。
必要なら、サンプル・コードにコメントを入れながら読むようにすると、理解が進むと思います。