Skip to content
This repository was archived by the owner on Jan 14, 2026. It is now read-only.

Commit bd65fc8

Browse files
authored
Marged PR#6 into main
Complete and correct LiteCore documentation
2 parents 25b509f + 79456f4 commit bd65fc8

37 files changed

Lines changed: 618 additions & 328 deletions

docs/config.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
この章では、設定ファイルについて記述します。
2-
実装されているファイルは[util/config.h](../../src/include/util/config.h)です。
2+
実装されているファイルは[util/config.h](https://github.com/nekogakure/LiteCore/blob/main/src/include/util/config.h)です。
33

44
## 概要
55
util/config.hは、カーネル全体で使用されるグローバル設定と定数を定義するヘッダファイルです。バージョン情報、メモリレイアウト、VGA設定などが含まれます。

docs/device/keyboard.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
この章では、キーボードドライバについて記述します。
2-
実装されているファイルは[keyboard.c](../../src/kernel/device/keyboard.c), [keyboard.h](../../src/include/device/keyboard.h)です。
2+
実装されているファイルは[keyboard.c](https://github.com/nekogakure/LiteCore/blob/main/src/kernel/device/keyboard.c), [keyboard.h](https://github.com/nekogakure/LiteCore/blob/main/src/include/device/keyboard.h)です。
33

44
## 概要
55
キーボードドライバは、PS/2キーボードからの入力を処理し、文字バッファを管理します。スキャンコードをASCII文字に変換し、Shift、Ctrl、Altキーの状態を管理します。リングバッファを使用して入力をバッファリングし、ブロッキング/ノンブロッキングの読み取りをサポートします。

docs/device/pci.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
この章では、PCIバスドライバについて記述します。
2-
実装されているファイルは[pci.c](../../src/kernel/device/pci.c), [pci.h](../../src/include/device/pci.h)です。
2+
実装されているファイルは[pci.c](https://github.com/nekogakure/LiteCore/blob/main/src/kernel/device/pci.c), [pci.h](https://github.com/nekogakure/LiteCore/blob/main/src/include/device/pci.h)です。
33

44
## 概要
55
PCIドライバは、PCIバス上のデバイスを検出し、コンフィギュレーション空間にアクセスする機能を提供します。標準的なPCIコンフィギュレーション空間アクセスメカニズムを使用して、バス、デバイス、ファンクションを列挙します。

docs/driver/ata.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
この章では、ATAドライバについて記述します。
2-
実装されているファイルは[ata.c](../../src/kernel/driver/ata.c), [ata.h](../../src/include/driver/ata.h)です。
2+
実装されているファイルは[ata.c](https://github.com/nekogakure/LiteCore/blob/main/src/kernel/driver/ata.c), [ata.h](https://github.com/nekogakure/LiteCore/blob/main/src/include/driver/ata.h)です。
33

44
## 概要
55
ATAドライバは、IDE/ATAハードディスクドライブへのアクセスを提供します。PIOモードを使用してセクタの読み書きを行い、LBA28アドレッシングをサポートします。プライマリおよびセカンダリバスの両方に対応し、マスター/スレーブドライブの検出と制御が可能です。

docs/driver/timer/apic.md

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
この章では、APIC Timerドライバについて記述します。
2+
実装されているファイルは[apic.c](https://github.com/nekogakure/LiteCore/blob/main/src/kernel/driver/timer/apic.c), [apic.h](https://github.com/nekogakure/LiteCore/blob/main/src/include/driver/timer/apic.h)です。
3+
4+
## 概要
5+
APIC (Advanced Programmable Interrupt Controller) Timerは、x86_64プロセッサに内蔵された高精度タイマーです。このドライバは、APIC Timerを使用してシステム時刻の管理、タイマー割り込みの生成、および遅延処理を実装します。ACPI PM Timerを使用してキャリブレーションを行い、正確な周波数を計算します。
6+
7+
## 関数 / API
8+
9+
#### `int apic_timer_init(void)`
10+
APIC Timerを初期化します。CPUのAPICサポートを確認し、ベースアドレスを取得し、タイマー周波数をキャリブレーションして、1000Hz (1ms間隔) で動作するように設定します。
11+
12+
引数: なし
13+
14+
戻り値: 0=成功、-1=APICサポートなし
15+
16+
#### `int apic_timer_available(void)`
17+
APIC Timerが初期化済みで利用可能かチェックします。
18+
19+
引数: なし
20+
21+
戻り値: 1=利用可能、0=利用不可
22+
23+
#### `void apic_timer_tick(uint32_t irq, void *context)`
24+
タイマー割り込みハンドラです。1ms毎に呼ばれ、ティックカウントを増加させます。EOI (End of Interrupt) を送信して割り込みを終了します。
25+
26+
引数:
27+
- irq(uint32_t): 割り込み番号
28+
- context(void*): コンテキスト(未使用)
29+
30+
#### `uint64_t apic_get_uptime_us(void)`
31+
システム起動からの経過時間をマイクロ秒で取得します。
32+
33+
引数: なし
34+
35+
戻り値: 経過時間(マイクロ秒)
36+
37+
#### `uint64_t apic_get_uptime_ms(void)`
38+
システム起動からの経過時間をミリ秒で取得します。
39+
40+
引数: なし
41+
42+
戻り値: 経過時間(ミリ秒)
43+
44+
#### `uint32_t apic_timer_get_frequency(void)`
45+
APIC Timerの周波数を取得します。
46+
47+
引数: なし
48+
49+
戻り値: タイマー周波数(Hz)
50+
51+
#### `void apic_timer_delay_us(uint32_t us)`
52+
指定されたマイクロ秒だけビジーウェイトで遅延します。
53+
54+
引数:
55+
- us(uint32_t): 遅延時間(マイクロ秒)
56+
57+
#### `void apic_timer_delay_ms(uint32_t ms)`
58+
指定されたミリ秒だけビジーウェイトで遅延します。
59+
60+
引数:
61+
- ms(uint32_t): 遅延時間(ミリ秒)
62+
63+
## 定数 / 定義
64+
65+
- `APIC_BASE_DEFAULT`: 0xFEE00000 - APICレジスタのデフォルトベースアドレス
66+
- `APIC_ID`: 0x020 - Local APIC IDレジスタオフセット
67+
- `APIC_VERSION`: 0x030 - Local APIC Versionレジスタオフセット
68+
- `APIC_TPR`: 0x080 - Task Priority Registerオフセット
69+
- `APIC_EOI`: 0x0B0 - End Of Interruptレジスタオフセット
70+
- `APIC_LDR`: 0x0D0 - Logical Destination Registerオフセット
71+
- `APIC_DFR`: 0x0E0 - Destination Format Registerオフセット
72+
- `APIC_SPURIOUS`: 0x0F0 - Spurious Interrupt Vector Registerオフセット
73+
- `APIC_ESR`: 0x280 - Error Status Registerオフセット
74+
- `APIC_TIMER_LVT`: 0x320 - LVT Timer Registerオフセット
75+
- `APIC_TIMER_INIT`: 0x380 - Timer Initial Countレジスタオフセット
76+
- `APIC_TIMER_CURRENT`: 0x390 - Timer Current Countレジスタオフセット
77+
- `APIC_TIMER_DIV`: 0x3E0 - Timer Divide Configurationレジスタオフセット
78+
- `APIC_TIMER_MODE_ONESHOT`: 0x00000000 - ワンショットモード
79+
- `APIC_TIMER_MODE_PERIODIC`: 0x00020000 - 周期モード
80+
- `APIC_TIMER_MODE_TSCDEADLINE`: 0x00040000 - TSCデッドラインモード
81+
- `APIC_TIMER_DIV_1`: 0x0B - 分周比1
82+
- `APIC_TIMER_DIV_2`: 0x00 - 分周比2
83+
- `APIC_TIMER_DIV_4`: 0x01 - 分周比4
84+
- `APIC_TIMER_DIV_8`: 0x02 - 分周比8
85+
- `APIC_TIMER_DIV_16`: 0x03 - 分周比16
86+
- `APIC_TIMER_DIV_32`: 0x08 - 分周比32
87+
- `APIC_TIMER_DIV_64`: 0x09 - 分周比64
88+
- `APIC_TIMER_DIV_128`: 0x0A - 分周比128
89+
- `ACPI_PM_TIMER_PORT`: 0x608 - ACPI PM Timerのポートアドレス
90+
- `ACPI_PM_TIMER_FREQ`: 3579545 - ACPI PM Timerの固定周波数(3.579545 MHz)
91+
92+
## 構造体
93+
94+
このファイルには公開構造体の定義はありません。
95+
96+
## 実装の詳細
97+
98+
### キャリブレーション
99+
APIC Timerの周波数は CPU によって異なるため、ACPI PM Timer(固定3.579545 MHz)を基準にしてキャリブレーションを行います。10ms間のAPICタイマーのカウント数を測定し、実際の周波数を計算します。
100+
101+
### 動作モード
102+
APIC TimerはPeriodicモードで動作し、1000Hz(1ms間隔)で割り込みを生成します。割り込みベクタは48番が使用されます。
103+
104+
### 時刻管理
105+
`current_tick_count`変数で1ms単位のティック数を管理し、これを基にマイクロ秒/ミリ秒単位の経過時間を提供します。
106+
107+
### 遅延処理
108+
`apic_timer_delay_us()`および`apic_timer_delay_ms()`は、アップタイムを監視してビジーウェイトで遅延を実装します。CPUの負荷を避けるため`pause`命令を使用します。

docs/driver/timer/timer.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
この章では、統合タイマーインターフェースについて記述します。
2+
実装されているファイルは[timer.c](https://github.com/nekogakure/LiteCore/blob/main/src/kernel/driver/timer/timer.c), [timer.h](https://github.com/nekogakure/LiteCore/blob/main/src/include/driver/timer/timer.h)です。
3+
4+
## 概要
5+
環境に応じて適切なタイマードライバを選択し、統一されたインターフェースを提供するラッパーモジュールです。UEFI環境ではUEFI Timer(PIT)を、それ以外の環境ではAPIC Timerを使用します。
6+
7+
## 関数 / API
8+
9+
#### `int kwait(uint32_t us)`
10+
指定されたマイクロ秒だけ待機します。環境に応じて適切なタイマードライバを使用します。
11+
12+
引数:
13+
- us(uint32_t): 待機時間(マイクロ秒)
14+
15+
戻り値: 0=成功、-1=タイマー未初期化
16+
17+
## 定数 / 定義
18+
19+
このファイルには定数定義はありません。
20+
21+
## 構造体
22+
23+
このファイルには構造体の定義はありません。
24+
25+
## 実装の詳細
26+
27+
### 環境の自動選択
28+
`UEFI_MODE`マクロの定義に基づいて、コンパイル時に使用するタイマードライバが決定されます:
29+
- UEFI環境: `uefi_wait_us()`を使用
30+
- 通常環境: APIC Timerの`apic_get_uptime_us()`を使用
31+
32+
### 割り込みディスパッチ
33+
通常環境では、待機中に`interrupt_dispatch_all()`を呼び出すことで、待機中も割り込み処理が適切に実行されることを保証します。

docs/driver/timer/uefi_timer.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
この章では、UEFI Timer(PIT)ドライバについて記述します。
2+
実装されているファイルは[uefi_timer.c](https://github.com/nekogakure/LiteCore/blob/main/src/kernel/driver/timer/uefi_timer.c), [uefi_timer.h](https://github.com/nekogakure/LiteCore/blob/main/src/include/driver/timer/uefi_timer.h)です。
3+
4+
## 概要
5+
UEFI環境用のタイマードライバです。PIT (Programmable Interval Timer) を使用してタイマー割り込みを生成し、システム時刻の管理とスリープ機能を提供します。UEFI環境ではAPIC Timerの代わりにこのドライバが使用されます。
6+
7+
## 関数 / API
8+
9+
#### `int uefi_timer_init(void)`
10+
UEFI環境用のタイマーを初期化します。PITを100Hz(10ms間隔)で動作するように設定し、IRQ 0のマスクを解除します。
11+
12+
引数: なし
13+
14+
戻り値: 0=成功、-1=失敗
15+
16+
#### `void uefi_timer_tick(uint32_t irq, void *context)`
17+
タイマー割り込みハンドラです。10ms毎に呼ばれ、ティックカウントを増加させます。
18+
19+
引数:
20+
- irq(uint32_t): 割り込み番号
21+
- context(void*): コンテキスト(未使用)
22+
23+
#### `void uefi_sleep_ms(uint32_t ms)`
24+
指定されたミリ秒だけスリープします。タイマー割り込みベースでCPUを休止状態にします。
25+
26+
引数:
27+
- ms(uint32_t): スリープ時間(ミリ秒)
28+
29+
#### `uint64_t uefi_get_uptime_ms(void)`
30+
起動からの経過時間をミリ秒で取得します。
31+
32+
引数: なし
33+
34+
戻り値: 経過時間(ミリ秒)
35+
36+
#### `void uefi_wait_us(uint32_t us)`
37+
指定されたマイクロ秒だけビジーウェイトで待機します。タイマーに依存しない単純なループベースの実装です。
38+
39+
引数:
40+
- us(uint32_t): 待機時間(マイクロ秒、最大10000us)
41+
42+
## 定数 / 定義
43+
44+
- `PIT_FREQUENCY`: 1193182 - PITの基本周波数(約1.193MHz)
45+
- `PIT_CHANNEL0`: 0x40 - PITチャンネル0のI/Oポート
46+
- `PIT_COMMAND`: 0x43 - PITコマンドレジスタのI/Oポート
47+
- `PIT_MODE`: 0x36 - Mode 3: 方形波生成モード
48+
49+
## 構造体
50+
51+
このファイルには公開構造体の定義はありません。
52+
53+
## 実装の詳細
54+
55+
### PITの設定
56+
PITは約1.193MHzで動作するハードウェアタイマーです。分周比を設定することで任意の周波数の割り込みを生成できます。このドライバでは100Hz(10ms間隔)で動作するように設定されています。
57+
58+
### タイマー割り込み
59+
IRQ 0(PITタイマー)の割り込みハンドラが10msごとに呼ばれ、`timer_ticks`を増加させます。この値を基に経過時間やスリープ機能を実装します。
60+
61+
### スリープ機能
62+
`uefi_sleep_ms()`は、目標ティック数に達するまで`hlt`命令でCPUを休止状態にします。これにより無駄なCPU使用を避けます。
63+
64+
### マイクロ秒待機
65+
`uefi_wait_us()`は、タイマーに依存しないビジーウェイト実装です。`pause`命令を使用してCPUの負荷を軽減しながら、指定されたマイクロ秒だけループします。最大10msに制限されています。
66+
67+
### UEFI環境での使用
68+
このドライバは`UEFI_MODE`が定義されている場合に使用されます。APIC Timerが利用できないUEFI環境でも、基本的なタイマー機能を提供します。

docs/driver/usb/hid.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
この章では、HID (Human Interface Device) の定義について記述します。
2-
実装されているファイルは[hid.h](../../../src/include/driver/usb/hid.h)です。
2+
実装されているファイルは[hid.h](https://github.com/nekogakure/LiteCore/blob/main/src/include/driver/usb/hid.h)です。
33

44
## 概要
55

docs/driver/usb/usb.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
この章では、USB プロトコルの定義について記述します。
2-
実装されているファイルは[usb.h](../../../src/include/driver/usb/usb.h)です。
2+
実装されているファイルは[usb.h](https://github.com/nekogakure/LiteCore/blob/main/src/include/driver/usb/usb.h)です。
33

44
## 概要
55

docs/driver/usb/usb_keyboard.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
この章では、USBキーボードドライバについて記述します。
2-
実装されているファイルは[usb_keyboard.c](../../../src/kernel/driver/usb/usb_keyboard.c)です。
2+
実装されているファイルは[usb_keyboard.c](https://github.com/nekogakure/LiteCore/blob/main/src/kernel/driver/usb/usb_keyboard.c)です。
33

44
## 概要
55

0 commit comments

Comments
 (0)