# 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`
