Files
t3hn3rd 26e2fd947e feature: add mkdocs-material documentation site with CI deployment
Generate comprehensive documentation for all 173 source units and
integrate mkdocs-material into the build toolchain. Documentation
covers kernel core, x86 architecture, drivers, applications, and
all subsystems with a tabbed navigation structure.

- Add mkdocs.yml with material theme, mermaid support, and tabbed nav
- Add doc/index.md landing page
- Generate doc/src/ markdown for every Pascal unit in src/
- Reorganize planning docs into doc/planning/
- Add compat, lvglh, and toolchain doc sections
- Update Dockerfile to install python3 and mkdocs-material (pinned <2)
- Replace pasdoc-based compile_docs.sh with mkdocs build --strict
- Add compile_docs.sh to the main build pipeline in compile.sh
- Add deploy-docs step in .drone.yml with host volume mount to nginx
- Add site/.gitkeep for build output directory
2026-03-08 21:06:14 +00:00

649 lines
33 KiB
Markdown

# Asuro Namespace Refactoring Plan
## Overview
Refactor all source files under `src/` to use dotted namespace conventions (without the `asuro.` prefix — it's implicit). After refactoring, the only file at the `src/` root will be `asuro.pas` (the kernel entry point, currently `kernel.pas`). All other units move into namespaced subdirectories.
### Goals
- Clear, hierarchical namespacing for every unit
- Separation of x86-specific code under `arch/x86/` to support future architectures
- Drivers remain under `driver/` with full namespacing
- Services (timer-driven kernel processes) separated from user apps
- Structure supports future additions (e.g. `src/wasm/wasm.*`)
### Conventions
| Rule | Example |
|------|---------|
| All filenames are **lowercase** | `driver.bus.pci.pas` |
| Unit name matches filename (minus `.pas`) | `unit driver.bus.pci;` |
| Dots in the name reflect the folder hierarchy | `a.b.c.pas` lives in `src/a/b/` |
| If a unit has sub-units, it lives one level up | `driver.bus.usb.pas` in `driver/bus/`, sub-units in `driver/bus/usb/` |
| `system.pas` keeps its name (FPC compiler requirement) | `src/arch/x86/system.pas` |
| No `asuro.` prefix — the repo context is implicit | `arch.x86.gdt` not `asuro.arch.x86.gdt` |
---
## New Directory Structure
```
src/
├── asuro.pas # Kernel entry point (was kernel.pas)
│
├── arch/
│ └── x86/
│ ├── system.pas # FPC system unit (unchanged name, x86 asm)
│ ├── arch.x86.gdt.pas
│ ├── arch.x86.idt.pas
│ ├── arch.x86.irq.pas
│ ├── arch.x86.isr.pas
│ ├── arch.x86.cpu.pas
│ ├── arch.x86.util.pas # x86 I/O: outb/inb, CLI/STI, TSC, BSOD
│ ├── arch.x86.multiboot.pas
│ ├── arch.x86.bda.pas # BIOS Data Area
│ ├── arch.x86.v86.pas # Virtual 8086 monitor
│ │
│ ├── boot/
│ │ └── stub.asm # Multiboot boot stub (NASM)
│ │
│ ├── fault/
│ │ ├── arch.x86.fault.pas
│ │ ├── arch.x86.fault.ace.pas
│ │ ├── arch.x86.fault.bpe.pas
│ │ ├── arch.x86.fault.btsse.pas
│ │ ├── arch.x86.fault.cfe.pas
│ │ ├── arch.x86.fault.csoe.pas
│ │ ├── arch.x86.fault.dbge.pas
│ │ ├── arch.x86.fault.dbz.pas
│ │ ├── arch.x86.fault.dfe.pas
│ │ ├── arch.x86.fault.gpf.pas
│ │ ├── arch.x86.fault.idoe.pas
│ │ ├── arch.x86.fault.iope.pas
│ │ ├── arch.x86.fault.mce.pas
│ │ ├── arch.x86.fault.nce.pas
│ │ ├── arch.x86.fault.nmie.pas
│ │ ├── arch.x86.fault.oobe.pas
│ │ ├── arch.x86.fault.pf.pas
│ │ ├── arch.x86.fault.sfe.pas
│ │ ├── arch.x86.fault.snpe.pas
│ │ └── arch.x86.fault.uie.pas
│ │
│ ├── isr/
│ │ ├── arch.x86.isr.types.pas
│ │ ├── arch.x86.isr.mgr.pas
│ │ ├── arch.x86.isr.ioapic.pas
│ │ ├── arch.x86.isr.tmr0.pas
│ │ ├── arch.x86.isr.tmr1.pas
│ │ └── arch.x86.isr.ps2keyboard.pas
│ │
│ ├── proc/
│ │ ├── arch.x86.proc.sched.pas
│ │ └── arch.x86.proc.loader.pas
│ │
│ └── memory/
│ ├── arch.x86.memory.physical.pas
│ └── arch.x86.memory.virtual.pas
│
├── boot/
│ ├── boot.splash.pas # Boot splash screen
│ └── splash_tga.asm # Splash TGA data (incbin)
│
├── core/
│ ├── core.version.pas # Was include/asuro.pas (build metadata)
│ ├── core.util.pas # Portable helpers (IntToStr, min/max, etc.)
│ ├── core.strings.pas
│ ├── core.rand.pas
│ ├── core.types.pas
│ │
│ ├── ds/
│ │ ├── core.ds.types.pas # Was dstypes.pas
│ │ ├── core.ds.lists.pas
│ │ ├── core.ds.hashmap.pas
│ │ ├── core.ds.fifo.pas
│ │ ├── core.ds.cfifo.pas
│ │ ├── core.ds.cfifols.pas
│ │ ├── core.ds.lifo.pas
│ │ ├── core.ds.circ.pas
│ │ ├── core.ds.bheap.pas
│ │ ├── core.ds.minh.pas
│ │ ├── core.ds.maxh.pas
│ │ └── core.ds.prio.pas
│ │
│ ├── enc/
│ │ ├── core.enc.md5.pas
│ │ ├── core.enc.sha1.pas
│ │ ├── core.enc.base64.pas
│ │ └── core.enc.crc.pas
│ │
│ ├── fmt/
│ │ └── core.fmt.targa.pas
│ │
│ └── gfx/
│ ├── core.gfx.color.pas
│ ├── core.gfx.fonts.pas
│ └── core.gfx.texture.pas
│
├── io/
│ ├── io.stdio.pas
│ └── io.syslog.pas
│
├── debug/
│ └── debug.tracer.pas
│
├── memory/
│ └── memory.heap.pas # Was lmemorymanager.pas
│
├── proc/
│ ├── proc.mgr.pas # Was processmanager.pas
│ ├── proc.types.pas # Was proctypes.pas
│ └── proc.testprocs.pas # Was testprocs.pas
│
├── svc/
│ ├── svc.gfxd.pas # Timer-driven display refresh daemon
│ └── svc.usbd.pas # Timer-driven USB hotplug daemon
│
├── driver/
│ ├── driver.mgr.pas # Was drivermanagement.pas
│ ├── driver.types.pas # Was driver/include/drivertypes.pas
│ ├── driver.net.pas # Was driver/net/l1/net.pas
│ ├── driver.video.pas # Was driver/video/video.pas
│ │
│ ├── bus/
│ │ ├── driver.bus.pci.pas
│ │ ├── driver.bus.usb.pas # Was driver/bus/usb/USB.pas
│ │ └── usb/
│ │ ├── driver.bus.usb.types.pas
│ │ ├── driver.bus.usb.core.pas
│ │ ├── driver.bus.usb.hub.pas
│ │ ├── driver.bus.usb.uhci.pas
│ │ ├── driver.bus.usb.ohci.pas
│ │ ├── driver.bus.usb.ehci.pas
│ │ └── driver.bus.usb.xhci.pas
│ │
│ ├── hid/
│ │ ├── driver.hid.keyboard.pas
│ │ ├── driver.hid.mouse.pas
│ │ ├── ps2/
│ │ │ ├── driver.hid.ps2.keyboard.pas
│ │ │ └── driver.hid.ps2.mouse.pas
│ │ └── usb/
│ │ ├── driver.hid.usb.keyboard.pas
│ │ └── driver.hid.usb.mouse.pas
│ │
│ ├── io/
│ │ └── driver.io.serial.pas
│ │
│ ├── timer/
│ │ └── driver.timer.rtc.pas
│ │
│ ├── storage/
│ │ ├── driver.storage.mgr.pas # Was storagemanager.pas
│ │ ├── driver.storage.types.pas # Was storagetypes.pas
│ │ ├── driver.storage.test.pas # Was storagetest.pas
│ │ ├── driver.storage.vfs.pas
│ │ ├── driver.storage.fdtable.pas
│ │ ├── driver.storage.filedispatch.pas
│ │ ├── driver.storage.iobuffer.pas
│ │ ├── driver.storage.iorequest.pas
│ │ │
│ │ ├── con/
│ │ │ ├── driver.storage.ctl.usb.pas # Was usb_storage.pas
│ │ │ ├── driver.storage.ctl.ram.pas # Was ramdrive.pas
│ │ │ │
│ │ │ ├── ahci/
│ │ │ │ ├── driver.storage.ctl.ahci.pas
│ │ │ │ └── driver.storage.ctl.ahci.types.pas
│ │ │ │
│ │ │ └── ide/
│ │ │ ├── driver.storage.ctl.ide.pas
│ │ │ ├── driver.storage.ctl.ide.types.pas
│ │ │ ├── driver.storage.ctl.ide.ata.pas
│ │ │ └── driver.storage.ctl.ide.atapi.pas
│ │ │
│ │ ├── fs/
│ │ │ ├── driver.storage.fs.mgr.pas
│ │ │ ├── driver.storage.fs.fat32.pas
│ │ │ ├── driver.storage.fs.asfs.pas
│ │ │ ├── driver.storage.fs.flatfs.pas
│ │ │ └── driver.storage.fs.iso9660.pas
│ │ │
│ │ └── vol/
│ │ ├── driver.storage.vol.mgr.pas # Was volumemanager.pas
│ │ ├── driver.storage.vol.table.pas
│ │ ├── driver.storage.vol.mbr.pas
│ │ └── driver.storage.vol.gpt.pas
│ │
│ ├── net/
│ │ ├── driver.net.types.pas
│ │ ├── driver.net.util.pas
│ │ │
│ │ ├── proto/
│ │ │ ├── driver.net.proto.eth2.pas
│ │ │ ├── driver.net.proto.arp.pas
│ │ │ ├── driver.net.proto.ipv4.pas
│ │ │ ├── driver.net.proto.icmp.pas
│ │ │ ├── driver.net.proto.tcp.pas
│ │ │ ├── driver.net.proto.udp.pas
│ │ │ └── driver.net.proto.dhcp.pas
│ │ │
│ │ └── dev/
│ │ └── driver.net.dev.e1000.pas
│ │
│ ├── video/
│ │ ├── driver.video.types.pas
│ │ ├── driver.video.gpu.pas
│ │ ├── driver.video.vesa.pas
│ │ ├── driver.video.vesa8.pas
│ │ ├── driver.video.vesa16.pas
│ │ ├── driver.video.vesa24.pas
│ │ ├── driver.video.vesa32.pas
│ │ ├── driver.video.doublebuffer.pas
│ │ ├── driver.video.bga.pas
│ │ ├── driver.video.lvgl.pas
│ │ ├── driver.video.windows.pas
│ │ └── driver.video.desktop.pas
│ │
│ └── exp/
│ └── driver.exp.testdriver.pas
│
├── app/
│ ├── app.mgr.pas # Was progmanager.pas
│ ├── app.vterminal.pas
│ ├── app.base64.pas # Was base64_prog.pas
│ ├── app.md5sum.pas
│ ├── app.dhclient.pas
│ ├── app.vbeinfo.pas
│ ├── app.diskcmd.pas
│ ├── app.diskutil.pas
│ ├── app.edit.pas
│ ├── app.filepicker.pas
│ ├── app.inio.pas
│ ├── app.meminfo.pas
│ ├── app.notepad.pas
│ ├── app.partcmd.pas
│ ├── app.ping.pas
│ ├── app.setres.pas
│ ├── app.testcmd.pas
│ ├── app.uidebug.pas
│ ├── app.volcmd.pas
│ │
│ └── wasm/
│ ├── app.wasm.cleanup.pas
│ ├── app.wasm.io.pas
│ ├── app.wasm.runner.pas
│ └── app.wasm.shim.pas
```
---
## Complete Rename Mapping
### Root Entry Point
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `kernel.pas` | `asuro.pas` | `kernel` | `asuro` |
### Architecture — x86 (`arch/x86/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `include/system.pas` | `arch/x86/system.pas` | `system` | `system` |
| `gdt.pas` | `arch/x86/arch.x86.gdt.pas` | `gdt` | `arch.x86.gdt` |
| `idt.pas` | `arch/x86/arch.x86.idt.pas` | `idt` | `arch.x86.idt` |
| `irq.pas` | `arch/x86/arch.x86.irq.pas` | `irq` | `arch.x86.irq` |
| `isr.pas` | `arch/x86/arch.x86.isr.pas` | `isr` | `arch.x86.isr` |
| `cpu.pas` | `arch/x86/arch.x86.cpu.pas` | `cpu` | `arch.x86.cpu` |
| `faults.pas` | `arch/x86/fault/arch.x86.fault.pas` | `faults` | `arch.x86.fault` |
| `contextswitcher.pas` | `arch/x86/proc/arch.x86.proc.sched.pas` | `contextswitcher` | `arch.x86.proc.sched` |
| `processloader.pas` | `arch/x86/proc/arch.x86.proc.loader.pas` | `processloader` | `arch.x86.proc.loader` |
| `v86.pas` | `arch/x86/arch.x86.v86.pas` | `v86` | `arch.x86.v86` |
| `include/multiboot.pas` | `arch/x86/arch.x86.multiboot.pas` | `multiboot` | `arch.x86.multiboot` |
| `include/bios_data_area.pas` | `arch/x86/arch.x86.bda.pas` | `bios_data_area` | `arch.x86.bda` |
| `include/util.pas` *(x86 parts)* | `arch/x86/arch.x86.util.pas` | `util` *(partial)* | `arch.x86.util` |
| `stub/stub.asm` | `arch/x86/boot/stub.asm` | — | — |
### Architecture — x86 Faults (`arch/x86/fault/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `fault/ACE.pas` | `arch/x86/fault/arch.x86.fault.ace.pas` | `ACE` | `arch.x86.fault.ace` |
| `fault/BPE.pas` | `arch/x86/fault/arch.x86.fault.bpe.pas` | `BPE` | `arch.x86.fault.bpe` |
| `fault/BTSSE.pas` | `arch/x86/fault/arch.x86.fault.btsse.pas` | `BTSSE` | `arch.x86.fault.btsse` |
| `fault/CFE.pas` | `arch/x86/fault/arch.x86.fault.cfe.pas` | `CFE` | `arch.x86.fault.cfe` |
| `fault/CSOE.pas` | `arch/x86/fault/arch.x86.fault.csoe.pas` | `CSOE` | `arch.x86.fault.csoe` |
| `fault/DBGE.pas` | `arch/x86/fault/arch.x86.fault.dbge.pas` | `DBGE` | `arch.x86.fault.dbge` |
| `fault/DBZ.pas` | `arch/x86/fault/arch.x86.fault.dbz.pas` | `DBZ` | `arch.x86.fault.dbz` |
| `fault/DFE.pas` | `arch/x86/fault/arch.x86.fault.dfe.pas` | `DFE` | `arch.x86.fault.dfe` |
| `fault/GPF.pas` | `arch/x86/fault/arch.x86.fault.gpf.pas` | `GPF` | `arch.x86.fault.gpf` |
| `fault/IDOE.pas` | `arch/x86/fault/arch.x86.fault.idoe.pas` | `IDOE` | `arch.x86.fault.idoe` |
| `fault/IOPE.pas` | `arch/x86/fault/arch.x86.fault.iope.pas` | `IOPE` | `arch.x86.fault.iope` |
| `fault/MCE.pas` | `arch/x86/fault/arch.x86.fault.mce.pas` | `MCE` | `arch.x86.fault.mce` |
| `fault/NCE.pas` | `arch/x86/fault/arch.x86.fault.nce.pas` | `NCE` | `arch.x86.fault.nce` |
| `fault/NMIE.pas` | `arch/x86/fault/arch.x86.fault.nmie.pas` | `NMIE` | `arch.x86.fault.nmie` |
| `fault/OOBE.pas` | `arch/x86/fault/arch.x86.fault.oobe.pas` | `OOBE` | `arch.x86.fault.oobe` |
| `fault/PF.pas` | `arch/x86/fault/arch.x86.fault.pf.pas` | `PF` | `arch.x86.fault.pf` |
| `fault/SFE.pas` | `arch/x86/fault/arch.x86.fault.sfe.pas` | `SFE` | `arch.x86.fault.sfe` |
| `fault/SNPE.pas` | `arch/x86/fault/arch.x86.fault.snpe.pas` | `SNPE` | `arch.x86.fault.snpe` |
| `fault/UIE.pas` | `arch/x86/fault/arch.x86.fault.uie.pas` | `UIE` | `arch.x86.fault.uie` |
### Architecture — x86 ISR (`arch/x86/isr/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `isr/isr_types.pas` | `arch/x86/isr/arch.x86.isr.types.pas` | `isr_types` | `arch.x86.isr.types` |
| `isr/isrmanager.pas` | `arch/x86/isr/arch.x86.isr.mgr.pas` | `isrmanager` | `arch.x86.isr.mgr` |
| `isr/ioapic.pas` | `arch/x86/isr/arch.x86.isr.ioapic.pas` | `ioapic` | `arch.x86.isr.ioapic` |
| `driver/timers/TMR_0_ISR.pas` | `arch/x86/isr/arch.x86.isr.tmr0.pas` | `TMR_0_ISR` | `arch.x86.isr.tmr0` |
| `driver/timers/TMR_1_ISR.pas` | `arch/x86/isr/arch.x86.isr.tmr1.pas` | `TMR_1_ISR` | `arch.x86.isr.tmr1` |
| `driver/hid/ps2/ps2_keyboard_isr.pas` | `arch/x86/isr/arch.x86.isr.ps2keyboard.pas` | `ps2_keyboard_isr` | `arch.x86.isr.ps2keyboard` |
### Architecture — x86 Memory (`arch/x86/memory/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `pmemorymanager.pas` | `arch/x86/memory/arch.x86.memory.physical.pas` | `pmemorymanager` | `arch.x86.memory.physical` |
| `vmemorymanager.pas` | `arch/x86/memory/arch.x86.memory.virtual.pas` | `vmemorymanager` | `arch.x86.memory.virtual` |
### Boot (`boot/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `prog/splash.pas` | `boot/boot.splash.pas` | `splash` | `boot.splash` |
| `stub/splash_tga.asm` | `boot/splash_tga.asm` | — | — |
### Core Libraries (`core/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `include/asuro.pas` | `core/core.version.pas` | `asuro` | `core.version` |
| `include/util.pas` *(portable parts)* | `core/core.util.pas` | `util` *(partial)* | `core.util` |
| `include/strings.pas` | `core/core.strings.pas` | `strings` | `core.strings` |
| `include/rand.pas` | `core/core.rand.pas` | `rand` | `core.rand` |
| `include/types.pas` | `core/core.types.pas` | `types` | `core.types` |
| `include/targa.pas` | `core/fmt/core.fmt.targa.pas` | `targa` | `core.fmt.targa` |
### Core — Data Structures (`core/ds/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `include/data_structures/dstypes.pas` | `core/ds/core.ds.types.pas` | `dstypes` | `core.ds.types` |
| `include/lists.pas` | `core/ds/core.ds.lists.pas` | `lists` | `core.ds.lists` |
| `include/hashmap.pas` | `core/ds/core.ds.hashmap.pas` | `hashmap` | `core.ds.hashmap` |
| `include/data_structures/fifo.pas` | `core/ds/core.ds.fifo.pas` | `fifo` | `core.ds.fifo` |
| `include/data_structures/cfifo.pas` | `core/ds/core.ds.cfifo.pas` | `cfifo` | `core.ds.cfifo` |
| `include/data_structures/cfifols.pas` | `core/ds/core.ds.cfifols.pas` | `cfifols` | `core.ds.cfifols` |
| `include/data_structures/lifo.pas` | `core/ds/core.ds.lifo.pas` | `lifo` | `core.ds.lifo` |
| `include/data_structures/circ.pas` | `core/ds/core.ds.circ.pas` | `circ` | `core.ds.circ` |
| `include/data_structures/bheap.pas` | `core/ds/core.ds.bheap.pas` | `bheap` | `core.ds.bheap` |
| `include/data_structures/minh.pas` | `core/ds/core.ds.minh.pas` | `minh` | `core.ds.minh` |
| `include/data_structures/maxh.pas` | `core/ds/core.ds.maxh.pas` | `maxh` | `core.ds.maxh` |
| `include/data_structures/prio.pas` | `core/ds/core.ds.prio.pas` | `prio` | `core.ds.prio` |
### Core — Encoding / Hashing (`core/enc/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `include/md5.pas` | `core/enc/core.enc.md5.pas` | `md5` | `core.enc.md5` |
| `include/sha1.pas` | `core/enc/core.enc.sha1.pas` | `sha1` | `core.enc.sha1` |
| `include/base64.pas` | `core/enc/core.enc.base64.pas` | `base64` | `core.enc.base64` |
| `include/crc.pas` | `core/enc/core.enc.crc.pas` | `crc` | `core.enc.crc` |
### Core — Graphics (`core/gfx/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `include/color.pas` | `core/gfx/core.gfx.color.pas` | `color` | `core.gfx.color` |
| `include/fonts.pas` | `core/gfx/core.gfx.fonts.pas` | `fonts` | `core.gfx.fonts` |
| `include/texture.pas` | `core/gfx/core.gfx.texture.pas` | `texture` | `core.gfx.texture` |
### IO (`io/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `stdio.pas` | `io/io.stdio.pas` | `stdio` | `io.stdio` |
| `syslog.pas` | `io/io.syslog.pas` | `syslog` | `io.syslog` |
### Debug (`debug/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `tracer.pas` | `debug/debug.tracer.pas` | `tracer` | `debug.tracer` |
### Memory (`memory/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `lmemorymanager.pas` | `memory/memory.heap.pas` | `lmemorymanager` | `memory.heap` |
### Process Management (`proc/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `processmanager.pas` | `proc/proc.mgr.pas` | `processmanager` | `proc.mgr` |
| `include/proctypes.pas` | `proc/proc.types.pas` | `proctypes` | `proc.types` |
| `testprocs.pas` | `proc/proc.testprocs.pas` | `testprocs` | `proc.testprocs` |
### Services (`svc/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `prog/graphicsrefresh.pas` | `svc/svc.gfxd.pas` | `graphicsrefresh` | `svc.gfxd` |
| `prog/usbhotplug.pas` | `svc/svc.usbd.pas` | `usbhotplug` | `svc.usbd` |
### Driver Framework (`driver/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `drivermanagement.pas` | `driver/driver.mgr.pas` | `drivermanagement` | `driver.mgr` |
| `driver/include/drivertypes.pas` | `driver/driver.types.pas` | `drivertypes` | `driver.types` |
### Driver — Bus (`driver/bus/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/bus/PCI.pas` | `driver/bus/driver.bus.pci.pas` | `PCI` | `driver.bus.pci` |
| `driver/bus/usb/USB.pas` | `driver/bus/driver.bus.usb.pas` | `USB` | `driver.bus.usb` |
| `driver/bus/usb/usbtypes.pas` | `driver/bus/usb/driver.bus.usb.types.pas` | `usbtypes` | `driver.bus.usb.types` |
| `driver/bus/usb/usbcore.pas` | `driver/bus/usb/driver.bus.usb.core.pas` | `usbcore` | `driver.bus.usb.core` |
| `driver/bus/usb/usbhub.pas` | `driver/bus/usb/driver.bus.usb.hub.pas` | `usbhub` | `driver.bus.usb.hub` |
| `driver/bus/usb/UHCI.pas` | `driver/bus/usb/driver.bus.usb.uhci.pas` | `UHCI` | `driver.bus.usb.uhci` |
| `driver/bus/usb/OHCI.pas` | `driver/bus/usb/driver.bus.usb.ohci.pas` | `OHCI` | `driver.bus.usb.ohci` |
| `driver/bus/usb/EHCI.pas` | `driver/bus/usb/driver.bus.usb.ehci.pas` | `EHCI` | `driver.bus.usb.ehci` |
| `driver/bus/usb/XHCI.pas` | `driver/bus/usb/driver.bus.usb.xhci.pas` | `XHCI` | `driver.bus.usb.xhci` |
### Driver — HID (`driver/hid/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/hid/keyboard.pas` | `driver/hid/driver.hid.keyboard.pas` | `keyboard` | `driver.hid.keyboard` |
| `driver/hid/mouse.pas` | `driver/hid/driver.hid.mouse.pas` | `mouse` | `driver.hid.mouse` |
| `driver/hid/ps2/ps2_keyboard.pas` | `driver/hid/ps2/driver.hid.ps2.keyboard.pas` | `ps2_keyboard` | `driver.hid.ps2.keyboard` |
| `driver/hid/ps2/ps2_mouse.pas` | `driver/hid/ps2/driver.hid.ps2.mouse.pas` | `ps2_mouse` | `driver.hid.ps2.mouse` |
| `driver/hid/usb/usb_keyboard.pas` | `driver/hid/usb/driver.hid.usb.keyboard.pas` | `usb_keyboard` | `driver.hid.usb.keyboard` |
| `driver/hid/usb/usb_mouse.pas` | `driver/hid/usb/driver.hid.usb.mouse.pas` | `usb_mouse` | `driver.hid.usb.mouse` |
### Driver — IO (`driver/io/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/io/serial.pas` | `driver/io/driver.io.serial.pas` | `serial` | `driver.io.serial` |
### Driver — Timer (`driver/timer/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/timers/RTC.pas` | `driver/timer/driver.timer.rtc.pas` | `RTC` | `driver.timer.rtc` |
### Driver — Storage (`driver/storage/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/storage/storagemanager.pas` | `driver/storage/driver.storage.mgr.pas` | `storagemanager` | `driver.storage.mgr` |
| `driver/storage/storagetypes.pas` | `driver/storage/driver.storage.types.pas` | `storagetypes` | `driver.storage.types` |
| `driver/storage/storagetest.pas` | `driver/storage/driver.storage.test.pas` | `storagetest` | `driver.storage.test` |
| `driver/storage/vfs.pas` | `driver/storage/driver.storage.vfs.pas` | `vfs` | `driver.storage.vfs` |
| `driver/storage/fdtable.pas` | `driver/storage/driver.storage.fdtable.pas` | `fdtable` | `driver.storage.fdtable` |
| `filedispatch.pas` | `driver/storage/driver.storage.filedispatch.pas` | `filedispatch` | `driver.storage.filedispatch` |
| `driver/storage/iobuffer.pas` | `driver/storage/driver.storage.iobuffer.pas` | `iobuffer` | `driver.storage.iobuffer` |
| `driver/storage/iorequest.pas` | `driver/storage/driver.storage.iorequest.pas` | `iorequest` | `driver.storage.iorequest` |
### Driver — Storage — Controllers (`driver/storage/ctl/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/storage/usb_storage.pas` | `driver/storage/ctl/driver.storage.ctl.usb.pas` | `usb_storage` | `driver.storage.ctl.usb` |
| `driver/storage/ramdrive.pas` | `driver/storage/ctl/driver.storage.ctl.ram.pas` | `ramdrive` | `driver.storage.ctl.ram` |
### Driver — Storage — Controllers — AHCI (`driver/storage/ctl/ahci/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/storage/AHCI/AHCI.pas` | `driver/storage/ctl/ahci/driver.storage.ctl.ahci.pas` | `AHCI` | `driver.storage.ctl.ahci` |
| `driver/storage/AHCI/AHCITypes.pas` | `driver/storage/ctl/ahci/driver.storage.ctl.ahci.types.pas` | `AHCITypes` | `driver.storage.ctl.ahci.types` |
### Driver — Storage — Controllers — IDE (`driver/storage/ctl/ide/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/storage/IDE/IDE.pas` | `driver/storage/ctl/ide/driver.storage.ctl.ide.pas` | `IDE` | `driver.storage.ctl.ide` |
| `driver/storage/IDE/idetypes.pas` | `driver/storage/ctl/ide/driver.storage.ctl.ide.types.pas` | `idetypes` | `driver.storage.ctl.ide.types` |
| `driver/storage/IDE/ata.pas` | `driver/storage/ctl/ide/driver.storage.ctl.ide.ata.pas` | `ata` | `driver.storage.ctl.ide.ata` |
| `driver/storage/IDE/atapi.pas` | `driver/storage/ctl/ide/driver.storage.ctl.ide.atapi.pas` | `atapi` | `driver.storage.ctl.ide.atapi` |
### Driver — Storage — Filesystems (`driver/storage/fs/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/storage/Filesystems/filesystemmanager.pas` | `driver/storage/fs/driver.storage.fs.mgr.pas` | `filesystemmanager` | `driver.storage.fs.mgr` |
| `driver/storage/Filesystems/fat32.pas` | `driver/storage/fs/driver.storage.fs.fat32.pas` | `fat32` | `driver.storage.fs.fat32` |
| `driver/storage/Filesystems/asfs.pas` | `driver/storage/fs/driver.storage.fs.asfs.pas` | `asfs` | `driver.storage.fs.asfs` |
| `driver/storage/Filesystems/flatfs.pas` | `driver/storage/fs/driver.storage.fs.flatfs.pas` | `flatfs` | `driver.storage.fs.flatfs` |
| `driver/storage/Filesystems/iso9660.pas` | `driver/storage/fs/driver.storage.fs.iso9660.pas` | `iso9660` | `driver.storage.fs.iso9660` |
### Driver — Storage — Volume (`driver/storage/vol/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/storage/volumemanager.pas` | `driver/storage/vol/driver.storage.vol.mgr.pas` | `volumemanager` | `driver.storage.vol.mgr` |
| `driver/storage/partitiontable.pas` | `driver/storage/vol/driver.storage.vol.table.pas` | `partitiontable` | `driver.storage.vol.table` |
| `driver/storage/MBR.pas` | `driver/storage/vol/driver.storage.vol.mbr.pas` | `MBR` | `driver.storage.vol.mbr` |
| `driver/storage/gpt.pas` | `driver/storage/vol/driver.storage.vol.gpt.pas` | `gpt` | `driver.storage.vol.gpt` |
### Driver — Network (`driver/net/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/net/l1/net.pas` | `driver/driver.net.pas` | `net` | `driver.net` |
| `driver/net/include/nettypes.pas` | `driver/net/driver.net.types.pas` | `nettypes` | `driver.net.types` |
| `driver/net/include/netutils.pas` | `driver/net/driver.net.util.pas` | `netutils` | `driver.net.util` |
| `driver/net/l2/eth2.pas` | `driver/net/proto/driver.net.proto.eth2.pas` | `eth2` | `driver.net.proto.eth2` |
| `driver/net/l3/arp.pas` | `driver/net/proto/driver.net.proto.arp.pas` | `arp` | `driver.net.proto.arp` |
| `driver/net/l3/ipv4.pas` | `driver/net/proto/driver.net.proto.ipv4.pas` | `ipv4` | `driver.net.proto.ipv4` |
| `driver/net/l4/icmp.pas` | `driver/net/proto/driver.net.proto.icmp.pas` | `icmp` | `driver.net.proto.icmp` |
| `driver/net/l4/tcp.pas` | `driver/net/proto/driver.net.proto.tcp.pas` | `tcp` | `driver.net.proto.tcp` |
| `driver/net/l4/udp.pas` | `driver/net/proto/driver.net.proto.udp.pas` | `udp` | `driver.net.proto.udp` |
| `driver/net/l5/dhcp.pas` | `driver/net/proto/driver.net.proto.dhcp.pas` | `dhcp` | `driver.net.proto.dhcp` |
> **Note:** The old layer folders (`l1/`, `l2/`, `l3/`, `l4/`, `l5/`, `include/`) are now grouped under `proto/` — protocol names are self-descriptive.
### Driver — Network Device (`driver/net/dev/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/netdev/E1000.pas` | `driver/net/dev/driver.net.dev.e1000.pas` | `E1000` | `driver.net.dev.e1000` |
### Driver — Video (`driver/video/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/video/video.pas` | `driver/driver.video.pas` | `video` | `driver.video` |
| `driver/video/videotypes.pas` | `driver/video/driver.video.types.pas` | `videotypes` | `driver.video.types` |
| `driver/video/gpu.pas` | `driver/video/driver.video.gpu.pas` | `gpu` | `driver.video.gpu` |
| `driver/video/vesa.pas` | `driver/video/driver.video.vesa.pas` | `vesa` | `driver.video.vesa` |
| `driver/video/vesa8.pas` | `driver/video/driver.video.vesa8.pas` | `vesa8` | `driver.video.vesa8` |
| `driver/video/vesa16.pas` | `driver/video/driver.video.vesa16.pas` | `vesa16` | `driver.video.vesa16` |
| `driver/video/vesa24.pas` | `driver/video/driver.video.vesa24.pas` | `vesa24` | `driver.video.vesa24` |
| `driver/video/vesa32.pas` | `driver/video/driver.video.vesa32.pas` | `vesa32` | `driver.video.vesa32` |
| `driver/video/doublebuffer.pas` | `driver/video/driver.video.doublebuffer.pas` | `doublebuffer` | `driver.video.doublebuffer` |
| `driver/video/bga.pas` | `driver/video/driver.video.bga.pas` | `bga` | `driver.video.bga` |
| `driver/video/lvgl.pas` | `driver/video/driver.video.lvgl.pas` | `lvgl` | `driver.video.lvgl` |
| `driver/video/windows.pas` | `driver/video/driver.video.windows.pas` | `windows` | `driver.video.windows` |
| `driver/video/desktop.pas` | `driver/video/driver.video.desktop.pas` | `desktop` | `driver.video.desktop` |
### Driver — Experimental (`driver/exp/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `driver/exp/testdriver.pas` | `driver/exp/driver.exp.testdriver.pas` | `testdriver` | `driver.exp.testdriver` |
### Applications (`app/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `progmanager.pas` | `app/app.mgr.pas` | `progmanager` | `app.mgr` |
| `prog/vterminal.pas` | `app/app.vterminal.pas` | `vterminal` | `app.vterminal` |
| `prog/base64_prog.pas` | `app/app.base64.pas` | `base64_prog` | `app.base64` |
| `prog/md5sum.pas` | `app/app.md5sum.pas` | `md5sum` | `app.md5sum` |
| `prog/dhclient.pas` | `app/app.dhclient.pas` | `dhclient` | `app.dhclient` |
| `prog/vbeinfo.pas` | `app/app.vbeinfo.pas` | `vbeinfo` | `app.vbeinfo` |
| `prog/diskcmd.pas` | `app/app.diskcmd.pas` | `diskcmd` | `app.diskcmd` |
| `prog/diskutil.pas` | `app/app.diskutil.pas` | `diskutil` | `app.diskutil` |
| `prog/edit.pas` | `app/app.edit.pas` | `edit` | `app.edit` |
| `prog/filepicker.pas` | `app/app.filepicker.pas` | `filepicker` | `app.filepicker` |
| `prog/inio.pas` | `app/app.inio.pas` | `inio` | `app.inio` |
| `prog/meminfo.pas` | `app/app.meminfo.pas` | `meminfo` | `app.meminfo` |
| `prog/notepad.pas` | `app/app.notepad.pas` | `notepad` | `app.notepad` |
| `prog/partcmd.pas` | `app/app.partcmd.pas` | `partcmd` | `app.partcmd` |
| `prog/ping.pas` | `app/app.ping.pas` | `ping` | `app.ping` |
| `prog/setres.pas` | `app/app.setres.pas` | `setres` | `app.setres` |
| `prog/testcmd.pas` | `app/app.testcmd.pas` | `testcmd` | `app.testcmd` |
| `prog/uidebug.pas` | `app/app.uidebug.pas` | `uidebug` | `app.uidebug` |
| `prog/volcmd.pas` | `app/app.volcmd.pas` | `volcmd` | `app.volcmd` |
### Applications — WASM (`app/wasm/`)
| Old path | New path | Old unit | New unit |
|----------|----------|----------|----------|
| `prog/wasm/wasmcleanup.pas` | `app/wasm/app.wasm.cleanup.pas` | `wasmcleanup` | `app.wasm.cleanup` |
| `prog/wasm/wasmio.pas` | `app/wasm/app.wasm.io.pas` | `wasmio` | `app.wasm.io` |
| `prog/wasm/wasmrunner.pas` | `app/wasm/app.wasm.runner.pas` | `wasmrunner` | `app.wasm.runner` |
| `prog/wasm/wasmshim.pas` | `app/wasm/app.wasm.shim.pas` | `wasmshim` | `app.wasm.shim` |
---
## Special Cases
### `system.pas`
FPC requires the `system` unit to be named exactly `system`. It cannot be renamed. It moves to `arch/x86/system.pas` and the build system must add `-Fuarch/x86` so FPC can find it.
### `util.pas` Split
The current `include/util.pas` (~55 dependents) must be split into two units:
- **`core.util`** — portable helpers: `IntToStr`, `HexToStr`, `min`/`max`, `redraw`, string/array utilities, sleep logic (calling into a clock abstraction)
- **`arch.x86.util`** — x86 I/O: `outb`/`inb`/`outw`/`inw`/`outl`/`inl`, `CLI`/`STI`, TSC reads, `BSOD` (writes VGA text-mode memory at `$B8000`), anything with `{$ASMMODE intel}` inline assembly
Units that only use portable helpers: `uses core.util`
Units that also do port I/O: `uses core.util, arch.x86.util`
### `include/asuro.pas` → `core.version`
The old `include/asuro.pas` (version/build metadata) is renamed to `core.version` to avoid collision with the main entry point `asuro.pas`. All `uses asuro` references for version info become `uses core.version`.
### `stub.asm` Entry Point
The assembly boot stub calls `kmain` (the Pascal entry point exported by `kernel.pas`). After renaming the unit to `asuro`, verify the FPC-mangled symbol name. If it changes, update the `call` instruction in `stub.asm` accordingly.
---
## Future Namespace Reservations
| Namespace | Purpose |
|-----------|---------|
| `wasm.*` | WASM virtual machine (currently external `wasuro/`) |
| `arch.arm.*` | ARM architecture port |
| `arch.riscv.*` | RISC-V architecture port |