47 lines
1.3 KiB
Markdown
47 lines
1.3 KiB
Markdown
# Rumpk HAL (L0)
|
|
|
|
**Language:** Zig + Assembly
|
|
**Purpose:** Hardware Abstraction Layer
|
|
|
|
## Module Index
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `main.zig` | Entry point (`_start`), stack setup, calls Nim `kmain` |
|
|
| `stubs.zig` | Freestanding libc (memcpy, malloc, printf, etc.) |
|
|
| `uart.zig` | PL011 UART driver (QEMU virt) |
|
|
| `abi.zig` | C ABI structs shared with Nim |
|
|
|
|
## Architecture Directory (`arch/`)
|
|
|
|
Contains per-architecture implementations:
|
|
|
|
```
|
|
arch/
|
|
├── aarch64/ # ARM64 (VisionFive 2, RPi, AWS Graviton)
|
|
│ ├── switch.S # Context switch (96 bytes)
|
|
│ └── constants.nim
|
|
├── x86_64/ # System V ABI (servers, trading)
|
|
│ ├── switch.S # Context switch (56 bytes)
|
|
│ └── constants.nim
|
|
└── riscv64/ # RISC-V LP64 (satellites, drones)
|
|
├── switch.S # Context switch (112 bytes)
|
|
└── constants.nim
|
|
```
|
|
|
|
## Freestanding Doctrine
|
|
|
|
This HAL provides ALL C ABI symbols. No glibc, no musl.
|
|
|
|
**Exported Symbols:**
|
|
- Memory: `memcpy`, `memset`, `memmove`, `memcmp`
|
|
- Strings: `strlen`, `strcmp`, `strcpy`
|
|
- Heap: `malloc`, `free`, `realloc`, `calloc`
|
|
- I/O: `printf`, `puts`, `putchar`
|
|
- Exit: `exit`, `abort`
|
|
- Signals: `signal`, `raise` (no-op stubs)
|
|
|
|
## Build
|
|
|
|
Compiled via `zig build-obj -target <arch>-freestanding-none`
|