Skip to content
「作って理解するOS x86系コンピュータを動かす理論と実装」の演習用
Assembly Roff
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
env
src
tools/nasm-2.14.02
.gitignore
README.md

README.md

testOS

About this repository

作って理解するOS x86系コンピュータを動かす理論と実装 | 林 高勲, 川合 秀実 を読んで作成した OS のコードをあげています

参考: サポートページ:作って理解するOS x86系コンピュータを動かす理論と実装:|技術評論社

環境

  • Bochs の 2.6.9 で挙動確認した
  • アセンブラは NASM の 2.14.02 を使用
  • Windows 環境ではなく、Mac 環境で作業(mac OS Catalina 10.15.1)
  • 読んだ本は初版のもの(2019年10月9日初版、第1刷)

作成時のメモ

  • 本と違う点など、作成時のメモを以下に記載します
  • 全般に渡って挙動確認は Bochs のみ、実機での確認は行っていません

12章: 開発環境を構築する

  • Bochs を利用することにした
    • バージョンは 2.6.9
    • brew install bochs
    • Windows ではなく、本に書かれているようなメニュー画面がないので、config file を設定する必要がある
    • env 配下に .bochsrc ファイルを作成。12 章で設定されていそうな内容を記載した
ata0-master: type=disk, path=boot.img, mode=flat, cylinders=20, heads=2, spt=16, translation=auto
boot: disk
  • 本に記載がある通り、ata0-0: specified geometry doesn't fit on disk image の警告は無視して、Booting from Hard Disk... のメッセージが出ることを確認した
  • 起動オプションは本の指定通りとした
bochs -q -f ../../env/.bochsrc -rc ../../env/cmd.init
  • bat ファイルではなく sh ファイルとした
  • env.bat と dev.bat は作らず、.zshrc で PATH を指定した。また Bochs を使う(QEMUを使わない)ため、boot.bat も作っていない
  • 本と同様に、00_boot_only や 01_bpb などから box.sh 等を呼び出す想定で記載

13章: アセンブラによる制御構文と関数の記述例

  • 記載の通り実装しただけ

14章: リアルモードでの基本動作を実装する

  • 各ステップごとに実装し、挙動確認をした
  • 14.9 で macro.s にある .cyln が .syln とタイポされてたので、.cyln にする。また、resw が reww とタイポされているので、resw にする
  • 14.12 で get_mem_info.s にメモリを確保する記述を追加する
  • 14.13 で kbc.s の KBC_Data_Read の loopnz を loopz に修正する
  • 14.16 で lba_chs は (read_lba.s ではなく)lba_chs.s という名前で保存する

15章: プロテクトモードへの移行を実現する

  • 記載の通り実装しただけ

16章: プロテクトモードでの画面出力を実現する

  • mac での画面拡大
    • システム環境設定で Accessibility から Zoom を選択して、キーボードからショートカットで拡大できるように設定する
  • 16.10 で 23_draw_rect ではなく、24_draw_rect で作成する

17章: 現在時刻を表示する

  • 時刻の変化を確認する時、本に記載の通り、.bochsrc に cpu の設定を追加する
    • cpu: ips=60000000 の記載を追加して、確認した
    • 参考: Using Bochs

18章: プロテクトモードでの割り込みを実現する

  • 18.2 の VECT_BASE は define.s に登録する
  • 18.3 の macro.s の set_vect に if 文を追加する

19章: マルチタスクを実現する

  • 記載の通り実装しただけ

20章: 特権状態を管理する

  • 記載の通り実装しただけ

21章: 小数演算を行う

  • draw_line.s に USE_SYSTEM_CALL が定義されている場合の処理を追加

22章: ページング機能を利用する

  • task_3.s の rose.n を 5、rose.d を 2 にして挙動を確認した(提供されているコードと揃えた)
  • real 配下の memcpy.s を protect 配下にコピー

23章: コードを共有する

  • 記載の通り実装しただけ

24章: ファイルシステムを利用する

  • define.s に FAT1_START / FAT2_START などの変数を定義する
  • テキストファイルの確認はしていない(挙動確認は Bochs のみ)

25章: モード移行を実現する

  • 記載の通り実装しただけ

26章: ファイルの読み出しを実現する

  • 記載の通り実装しただけ

27章: PC の電源を切る

  • CTRL+ALT+END キーの処理は、45_fat_bios/kernel.s ではなく、46_acpi/kernel.s に記載する
  • power_off.s の最初に "Power off..." のメッセージを表示する処理を入れる
  • Ctrl + Alt + End の確認は Ctrl + Option + Fn + → で確認する

読書メモ

You can’t perform that action at this time.