# aquice/amberos architecture

> Architecture diagram of the GitHub repository aquice/amberos, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aquice/amberos
- Repository: https://github.com/aquice/amberos

## Overview

amberOS is a small x86 operating-system kernel. Its sampled startup routine initializes memory and the text console, configures interrupt and timer support, unmasks an IRQ, then enables interrupts and idles. The README gives no further product detail; subsystem roles are partly inferred from the tree and filenames, and unsampled interrupt wiring is not shown.

Main entry points: [`src/kernel/kernel/io/term/terminal.c`](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/io/term/terminal.c) (Terminal), [`src/kernel/kernel.c`](https://github.com/aquice/amberos/blob/main/src/kernel/kernel.c) (Kernel startup), [`src/kernel/kernel/interrupts/irq/keyboard_irq.c`](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/irq/keyboard_irq.c) (Keyboard IRQ), [`src/kernel/kernel/interrupts/pic_8259.c`](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/pic_8259.c) (8259 PIC)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Kernel startup"]
  node_kernel["Kernel startup<br/>[kernel.c]"]
  node_boot["Bootloader<br/>[boot.asm]"]
  node_entry["Kernel entry<br/>[main.asm]"]
end

subgraph group_interrupts["Interrupts and timing"]
  node_idt["IDT setup<br/>[IDT.c]"]
  node_irq["IRQ setup<br/>[IRQ.c]"]
  node_pic["8259 PIC<br/>[pic_8259.c]"]
  node_pit["PIT setup<br/>[PIT.c]"]
  node_keyboard["Keyboard IRQ<br/>[keyboard_irq.c]"]
  node_pit_handler["PIT IRQ<br/>[pit_irq.c]"]
end

subgraph group_console["Text console"]
  node_terminal["Terminal<br/>[terminal.c]"]
  node_cursor["Cursor control<br/>[cursor.c]"]
end

subgraph group_memory["Memory and diagnostics"]
  node_memory_init["Memory init<br/>[meminit32.c]"]
  node_memory_source["Memory source<br/>[meminit32.h]"]
  node_panic["Kernel panic<br/>[panic.c]"]
  node_diagnostics["Diagnostics<br/>[diagnostics.c]"]
end

node_vga[("VGA text memory")]
node_ports(("x86 I/O ports"))

node_kernel -->|"initializes"| node_memory_init
node_kernel -->|"initializes"| node_terminal
node_kernel -->|"initializes"| node_idt
node_kernel -->|"remaps"| node_pic
node_kernel -->|"initializes"| node_pit
node_kernel -->|"initializes"| node_irq
node_memory_init -->|"creates"| node_memory_source
node_terminal -->|"reserves lines"| node_memory_source
node_terminal -->|"updates"| node_cursor
node_terminal -->|"renders"| node_vga
node_pic -->|"reads and writes"| node_ports
node_keyboard -->|"reads scancode"| node_ports
node_keyboard -->|"prints scancode"| node_terminal
node_panic -->|"prints panic"| node_terminal
node_diagnostics -->|"logs through"| node_terminal

click node_kernel "https://github.com/aquice/amberos/blob/main/src/kernel/kernel.c"
click node_boot "https://github.com/aquice/amberos/blob/main/src/bootloader/boot.asm"
click node_entry "https://github.com/aquice/amberos/blob/main/src/kernel/main.asm"
click node_memory_init "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/memory/meminit32.c"
click node_memory_source "https://github.com/aquice/amberos/blob/main/src/kernel/include/kernel/memory/meminit32.h"
click node_terminal "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/io/term/terminal.c"
click node_cursor "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/io/term/cursor.c"
click node_idt "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/IDT.c"
click node_irq "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/IRQ.c"
click node_pic "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/pic_8259.c"
click node_pit "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/PIT.c"
click node_keyboard "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/irq/keyboard_irq.c"
click node_pit_handler "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/irq/pit_irq.c"
click node_panic "https://github.com/aquice/amberos/blob/main/src/kernel/kernel/io/panic.c"
click node_diagnostics "https://github.com/aquice/amberos/blob/main/src/kernel/std/diagnostics.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_kernel,node_boot,node_entry toneBlue
class node_idt,node_irq,node_pic,node_pit,node_keyboard,node_pit_handler,node_vga toneAmber
class node_terminal,node_cursor toneMint
class node_memory_init,node_memory_source,node_panic,node_diagnostics toneRose
class node_ports toneIndigo
```

## Components

### Kernel startup

- [Kernel startup](https://github.com/aquice/amberos/blob/main/src/kernel/kernel.c): `src/kernel/kernel.c`
- [Bootloader](https://github.com/aquice/amberos/blob/main/src/bootloader/boot.asm): `src/bootloader/boot.asm`
- [Kernel entry](https://github.com/aquice/amberos/blob/main/src/kernel/main.asm): `src/kernel/main.asm`

### Interrupts and timing

- [IDT setup](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/IDT.c): `src/kernel/kernel/interrupts/IDT.c`
- [IRQ setup](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/IRQ.c): `src/kernel/kernel/interrupts/IRQ.c`
- [8259 PIC](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/pic_8259.c): `src/kernel/kernel/interrupts/pic_8259.c`
- [PIT setup](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/PIT.c): `src/kernel/kernel/interrupts/PIT.c`
- [Keyboard IRQ](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/irq/keyboard_irq.c): `src/kernel/kernel/interrupts/irq/keyboard_irq.c`
- [PIT IRQ](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/interrupts/irq/pit_irq.c): `src/kernel/kernel/interrupts/irq/pit_irq.c`

### Text console

- [Terminal](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/io/term/terminal.c): `src/kernel/kernel/io/term/terminal.c`
- [Cursor control](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/io/term/cursor.c): `src/kernel/kernel/io/term/cursor.c`

### Memory and diagnostics

- [Memory init](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/memory/meminit32.c): `src/kernel/kernel/memory/meminit32.c`
- [Memory source](https://github.com/aquice/amberos/blob/main/src/kernel/include/kernel/memory/meminit32.h): `src/kernel/include/kernel/memory/meminit32.h`
- [Kernel panic](https://github.com/aquice/amberos/blob/main/src/kernel/kernel/io/panic.c): `src/kernel/kernel/io/panic.c`
- [Diagnostics](https://github.com/aquice/amberos/blob/main/src/kernel/std/diagnostics.c): `src/kernel/std/diagnostics.c`

### Other components

- **VGA text memory**
- **x86 I/O ports**

## Connections

- Kernel startup → Memory init: initializes
- Kernel startup → Terminal: initializes
- Kernel startup → IDT setup: initializes
- Kernel startup → 8259 PIC: remaps
- Kernel startup → PIT setup: initializes
- Kernel startup → IRQ setup: initializes
- Memory init → Memory source: creates
- Terminal → Memory source: reserves lines
- Terminal → Cursor control: updates
- Terminal → VGA text memory: renders
- 8259 PIC → x86 I/O ports: reads and writes
- Keyboard IRQ → x86 I/O ports: reads scancode
- Keyboard IRQ → Terminal: prints scancode
- Kernel panic → Terminal: prints panic
- Diagnostics → Terminal: logs through
