始めに
本連載では、0からCUIの16ビットOSを、アセンブリ言語のみを使って実装していきます。
x86の仕組みを深く理解することを目的としており、C言語などの高級言語は使用しません。
近況
2025-06-02 画面表示がうまくいかなくなりスタック周りを調査中。
2025-06-07 番外篇として初めたBIOS作成の方が楽しくなりOS作成は何もしていません。
2025-06-24 GITHUBを使い始めました。BIOS作成は企画倒れになりそうですがその代わりにBIOSを極力使わないようなコードを書くようにしています。
2025-07-02 ファイル読み込み機能ではまってます。連日fatの記事ばかり出してます。嫌になってきました。
実装篇
実装に関わる部分を載せます。
5月13日ブートローダー作成
5月14日シェルの原型を実装
5月15日ソース分割
5月15日開発日記
5月18日FAT12 ファイル一覧表示
2025-06-12 MS-DOSのMBRの処理を追う
2025-06-16 MBR・VBR自作でFAT16として認識させる
2025-06-17 FAT16ファイルシステムを手書きで作る
2025-06-18 MBR→VBR→カーネルの順に起動する雛形(自作OS)
2025-06-19 簡単なコマンドの実装
2025-06-24 BIOS依存の廃止
2025-06-25 画面クリア及びバックスペースによる文字削除の実装
2025-06-26 DISK読み込みの開発
2025-06-28 DIRコマンドの実装
2025-06-29 COM実行実装 第1段階 COMファイルの準備
2025-06-29 COM実行実装 第2段階 INT21Hの実装
2025-06-30 FAT16の構造を調べる
2025-07-01 FAT16の構造1
2025-07-02 XPで初期化したFAT16の構造を見る
2025-07-03 XPで初期化したFAT16に自分のカーネルを入れる(失敗)
2025-07-07 DISK読み込み機能改良
2025-07-07 COM実行機能
[2025-07-19 デバッグ用レジスタの値を表示する関数作成]
(https://qiita.com/earthen94/items/5e492d0ae194b8dce4a3
)
処理説明篇
汎用的な関数の説明を載せます。
関数呼び出し時に PUSHA / POPA を使う理由
x86スタックの初期化
clear_screen(画面クリア)
print_string(文字列表示)
to_upper(小文字→大文字変換)
問題解決篇
2025-06-01 文字列表示がうまく行かない
2025-06-02 文字列表示前後のスタックが破壊されていないか確認
2025-06-02 文字列表示がうまく行かなかった理由
2025-06-22 自作OS VGA VRAM直書き出力のデバッグ
2025-06-22 自作OS VGA VRAM直書き出力のデバッグ2
手稿篇
処理説明篇と被っている気もしますが、手書きのものはこちらに載せます。
2025-06-02 DSの初期化
2025-06-02 SS:SPの変化とスタックの中身
BIOS実装(番外篇)
2025-06-03 BIOS開発1日目 予備知識をつける(完全備忘録!)
2025-06-04 BIOSの入口を探す
2025-06-04 BIOS割り込み ( INT 0x10 AH=0x0E ) を再現する
2025-06-05 INT 16H風のキーボード割り込みを自作
2025-06-06 IRQ1(キーボード割り込み)によるHLT復帰の検証
2025-06-07 8086実機 × QEMUで検証 0x1F7ポートを使った起動装置判定法
2025-06-07 VGAレジスタの初期値ダンプと解析
2025-06-08 IDEセクタ読み込み実行結果
2025-06-08 BIOSを使わないブートローダ